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