O'Reilly logo

Essentials of Software Engineering, 3rd Edition by Barbara Bernal, Orlando Karam, Frank Tsui

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

2.1 Characteristics of Building a System
The previous chapter focused on the environment and the conditions under which
a single program may be developed by one person for, perhaps, just a few users. We
have already seen multiple items that must be considered even when one person is
writing a single program. In this chapter we will describe the problems and concerns
associated with building a system that contains multiple components—anything from
just a few components to maybe hundreds or thousands of components. The increase
in number of components and complexity is what requires us to study and understand
the various aspects, principles, and techniques of software engineering that will be
discussed in the later chapters. This discussion introduces the rationale for software
engineering as a discipline, especially for large and complex projects that require a
team of people.
2.1.1 Size and Complexity
As software becomes ubiquitous, the development of systems involving software is
also becoming more complex. Software engineers are asked to solve both simple and
complex problems and to deal with the distinct differences between them. The complex
problems come in multiple levels of breadth and depth. The breadth issue addresses the
sheer numbers involving the following:
n
Major functions
n
Features within each functional area
n
Interfaces to other external systems
n
Simultaneous users
n
Types of data and data structures
The depth issue addresses the linkage and the relationships among items. The linkages
may either be through the sharing of data or through the transfer of control, or both.
These relationships may be hierarchical, sequential, loop, recursive, or some other form.
In developing solutions to these complex problems, software engineers must design
with possibly yet another set of relationships different from that of the problem. Figure
2.1 shows the effect of introducing both (1) the size in terms of breadth and (2) the com-
plexity in terms of depth and number of interactions. Although you can get a natural
“feel” of the difference by just viewing the diagram, it would be worth taking the time
to analyze the differences. The simple case in this figure has three major segments: (1)
start process, (2) perform three normal tasks, and (3) stop process. In Figure 2.1(b), the
number of normal tasks has increased from three to five with the addition of the “wait
for signal” and “perform task A2.” There is also a new decision task, represented by the
diamond-shaped figure in the center. The decision task has greatly increased the num-
ber of paths or choices, and thus it causes the increase of complexity. In addition, the
complexity is further exacerbated by introducing a loop relationship with the decision
task. There are many more interactions involved in a loop or repeat relationship, which
is more complex than the straight sequential relationship among the tasks portrayed in
Figure 2.1(a).
24 Chapter 2 Building a System
91998_CH02_Tsui.indd 24 1/5/13 6:57:58 AM

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required