Page 130 - DCAP305_PRINCIPLES_OF_SOFTWARE_ENGINEERING
P. 130

Principles of Software Engineering



                   Notes         As defined in requirements engineering, functional requirements specify particular results of
                                 a system. This should be contrasted with non-functional requirements which specify overall
                                 characteristics  such  as  cost  and  reliability.  Functional  requirements  drive  the  application
                                 architecture of a system, while non-functional requirements drive the technical architecture of a
                                 system. In some cases a requirements analyst generates use cases after gathering and validating
                                 a set of functional requirements. The hierarchy of functional requirements is: user/stakeholder
                                 request -> feature -> use case -> business rule. Each use case illustrates behavioural scenarios
                                 through one or more functional requirements. Often, though, an analyst will begin by eliciting
                                 a set of use cases, from which the analyst can derive the functional requirements that must be
                                 implemented to allow a user to perform each use case.

                                 6.2 Principles of Functional Design


                                 The design of a system is accurate if a system built accurately according to the design satisfies
                                 the supplies of that system. Clearly, the goal during the design phase is to produce right designs.
                                 However, correctness is not the sole decisive factor during the design phase, as there can be
                                 many correct designs. The aim of the design process is not simply to produce a design for the
                                 system. Instead, the goal is to find the best probable design within the limitations imposed by the
                                 requirements and the physical and social setting in which the system will operate. To evaluate a
                                 design, we have to specify some properties and criteria that can be used for evaluation. Ideally,
                                 these properties should be as quantitative as possible. In that situation we can precisely evaluate
                                 the “goodness” of a design and determine the best design. However, criteria for quality of software
                                 design are often subjective or non-quantifiable. In such a situation, criteria are essentially thumb
                                 rules that aid design evaluation.

                                 A design should clearly be verifiable, complete (implements all the specifications), and traceable
                                 (all design elements can be traced to some requirements). However, the two most important
                                 properties  that  concern  designers  are  efficiency  and  simplicity.  Efficiency  of  any  system  is
                                 concerned with the proper use of scarce resources by the system. The need for efficiency arises
                                 due to cost considerations. If some resources are scarce and expensive, it is desirable that those
                                 resources be used efficiently. In computer systems, the resources that are most often considered
                                 for efficiency are processor time and memory. An efficient system is one that consumes less
                                 processor time and requires less memory. In earlier days, the efficient use of CPU and memory
                                 was important due to the high cost of hardware. Now that the hardware costs are low compared
                                 to the software costs, for many software systems traditional efficiency concerns now take a back
                                 seat compared to other conside rations. One of the exceptions is real-time systems, for which
                                 there  are  strict  execution  time  constraints.  Simplicity  is  perhaps  the  most  important  quality
                                 criteria for software systems. We have seen that maintenance of software is usually quite ex-
                                 pensive. Maintainability of software is one of the goals we have established. The design of a
                                 system is one of the most important factors affecting the maintainability of a system. During
                                 maintenance, the first step a maintainer.

                                 6.2.1 Seven Principles of Functional Design
                                 The Reason It All Exists
                                 A software system exists for one reason: To provide value to its users. All decisions should be
                                 made with this in mind. Before specifying a system requirement, before noting a piece of system
                                 functionality, before determining the hardware platforms or development processes, ask yourself
                                 questions such as: “Does this add real VALUE to the system?” If the answer is “no”, do not do
                                 it. All other principles support this one.

                                 KISS (Keep It Simple, Stupid!)
                                 Software design is not a haphazard process. There are many factors to consider in any design
                                 effort. All design should be as simple as possible, but no simpler. This facilitates having a more
                                 easily understood, and easily maintained system. This is not to say that features, even internal


        124                               LOVELY PROFESSIONAL UNIVERSITY
   125   126   127   128   129   130   131   132   133   134   135