Software Engineering A Methodical Approach 2nd
Software Engineering A Methodical Approach 2nd
Software Engineering
A Methodical Approach
Second Edition
Elvis C. Foster
Second edition published 2022
by CRC Press
6000 Broken Sound Parkway NW, Suite 300, Boca Raton, FL 33487-2742
and by CRC Press
2 Park Square, Milton Park, Abingdon, Oxon, OX14 4RN
First edition published by Apress 2014
CRC Press is an imprint of Taylor & Francis Group, LLC
© 2022 Taylor & Francis Group, LLC
The right of Elvis C. Foster to be identified as author of this work has been asserted by him in
accordance with sections 77 and 78 of the Copyright, Designs and Patents Act 1988.
Reasonable efforts have been made to publish reliable data and information, but the author and
publisher cannot assume responsibility for the validity of all materials or the consequences of their
use. The authors and publishers have attempted to trace the copyright holders of all material repro-
duced in this publication and apologize to copyright holders if permission to publish in this form
has not been obtained. If any copyright material has not been acknowledged please write and let
us know so we may rectify in any future reprint.
Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced,
transmitted, or utilized in any form by any electronic, mechanical, or other means, now known or
hereafter invented, including photocopying, microfilming, and recording, or in any information
storage or retrieval system, without written permission from the publishers.
For permission to photocopy or use material electronically from this work, access www.copyright.
com or contact the Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA
01923, 978-750-8400. For works that are not available on CCC please contact mpkbookspermis-
[email protected]
Trademark notice: Product or corporate names may be trademarks or registered trademarks and
are used only for identification and explanation without intent to infringe.
ISBN: 978-0-367-76943-7 (hbk)
ISBN: 978-0-367-74601-8 (pbk)
ISBN: 978-0-367-74602-5 (ebk)
Typeset in Garamond
by Straive, India
Brief Contents
Preface......................................................................................................... xxix
Acknowledgements....................................................................................xxxvii
PART A FUNDAMENTALS 1
1 Introduction to Software Engineering...................................................... 3
2 The Role of the Software Engineer......................................................... 21
v
vi ◾ Brief Contents
Preface......................................................................................................... xxix
Acknowledgements....................................................................................xxxvii
PART A FUNDAMENTALS 1
1 Introduction to Software Engineering...................................................... 3
1.1 Definitions and Concepts............................................................................ 3
1.1.1 System............................................................................................... 4
1.1.2 Software and Software Engineering................................................ 4
1.2 The Organization as a System..................................................................... 5
1.3 Information Levels in the Organization...................................................... 7
1.3.1 Top Management.............................................................................. 7
1.3.2 Middle Management......................................................................... 8
1.3.3 Junior Management and Operational Staff...................................... 8
1.3.4 Importance of Information Levels in Software Engineering................. 8
1.3.5 Alternate Organizational Settings.................................................... 8
1.4 Software Life Cycle...................................................................................... 9
1.4.1 Waterfall Model................................................................................ 9
1.4.2 Phased Prototype Model................................................................ 10
1.4.3 Iterative Development Model........................................................ 10
1.4.4 Rapid Prototype Model.................................................................. 11
1.4.5 Formal Transformation Model....................................................... 12
1.4.6 Components-Based Model............................................................. 12
1.4.7 Agile Development Model............................................................. 13
vii
viii ◾ Contents
11.1.3 Step 3: Determine ES, EF, LS, and LF for Each Activity............... 184
11.1.4 Step 4: Determine the Critical Path............................................. 184
11.1.5 Step 5: Conduct a Sensitivity Analysis......................................... 184
11.2 The Gantt Chart....................................................................................... 186
11.3 Project Management Software................................................................ 187
11.4 Summary and Concluding Remarks........................................................ 188
11.5 Review Questions.................................................................................... 188
References and Recommended Readings....................................................... 190
xxix
xxx ◾ Preface
would be organized. In just over 500 pages, the text covers the essential details, while
providing the additional benefits mentioned earlier.
Target Audience: The book is best suited for undergraduate students who are pur-
suing a course in software engineering. However, graduate students with a similar
need may also find it useful; practicing software engineers may also use it for quick
referencing of specific methodologies.
Main Selling Features: Users of the text should find the following features quite
reader friendly:
Part A: Fundamentals
Chapter 1: Introduction to Software Engineering
Chapter 2: The Role of the Software Engineer
Part G: Appendices
Appendix A: Project Proposal for a Generic Inventory Management System
Appendix B: Requirements Specification for a Generic Inventory Management
System
Appendix C: Design Specification for a Generic Inventory Management System
Chapter Summaries
Chapter 1 commences by providing the reader with a rationale for the course, fol-
lowed by a discussion of the nature and scope of software engineering. The chapter
proceeds with the following captions: Definitions and Concepts; The Organization
as a System; Information Levels in the Organization; Software Life Cycle; Categories
of Software; Alternate Software Acquisition Approaches; Software Engineering
Paradigms; Desirable Features of Computer Software; Summary and Concluding
Remarks.
Chapter 2 discusses the role of the software engineer under the following themes:
Historical Role; Modern Role of the Software Engineer; Job Description of the
Software Engineer; Tools Used by the Software Engineer; Management Issues with
Which the Software Engineer Must be Familiar; Summary and Concluding Remarks.
Chapter 3 introduces the first major deliverable in a software engineering proj-
ect––the initial system requirement (also called the project proposal). The chap-
ter also discusses other related preliminary issues under the following captions:
Project Selection; Problem Definition; Proposed Solution; Scope and Objectives of
the System; System Justification; Feasibility Analysis Report; Alternate Approach to
Feasibility Analysis; Summary of System Inputs and Outputs; Initial Project Schedule;
Project Team; Summary and Concluding Remarks.
xxxii ◾ Preface
Text Usage
The text could be used as a one-semester or two-semester course in software engi-
neering, augmented with an appropriate CASE or RAD tool. Below are two suggested
schedules for using the text; one assumes a one-semester course; the other assumes a
two-semester course. The schedule for a one-semester course is a very aggressive one
that assumes adequate preparation on the part of the participants. The schedule for
a two-semester course gives the participants more time to absorb the material, and
gain mastery in the various methodologies discussed by engaging in a meaningful
project. This obviously, is the preferred scenario.
Approach
Throughout the text, I have adopted a practical, methodical approach to software
engineering, avoiding an overkill of theoretical calculations where possible (these
can be obtained elsewhere). The primary objective is to help the reader to gain a
good grasp of the activities in the software development life cycle (SDLC). At the end
of the course, the participants should feel confident about taking on a new software
engineering project.
xxxvii
FUNDAMENTALS A
This preliminary division of the course is designed to cover some fundamentals. The
objectives are as follows:
1
Chapter 1
Introduction to Software
Engineering
3
4 ◾ Software Engineering
field. Software systems are not created, and do not exist in a vacuum; rather they
are typically created by individuals and/or organizations, for use by individuals and/
or organizations. We will therefore start by defining a system, defining software,
identifying the relationship between the two, and then showing how they both relate
to the organization.
1.1.1 System
A system is a set of interacting, interrelated, interdependent components that function
as a whole to achieve specific objectives. An effective system must be synergistic. The
system usually operates in an environment external to itself. A system may also be
defined as the combination of personnel, materials, facilities, and equipment working
together to convert the input into meaningful and needed outputs.
Following are some fundamental principles about systems:
Discussion:
Why should IT (or its equivalent) be positioned at the senior level in the orga-
nization. If the answer to this question is not immediately obvious to you, it will
be by the time you complete this course.
Here are three additional insights about the functional units of the organization chart:
• Every organization has a set of functional unit(s) representing the essence of the
organization. These are represented as Production/Operations and technical/
Manufacturing in the figure. Depending on the organization, the nomenclature
may be different. For instance, in a college/university, these two units would
typically be replaced by an Academic Administration unit consisting of various
schools/divisions and/or academic departments.
Introduction to Software Engineering ◾ 7
1.3.1 Top Management
Activities are strategic and may include:
• Goal setting
• Long term planning
• Expansion or contraction or consolidation
• Merging
• Other strategic issues
For the individuals that operate at this level, there is always an external perspec-
tive in the interest of organizational image and interest.
1.3.2 Middle Management
Activities are of a tactical nature and may include:
For the individuals that operate at this level, subjectivity is rather high—one's own
style is brought into play. There is an internal perspective.
• Job scheduling
• Checking operational results
• Maintaining discipline and order
Operations at the junior management level are very logical and predictable. Here is
where you are likely to find supervisors who oversee routine activities by the opera-
tional staff.
The lowest level is the operational staff. The individuals who work at this level
carry out the daily routine activities that keep the organization functioning.
• Information gathering and analysis must span the entire organization; therefore,
communication at the appropriate level is important.
• The information needs vary with each level. An effective software system must
meet the need at each level.
Discussion:
What kind of information would be required at each level? Propose an inte-
grated software system (showing main subsystems) for a university, a variety
store, and a hardware store, respectively.
employees, and a more flattened structure. This approach is more fully discussed in
Chapter 23.
Software systems may also be constructed by amorphously structured organiza-
tions. This classification includes individuals operating independently, or as collab-
orative groups. The open-source community is an excellent example of this kind of
amorphous operation.
Whatever the circumstance, each software system is only relevant if it fulfills
a need that people recognize. It must help solve a problem, and it typically has a
period of relevance.
• Waterfall Model
• Phased Prototype Model
• Iterative Development Model
• Rapid Prototype Model
• Formal Transformation Model
• Component-Based Model
• Agile Development Model
Irrespective of the model is used, however, a software system passes through the
five phases, as depicted in Figure 1.3 (related deliverables also shown). These phases
constitute the software development life cycle (SDLC).
1.4.1 Waterfall Model
The waterfall model is the traditional approach to software engineering; it may be
summarized in the following points:
• System development is likely to take a long time; users may become impatient.
• The requirements of the system may change before the system is completed.
• One may therefore have a well-designed, well-documented system that is not
being used, due to its irrelevance.
1. Investigate and fully define the system, identifying the major components.
2. Take a component and model it, then develop and implement it.
3. Obtain user feedback.
4. Revise the model if necessary.
5. If the system is not completed, go back to step 2.
and management). The iterations may be in series or in parallel but are eventually
integrated into a release of the project. The final iteration results in a release of the
complete software product.
The advantages of the iterative development model are identical to those of the
phased prototype model. However, due to the precautions inherent in the approach,
disadvantages (of the phased prototype model) are minimized.
In many respects, the iterative development approach to software construction
has been immortalized by the Rational Unified Process (RUP). RUP is an iterative
development lifecycle framework that has become a very popular in the software
engineering industry. RUP was first introduced by the pioneers of Rational Software—
Grady Booch, James Rumbaugh, and Ivar Jacobson. Since 2003, the company has
been acquired by International Business Machines (IBM). IBM currently markets the
Rational product line as one of its prime product lines.
To further blur the distinction, contemporary DBMS suites provide those features
also. These tools will be further discussed in Chapter 2.
The rapid prototype model may be summarized in the following steps:
One point of clarification: RAD tools, CASE tools, DBMS suites and the like may be
employed in any software engineering project, irrespective of the model being fol-
lowed. Rapid prototyping describes a process, not the tools used.
Rapid prototyping provides us with two significant advantages:
• The approach (of formal methods) is not always relevant to the problem
domain.
• The approach uses abstract specifications with which the software engineer
must become familiar.
• Due to the use of quite abstract notations, end-user participation is not likely to
be high, thus violating an essential requirement for software acceptance.
1.4.6 Components-Based Model
The component-based approach produces software by combining tested and proven
components from other software products. As the discipline of software engineer-
ing becomes more established and more software standards are established, this
approach has is expected to be more widely used. The approach is commonly called
component-based software engineering (CBSE).
The main advantages of CBSE are the following:
The main disadvantage of the approach is that like the formal transformation
model, it is not always relevant to the problem domain. The reason for this is
that software engineering, being a relatively new discipline, has not established
enough standards for solving the many and varied software needs that are faced
by the world.
Introduction to Software Engineering ◾ 13
1. Place the highest priority on customer satisfaction through early and continuous
delivery of valuable software systems.
2. Welcome changing requirements that enhance the customer’s competitive,
irrespective of the stage in the development.
3. Deliver working software frequently and within a short timeframe.
4. Get the business people and the software developers to work together on a
consistent basis throughout the project.
5. Build projects around motivated individuals. Give them the required resources
and trust them to get the job done.
6. The most efficient and effective method of communication within a software
engineering team is face-to-face conversation.
7. The primary measure of progress and success is a working software system or
component.
8. The agile development process promotes sustainable development. The
sponsors, developers, and users should be able to maintain a constant pace
indefinitely.
9. There should be continuous attention to technical excellence and good design.
10. There should be great emphasis on simplicity as an essential means of
maximizing the amount of work not done.
11. The best architectures, requirements, and designs emerge from self-organizing
teams.
12. The software engineering team should periodically reflect on how to become
more effective, and then refine its behavior accordingly.
• The user gets a version of the required software system in the shortest possible
time.
• By merging business personnel and software developer in a single project, there
is improved user participation.
• The likelihood of producing an acceptable system is enhanced.
14 ◾ Software Engineering
Like the advantages, the disadvantages of the agile development model are com-
parable to those of the phased prototyping model:
The agile life cycle has emerged as the preferred approach for many contemporary
software engineering enterprises. One possible reason for this is that the approach
easily aligns to the business aspects of software engineering, while responding to the
need for nimbleness in meeting end-user demands.
1.5 Categories of Software
Software engineering is a very wide, variegated field, constrained only by one’s own
imaginations and creativity. There are, however, some observable categories of soft-
ware. Figure 1.4 provides a list of common software categories. Most of the software
products that you are likely to use or be involved with fall into one or more of these
categories.
Discussion:
As a personal exercise, determine what scenario(s) would warrant each approach.
Introduction to Software Engineering ◾ 15
This course pursues a balance between the object-oriented paradigm and the
function-oriented paradigm, with a strong focus on the fundamentals, and an evident
bias to the object-oriented paradigm. A full treatment of the object-oriented approach
is (best) treated in another course—object-oriented software engineering (OOSE) or
object-oriented methodologies (OOM). However, in keeping with the bias, the appen-
dices contain useful additional information on OOM.
One of the distinguishing features of the software engineering discipline is that
most of the principles and methodologies are ubiquitous. Once you have learned
these principles and methodologies, you can apply them to problem-solving in any
geographic location. And if the job is done right, the software system produced can
be used in a range of related scenarios anywhere in the world. This feature accounts
for the huge impact that software engineering has made on our world, impacting
contemporary lifestyle in a way, and to a magnitude that no other discipline has.
Notwithstanding the ubiquitous nature of software engineering, the discipline
encourages creativity and innovation. This innovative heritage leads to new frontiers
being formed and explored on an ongoing basis.
These features are often referred to as software quality factors and for good rea-
sons, since they affect the quality of the software products. In this course, you
Introduction to Software Engineering ◾ 17
will learn how to research, plan, design, and construct software of a high qual-
ity. You will do so in a deliberately methodical manner. As such, we will revisit
these quality factors later, and show how they can be used to guide the software
engineering process.
So now you have academic knowledge of what is meant by computer software engi-
neering. As you will soon discover, this is not enough. To excel in this field, you
will need experiential knowledge as well. But you have made an important start in
exploring this exciting field. Much more could be said in this introductory chapter.
The next chapter will discuss the role of the software engineer in the organization.
1.11 Review Questions
1. Give definitions of:
• A system
• Computer software
• Software engineering
3. Develop an organization chart for an organization that you are familiar with.
Analyze the chart and propose a set of interrelated software systems that may be
used in helping the organization to achieve its objectives.
6. Discuss the seven life cycle models covered in the chapter. For each model:
• Describe the basic approach
• Identify the advantages
• Identify the disadvantages
• Describe a scenario that would warrant the use of this approach
7. Identify ten major categories of computer software. For each category, identify a
scenario that would warrant application of such a category of software.
10. Discuss the challenges to development and maintaining software systems of the
highest quality.
[Sommerville 2016] Sommerville, Ian. 2016. Software Engineering, 10th ed. Boston: Pearson. See
chapters 1–3.
[Spence 2004] Spence, Ian and Kurt Bittner. 2004. Managing Iterative Software Development with Use Cases.
IBM. Accessed December 2009. http://www.ibm.com/developerworks/rational/library/5093.html.
[Van Vliet 2008] Van Vliet, Hans. Software Engineering, 3rd ed. 2008. New York, NY: John Wiley & Sons.
See chapters 1–3.
Chapter 2
This second chapter will examine the role, responsibilities, functions, and character-
istics of the software engineer in the organization. The following will be discussed:
• Historical Role
• Modern Role of the Software Engineer
• Job Description of the Software Engineer
• Tools Used by the Software Engineer
• Management Issues with Which the Software Engineer Must be Familiar
• Summary and Concluding Remarks
2.1 Historical Role
Historically, most systems were manual and coordinated by a system and procedure
analyst with responsibilities such as:
Traditionally, the systems and procedure analyst position was attached to the Finance
Department. Most systems were accounting oriented. This created an imbalance. A
second difficulty was the collation of information from various departments.
The arrival of computer technology triggered several changes and brought several
advantages:
21
22 ◾ Software Engineering
The contemporary trend reflects a bias to the title of software engineer instead of the
traditional systems analyst (SA). Software engineer is more accurate as it spans the
whole software development life cycle. However, many organizations tend to stick to
the traditional. Where both titles are used in the same organization, the SA usually
operates upper phases of SDLC, while the software engineer operates in the lower
phases; some overlap typically takes place in the area of software design.
• Investigates and defines software system problems and makes proposals for
their solution.
• Carries out detailed feasibility analysis and system specification.
• Plays a critical role in the design and development of software systems in the
organization.
• Participates in the process of hardware/software selection for the organization.
• Participates in the definition of software engineering standards for the
organization.
• Performs as project leader according to assignment from his superior.
• Conducts system enhancements as required.
• Keeps abreast of current technological developments and trends and ensures
that the organization is strategically positioned.
• Plays a crucial role in the development and maintenance of system and user
documentation.
• Plays a crucial role in the training of staff.
• Ensures the safety of all information technology (IT)-related resources.
• Coding Systems
• Forms Design
• Data Analysis Charts
• Decision Tables and Decision Trees
• Flow Charts and Diagrams
• Other Creative Technical Documents and Modeling Techniques
• Software Planning and Development Tools
The Role of the Software Engineer ◾ 25
2.4.1 Coding Systems
A code is a group of characters used to identify an item of data and show its relation-
ship to other similar items. It is a compact way of defining a specific item or entity.
Coding systems are particularly useful during forms design and database design (to
be discussed in Chapter 10). Benefits of a proper coding system include:
1. Simple Sequence
• Numbers are assigned consecutively, e.g.1,2,3,...
• The main advantage of the approach is that an unlimited number of items can
be stored.
• The main drawback is that little or no information conveyed about items.
2. Block Sequence
• Blocks of consecutive numbers identify groups of similar items.
• The main advantage of this approach is that more information is conveyed
about the items.
26 ◾ Software Engineering
2.4.2 Forms Design
A significant proportion of data input to a business information system will be done
with the use of forms. For instance, most universities and colleges require applicants
to fill out application forms. Completed application forms are then used to key data
into some database for subsequent processing. When an applicant is accepted, it
is this same data from the application form that is used as the student’s personal
information.
Forms design provides the following advantages:
A form has three parts: a heading, a body, and a footing. The heading should
contain the important company information (for example the company name), along
with a descriptive title for the form. The body contains the essential details that the
form contains. The footing contains instructional guidelines and is optional (some
forms are self-explanatory and therefore do not need footnotes). Figure 2.2 indicates
the three styles for providing/requesting information on a form—open style, box
style, or a mixture of both.
• Cut Sheet Forms: These are usually made in pads; sheets can be detached. This
is the most common type of form.
• Specialty Forms: There are four basic types of specialty forms:
o Bound in books e.g. receipts
o Detachable stub e.g. a checkbook
o Mailer
o Continuous e.g. machine-printed report
• Electronic Forms: These are forms for which there may or may not be printed
versions. They serve as either data collection instruments for system input, or
information dissemination instruments for system output.
• Analysis of trends
• Forecasting of future events
• Comparison of data
• Conveying technical information about the requirements of a system
• Project Proposal
The Role of the Software Engineer ◾ 29
Figure 2.4 (a) Sample Line Charts (b) Sample Pie Chart for Sale of Products (c) Sample Bar
Charts for Sale over Time
• User’s Guide
• System Manuals
With respect to modeling techniques, this course, along with a course in OOM, will cover
most of the established techniques that are at the disposal of the software engineer.
Additionally, the experienced software engineer will from time to time, devise innovative
variations of standard techniques, commensurate with the problem domain under con-
sideration. He/she may even propose new techniques. To think about it for a moment,
all the methodologies and techniques that are covered in this course are approaches that
were developed by software engineers, in their attempts to solve problems.
Given such a wide plethora of software engineering tools and resources, the matter
of software evaluation and selection becomes pertinent to the success of a software
engineering venture. Evaluation and selection should be conducted based on clearly
defined criteria. This process will be further discussed in the upcoming chapter.
You have no doubt noticed that many of the tools mentioned in Figure 2.5 relate
to the field of database systems. This happens to be a very important field of software
engineering that will be summarized in Chapter 10, but which you will (or should)
study in a separate course. A database management system (DBMS) is the software
that is used to develop and manage a database. Three main categories of DBMS
suites (see [Date 2004] and [Foster 2016]):
CASE tools may be placed into three broad categories, each with three sub-categories
[Martin 1993]:
• Traditional: A traditional CASE tool is a CASE tool that is based on the (tradi-
tional) function-oriented approach to software development. It may be a front-
end system (concentrated on software investigation, analysis, and specification),
a back-end system (concentrated on software development), or an integrated
(concentrated on the entire SDLC).
• Object-oriented: An OO-CASE tool is a CASE tool that is based on the OO
paradigm for software construction. It may be front-ended, back-ended, or
integrated.
The Role of the Software Engineer ◾ 33
• Hybrid: A hybrid CASE tool is a CASE tool that supports both the FO paradigm
and the OO paradigm for software construction. It may be front-ended, back-
ended, or integrated.
Figure 2.6 illustrates the categorizations of CASE tools. In examining software devel-
opment tools for subsequent development, products will fit (some vaguely) in vari-
ous cells of the matrix. Prudent software evaluation will aid the selection process.
As illustrated in Figure 2.6, the conventional wisdom is that OO-CASE tools are
more desirable than other types of CASE tools. However, given the abundance of
legacy software systems that still abound (this will be further discussed in Chapter
22), there is reasonable explanation (if not justification) for the variety. Figure 2.7
provides some significant benefits of OO-CASE tools.
The matter of integrated software system development warrants a bit more clarifi-
cation. With the use of OO-CASE tools, the software development life cycle (SDLC) is
reduced from several disjoint phases to two integrated, interwoven stages—modeling
and code generation—as illustrated in Figure 2.8.
34 ◾ Software Engineering
Like CASE tools, most RAD tools tend to be object-oriented. Moreover, the distinc-
tion between CASE and RAD is not always well defined. However, what is not in ques-
tion is spectrum of significant benefits that these software development tools bring to
the software engineering discipline. These benefits include (but are not confined to):
In many cases, these changes directly impact the software systems on which the
organization relies; in other instances, the effect is indirect. Whether the effects are
direct or indirect, the underlying systems may require modification, and the software
engineering team will be required to implement these modifications.
• The software engineer is responsible for the investigation, analysis, design, con-
struction, implementation, and management of software systems in the organi-
zation. This requires a highly skilled individual with certain desirable qualities.
• The software engineer uses a number of important tools in carrying out the
functions of the job. These include coding systems, forms design, charts, dia-
grams, technical documents, and software development tools.
• Coding systems allow for data representation, particularly during database
design and forms design.
• Forms design relates to data collection instruments for input to as well as output
from the system.
• Data analysis charts are used for data representation in a concise, unambiguous
manner. Line charts, pie charts, bar charts, and step charts are commonly used.
• Technical documents convey useful information about the work of the software
engineer. These include but are not confined to project proposal, initial system
requirement, feasibility report, requirements specification, design specification,
help specification, user’s guide, and system manual. We will discuss these docu-
ments as we proceed through the course.
• Flow charts and other diagrams will be discussed later in the course.
• Software planning and development tools are available in the form CASE/RAD
tools and SDKs in categories such as model and design tools, database planning
tools, software development tools, programming languages, and DBMS suites.
• The software engineer must be aware of any planned organizational changes
that will have direct or indirect implications for the software systems of the
organization.
This completes the introductory comments about software engineering. The next few
chapters will discuss various issues relating to software requirements investigation
and analysis.
2.7 Review Questions
1. Prepare a job description for a software engineer in a software engineering firm.
• Students at a college
• Resources in a college library
• Airline flights at an international airport
3. Imagine that you were employed as a software engineer for a firm. Your team is
in the process of overhauling the company’s information infrastructure. You have
been asked to propose a front-end software application that will automate the job
application process. Do the following:
• Propose a job application form for the company.
• Identify the steps that you envisage that a job application would pass through.
• After an applicant has been employed, what (internal) software system(s) do you
suppose your application processing system would feed its output into? Why?
The next nine chapters will focus on the Investigation and Analysis Phase of the
SDLC. The objectives of this phase are
Two deliverables will emerge from this phase of the software development life
cycle (SDLC): the initial software/system requirement (ISR) and the requirements
specification (RS).
Chapters to be covered include:
This chapter covers a number of activities that are typical of the early stage of soft-
ware requirements investigation. These activities converge into the first deliverable—
the initial system requirement (ISR), also called the project proposal. The ISR contains
a number of important components, which will be discussed. The chapter proceeds
under the following subheadings:
• Project Selection
• Problem Definition
• Proposed Solution
• Scope and Objectives of the System
• System Justification
• Feasibility Analysis Report
• Alternate Approach to Feasibility Analysis
• Summary of System Inputs and Outputs
• Initial Project Schedule
• Project Team
• Summary and Concluding Remarks
3.1 Project Selection
For obvious reasons, let us assume that an organization stands in need of various
software systems. The directors of the organization may or may not know the intri-
cate details of their need, but hopefully are smart enough to recognize that some-
thing is lacking. At this early stage, management would invite the attention of one
or more IT and/or software systems professionals (from the host organization, or
a contracted software engineering firm) to conduct a needs assessment and make
41
42 ◾ Software Engineering
appropriate recommendations. The needs assessment should clearly identify all can-
didate software systems projects for the organizational scenario.
Very early in this software needs assessment exercise, the matter of project
selection would become pertinent: It is often common that an organization stands in
need of several software systems. Since it is impractical to attempt to acquire them
all at the same time, some determination is normally made as to which projects will
be pursued first. The intricacies of such determination are beyond the scope of this
course; however, you should be aware of the salient factors that will likely affect such
decisions. They are:
If the software product is to be marketed to the public, there are some additional
factors to be considered: anticipated marketability of the product; expected impact
on the industry; and expected market position to be attained by introducing this new
software system.
Consideration of these factors against each prospective software engineering proj-
ect will lead to selection on one or more projects to be pursued. Once a project is
selected, the next target is preparation of the ISR. The rest of this chapter discusses
various components of the ISR, starting with the problem definition.
3.2 Problem Definition
Once the software engineering project has been selected, the first activity that is
performed is that of problem definition. It must therefore be done thoroughly,
accurately, and persuasively. The following are some basic guidelines:
• Define what aspect(s) of the organization is affected (recall the functional areas
of an organization).
• Describe (in convincing, precise language) the effects and possible causes.
Show how problems may be interrelated.
• Describe the worker's attitude to the problem.
• Cite the impact the problem has on productivity and revenue.
• Identify the operating constraints.
3.2.1 Constraints of a System
In defining a system, there are certain constraints that the software engineer must be
aware of. These include the following:
• External Constraints
Project Selection and the Initial System Requirements ◾ 43
If the proposal is for a new software system to be marketed to the public, identification
of the need could arise from any combination of a brain-storming session, a market
research, or industry observation.
An itemized list of objectives serves to sharpen focus on the essentials of the system.
Basic guidelines for stating system objectives are:
• Ensure that the needs of end users are addressed, especially those of the prin-
cipal users.
• Align system objectives to corporate goals.
• Use corporate language in stating the objectives.
3.5 System Justification
It is imperative that the proposal underscores the benefits that the new software
system brings to the table. These benefits go a considerable way to justifying the
project in the eyes of management. Basic guidelines for stating software system
benefits are as follows:
• Show how the system will help to improve productivity and efficiency.
• Mention advantages in the functional areas.
• Identify the benefits that the proposed software system brings to organization
as a whole.
• Align the stated advantages to corporate goals of the organization.
• Use the corporate language in stating the advantages.
• If possible, do a payback analysis or break-even analysis to show how soon the
organization could expect to recover the cost of the system. An amortization
schedule would be useful here.
• Briefly mention risks or drawbacks (these will be discussed in the feasibility
analysis).
3.6.1 Technical Feasibility
The technical feasibility analysis addresses the basic question of whether the project
is technically feasible. The analysis must be done with respect to four main consider-
ations. Once these four areas are addressed, the question of technical feasibility can
be answered with reasonable accuracy. The areas are
3.6.2 Economic Feasibility
The economic feasibility analysis is aimed at measuring the economic results that
would materialize if the project is pursued. Important considerations are:
• Costs versus benefits expressed in terms of payback period, cash flow, and
return on investment (ROI)
• Development time and the financial implications
• Economic life—for how long the system will be economically advantageous
• Risk analysis—examining the associated risks
The matter of risk is very important and therefore needs some elucidation. Every
business venture has associated with it, some inherent risks; software engineering
projects are not excluded from this reality. The software engineer should be aware
of the following:
• Generally speaking (from a financial perspective), the higher the risks are, the
greater is the possible return on investment (and vice versa). However, there are
exceptions.
• In many instances, taking prudent precautionary steps can reduce software
engineering project risks. The software engineer must evaluate each risk and
determine whether it can be reduced.
Two commonly used business techniques for evaluating and analyzing risks are pay-
back analysis and return on investment (ROI). ROI is often facilitated by what is
called a net present value (NPV) analysis. Figure 3.1 provides the formulas used in
payback analysis and ROI, respectively.
The payback analysis is contingent on the assumption that interest rates will
remain stable over the economic life of the project. However, even in stable econo-
mies (such as exist for developed countries), this assumption does not coincide with
reality; and in more volatile economies (such as in many developing countries), this
assumption does not come close to reality. For these reasons, payback analysis is
considered as a crude estimate, just to provide a rough idea of the implications of
the financial investment.
The NPV analysis is a more pragmatic approach that attempts to recognize what
is called the time value of money (TMV)—that money today may be worthless (more
likely) or more several years in the future, depending on economic factors at play. The
NPV analysis tries to anticipate interest rates in the future and uses this to conduct
an up-front analysis on the effectiveness of a financial investment. The more accurate
the future interest rate can be estimated, the more precise the NPV calculation will
be. However, since it is virtually impossible to predict future interest rate with 100%
certainty, an estimate is often made, based on the advice (conventional wisdom) of
economic experts. The anticipated average interest rate (r) over the related period is
typically used.
The annual cash inflow from the investment may come in the form of increased
savings on the cost of operation or increased revenue. Similar to interest rates, one
cannot predict with 100% certainty, what the future cash inflow is going to be, so
typically, an average estimate (A) over the economic life of the project is taken.
Once the anticipated average interest rate (r) and average cash inflow (A) have
been determined, these are then fed into the NPV formula of Figure 3.1 to yield the
following:
NPV = −A 0 + A/ (1 + r ) + A/ (1 + r ) + + A/ (1 + r )
2 n
(3.1)
NPV = −A 0 + A 1/ (1 + r ) + 1/ (1 + r ) + + 1/ (1 + r )
2 n
( )
Sum of first n terms : Sn = a R n − 1 / ( R − 1)if R > 1
(3.2)
Sum of first n terms : Sn = a (1 − R ) / (1 − R )if R < 1
n
Applying Equation 3.2 to the bracketed term of Equation 3.1, we obtain the
following
( )
Sn = a 1 − R n / (1 − R ) = 1/ (1 + r ) 1 − (1/1 + r ) / 1 − (1 + r )
n
= 1/r 1 − (1 + r )
n
n
)
= 1/r ∗ (1 + r ) − 1 / (1 + r ) ]
n
)
NPV = −A 0 + [ A/r ] (1 + r ) − 1 / (1 + r ) ]
n n
(3.3)
48 ◾ Software Engineering
This final equation can be used to calculate the NPV for a project with initial
financial investment of A0, anticipated average cash inflow A, and estimated average
interest rate r over a period of n years. Alternately, you may set up a spreadsheet to
do the calculation (left as an exercise for you). If the calculation produces a posi-
tive result, that the financial investment is financially sound. A negative result indi-
cates that the financial investment is risky; other alternatives and/factors should be
considered.
3.6.3 Operational Feasibility
The operational feasibility speaks to issues such as the likely user/market response to
the system, as well as the required changes on the part of operational staff. Generally
speaking, user involvement in a project tends to positively impact user acceptance.
The factors to be considered in assessing the operational feasibility of a project
include the following:
• Functionality and Flexibility: Does the software provide the essential func-
tional features required for the problem domain? Are there alternate ways of
doing things?
• Adaptability: How well are unanticipated situations handled?
• Differentiation: What is unique about the software?
• Productivity: How will productivity be affected by the software?
• Comprehensive Coverage: Is the problem comprehensively and appropriately
addressed?
Since these factors are qualitative, weights usually are applied, and each alternative
is assessed on each factor. The total grade for each alternative is then noted. The
result may be neatly presented in tabular form as in Figure 3.2. In this illustration,
alternative-B would be the best option.
• Cost of staffing
• Cost for data capture and preparation
50 ◾ Software Engineering
• Cost of hardware
• Cost of software
• Cost of transporting equipment
• Depreciation of equipment over the acquisition and usage period
Facilities costs are sometimes bundled with operational cost. If there is a distinction,
then facilities costs would typically include
A similar analysis may be constructed for the feasibility factors (including cost fac-
tors). When the alternatives are evaluated against these feasibility factors, an evalua-
tion matrix similar to that shown in Figure 3.3 may be constructed. In this illustration,
alternative-C would be the best option. Of course, the two figures (Figures 3.2 and
3.3) may be merged.
of thumb is to recommend the alternative with the highest score. However, other
constraints such as financial constraints, focus of the organization, etc., may mitigate
against that option. Given the overall organizational situation, the most prudent and
realistic alternative should be recommended by the software engineer.
The principle of weights and grades described in the previous section is also appli-
cable here. Figure 3.5 illustrates a sample rating worksheet that could be employed.
3.10 Project Team
The final component of your ISR is a proposed project team. The team must be well
balanced; typically, it should include the following job roles:
• Project Manager
• Secretary and/or record keeper
• Software Engineer(s) and Developer(s)
• Software Documenter(s) (if different from software engineers)
• Data Analyst(s)
• User Interface Officer(s)
The number of personnel and the chosen organization chart will depend on the size
and complexity of the project. Additionally, a user workgroup or steering committee
54 ◾ Software Engineering
is normally set up to ensure that the stated objectives are met. This may include the
following personnel:
• Project Manager
• Director of Information Technology (if different from Project Manager)
• Representation from the principal users
• Other managers whose expertise may be required from time to time (on
invitation)
• Software Engineer(s) (on invitation)
• Managing Director (depending on nature of the project)
In some instances, the project team forms a sub-committee of the steering committee;
in small organizations, the two teams may be merged. Figure 3.7 shows three pos-
sible traditional configurations of the project team. As an exercise, you are encour-
aged to identify the pros and cons of each project team configuration. It must be
pointed out, however, that there may be various other configurations of a software
engineering team. For instance, an agile development team tends to have a differ-
ent configuration, consisting of role players such as user representatives, product
owners, designers, developers, quality assurance engineers, and analysts. Chapter 23
provides more insights on organizing software engineering teams.
Appendix A provides excerpts from the ISR for an inventory management system.
Please take some time to carefully review the document and gain useful insights.
Once the ISR is completed, this document is submitted to the management of
the organization for consideration and approval. Typically, the software engineer
responsible for its preparation may be required to make a formal presentation to the
organization. In this presentation, you sell the project idea to the organization. Once
approval is obtained, you then start working on your next deliverable which is the
requirements specification (RS). The next few chapters will prepare you for this. As
you proceed, bear in mind that one primary objective of software engineering is to
produce software that has a significantly greater value than its cost. We do this by
building value in the areas of the software’s quality factors.
56 ◾ Software Engineering
3.12 Review Questions
1. What factors are likely to influence the selection of a software engineering proj-
ect? Briefly discuss these factors and explain why they are important.
4. What information is provided when you state system scope and system
objectives?
8. Identify three approaches to organizing a project team. For each approach, dis-
cuss is strengths and weaknesses, and describe a scenario that would warrant
such approach.
9. Conduct an examination of an organization that you are familiar with, and do the
following:
• Propose an organization chart for the organization.
• By examining the organization chart, propose a set of software systems that
you would anticipate for this organization.
• Choose one of those potential systems, and for this system, develop an ISR
as your first deliverable. Your ISR must include all the essential ingredients
discussed in the chapter.
Overview of Fundamental
Object-Oriented
Methodologies
This chapter introduces the philosophy and rationale for object-oriented method-
ologies (OOM). It also covers the characteristics and benefits associated with OOM.
Thirdly, the chapter provides clarification on the fundamental concepts in OOM. The
chapter proceeds under the following captions:
57
58 ◾ Software Engineering
• Machine code
• Assembly language
• High-level languages; databases based on hierarchical and network approaches
• Relational systems, 4GLs, CASE tools, and applications
• I-CASE, object-oriented techniques, multi-agent applications, and intelligent
systems
One urgent concern in the software industry today is to create more complex soft-
ware, faster and at lower costs. The industry demands at reduced cost, a quantum
leap in:
• Complexity
• Reliability
• Design capability
• Flexibility
• Speed of development
• Ease of change
• Ease of usage
How can the software engineering industry respond to this huge demand? How can
software engineers be equipped to produce software of a much higher quality than
ever demanded before, at a fraction of the time? A few years ago, companies would
be willing to invest millions of dollars into the development of business applications
that took three to five years to be fully operational. Today, these companies demand
immediate solutions, and they want more sophistication, more flexibility, and more
convenience.
As the software engineering industry gropes for a solution to the demands of
twenty-first lifestyle, a principle worth remembering is, Great engineering is simple
engineering (see [Martin 1993]). Object-oriented (OO) techniques simplify the design
of complex systems; so far, it is the best promise of the quantum leaps demanded
by industry. Through OO techniques, complex software can be designed and con-
structed block-by-block, component-by-component. Moreover, tested and proven
components can be reused multiple times for the construction of other systems,
potentially spiraling into a maze of complex, sophisticated software that was once
inconceivable to many.
OO methodologies (OOM) involve the use of OO techniques to build computer
software. It involves OO analysis and design (OOAD), as well as OO programming
Overview of Fundamental Object-Oriented Methodologies ◾ 59
Figure 4.1 Partial Information Topology Chart for the CUAIS Project
According to Martin’s prediction, “the sooner OOAD becomes widespread, the sooner
software creation will progress from a cottage industry to an engineering discipline”
(see [Martin 1993]). We are in the midst of that transformation.
• A book
• A building
• A chair
• A motor vehicle engine
• A student
• An employee
It is often the case that the term “object” is used loosely to mean either an instance
of an object type, or the object type itself. In such cases, the context should be used
to determine what the applicable definition is.
4.7 Operations
Operations are the means of accessing and manipulating the data (instances) of an
object (type). Since the operations are defined on the object type, they necessar-
ily apply to each instance of that object type. If for instance, we define the opera-
tions Hire, Modify, Remove, Retire, Fire, Resign, Inquire, Print on an object type,
Employee, then for each employee object, these operations are applicable.
Operations of an object type (should) reference only the data structure of that
object type. Strict OO design forbids an operation to directly access the data structure
of any object type other than its own object type. To use the data structure of another
object type, the operation must send a request (message) to that object.
In a truly OO software (CASE or programming language) environment, operations
and data of an object type are encapsulated in a class (more on this later). However,
several quasi OO software development environments exist; they typically facilitate
the creation of a relational database, with an OO GUI superimposed.
In the absence of an OO software development tool, operations may be imple-
mented as programs (with singular functions), some of which may manipulate a
database. Obviously, this is a less desirable situation.
As you will see in Chapter 15, we may expand the meaning of an operation as
described above, to mean a set of related activities. If this is done, then an operation
may be implemented as a class consisting of related suboperations.
64 ◾ Software Engineering
4.8 Methods
Methods specify the way in which operations are encoded in the OO software.
Typically, they are implemented as functions and/or procedures, depending on the
development software. The ability to create and maintain methods related to classes
is one significant advantage of OO-CASE tools (more on this later).
In OO software, methods are stored within classes, each method having its parent
class. The methods are accessible to object instances of that class. Static methods are
accessible to instances of the host class as well as other classes. In non-OO software,
methods translate to procedures and/or functions of application programs.
In environments such as Java, an interface is defined as a collection of service
declarations with no implementation. Services that are generic (i.e. applicable to
objects of various object types) may be implemented as interfaces. Implementation
details are left for the specific objects which utilize such interfaces (we will revisit
interfaces later on). Some OOPLs and hybrid languages use other terms for methods.
For instance, C++ uses functions and Pascal uses procedures. For the duration of this
course, we will continue to use the term method.
OO techniques naturally lead to more organized software systems than do the
more traditional techniques. Complex operations are naturally broken down into
simple manageable activities.
• Employee-Personal-Data
• Academic-Log
• Extracurricular
• Employment-History
• Create-Employee-Personal-Data
• Create-Applicant-Academic-Log
• Create-Applicant-Extracurricular
• Create-Applicant-Employment-History
4.9.1 Encapsulation
Encapsulation is the packaging together of data and operations. It is the result (act)
of hiding implementation details of an object from its user. The object type (class)
hides its data from other object types and allows data to be accessed only via its
defined operations—this feature is referred to as information hiding.
Encapsulation separates object behavior from object implementation. Object
implementations may be modified without any effect on the applications using them.
4.9.2 Class
A class is the software implementation of an object type. It has data structure and
methods that specify the operations applicable to that data structure.
In an OO software environment, object types are implemented as classes. In a
procedural programming environment, object types are implemented as modules.
4.10.1 Inheritance
A class may inherit properties (attributes and operations) of a parent class. This is
called inheritance. The parent class is called the superclass or base class; the inherit-
ing class is called the subclass or child class.
A class may qualify as both a subclass and a superclass at the same time.
Additionally, a class may inherit properties from more than one superclass. This is
called multiple inheritances.
As you will later see, multiple inheritances pose potential problems to software
implementation. For this reason, it is not supported in some software development
environments. It may therefore be prudent to avoid multiple inheritances, depending
on the software limitations.
4.10.2 Amalgamation
An object may be composed of other objects. In OOM, we refer to such an object as
an aggregate or composite object. The act of incorporating other component objects
into an object is called aggregation or composition. Since this is done through
the object’s class, the class is also called an aggregation (or composition) class.
Throughout this course, we shall use the term amalgamation to mean an aggregation
and/or composition.
4.11 Requests
To make an object do something, we send a request to that object. The request is
conveyed via a message. The message contains the following:
Overview of Fundamental Object-Oriented Methodologies ◾ 67
Structural polymorphism relates to the structural form an object may take. Generally
speaking, an instance of a superclass is likely to be structurally different from an
instance of a subclass, though both objects may belong to the same inheritance hier-
archy. Moreover, an object belonging to the hierarchy can be instantiated to take on
different forms within the hierarchy.
Note: Reusability and polymorphism are not miracles; they must be planned.
Reusability of classes may span several systems, not just one. To this end, class librar-
ies are of paramount importance. The OO-CASE tool should therefore support class
libraries.
4.13 Interfaces
An interface is a class-like structure with the following exceptions:
4.14 Late Binding
Late binding is the ability to determine the specific receiver (requester) and the cor-
responding method to service the request at run time. In traditional programming, a
procedure or function call is essentially translated to a branch to a particular location
in memory where that section of instructions executes. As part of the compilation
process, the necessary pieces of the program are put (bound) together before pro-
gram execution. This process is referred to as (early) binding.
In the object-oriented paradigm, no concern is given to which object will request
any given service of another object. Further, objects (more precisely classes) are
not designed to anticipate what instances of other classes will require their ser-
vices. There therefore needs to be late binding between a message (request) and the
method that will be used to respond to that request.
Overview of Fundamental Object-Oriented Methodologies ◾ 69
4.15 Multithreading
The principle of multithreading has been immortalized by the Java programming
language. However, software industry leaders have latched on to the concept, so
much so that we now talk about multithreading operating systems, as well as multi-
threading software applications.
Multithreading is the ability of an object to have concurrent execution paths. The
effect is to speed up processing and thereby enhance throughput and hence, produc-
tivity. Multithreading is one of the reasons object technology offers better machine
performance.
• Investigation
• Analysis
• Design
• Development
70 ◾ Software Engineering
• Implementation
• Maintenance
• Investigation
• Object Structure Analysis (OSA)
• Object Behavior Analysis (OBA)
• Class Structure Design (CSD)
• Operations Design (OD)
• Implementation
• Maintenance
There are two significant advantages of this revised SDLC over the traditional one:
4.19 Review Questions
1. Why is contemporary software engineering conducted using object-oriented
methodologies? Provide a robust rationale for OOM.
Object-Oriented
Information Engineering
• Introduction
• Engineering the Infrastructure
• Diagramming Techniques
• Enterprise Planning
• Business Area Analysis
• Software System Design
• Software System Construction
• Summary and Concluding Remarks
5.1 Introduction
Software engineering as we know refers to the discipline of specifying, designing,
constructing, and managing computer software. Information engineering is heavily
influenced by software engineering but takes a different perspective: it refers to a
set of interrelated disciplines required to build a computerized enterprise based
on information systems, and managing the resulting information infrastructure.
Information engineering (IE concerns itself with the planning, construction, and
management of the entire information infrastructure of the organization. It typically
pulls several software engineering projects and other related projects together and
provides general direction to the organization. You might be familiar with the term
business process re-engineering (BPR). Information engineering (also referred to as
enterprise engineering) includes that concept and much more. Another term that
73
74 ◾ Software Engineering
James Martin’s information system (IS) pyramid (see [Martin 1989a] and [Martin
1993]) proposes four levels of planning that address these ingredients:
• Enterprise Planning
• Business Area Analysis
Object-Oriented Information Engineering ◾ 75
• System Design
• System Construction
5.3 Diagramming Techniques
If you are going to make any significant progress in designing the information
infrastructure, you will first need to put together a number of technical documents.
Covering large volumes of information in a succinct, comprehensive manner is criti-
cal; hence the importance of diagrams.
Figure 5.2 provides a list of recommended diagramming techniques that are appli-
cable to OOSE. These techniques will be covered as we advance through the course.
In the interest of additional clarity, some of them will be revisited, and the new ones
discussed in the upcoming sections of this and subsequent chapters. There are other
diagramming techniques that are used in OOSE, but these are the ones that this
course recommends. At the highest level of planning the information infrastructure
of a business enterprise, or architecture of a software system, object flow diagrams
and information topology charts are useful. From this point, you then proceed down
into the structure of the various object types that comprise the system. Then you
address the behavior of instances of each object type.
76 ◾ Software Engineering
5.4 Enterprise Planning
A full discussion of enterprise planning is beyond the scope of this course; however,
in the interest of comprehensive coverage, a brief summary is provided here. In the
broadest sense, enterprise planning relates to planning the essentials of the organi-
zation. In OOIE, we concentrate on issues that relate (directly or indirectly) to the
information infrastructure of the organization. As such, enterprise planning involves
a number of important activities, including the following:
Of course, each of these activities involves its own set of principles and methodolo-
gies. Three very useful diagramming techniques here are the information topology
chart (ITC), the user interface topology chart (UITC), and the object flow diagram
(OFD). The UITC—another innovation from the current author—is an extension of
the ITC, focusing on the operational components and their related subsystems. The
OFD focuses on the main subsystems and how they interact with each other. Figure
5.3 illustrates a partial ITC for the CUAIS project; Figure 5.4 illustrates a partial UITC
for the project; and Figure 5.5 shows an OFD for the project.
Object-Oriented Information Engineering ◾ 77
Figure 5.3 Partial Information Topology Chart for the CUAIS Project
78 ◾ Software Engineering
Figure 5.4 Partial User Interface Topology Chart for the CUAIS Project
Object-Oriented Information Engineering ◾ 79
Figure 5.5 OFD for the CUAIS Project, Assuming Repository Model
• The underlying object (database) structure must meet the needs of various busi-
ness areas.
• The operations provided must meet the requirements of the various business
areas.
• Appropriate security mechanism must be put in place to ensure the resources
(objects and operations) of the integrated system are accessible to the relevant
functional areas of the organization.
In constructing the matrices for the BAA, always cluster related components (object
types or sub-systems) together. Figure 5.7 illustrates an object-operation matrix while
Figure 5.8 illustrates a component-business-area matrix.
• The design must be accurate and comprehensive, covering both structure and
behavior of system components, and with due consideration to the availability
of technology.
• The design must adequately take care of current and future requirements of the
(component systems in the) organization.
• The design must be pragmatic.
• The design must be informed by the software quality factors emphasized
throughout the course (review Chapters 1 and 3).
• The design must uphold established software engineering standards.
2. Software acquisition must follow a clearly developed plan with specific targets
(deadlines).
3. Prudent project management will be required if targets are to be met.
Since its introduction, information engineering has been overtaken by (or more
precisely, morphed into) methodologies such as data administration, and business
intelligence (see [Turban 2007] and [Turban 2008]). However, the principles of IE are
still relevant. When OOIE is combined with life cycle models such as phased pro-
totyping, iterative development, agile development, or CBSE, you have formula for
successful software engineering.
Once you have obtained a good overview of the information infrastructure of the
enterprise, your next step is to zoom in on each component system and provide more
detail in terms of the structure and behavior of constituent objects comprising the
system. The next chapter will address the relevant issues relating to this.
5.9 Review Questions
1. What is information engineering? I Identify the main objectives or the technique.
5. What is business area analysis (BAA)? Identify the critical information that should
be available after BAA has been conducted.
6. Identify a small business enterprise that you are familiar with. Conduct OOIE on
the enterprise, and propose a preliminary set of diagrams about the enterprise.
The Requirements
Specification
• Introduction
• Contents of the Requirements Specification
• Documenting the Requirements
• Requirements Validation
• How to Proceed
• Presenting the Requirements Specification
• The Agile Approach
• Summary and Concluding Remarks
6.1 Introduction
The software requirements specification (RS) is the second major deliverable in a
software engineering project. It is a document that signals the end of the investigation
and analysis phase, and the beginning of the design phase. Its contents will serve as
a blueprint during design and development.
Note: Remember, we are not assuming that life cycle model being employed is
necessarily the waterfall model, which is irreversible. Rather, please assume that any
of the reversible life cycle models is also applicable.
The requirements specification must be accurate as well as comprehensive, as it
affects the rest of the system's life in a significant way. Any flaw in the requirements
specification will put pressure on the subsequent phases (particularly design and
development) to attempt to address it. If the problem is not identified and addressed
89
90 ◾ Software Engineering
by the end of system development, then it must be addressed during the maintenance
phase—a particularly undesirable situation. In some instances, this might be too late
to attempt saving a reputation of a software product.
The requirements specification serves as a very effective method of system
documentation, long after system development. Many texts on software engineering
recommend one comprehensive requirements specification document that involves
detailed design issues. From experience, this is not a good idea, especially if the
software being developed is very large and complex. The approach recommended
by this course is to have a requirements specification, which provides comprehensive
and accurate coverage of the software system but avoids fine design intricacies
(such as characteristics of data elements, operation specifications, use of technical
language for business rules, system names for objects, etc.). This blueprint is then
used as input to the design phase, where all intricacies are treated in a separate
design specification.
As you go through this chapter, bear in mind that you will need to gain mastery
of a number of techniques in order to develop a requirements specification for a
software engineering project. The intent here is to provide you with the big picture,
so you will have an appreciation of where you are heading. Chapters 5 and 8 will
then work you through the required details.
• Storage Requirements: The information entities (object types) and how they
are comprised.
• Operational Requirements: The operations to be defined on the information
entities (object types).
• System Rules: The rules of operation. These include derivation rules, relation-
ship integrity rules, data integrity rules, control conditions, operational rules,
and trigger rules. Rules are more thoroughly discussed Chapter 10.
Interface Specification: This involves the guidelines relating to how various subsys-
tems and/or modules will be interconnected. Depending on the project, this may or
may not be critical at this point. In many cases, it can be deferred until the design
phase (in fact, it will be elucidated later in the course).
System Constraints: This involves the operating constraints of the system. Like
the interface specification, this requirement may be trivial and self-evident, or critical
to the success of the software. An example of triviality would be in the case of an
information system (for instance, and inventory management system) for an orga-
nization. An example of situation where system constraints would be critical is a
real-time system (for instance managing atmospheric pressure in an aircraft, or water
pressure for a water power station).
System Security Requirements: Depending on the intended purpose and use of
the software product, system security may be an issue to be considered. In specifying
the security requirements, the following must be made clear:
Revised Project Schedule: Here, you provide a refined project schedule, which
involves a PERT diagram or Gantt chart, or some other equivalent means. This will
be discussed in Chapter 8.
Concluding Remarks: Usually, there are some concluding remarks about the
requirements specification. These are placed here.
Appendices: The appendices typically include supporting information that are
relevant to the software requirements, but for various reasons might have been
omitted from the body of the document. Examples of possible information for the
appendices are
technical people such as software engineers, then unnecessary details can be avoided,
technical jargons are allowed and formal methods may be used (more on this later).
If the intended readership includes nontechnical individuals (lay persons), then it is
advisable to develop an easy to read document.
The requirements specification may be developed with inexpensive applications
such as MS Office, Corel Suite, etc. If a CASE tool is available, it should be used
since this will enhance the system development process. In fact, in many cases, the
diagrams used in the CASE tool are executable—code is generated from them—
so that the distinction of requirements specification from design and design from
development are absent (hence the term modeling). However, in many instances,
thorough documentation is achieved by employing a mix of software development
tools and desktop applications.
Preparation of the requirements specifications is perfected only as the software
engineer practices on the job. Whether a CASE tool or desktop publisher is used, you
will need to have mastery of fundamental software engineering principles, if the end
product is to be credible.
6.4 Requirements Validation
Once the requirements have been specified, they must be validated. This is crucial,
since it is these requirements that will be used as the frame of reference for the next
deliverable––the design specification. If the requirement specification is lacking in
content or accuracy, this will have adverse repercussions on the design and final
product. There are two approaches to requirements validation: manual and automatic.
Manual Techniques: In manual review, a resource team is used to cheek the
following:
The techniques available for this (these will be discussed in the next chapter) are
• Interviews
• Questionnaires
• Document review
• Sampling and Experimenting
• Observation
• Prototyping
• Brainstorming
• Manual cross-referencing
• Mathematical proofs
Discussion:
Which life cycle models would most favor automatic validation techniques?
6.5 How to Proceed
How you proceed to develop the RS is a matter of personal preference. Some peo-
ple like a top-down approach; others prefer a bottom-up approach. Traditional sys-
tems employed functional-oriented methodologies; contemporary systems tend to
favor object-oriented methodologies. In this course, you will be exposed to both
approaches, even though there is a bias to the object-oriented approach.
In preparing the RS, it is recommended that you be methodical and incremental,
revisiting formerly addressed issues whenever you need to. Figure 6.1 describes a
recommended approach that you will find useful in various scenarios. You will notice
a few newly introduced terms; these will be clarified in the upcoming chapters.
Appendix B provides excerpts from the RS of the inventory management system that
was mentioned in the previous chapter. Take some time to review it and gain useful
insights. But to get to that point where you are able to prepare such a document on
your own, you need to learn some more fundamentals, commencing with informa-
tion gathering techniques. This will be discussed in the next chapter.
6.9 Review Questions
1. Explain the importance of the requirements specification.
[Lee 2002] Lee, Richard C. and William M. Tepfenhart. 2002. Practical Object-Oriented Development
with UML and Java. Upper Saddle River, NJ: Prentice Hall.
[Martin 1993] Martin, James and James Odell. 1993. Principles of Object-Oriented Analysis and Design.
Eaglewood Cliffs, NJ: Prentice Hall.
[Peters 2000] Peters, James F. and Witold Pedrycz. 2000. Software Engineering: An Engineering Approach.
New York, NY: John Wiley & Sons. See chapter 3.
[Pfleeger 2006] Pfleeger, Shari Lawrence. 2006. Software Engineering Theory and Practice, 3rd ed. Upper
Saddle River, NJ: Prentice Hall. Chapter 4.
[Schach 2011] Schach, Stephen R. 2011. Object-Oriented & Classical Software Engineering, 8th ed.
New York, NY: McGraw-Hill. See chapter 11.
[Sommerville 2016] Sommerville, Ian. 2016. Software Engineering, 10th ed. Boston, MA: Pearson.
See chapter 4.
Chapter 7
Information Gathering
In order to accurately and comprehensively specify the system, the software engineer
gathers and analyzes information via various methodologies. This chapter discusses
these methodologies as outlined below:
97
98 ◾ Software Engineering
As the software engineer embarks on the path towards preparation of the require-
ments specification, these objectives must be constantly borne in mind. In the early
stages of the research, the following questions should yield useful pointers:
• WHAT are the (major) categories of information handled? Further probing will
be necessary, but you should continue your pursuit until this question is satis-
factorily answered.
• WHERE does this information come from? Does it come from an internal depart-
ment or from an external organization?
• WHERE does this information go after leaving this office? Does it go to an inter-
nal department or to an external organization?
• HOW and in WHAT way is this information used? Obtaining answers to these
questions will help you to identify business rules (discussed in Chapter 10) and
operations (discussed in Chapters 14 and 15).
• WHAT are the main activities of this unit? A unit may be a division or depart-
ment or section of the organization. Obtaining the answer to this question will
also help you to gain further insights into the operations (discussed in Chapters
14 and 15).
• WHAT information is needed to carry out this activity? Again here, you are try-
ing to refine the requirements of each operation by identifying its input(s).
• WHAT does this activity involve? Obtaining the answer to this question will help
you to further refine the operation in question.
• WHEN is it normally done? Obtaining the answer to this question will help you
to further refine the operation in question by determining whether there is a
time constraint on an operation.
• WHY is this important? WHY is this done? WHY...? Obtaining answers to these
probes will help you to gain a better understanding of the requirements of the
software system.
7.2 Interviewing
Interviewing is the most frequent method of information gathering. It can be very
effective if carefully planned and well conducted. It is useful when the information
needed must be elaborate, or clarification on various issues is required. The inter-
view also provides an opportunity for the software engineer to win the confidence
and trust of clients. It should therefore not be squandered.
• The time frame is short but a vast area (and/or dispersed population) must be
covered.
• Simple answers are required to a number of standard questions.
1. Nominal Scale: Used to classify things. A number represents a choice. One can
obtain a total for each classification.
2. Ordinal Scale: Similar to nominal, but here the number implies ordering or
ranking.
3. Interval Scale: Ordinal with equal intervals.
4. Ratio Scale: Interval scale with absolute zero.
5. Likert Scale: The Likert scale has emerged as the default standard for measur-
ing, quantifying, and analyzing user responses in surveys and research initia-
tives that involve the use of questionnaires. Likert scales are typically designed
to be symmetrical—involving an equal number of possible positive or negative
responses, and a neutral point. Likert scale implementations involving five
points are seven points appear to be very common. The five-point implementa-
tion often appears with responses such as:
a. Strongly disagree
b. Disagree
c. Neutral
d. Agree
e. Strongly agree
Information Gathering ◾ 101
The latter three techniques constitute quasi-random sampling. The reason for this is
that they are not regarded as perfectly random sampling.
7.4.3 Sample Calculations
Figure 7.4 provides a summary of the formulas that are often used in performing
calculations about samples: mean, standard deviation, variance, standard unit, unit
error, and sample size. It is assumed that you are familiar (even if minimally) with
these basic concepts.
These formulas are best explained by examining the normal distribution curve
(Figure 7.5). From the curve, observe that:
The confidence limit of a population mean is normally given by X' +/- ZSE where Z
is determined by the normal distribution of the curve, considering the percentage
confidence limit required. The following Z values should be memorized:
The confidence limit defines where an occurrence X may lie in the range (Xʹ − ZSE )
≤ X ≤ (Xʹ + ZSE), given a certain confidence. As you practice solving sampling prob-
lems, your confidence in using the formulas will improve.
• Personal Information
• Family/Kin Contact Information
• Education History
• Employment History
• Professional References
• Extra-Curricular Activities
Internal documents include forms, reports, and other internal publications; external
documents are mainly in the form of journals and other professional publications.
These source documents are the raw materials for gaining insights into the require-
ments of the system, so you want to pay keen attention to them.
With respect to observation, it is always useful to check what you have been told
against what you observe and obtain clarification where deviations exist. Through
keen observation, the software engineer could gather useful information not obtained
by other means.
7.6 Prototyping
In prototyping, the user gets a "trial model" of the software and is allowed to critique it.
User responses are used as feedback information to revise the system. This process con-
tinues until a software system meeting user satisfaction is obtained (review Section 1.4).
The following are some basic guidelines for developing a prototype:
There are various types of prototypes that you will find in software engineering.
Following is a brief description of five common categories of prototypes.
Patched-up Prototype or Production Model: This prototype is functional the first
time, albeit inefficiently constructed. Further enhancements can be made with time.
Nonoperational or Interactive Prototype: This is a prototype that is intended
to be tested, in order to obtain user feedback about the requirements of the system
represented. A good example is where screens of the proposed system are designed;
the user is allowed to pass through these screens, but no actual processing is done.
This approach is particularly useful in user interface design (see Chapter 14).
106 ◾ Software Engineering
approach is often used in the synthesis of integrated circuits and chips, where there
is a high demand for precision, and negligible room for error. As mentioned in
Chapter 1, formal methods are not applicable to every problem domain. We will
revisit the approach later in the course (in Chapter 15).
7.8 Object Identification
We have discussed six different information-gathering strategies. As mentioned in
Section 7.1, these strategies are to be used to identify the core requirements of
the software system. As mentioned then, one aspect that we are seeking to define
is the set of information entities (object types). Notice that the term information
entity is used as an alternative to object type. The two terms are not identical, but
for most practical purposes, they are similar. An information entity is a concept,
object, or thing about which data is to be stored. An object type is a concept, object,
or thing about which data is to be stored, and upon which a set of operations is to
be defined.
In object-oriented environments, the term object type is preferred to informa-
tion entity. However, as you will more fully appreciate later, in most situations, the
software system is likely to be implemented in a hybrid environment as an object-
oriented (OO) user interface superimposed on a relational database. This is a loaded
statement that will make more sense after learning more about databases (Chapter
13). For now, just accept that we can use the terms information entity and object type
interchangeably in the early stages of software planning.
Early identification of information entities is critical to successful software engi-
neering in the OO paradigm. This is so because your software will be defined in
terms of objects and their interactions. For each object type, you want to be able to
describe the data that it will host, and related operations that will act on that data.
Approaching the software planning in this way yields a number of significant advan-
tages; moreover, even if it turns out that the software development environment is
not object-oriented, the effort is not lost (in light of the previous paragraph).
Several approaches to object identification (more precisely object type identifica-
tion) have been proposed. The truth, however, is that these approaches do not offer
any guarantee of successful identification of all object types required by a given sys-
tem. Among the approaches that have been proposed are the following:
Figure 7.6 Descriptive Narrative of Purchase Order and Invoice Receipt Subsystem
From this narrative, an initial list of object types and associated operations can
be constructed, as shown below (Figure 7.7). Further refinement would be required;
for instance, additional operations may be defined for each object type (left as an
exercise); also, the data description can be further refined (discussed in Chapter 13).
Figure 7.7 Object Types and Operations for Purchase Order and Invoice Receipt Subsystem
Obviously, not all operations will apply for all object types (data entities); also,
some object types (entities) may require additional operations. The software engi-
neer makes intelligent decisions about these exceptions, depending on the situation.
Additionally, the level of complexity of each operation will depend to some extent
on the object type (data entity).
In a truly OO environment, the operations may be included as part of the object’s
services. In a hybrid environment, the information entities may be implemented as
part of a relational database, and the operations would be implemented as user inter-
face objects (windows, forms, etc.).
1. Identify tangible objects (more precisely, object types) in the application domain
that are to be modeled.
2. Put these objects into logical categories. These categories will become
super-classes.
In order for this method to be successful, the software engineer must make a para-
digm shift to an object-oriented mindset. For this reason, software engineers who
have not made that transition, usually have difficulties employing it.
The main drawback of this approach is that on the surface, it does not help in
the identification of abstract (intangible) object types. Of course, the counter argu-
ment here is that with experience, identifying abstract object types will not be a
problem.
7.8.5 Using Decomposition
This approach assumes that the system will consist of several component objects,
and works very well in situations where this assumption is true. The steps involved
are:
110 ◾ Software Engineering
The main advantage of this technique is reuse—it is likely to produce a design that
is very compact, due to a high degree of code reuse.
The main disadvantage of the technique is that it could be easily misused to pro-
duce a design of countless splinter classes that reuse logically unrelated resources.
This could result in a system that is difficult to maintain.
The main advantage of this approach is that if such reusable components can be
identified, system development time can be significantly reduced.
The main drawback of the approach is that it is not always applicable. Most exist-
ing systems either have incomplete OODA or no OODA at all. This should not be
Information Gathering ◾ 111
surprising since software engineering is a fairly youthful discipline. With time, this
approach should be quite useful.
1. Use the repository to identify classes and class hierarchies that can be reused.
2. Where necessary, adopt, and modify existing classes to be reused.
3. Introduce new classes (categories) where necessary.
4. If the classes are parameterized, supply the generic formal parameters (this is
not currently supported in Java).
The advantages and disadvantages of this approach are identical to those specified
in the previous subsection.
This approach could significantly reduce the development time of a new system
while building the experience repertoire of the software engineer(s) involved.
Where the relevant prior experience is lacking, this approach breaks down and
becomes potentially dangerous. Also, the approach could facilitate the proliferation
of shoddy design with poor documentation, or no documentation at all. This could
result in a system that is very difficult to maintain.
carry out its responsibilities. In carrying out its responsibilities, a class may use its
own internal methods, or it may solicit help via a collaborator’s method(s).
The CRC methodology is summarized in the following steps:
Figure 7.8 provides an illustration of a CRC card. The CRC card must be stored elec-
tronically as well as physically, to aid the design process. For instance, CRC cards can
be easily classified, printed, and strung out on a table, during a brainstorming ses-
sion, to assist designers with gaining a comprehensive overview of the system. Class
names and responsibilities must be carefully worded to avoid ambiguities.
7.9 End-User Involvement
OOSE must thoroughly involve end users to ensure their satisfaction and acceptance.
The software engineer should not operate in a manner that is oblivious of the end
user. Rather, his/her role is to extract information needs from the end users and
Information Gathering ◾ 113
model it in a way that the users understand and are satisfied with. Workshops are
usually effective means. Three types of workshops are:
but a vast area (and/or dispersed population) must be covered; simple answers
are required to a number of standard questions. The software engineer must
follow established norms in preparing and administering a questionnaire.
• Sampling is useful when the information required is of a quantitative nature or
can be quantified, no precise detail is available, and it is not likely that such
details will be obtained via other methods. The software engineer must be
familiar with various sampling techniques and know when to use a particular
technique.
• Review of source documents will provide useful information about the input,
data storage, and output requirements of the software system. This activity
could also provide useful information on the processing requirements of the
software system.
• Prototyping involves providing a trial model of the software for user critique.
User responses are used as feedback information to revise the system. This pro-
cess continues until a software system meeting user satisfaction is obtained. The
software engineer should be familiar with the different types of prototypes.
• Brainstorming is useful in situations in which software systems are required,
but there is no readily available information that would lead to the specification
of the requirements of such systems. Brainstorming involves a number of soft-
ware engineers coming together to discuss and hammer out the requirements
of a software system.
• Mathematical proof is particularly useful in an environment where formal meth-
ods are used for software requirements specification.
• One primary objective of these techniques is the identification and accurate
specification of the information entities (or object types) comprising the soft-
ware system. There are various techniques for identifying and refining object
types. Among the various object identification techniques that have been pro-
posed are the following: the descriptive narrative strategy; the rule-of-thumb
strategy; using things to be modeled; using definitions of objects, categories,
and types; using decomposition; using generalizations and subclasses; using
OO domain analysis or application framework; reusing individual hierarchies,
objects, and classes; using personal experience; using class-responsibility-col-
laboration cards.
• OOSE must thoroughly involve end users to ensure their satisfaction and accep-
tance. Three types of workshops that are common are JEM ( Joint Enterprise
Modeling), JRP ( Joint Requirements Planning), and JAD ( Joint Application
Design).
use unambiguous notations and diagrams (of course, you still need to write but not
as much as you would without the notations and diagrams). The next chapter will
discuss some of these methodologies.
7.11 Review Questions
1. Why is information gathering important in software engineering?
2. Identify seven methods of information gathering that are available to the software
engineer. For each method, describe a scenario that would warrant the use of this
approach, and provide some basic guidelines for its application.
3. Suppose that you were asked to develop an inventory management system (with
point-of-sale facility) for a supermarket. Your system is required to track both
purchase and sale of goods in the supermarket. Do the following:
• Prepare a set of questions you would have for the purchasing manager.
• Prepare a set of questions you would have for the sales manager.
• Apart from interviews, what other information gathering method(s) would you
use in order to accurately and comprehensively capture the requirements of
your system? Explain.
4. Suppose that you are working for a software engineering firm that is interested in
developing software to detect certain types of cancer, based on information fed to
it. Your software will also suggest possible treatment for the cancer diagnosed.
You are given a list of twelve physicians who are cancer experts; they will form
part of your resource team. Answer the following questions:
• What type of software would you seek to develop and why?
• What methodology would you use for obtaining critical information from the
cadre of physicians?
• Construct an information-gathering instrument that you would use in this
project.
[DeGroot 2014] DeGroot, Morris and Mark Schervish. 2014. Probability and Statistics, 4th ed. Boston, MA:
Pearson.
[Due 2002] Due, Richard T. 2002. Mentoring Object Technology Projects. Saddle River, NJ: Prentice Hall.
See chapters 3-6.
[Kendall 2014] Kendall, Kenneth E., and Julia E. Kendall. 2014. Systems Analysis and Design, 9th ed.
Boston, MA: Pearson. See chapters 4 – 6.
[Lee 2002] Lee, Richard C. and William M. Tepfenhart. 2002. Practical Object-Oriented Development
with UML and Java. Upper Saddle River, NJ: Prentice Hall. See chapter 4.
[Martin 1993] Martin, James and James Odell. 1993. Principles of Object-Oriented Analysis and Design.
Eaglewood Cliffs, NJ: Prentice Hall. See chapters 4 and 5.
[Pfleeger 2006] Pfleeger, Shari Lawrence. 2006. Software Engineering Theory and Practice, 3rd ed. Upper
Saddle River, NJ: Prentice Hall. See chapter 4.
[Sommerville 2016] Sommerville, Ian. 2016. Software Engineering, 10th ed. Boston, MA: Pearson.
See chapter 4.
[Van Vliet 2008] Van Vliet, Hans. Software Engineering, 3rd ed. 2008. New York, NY: John Wiley & Sons.
See chapter 9.
Chapter 8
• Introduction
• Traditional System Flow Charts
• Procedure Analysis Chart
• Innovation: Topology Charts
• Data Flow Diagrams
• Object Flow Diagram
• Other Contemporary Diagramming Techniques
• Program Flow Chart
• Summary and Concluding Remarks
8.1 Introduction
In the preparation of the requirements specification, the software engineer invari-
ably employs various diagramming techniques in order to convey information about
the software. Diagrams provide graphic representation of the flow of information, as
well as the inter-relationships among system resources. In developing diagrams, the
software engineer uses predefined symbols that have established meanings.
117
118 ◾ Software Engineering
The diagramming techniques discussed in this chapter are drawn from the tra-
ditional function-oriented (FO) software engineering paradigm, as well as the more
contemporary object-oriented (OO) paradigm. While contemporary products tend
to be designed based on the OO paradigm, there are many legacy systems that still
abound. An understanding of both approaches is therefore imperative for the keen
software engineer. Figure 8.1 provides a list of some commonly used diagrams and
the software engineering paradigm(s) (OO or FO) to which they apply. Some of these
diagrams will be discussed in this chapter; others will be discussed in more appropri-
ate sections later in the course.
process. Processes eventually translate to actual programs that will be written as part
of the software system. In the OO paradigm, the term operation is preferred to func-
tion or process. Throughout this text, this is the preferred term, except when dealing
with traditional (function-oriented) techniques. Finally, it must be borne in mind that
operations translate to actual methods of classes, or classes with constituent methods
that will be written at development time.
Subsystem: A subsystem is an independent (or almost independent) component
of a software system. The subsystem may operate as part of a larger system, or on its
own as an independent system.
Module: A module is a subservient component of a software system or subsys-
tem. The module does not operate on its own; rather, it is part of a larger whole.
8.2.1 Information-Oriented Flowchart
The information-oriented flowchart (IOF) has the following characteristics:
Figure 8.3 shows an example on an IOF. Notice that in this example, only the
document symbol is used to show the flow of information across different depart-
ments in the organization. This is typical of IOFs.
that there are five types of actions that are studied: activity, transportation, inspec-
tion, delay, and storage. The summary provides the total time by each type of action,
for that particular job function. By examining the chart, the software engineer can
make recommendations as to whether improvements are needed in that particular
functional area of the system. For this reason, PACs are extremely useful in business
process reengineering (BPR).
Observe:
You can easily construct the equivalence of a PAC by simply using a spreadsheet. The
symbols may be different, but the important thing is to have the feature that allows
easy summation of columns and other calculations.
The ITC is more useful in OOSE, but can also be used in the traditional approach.
Figure 8.7 illustrates a portion of an ITC for a generic College/University Administrative
Communicating Via Diagrams ◾ 125
Information System (CUAIS). From this diagram, it can be seen that the CUAIS is an
integrated software system consisting of nine independent but interrelated subsys-
tems. Software systems of this sort belong to a family called enterprise resource
planning (ERP) systems, which in turn belongs to a larger family called manage-
ment support systems (MSSs). Each subsystem is responsible for the management
of various information entities, some of which have been included in the diagram.
Appendices B and C provide additional ITC illustrations.
Figure 8.7 Partial Information Topology Chart for the CUAIS Project
126 ◾ Software Engineering
• Indicate process number at the top of the process rectangle. Use decimals to
indicate sub-processes.
• Indicate data store number at the left of the data store rectangle.
• Label entities, processes, and data stores on the inside of respective rectangles.
• Develop DFD in a top-down manner; level-0 to level-n. Explode from one level
to the next in order to reveal more detail about the processes. At each level,
identify external entities, processes, data flows, and data storages.
◾
127
128 ◾ Software Engineering
(Continued)
Figure 8.8
Communicating Via Diagrams ◾ 129
• Two obvious external entities that are crucial to the implementation of the soft-
ware system are suppliers of inventory items and the customers who purchase
from the business.
• Figure 8.10 provides a list of some important operations/processes and data
entities (storage objects) that would comprise the IMS (this is not a comprehen-
sive list). As you view this, remember that the storage objects typically translate
to information entities in the underlying database.
Figure 8.11 shows a level 0 DFD called a context diagram. Notice that at this level,
the software system is perceived as a large process. Figure 8.12 shows a (partial)
level-1 DFD of the system, highlighting processes P01, P05, P09, P11, P14, P18, and
P19 (see Figures 8.10a and 8.10b). These were chosen because they represent the
most critical processes in the system. You would then have a choice as to how to con-
tinue refining your requirements: for each of the processes specified in your level-1
diagram (Figure 8.12), you could specify a level-2 DFD as illustrated in Figure 8.13, a
program flowchart (see Section 8.8), an IPO chart (review Section 8.2.3), a Warnier-
Orr diagram (discussed in Chapter 15), an activity diagram (discussed in Chapter 12),
or an extended operation specification (discussed in Chapter 15).
Figure 8.13 Level-2 DFD for Process P05 of the Inventory Management System
financial management system. From this diagram, it is apparent that the central sub-
system relates to financial transactions, and all other subsystems are related to this.
For additional illustrations, see Figures 8.7 and 8.11 also.
While the OFD is not mandatory, it is very useful in providing an overview of
the architecture of the software system. The technique is normally used in an OO
environment and may be accompanied by an ITC. In a more traditional (FO) environ-
ment, a DFD would have been used.
As you can see, a significant advantage of the FSM over the state transition dia-
gram is that you can show operations that cause change of state as well as those that
do not cause change of state.
8.8 Program Flowchart
The program flowchart is a traditional technique of the FO paradigm that represents
functional logic. Its use in contemporary software design has been overtaken by
other techniques such as algorithms (in pseudo-code), Warnier-Orr diagrams, and
activity diagrams. It is assumed that from your earlier courses, you have gained mas-
tery of algorithm development; as for Warnier-Orr diagrams, and activity diagrams,
these will be covered later in the course (Chapter 15). The symbols used for program
flowcharting are shown in Figure 8.17. The main structures (simple sequence, selec-
tion, and iteration) are also illustrated in Figure 8.18.
The main advantages of programming flow chart are easy debugging, economy
in writing and easy tractability. The main flaw is its limitation to non-parallel logic.
6.18a Sequence:
6.18b Selection-If:
Process 1
Condition 1 N
Process 3
?
Process 2 Y
Process 2
Process n
Value 1 Value n
Expression
? Process n
Value 2
Process 1
Process 2
6.18d Iteration:
While Repeat-Until
Entry Condition N
?
Process 1
Process 1 N
Condition
?
Process 2
Process 2
There is only one way to gain mastery of these techniques—by applying them to
problems. Take the time to review Appendix B and Appendix C once more; you will
see some applications of some of the techniques. The next chapter will continue the
discussion of some techniques not covered in this chapter.
8.10 Review Questions
1. What are the advantages of using diagrams?
5. Suppose that a Library Management System (LMS) is being constructed. The soft-
ware engineer is focusing on the information entity called Book. It was discov-
ered that a Book object could be in any of the following states: ordered, invoiced,
loaned, shelved, archived, lost, stolen.
• Propose a finite state machine and state transition diagram for the Book object
type.
• Compare the information conveyed by both diagrams.
More Diagramming
This chapter continues the discussion of diagramming techniques. The focus here is
on OOSE techniques for categorizing objects and specifying object behavior. As we
work toward constructing a software system via the object-oriented paradigm, iden-
tifying the object types and their interrelationships becomes very crucial.
The chapter includes:
• Introduction
• Fern Diagram
• Unified Modeling Language—a Cursory Introduction
• Object Relationship Diagrams—a Cursory Introduction
• Representing Details about Object Types
• Avoiding Multiple Inheritance Relationships
• Top-Down versus Bottom-Up
• Use-cases
• Event Diagrams
• Triggers
• Activity Diagrams
• Sequence Diagrams and Collaboration Diagrams
• Summary and Concluding Remarks
9.1 Introduction
OO modeling has two aspects, which may be examined separately—object structure
and object behavior.
Martin’s OO modeling pyramid (see [Martin 1993]) identifies four levels of infor-
mation engineering activities in the organization: enterprise modeling, business area
analysis, system design, and system construction; it also shows how object structure
analysis (OSA) and object behavior analysis (OBA) are related to these activities.
Figure 9.1 illustrates an OO modeling hierarchy based on Martin’s OO modeling
pyramid:
139
140 ◾ Software Engineering
• OSA relates to the structure of object types and classes comprising the software
system; it utilizes diagrams that convey object types, object associates, composi-
tions, and generalization. Correspondingly, class structure design includes class
identification, inheritance, and data structure.
• OBA concerns itself with the behavior of interacting objects in the software
system; it utilizes object flow diagrams, state diagrams, event diagrams, and
operation specifications. Correspondingly, method design includes operation
identification and method creation.
9.4 Fern Diagram
Fern diagrams are useful in depicting the object types that make up the system.
A fern diagram may be tree structured (where there is no multiple inheritance) or
network structured (where there is multiple inheritance). It typically includes aggre-
gation, component, and inheritance relationships but makes no distinction among
them.
The fern diagram is usually read from left to right or top to bottom (no arrow-
heads required). It is a useful technique, particularly where system is large and com-
plex. Figures 9.5 and 9.6 provide two illustrations.
144 ◾ Software Engineering
when instances may have particular meaning in the design as in Figure 9.7, where
Bruce is a software engineer and Karen is a staff member.
Figure 9.9 ORD for Tracking Sales Summary for a Large Marketing Company
Note: Since ORD can grow bulky rather quickly, it is common practice to deem-
phasize (or even sometimes omit) the details relating to attributes and operations
on the ORD. Some tools provide a plus sign (+) to expand a related section of the
diagram, or a minus sign (−) to contract a related section.
9.5.2 CRC Card
Recall from Section 7.8.10 that the class-responsibility-collaboration (CRC) card can
also be very useful in providing details about a class (which is the implementation of
an object type). For the purpose of comparison, Figure 9.10 summarizes the informa-
tion contained in an OSD as well as a CRC card.
148 ◾ Software Engineering
Traditionally, CRC cards were used manually to assist in the analysis of the soft-
ware system. Designers would literally prepare a deck of CRC cards for the object
types comprising the system (one CRC card per object type), and use them during
brainstorming sessions to assist in refining and finalizing the structure and role of
each object type of the system (review Section 7.8.10). To bring this technique to a
contemporary scenario, the CRC card can be easily stored electronically, and used in
not only refining but also modeling the software system.
9.6.3 Nested Generalization
The nested generalizations technique involves factoring one generalization first, then
the other, until all possibilities are covered. It involves the introduction of abstract
classes where necessary, in order to facilitate useful generalizations. Figure 9.14
illustrates a solution to the multiple inheritance problem of Figure 9.11, using nested
generalization. Notice the introduction of three abstract object types, namely Faculty,
Contract, and Staff. Also observe that as in the two previous approaches, the mini-
mum five categories of employees are facilitated.
While this approach is very straightforward, it is not always recommended, since
it often violates the principle of Occam’s Razor by significantly increasing the num-
ber of classes to be managed.
More Diagramming ◾ 151
9.7.1 Top-Down Approach
For the top-down approach, use the following guidelines:
1. Start by looking at a summarized picture: determine what are the main facets of
information are to be managed.
2. Break down the facets into constituents and sub-constituents as necessary
(avoiding unnecessary indentation levels).
3. Consider the facets as system modules or sub-systems, depending on the size of
your project. Then consider the constituents and sub-constituents as object
types.
4. A final step—not required for your ITC, but required for your database specifi-
cation—is to identify and define for each object type, a set of properties (data
attributes and allowable operations).
9.7.2 Bottom-Up Approach
For the bottom-up approach, use the following guidelines:
4. Organize related object types into logical groups. These groups will constitute
your super-types, system modules, and/or subsystems (depending on the com-
plexity of the project).
5. Integrate all modules and/or subsystems into one integrated system.
9.8 Use-Cases
The technique called use-case was first introduced by Ivar Jacobson in [Jacobson
1992], and has since then been embraced by the software engineering industry. A
use-case is a representation of all possible interactions (via messages) among a sys-
tem and one or more actors in response to some initial stimulus by one of its actors.
The use-case describes the functionality provided by a system, in order to yield a
visible result for one of its actors.
In constructing use-cases, a few terms need to be clarified:
• Actor: An actor is an external entity that interfaces with the system. Actors
could be individuals as well as other external systems that interact with the
system in question.
• Scenario: A scenario is a specific instance of a use-case. The use-case repre-
sents a set of scenarios that involve an actor’s engagement.
• Use-case Bundle: A use-case bundle refers to a group of related use-cases.
Bundling may be based on the fact that the use-cases share the same actor and/
or state, common entities, or common workflow.
The use-case allows the user to view the system from a high level, focusing on possi-
ble interactions between the system and its actors. In a way, use-cases should remind
you of data flow diagrams (DFDs) in functional design.
9.8.2 Types of Use-cases
Use-case diagrams can be constructed for different levels of system functionality
(they could be high-level or low-level):
Not all of this information may be relevant for each use-case; Figure 9.17 provides
some guidelines. Of course, the judgment of the software engineer will be important
in evaluating the scenario at hand and making the appropriate decisions.
9.9 Event Diagrams
[Martin 1993] describes event diagrams as a means of modeling the interrelation-
ship between operations and events, as summarized in this section. An event is a
noteworthy change in the state of an object. Events trigger operations. An operation
may change the state of an object thereby causing another event. The event diagram
shows these events and their associated operations.
9.9.2 Event Types
Just as there are object types, there are event types. The analyst is more interested
in event types than the number of occurrences of each event. Typically, event types
describe the following kinds of changes:
Control conditions are particularly useful when multiple trigger rules lead to a
specific operation, as illustrated in Figure 9.19. In the figure, Operation A, Operation
B, and Operation C must occur before Operation D can occur.
Events may also have subtypes and super-types as illustrated in Figure 9.20. In
this figure, Operation A has two sub-events.
158 ◾ Software Engineering
9.10 Triggers
[Martin 1993] also describes and trigger rules—two related concepts that have become
commonplace in contemporary software engineering environments. The line going from
an event to the operation(s) it triggers, represents a trigger rule. The trigger rule defines
the causal relationship between event and operation(s). An event may trigger one or more
operations; also, an operation may be caused by multiple triggers; Figure 9.21 illustrates.
Like objects types, operations may have subtypes and super-types as illustrated in
Figure 9.22. In the figure, trigger A has sub-triggers A1, A2, and A3.
More Diagramming ◾ 159
9.11 Activity Diagrams
As an alternative to event diagrams, UML supports activity diagrams. An activity dia-
gram describes how related activities (computations and workflow) are coordinated.
Bear in mind that activities are not existence independent, but are typically subservi-
ent to operations and other activities.
The activity diagram (graph) depicts activity states and the transition among activ-
ities in a workflow. An activity state represents the execution of a statement in a
procedure, or the performance of an activity in a workflow. The activity diagram con-
veys information about sequential activities as well as concurrent activities (threads)
related to an operation. Figure 9.23 shows the UML notations for activity diagrams,
while Figure 9.24 provides an example.
160 ◾ Software Engineering
The activity diagram may contain swim-lanes: Whenever the situation arises where
it is desirable to group related activities of a process into distinct partitions (these
partitions may represent functional areas in a business), vertical or horizontal lines
are used to define the partitions. The partitions are called swim-lanes. Swim-lanes
could have been introduced for the three concurrent threads in Figure 9.24 (they
were omitted since their introduction would have cluttered the diagram).
More Diagramming ◾ 161
• Object structure analysis (OSA) relates to the structure of object types and
classes comprising the software system.
More Diagramming ◾ 163
• Object behavior analysis (OBA) concerns itself with the behavior of interacting
objects in the software system.
• The UML defines standards for object structure as well as object behavior, and
represents the de facto standard for specifying software requirements.
• A fern diagram is an older technique for aggregation, component, and inheri-
tance relationships among object types, but makes no distinction among them.
• An ORD is a UML technique used to depict how object types relate to each other
in a software system.
• An OSD is a UML technique used to represent the structure of an object type or
class.
• A CRC card is an older technique for representing an object type and/or class.
• When designing a software system, multiple inheritances should be avoided.
Three techniques for resolving them are delegation using aggregation, delega-
tion and inheritance, and nested generalization.
• Object-oriented design may proceed in a top-down or bottom-up manner, each
strategy complimenting the other.
• A use-case is a UML representation of all possible interactions (via messages)
among a system and one or more actors in response to some initial stimulus by
one of its actors.
• An event diagram shows these events and their associated operations. The event
diagram typically includes events, triggers, and operations.
• An activity diagram describes how related activities (computations and work-
flow) are coordinated; this is the UML alternative to event diagrams.
• A collaboration diagram is a special class diagram that is used to depict various
interactions among objects that participate in an operation.
• A sequence diagram is another UML technique that shows how objects interact
with each other (via messages) with respect to time, in a two-dimensional chart.
Still, there are additional diagramming techniques that will be covered in upcoming
chapters. However, this and the previous two chapters have covered quite a bit. The
next chapter focuses on decision models for system logic.
9.14 Review Questions
1. Identify a medium-sized business enterprise that you are familiar with and answer
the following related questions:
• Identify the main business areas for your organization/institution of focus.
• Identify at least twelve (12) object types that would be included in an integrated
information system for the institution. Preferably, the object types should relate
to a specific business area.
• Construct an object-operation matrix for these object types.1-4 Propose an ORD
for the object types that you have identified.
• Construct a detailed OSD for each object type that you have identified.
• Propose a set of use-cases and activity diagrams for selected object types in your
model.
• Propose a collaboration for selected major operations in your system.
164 ◾ Software Engineering
3. What are the three strategies that can be employed to avoid this situation?
The previous chapter examined various system flow charts, which form part of the
inventory of diagramming techniques employed by the software engineer. This chap-
ter continues the discussion of diagrams by focusing on techniques used to represent
and manage system logic. In the traditional FO paradigm, decisions are represented
and analyzed by use of structured language (pseudo-code), decision tables, or deci-
sion trees. In the more contemporary OO paradigm, the traditional methods are still
applicable, but in addition to system rules. The main challenge is the identification
of these decision issues; they are not always obvious. Here, skill and experience in
information gathering are precious virtues.
The chapter will proceed with discussions in the following areas:
• Structured Language
• Decision Tables
• Decision Trees
• Which Technique to Use
• Decision Techniques versus Flowcharts
• System Rules
• Summary and Concluding Remarks
10.1 Structured Language
Decisions can be represented by use of structured English in pseudo-code-like man-
ner. Use of the standard control structures for selection, iteration, and recursion
is common (you should be familiar with these you’re your earlier programming
courses). As usual, indentation improves readability. It is assumed that you know
how to write a pseudo-code; therefore, nothing further will be said on this matter.
Decisions may also be presented in a tabular manner as illustrated in Figure 10.1.
165
166 ◾ Software Engineering
10.2 Decision Tables
A decision table is a tabular technique for describing logical rules. It serves as an aid
to creative analysis and expresses a business situation in a cause–effect relationship.
The decision table provides an excellent means of communication between users and
software developers. It forces the software engineer to be objective in the decision-
making process, and to consider all the decision alternatives. Figure 10.2 shows the
basic components of a decision table.
Figure 10.3 shows a faulty decision table for the situation described. In the figure, the
guideline that states that every rule must have an action is not met; the table is there-
fore incorrect. Figure 10.4 shows a correct decision table. Notice that two additional
conditions have been introduced.
Extended-entry decision tables are normally used to save space. Figure 10.7 provides
an example. Note that statement(s) made in the condition stub are incomplete so that
both stub and entry must be combined in order to obtain the intended message.
10.3 Decision Trees
The decision tree is useful when complex branching occurs in a structured decision
process, and it is essential to keep a string of decisions in a particular sequence. It
therefore shows the relationship among decision factors. This is not shown by a basic
decision table and is poorly handled by a flowchart.
The decision tree used in software engineering and systems analysis is not as
complicated as that used in management science, where probabilities and monetary
expectations are shown. Essentially, the tree shows conditions and actions in a com-
pletely structured decision process.
Two symbols used are in the construction of a decision tree: an oval shape is
used to symbolize if condition; a square shape symbolizes then action. Figure 10.9
illustrates a decision tree for a sale operation.
170 ◾ Software Engineering
Decision trees are preferred to decision tables when any of the following situa-
tions hold:
How would you compare decision tables with decision trees? To get you started, here
are some pointers:
The following disadvantages are associated with flowcharts (if a CASE tool that
supports the diagrams is used, these disadvantages are minimized):
10.6 System Rules
Figure 10.10 proposes a ten-step approach for the development of software using
the OO paradigm. The upper portion of the diagram relates to the requirements
specification (RS); this was introduced in Chapter 6 (Figure 6.1). The lower portion
relates to the design specification (DS) and the actual development; discussion of
these issues commences in Chapter 12. As can be seen, the specification of system
rules begins in the first portion of the schedule (item 5). These rules are subsequently
refined and applied appropriately during the second portion of the schedule (item
8). Rules form an integral part of the system logic. The rest of this section focuses on
essential details you should know about system rules.
The OO modeling hierarchy based on Martin’s OO modeling pyramid (first intro-
duced in Chapter 9) is repeated in Figure 10.11 for ease of reference. The conceptu-
alization depicted in the figure should help you to have a better appreciation of the
schedule presented in Figure 10.10.
Decision Models for System Logic ◾ 173
10.6.1 Rule Definition
A rule is a guideline for the successful and acceptable implementation of a process
or set of operations. Failure to observe the rule could result in unacceptable system
results. With traditional software engineering methodologies, rules are usually hidden
in the code of system functions. In the OO paradigm (thanks to non-procedural lan-
guages), we want to define rules as an integral (encapsulated) part of the definition
of (the operations of) a class. Code can then be automatically generated from this.
Rules are particularly helpful in designing the desired behavior of the system
objects. They represent the laws about how the business is run. Rules may be in any
of the following broad categories:
Rules must be rigorous, precise, concise, clear, and easily understood by end users.
Otherwise, they are not very useful and could lead to more complications in the
software system.
Decision Models for System Logic ◾ 175
10.6.3 Types of Rules
Lee’s [Lee 2002] refinement of Martin’s [Martin 1993] categories of system rules
include eight (8) categories as described below:
Data Integrity Rule: A rule of this type states that stipulated condition(s) about
an attribute must be true. For example, and attribute for marital status must have val-
ues corresponding to one of the following: married, single, widowed, separated,
or divorced. As an alternate description, data integrity rules are often called data
validation rules.
Relationship Integrity Rule: Such a rule states that something about a relation-
ship between two object- types must be true. For example, a department may be
restricted to no more than 25 employees. Or, there may be database integrity rules
(typically, entity integrity rule and/or referential integrity rule) that apply to certain
data fields (for more on this, see [Foster 2016]).
176 ◾ Software Engineering
10.8 Review Questions
1. What are the decision techniques that have been discussed in this chapter? What
circumstance(s) would warrant the use of each technique?
3. Develop a software application to address the problem, using Delphi, Visual C++,
C++ Builder, or any other RAD tool that you are familiar with. What is a system
rule? Briefly describe the different types of rules discussed.
4. Still considering the registration process at your institution, answer the following
questions:
4a. Assume that there is an operation called Student.RegisterCourse. What pre-
condition might exist for registering for a particular course?
4b. Assume that there is an operation called Student.FindGPA that calculates the
GPA of a student from and array field Student.Grades which contains the
student’s grades. Propose a derivation rule for the GPA.
Decision Models for System Logic ◾ 179
181
182 ◾ Software Engineering
• The technique shows areas where tradeoffs in time or resources might increase
the possibility of meeting major schedule targets.
In planning and preparing the PERT/CPM model for a project, the following steps
are required:
1. Itemize activities in a tabular form showing for each activity its immediate
predecessor, description, estimated time (duration).
2. Draw PERT Diagram using either the activity-on-arrow (AOA) approach or the
activity-on-node (AON) approach.
3. For each activity (event), calculate the earliest start time (ES), the earliest finish
time (EF), the latest start time (LS), and the latest finish time (LF). Also indicate
the activity’s duration (D).
4. Determine the critical path—the path through the network that has activities
that cannot be delayed without delaying the entire project.
5. Conduct a sensitivity analysis to aid and inform the resource management
process.
The critical path can be also used as a guide in resource planning and manage-
ment, as well as cost management. Since activities on this path cannot have non-zero
slack, the project manager is informed on what activities have to start on time, and
what activities may not.
Since this is less than the maximum the company can spend, crashing is
feasible.
Note: If (Crash Cost + Overhead Cost > Max. Management Can Spend), then
crashing is not feasible.
186 ◾ Software Engineering
Figure 11.5 Gantt Chart for the Sample Project Showing Critical Path Activities
Project Management Aids ◾ 187
With the advance of PERT/CPM, the Gantt chart is best used to emphasize the
critical path activities. The main advantages are:
Figure 11.5 illustrates the Gantt chart for the project discussed in the previous sec-
tion. On the diagram, the critical path activities are represented by grey bars, while
non-critical-path activities are represented by bars that are not shaded. A third color
code is often used to indicate the level of completion of certain activities.
The Gant chart, combined with the PERT diagram constitutes a powerful project
management tool. Following are some ways the two techniques may be employed:
• The lead software engineer can make informed decisions about assigning cer-
tain responsibilities to members of the software engineering team. Since critical
path activities cannot be delayed, such activities are usually assigned to stronger
members of the team. Conversely, non-critical activities with longer slack times
can be assigned to weaker members of the team.
• The project manager may use the techniques to assist in monitoring the prog-
ress of the project on a day-to-day basis.
• Should this become necessary, informed decisions about crashing can be made
by identifying the critical path activities.
Armed with this knowledge, you can now incorporate an impressive project
schedule in your requirements specification, and thus complete your second major
deliverable. The next section of the course discusses software design issues.
11.5 Review Questions
1. Clearly outline the steps involved in conducting a PERT-CPM analysis.
2. Explain how a PERT diagram and a Gantt chart may be used to assist in the man-
agement of a software engineering project.
Project Management Aids ◾ 189
4. LMX Software considering developing a new software product. The project activi-
ties identified so far are shown below:
Activity Predecessor Time (weeks)
A Prepare Requirements Spec -- 06
B Prepare Design Spec -- 08
C Prepare Development Team A, B 12
D Develop and Test Module 1 C 04
E Develop and Test Module 2 C 06
F Develop and Test Module 3 D, E 15
G Conduct Comprehensive Sys Test E 12
H Refine and Hand Over System F, G 08
The next six chapters will focus on the Design Phase of the SDLC. The objectives of
this phase are as follows:
The activities of this phase culminate into the third major deliverable of a software
engineering project––the design specification. Chapters to be covered include the
following:
This chapter provides you with an overview of the software design process. It is the
first on your experience towards the preparation of the next major deliverable in a
software engineering project—the design specification. The chapter proceeds under
the following captions:
193
194 ◾ Software Engineering
Figure 12.1 shows activities that go on during the design phase and what they
lead to. Bear in mind that typically, some of these activities go on in parallel, rather
than sequentially, so that feedback is constantly obtained and utilized. Below, these
activities are clarified, but fuller discussion (on each activity) will follow in this and
the next four chapters.
to maintain the software. As you will see later (Chapters 15 and 16), message design
is a very important component of operations design.
Security Design: This relates to the various authority constraints that different
users of the software product will have. How this is designed and the kind of security
mechanisms that may be required will depend to a large extent on the type of soft-
ware and its intended users. These issues will be addressed in Chapter 16.
The importance of software design as a precursor to software construction can-
not be over emphasized. Success in the former often leads to success in the latter.
Additionally, flawed design inevitably leads to flawed development. Note, however,
that in both cases, the implication is not necessarily reversible: You can have a flawed
construction after a good design. Here are three important rules worth remember-
ing (the first was learned from a former professor, E. K. Mugisa; the other two were
constructed out of experience).
Rule 1: The sooner you run to the computer, the longer you stay there.
Rule 2: If it does not work on paper, it simply does not work.
Rule 3: Keep your design simple but not simplistic.
12.2 Design Strategies
The design approach may be top-down or bottom-up. Top-down design is tradition-
ally associated with function-oriented design (FOD) and bottom-up with object-ori-
ented design (OOD). This is somewhat misleading, however, since it is possible to
have top-down design that is object oriented (this is sometimes recommended), and
bottom-up design that is function oriented.
Until the early 1990s, FOD was the more widely used strategy. However, since
the 1990s, OOD has gained widespread popularity, and is regarded today, as the pre-
ferred approach for many scenarios. Whichever strategy is employed, the quality fac-
tors mentioned in Chapters 1 and 3 apply here. Quality must be built into the design
from the outset. In the interest of clarity, these quality factors are restated here:
12.2.1 Function-Oriented Design
In FOD, the system is designed from a functional viewpoint, starting at the high-
est level, and progressively refining this into a more detailed design. The software
engineer explicitly specifies the what, wherefore and how of the system; subsequent
196 ◾ Software Engineering
development must also deal with the what, wherefore and how as separate issues to
be tied together.
FOD commences with the development of DFDs or POFs and other function-
oriented system flow charts mentioned in Chapter 8.
FOD conceals details of an algorithm in a function, but the system state (data)
is not hidden. In fact, there is a centralized system state, shared by all functions.
Further, changes to a given function can affect the behavior of other functions, and
by extension, the entire system.
FOD leads to a system of interacting functions, acting on files and data stores
(system state). Here, the principle of data independence (immunity of application
programs to structural changes of an underlying database) is very important. As you
will see later, violation of this principle could be catastrophic.
12.2.2 Object-Oriented Design
Chapter 4 outlines some fundamental tenets of OOSE. In this subsection, let us recall
and build on those concepts, by adding some additional insights.
In OOD, the system is designed from an object-oriented viewpoint, and consists
of objects that have hidden states (data) and methods; each object belongs to an
object type. The software engineer explicitly specifies the what of the system (in the
form of object types), but focuses on encapsulating the wherefore and how of the
system into its objects.
This course recommends that your OOD should commence with the develop-
ment of an information topology chart (ITC) and/or object flow diagram (OFD), then
employ other object-oriented diagramming techniques (such as ORDs, OSDs, transi-
tion diagrams, activity diagrams and other OO techniques) mentioned in Chapters
5, 8, and 9.
OOD conceals details of an object by encapsulating these details in an object type,
implemented as a class, but the behavior is not hidden. Moreover, changes to the
internal structure of an object type (class) are isolated from all other system objects.
OOD leads to a system of interacting objects, each with its own internal structure
and operations (interaction is facilitated through the operations). Here, the principle
of encapsulation (information hiding) is very important. Encapsulation to the OO
paradigm is what data independence is to the FO paradigm.
As you are aware, an object type is an entity that has a state (data structure)
and a defined set of operations that operate on that state. The state is repre-
sented by a set of attributes, thus giving the object a structure. Object behavior
is represented by operations, which are implemented by methods. The attributes
and operations of an object (type) are referred to as properties. Object types
are implemented as classes that encapsulate both data structure (attributes) and
behavior (operations). These concepts are illustrated in Figure 12.2; this figure
shows the UML (Unified Modeling Language) representation of an object type
called Employee. Such a diagram is called an object structure diagram (OSD), or
simply a class diagram.
Objects communicate with each other via messages. Messages are usually imple-
mented as procedure (or function or method) calls with appropriate parameters.
Overview of Software Design ◾ 197
• Every object must belong to a class from which it inherits all its properties (attri-
butes and operations). In object-oriented environments, a class is also an object,
and may therefore inherit properties from another class called the super-class
(also called the parent class or base class). Inheritance hierarchies can therefore
be established as illustrated in Figure 12.3. The inheriting class is called the
subclass, child class, or derived class.
• A class could inherit properties from more than one super-class. This situation
is referred to as multiple inheritance and is illustrated in Figure 12.4. Multiple
inheritance, while providing flexibility, can be a source of confusion; for this
reason, it is avoided in certain environments (e.g., Java).
• A class could be a super-class and a sub-class at the same time; this is also illus-
trated in Figure 12.4.
• Reusability of code
• Easier maintenance
• Enhancement of the understandability of the system
• Higher quality design
Overview of Software Design ◾ 199
Figure 12.4 Abbreviated UML Diagram of an Inheritance Network for a College Community
12.3 Architectural Design
Complex software systems are typically composed of subsystems and/or modules,
some of which may themselves be complete software systems. These components
must seamlessly integrate into the larger system. Architectural design addresses this
challenge by determining what the components are and how they integrate and
communicate with each other. The following are some considerations (factors) that
influence system architecture decisions:
Performance: If performance is a critical requirement, the architecture should
seek to minimize the number of components that have to cross-communicate (i.e.
employ more large-grain components than fine-grain components).
Security: If security is critical, the architecture should provide a stringent secu-
rity mechanism (preferably layered with the most critical resources at the innermost
layer).
Availability: If availability is a critical requirement, the architecture should include
controlled redundancies by making components as independent as possible.
Maintainability: If maintainability is a critical requirement, the architecture
should employ fine-grain, self-contained components that can be readily changed.
These requirements typically do not synchronize with each other, so trade-offs
will be necessary. Two issues of paramount importance in architectural design are
resource sharing and system control. We will discuss these issues in the next two
subsections, then close the section with a brief discussion on system components.
12.3.1.1 Repository Model
In the repository model, all shared resources (data and operation) are stored in a
central holding area (library). Each component has access to the repository. The
repository may consist of more than one library of shared resources. It may contract
or expand as the system is maintained during its useful life.
Examples of software systems that employ this approach include management
information systems, CAD systems, and CASE toolsets. Figure 12.5 also provides, by
way of example, an overview diagram of the CUAIS project (mentioned in earlier
chapters), assuming a repository model. In this approach, the central CUAIS database
and controller subsystem interfaces with all other subsystems.
Figure 12.5 OFD for the CUAIS Project, Assuming Repository Model
When one considers that the central database may be conveniently partitioned to
cater to the needs of each component, these disadvantages can be easily mitigated.
12.3.1.2 Client-Server Model
In the client-server model, a set of independent network servers offers services which
may be called on by members of a set of client systems. There is a server version of
the software system that typically runs on a designated server machine, and a client
version that runs on designated client machines. A network allows communication
among clients and servers.
Examples of software systems that employ this approach include management
systems with stand-alone components. Also, Figure 8.7 (of Chapter 8) provides a par-
tial overview of the CUAIS project without the central database. It is repeated here
(as Figure 12.6) for ease of reference. In this approach, each subsystem would oper-
ate independently, but with the capability of communicating with other subsystems
comprising the system.
Among the significant advantages of the client-server model are the following:
• More sophisticated software systems are required for resource management and
communication among the components (but the required technology is readily
available).
• Each server must take responsibility for backup and recovery issues.
• In situations where data is replicated in the interest of efficiency, maintaining
the integrity of the data is problematic.
Figure 12.6 Partial Information Topology Chart for the CUAIS Project
12.3.1.4 Component Model
The basic component model describes a pre-client-server approach where a set of
component systems resides on a given machine, typically in a network environment.
Obviously, this scenario can be easily facilitated in a client-server environment. But
observe that it could also be implemented in a non-client-server environment, for
example, a minicomputer environment (precisely what used to happen prior to the
introduction of client-server technology).
The component-based systems are made to communicate via interface programs
and/or the introduction of controlled redundancy. To illustrate, suppose that System-A
and System-B both use a database file, FileX. Let us assume that System-A owns
FileX and therefore has update rights. System-B has a copy of FileX, namely FileXp,
204 ◾ Software Engineering
which it uses for data retrieval only. An interface program could be responsible for
periodically copying FileX to FileXp, so that System-B “sees” accurate data.
Multi-component as well as single-user systems (on stand-alone machines) also
typify the component model. The approach is relevant whenever a complex software
system can be constructed by putting autonomous components together, or the sys-
tem can be decoupled into identifiable autonomous components. Figure 12.6 would
therefore also be applicable if the CUAIS project was being constructed using the
component approach.
Two significant advantages of component-based systems as described here are
local autonomy and fast response. Two drawbacks are the potential data integrity
problems that they pose, and their limited scope of applicability.
With advances in OOM, we have witnessed a resurgence of a revised component
model, called component-based software engineering (CBSE). As mentioned earlier
in the course (review Section 1.4), CBSE promises significant benefits to the software
engineering discipline.
12.3.2 System Controls
System control relates to how executing components are managed. There are two
approaches that you should be familiar with—centralized control and event-based
control
In the centralized control approach, one system component is designated as the
system controller and has responsibility for execution of the other components. Two
models are prevalent:
In the event-driven approach, the events control the execution of system compo-
nents. Two models are prevalent:
12.4 Integration/Interface Design
System integration is easiest in the waterfall lifecycle model. However, as you are
now aware, the reality is that quite often, one of the more pragmatic approaches to
Overview of Software Design ◾ 205
have many things that we sometimes take for granted—the World Wide Web, operat-
ing systems, database systems, telephone services, television, radio, aviation, etc. In
other words, without standards we’d all still be in the Stone Age, and software engi-
neering as we know it would not exist.
• Acknowledgments
• Introductory Notes
• System Overview
• Database Design Specification (Chapter 13)
• User Interface Design Specification (Chapter 14)
• Operations Design Specification (Chapter 15)
• Architectural Design Specification
• Product Documentation Specification (Chapter 16)
• Message Management Specification (Chapter 16)
• Software Development Standards (possibly as an appendage)
• Refined Schedule for Software Development and Implementation (review
Chapter 11)
12.6.2 How to Proceed
You proceed to construct the design specification by using the requirements specifi-
cation as your input. If the requirements specification is as accurate and comprehen-
sive as it should be, then this is all you need. Figure 12.8 provides basic guidelines,
but please note that this is not cast in stone: your approach may vary in some areas,
depending on the nature of the project. Also observe that this figure is a refinement
of the lower portion of Figure 10.10 (of Chapter 10).
If at this point, you are still not confident about putting a design specification
together, do not panic; after the next four chapters, and with practice, you will be in
much better shape. The tools available for putting this deliverable together are very
important. CASE tools (particularly OO-CASE tools) are excellent (review Chapters
1 and 2). However, even in their absence, you can still be very effective with basic
desktop processing tools.
Finally, please note that good software engineering will ensure that the require-
ments specification and the design specification both inform the final product docu-
mentation. Moreover, with experience, you will be able to work on both deliverables
in parallel rather than in sequence (review Section 12.1). An excellent product is a
credit to excellent design, not a coincidence.
The next few chapters discuss important components of the design specification
(DS). As you proceed through these chapters, please reserve the liberty to periodi-
cally examine Appendix C as this provides excerpts from a DS for the inventory man-
agement system of earlier mention.
210 ◾ Software Engineering
12.8 Review Questions
1. Outline the software design process, explaining each aspect.
3. Discuss the four approaches to resource sharing as covered in the chapter. For
each approach, cite advantages and disadvantages.
4. Examine Figure 12.5. What conclusions can you draw about the system repre-
sented? Also examine Figure 12.6. What conclusions can you draw about the system
represented?
6. Which deliverable comes after software design? What is this deliverable com-
prised of? How would you proceed to construct such a deliverable?
Database Design
If you review the OO modeling hierarchy (Figure 10.11) of Chapter 10, you will
notice that the left-hand side is characterized by the term object structure analysis
(OSA). This chapter focuses on OSA, or more precisely, object structure design. In this
chapter, we shall relax any distinction between database design and object structure
design, for the following reason: As established in the previous chapter, irrespective
of the software engineering paradigm employed, data and object structure design
are of paramount importance. By way of observation, most software engineering
environments embrace the idea of a relational database, upon which an OO user
interface is superimposed. This chapter presumes that convention, and provides you
an overview of the database design experience. For a more comprehensive coverage
of database systems, please refer to the recommended readings.
The chapter proceeds under the following captions:
• Introduction
• Approaches to Database Design
• Overview of File Organization
• Summary and Concluding Remarks
13.1 Introduction
A database is the record-keeping component of a software system. Database design
is critical part of software engineering. Underlying most software products is a
database that stores data that is critical to the successful operation of the software.
Figure 13.1 provides you with some examples of this. In most cases, the database is
superimposed by a user interface, and may therefore sometimes not be obvious to
the end user. However, whether it is obvious or not the database component is real
and potent. A full discussion of database design is beyond the scope of this course; it
is best done in a course in database systems. This chapter provides you with a useful
overview of the territory. Much of the information presented here is really a summary
211
212 ◾ Software Engineering
of more elaborate details available in the author’s work on database systems (see
[Foster 2016]).
Database design is very crucial as it affects what data will be stored in and there-
fore accessible from the software system. Hence, it affects the success of the system.
Poor design leads to the following software flaws:
Poor database design puts pressure on the software development team to pro-
gram its way out of the poor design. By contrast, good design leads to the exact
opposite of these conditions induced by poor design.
Some objectives of database design include the following:
• Conventional files
• Database approach which includes
o Relational model
o Object-oriented model
o Hierarchical model
o Network model
o Inverted List model
13.2.1 Conventional Files
Figure 13.2 illustrates the idea of conventional file approach. Application programs
exist to update files or retrieve information from files.
This is a traditional approach to database design that might still abound in very
old legacy systems (to be discussed in Chapter 18). You may use this approach if
the software system is already designed using this approach, and the task is to
maintain it.
Note: Do not attempt to redesign the software system without management con-
sent. Also, be aware that people (including managers) sometimes get annoyed
with a software engineer who walks around looking for every problem to fix.
Ironically, fixing problems often created by human ineptitude or limitations is an
integral part of your job. Just be discreet in the execution of your job (Chapters 18
and 19 provide more guidelines on how to conduct yourself on the job).
214 ◾ Software Engineering
13.2.2 Database Approach
In the database approach, a database is created and managed via a database man-
agement system (DBMS) or CASE tool. A user interface, developed with appropriate
application development software, is superimposed on the database, so that end users
access the system through the user interface. Figure 13.3 illustrates the basic idea.
Of the five methodologies for database design, the relational model and the OO
model are the two that dominate contemporary software engineering; this is expected
to continue into the foreseeable future. The other three approaches are traditional (from
the 1960s and 1970s), but occasionally show up in legacy systems. They will not be
discussed any further; for more information on them, see the recommended readings.
Database Design ◾ 215
Note: Step 6 belongs to the field of database systems and will not be explored
any further in this course. However, you should appreciate the close nexus
between database design and software engineering.
13.2.4 Identifying Relationships
Identifying relationships among entities (object types) also requires skills, experi-
ence, and practice, but can often be intuitively recognized by observation. To identify
relationships, you have to know what a relationship is and what types of relation-
ships there are. Your course in database systems will elucidate these issues to some
level of detail. For now, you may consider a relationship as a mapping involving two
or more information entities (or object types) so that a data item (an object) in one
relates in some way to at least one data item (object) in the other(s) and vice versa.
There are seven types of relationships:
If E1 and E2 are two information entities (or object types) and there is a 1:M
relationship between E1 and E2, an alternate way of describing this situation is
to say that there is an M:1 relationship between E2 and E1.
• How many data items (objects) of E1 can reference a single data item (object)
of E2?
• How many data items (objects) of E2 can reference a single data item (object)
of E1?
To test for a component relationship between any two relations (object types) E1 and
E2, ask and determine the answer to the following questions:
For a subtype relationship, the test is a bit more detailed; for entities (or object types)
E1 and E2, ask and determine the answer to the following questions:
The test is identical for object types, except that in the object-oriented paradigm,
the term instance is preferred to “data item.” Possible answers to the questions are
always, sometimes, or never. The possibilities are shown in Figure 13.5.
Let us now turn our attention to the O-R diagram. The symbol for object type
(mentioned in Chapter 9) is also used in the ORD, and replaces the entity symbol (as
you will soon see, they are actually similar). Assuming the UML notation, the follow-
ing guidelines apply:
participation of each object type (or entity) in the relationship. The role that each
object type plays in the relationship is also indicated next to the object type.
Since the object symbol automatically incorporates object attributes, there is therefore
no need for an attribute symbol. In any event, including attributes and operations on
the ORD tends to clutter the diagram rather quickly. It is therefore recommended that
you omit this detail from the diagram for very large and/or complex systems. The
upcoming subsection will suggest a creative and elegant way to represent attributes
and related operations for object types comprising a system.
Figure 13.10 illustrates an ORD (using UML notation) depicting aspects of a col-
lege environment. According to the diagram, Student and Employee are subtypes of
College Member. Additionally, Employee is a composition of Employee Personal
Info, Employee Work History, Employee Academic Log, Employee Publication,
Employee Extra Curricular, and Employee Dependents Log.
Once, created, the ERD/ORD (or its equivalent) must be maintained for the entire
life of the software system. If you are fortunate to be using a sophisticated CASE tool
that automatically generates the diagram from the current database, then this will not
be a problem for you.
13.2.6 Implementing Relationships
Once the ERD has been developed, the next logical step is to figure out how to
account for each relationship of the ERD in the actual database that must be designed
and implemented. Assuming the E-R model, relationships can be implemented by fol-
lowing a set of guidelines as outlined Figure 13.11.
Take some time to carefully study these strategies outlined in Figure 13.11; you
will gain more experience with them (or probably have already done so) in your
database systems course. It is imperative that you learn them and know how to apply
them; with practice, you will. Figures 13.12 through 13.15 provide illustrations of the
application of these strategies but your course in database system will provide more
opportunities for applying them. Here is a summary of each of these figures:
F key Address
Database Design ◾ 233
Figure 13.18 Illustrating Relative Access via Linked List (based on Last-Name) or Direct Access
via Student ID
This is merely an introduction to database design from the context of software engi-
neering. Study of database systems is a field of computer science, so a full discussion
is beyond the scope of this course (please see the recommended readings). Appendix
C provides you with a real example of the database specification for the Inventory
Management System of earlier mention. The next chapter discusses design of the
software user interface.
13.5 Review Questions
1. How important is database design? Cite four concrete examples of database play-
ing an important role in computer software.
2. Identify the problems that are likely to occur due to poor database design.
5. The following is an excerpt from the requirements for a college academic admin-
istration system:
• Courses are offered by various departments without any overlap (a department
offers between 5 and 30 courses).
• The courses make up academic programs, in some instances a course may occur
in more than one program. Academic programs are offered by departments (no
overlap allowed).
• A faculty typically consists of several departments.
• A lecturer is scheduled to lecture at least two courses. Each course is lectured in
a specific lecture room.
• A student may register for several courses; typically, a course is pursued by a
minimum of fifteen students.
• Each student is registered to one department only.
From the information given, develop an ERD for the system.
Database Design ◾ 235
User interface management is a field of computer science that has been developed
and given much attention in recent years. Indeed, courses in this area have become
prevalent in many curricula of Computer Science and/or other related fields. Several
texts have been written on the subject. It is therefore impossible to cover all that
is entailed in one chapter. However, since user interface design is a very important
aspect of software design, a brief summary of the subject matter is provided here.
The chapter proceeds under the following subheadings:
• Introduction
• Types of User Interfaces
• Steps in User Interface Design
• Overview of Output Design
• Output Methods versus Content and Technology
• Guidelines for Designing Output
• Overview of Input Design
• Guidelines for Designing Input
• Summary and Concluding Remarks
14.1 Fundamental Concepts
A user interface is the portion of computer software that facilitates human–computer
interaction (HCI). Moreover, it is the window through which end users access the
software system. As you are aware, most software systems have user interfaces. User
interface design is therefore applicable to all software systems that require user inter-
action. It is through the user interface that users communicate with the software and
with each other. Many good software products have suffered neglect in the market-
place, due to poor user interface design. On the other hand, many mediocre prod-
ucts have managed to survive market competition, due to attractive user interface
design and aggressive marketing. Proper user interface design is therefore critical to
237
238 ◾ Software Engineering
the success of a software engineering project, since this could determine the user
acceptance and by extension, the success of the software system in the marketplace.
There are five main aspects of a user interface. These are:
• User Needs
• Human Factors
• Interface Design
• Interface Programming
• Environment
A well-designed user interface will meet the requirements in all of these areas. It will
enhance effective use of the software, thus promoting end-user confidence in the
product. Let us briefly look at each aspect.
14.1.1 User Needs
Among the basic user needs that the user interface must address are the following:
• Functionality—the capacity provided the user to carry out desired tasks and
activities.
• Flexibility—the provision of alternative approaches to solving a problem.
• Effective Control—users like to feel that they are in control and not the soft-
ware system.
• Reliability—the software must offer the user some assurance that it will facili-
tate solution to certain problems in a consistent manner.
• Security—controlled access to the overall system, specific resources of the sys-
tem, and data managed by the system.
• Consistency of Design —the user must be able to anticipate system behavior;
also, information must be presented to the user in a consistent manner.
• Standardization—the user interface must conform to established standards for
the software.
• Intelligibility—the user interface must promote easy learning and understand-
ing of the system.
14.1.2 Human Factors
Good user interface design must be guided by the following human factors:
• Good Color Scheme: The color scheme must not create pressure on the eye,
but must be welcoming.
• Minimal Assumptions: The number of blanket assumptions about users should
be kept at a minimum.
14.1.3 Design Considerations
The following considerations should be factored into the design and construction of
a user interface:
Up until the mid-1990s, menu-driven interfaces were the most frequently used,
dominating the arena of business information and application systems. Since the late
1980s, GUIs have become very popular, and clearly dominate user interfaces of the
current era. Of course, the approaches can be combined. An excellent example of
a software system that combines all three user interface categories is the System i
operating system. Being traditionally command-based, modern versions of the oper-
ating system fully support all three user interaction categories. Another example
of this hybrid approach is the Windows operating system. Though predominantly
GUI-based, you are allowed to key in specific system commands if you so choose.
The operating systems Linux and Unix tend to be the opposite of Windows. Though
User Interface Design ◾ 241
1. Put system objects (structures and operations) into logical groups. At the high-
est level, the menu will contain options pointing to summarized logical groups.
2. For each summarized logical group, determine the component sub-groups
where applicable, until all logical groups have been identified.
3. Let each logical group represent a component menu.
4. For each menu, determine options using an object-oriented strategy to structure
the menu hierarchy (object first, operation last).
5. Design the menus to link the various options. Develop a menu hierarchy tree or
a user interface topology chart (UITC) as discussed in Chapter 8.
The partial UITC of chapter six has been repeated in Figure 14.3 for ease of refer-
ence. This chart relates to the CUAIS project of earlier discussions. Also recall from
Section 8.4.2 that the UITC is comparable to Schneideman’s Object-Action Interface
(OAI) model for user interfaces [Schneiderman 2017].
242 ◾ Software Engineering
Figure 14.3 Partial User Interface Topology Chart for the CUAIS Project
User Interface Design ◾ 243
Note that construction of a command-based user interface requires much more effort
than a menu or graphical interface. This was not always the case: In the early days
of visual programming, it was quite arduous to construct a GUI using traditional pro-
cedural programming languages. However, with the advent of object-oriented CASE
and RAD tools, constructing GUIs is much easier than before.
1. The output must serve the intended purpose: It must not be redundant and it
must be in the required form, if it is to fulfill its desired purpose.
2. The output must fit the user and the situation: For decision support systems, it
must fit individual user needs; for management information systems, it must fit
functional needs; for expert systems, it must reveal expert analysis as required
by the human expert; for CASE and RAD tools, it must generate accurate and
accessible code; and so on.
User Interface Design ◾ 247
14.5.1 Printed Output
Printed output is one of the most common output methods (the other being monitor
display). It is inexpensive and can serve a wide and varied user population.
For printed output, required volume also affects choices with respect to the related
technology. To illustrate, the type of printer depends on the print volumes required,
the speed required, frequency required, quality required.
Reports must be properly formatted, according to established standards. Usually, each
operation spec (for system output) has associated output layouts for the programmer.
14.5.2 Monitor Display
Monitor display is the other most common output method. Apart from an initial cost
of acquiring a visual display unit (VDU) or work station, it is very fast and economi-
cal. Additionally, thanks to GUIs, monitor display is very attractive and effective in
enhancing the user’s understanding of system outputs.
Monitor display is also very convenient: the user can assess information before
transferring to more expensive output medium e.g. printing. One limitation of moni-
tor display is that the number of users that can benefit is to some extent, constrained
by the available number of monitors. Of course, monitor display must conform to
established standards.
248 ◾ Software Engineering
14.5.3 Audio Output
Audio output is usually in the form of voice to a single user or multiple users in a
building. This method of output has become quite common. It is useful in situations
where users must be free of encumbrances, or where a message on an intercom is
adequate communication to the end users.
Increasingly, individuals who have physical challenges and executives with very
busy schedules are finding audio-based systems very convenient and helpful.
14.5.4 Microfilm/Microfiche
Microfilm/microfiche is traditionally used to store large volumes of data. It takes up
approximately 1% of space a printed copy would take. Special machines are required
to create microfilm files. Projector-like machines are then used to magnify the images
so that they can be read.
Traditionally, microfilm technology has been used in legal offices, civil engineer-
ing, colleges, universities, and banks. The technology comes with a high price tag,
since special equipment are required. It can also be time consuming to access infor-
mation from microfilm machine.
1. Where possible, use interactive prototypes to help the user to conceptualize the out-
put being designed at an early stage. This may be supported by the software design
tool being used (e.g. CASE tools or presentation software with hyperlinks).
2. Keep screens simple and attractive.
3. Keep screen presentation consistent.
4. Facilitate user movement among screens.
5. Control the duplication of data on screens (duplicate only when necessary).
• Scrolling
• Calling up detail (e.g. position cursor and press <Enter>)
• On-screen dialog
• Function Keys
Figure 14.5 illustrates these strategies. Screen movement could also be prototyped
(review Section 7.6) and used as a good source of feedback from prospective users
of the system.
10. Facilitate easy user movement among screens and reversibility of actions.
11. Control the duplication of data on screens (duplicate only when necessary).
12. As much as possible, the screen must match the associated form from which
data will be entered.
13. For color monitors, avoid outrageous color schemes.
14. Input screen design must conform to established standards of the organization.
15. The principles of forms design, discussed in Chapter 2, must apply to the associ-
ated form. In particular:
a. The form must fulfill its intended purpose i.e. it must collect the data required.
b. It must be trivially easy to fill out the form with negligible or no error.
c. The form must be attractive.
d. The form may be designed via an appropriate software product and reviewed
before implementation.
• The user interface is the window through which end users access the software sys-
tem. It is critical that this component of the software system is properly designed
as failure to do so could compromise the success of the software product.
• In planning the user interface, the software engineer must dive due consider-
ation to the end user needs, human factors, design factors, environmental fac-
tors, and actual programming of the interface.
• There are three common types of user interfaces: command interface,
menu-driven interface, and graphical user interface (GUI). Your approach
in designing the interface will be influenced by the type of interface that is
required.
• The software engineer must observe guidelines for designing system input as
well as system output. Of course, the steps taken will be constrained by the type
of input/output that is required.
There is much more that could be said about user interface design, but this chap-
ter has given you an overview that you should find useful. In fact, many computer
science programs include a course in this area. Before moving on, take a look as
the user interface design section of the Inventory Management System project of
Appendix C. The next chapter will discuss operations design.
14.10 Review Questions
1. What is a user interface? Why is user interface design important?
2. What are the five aspects of user interface design? For each of these areas, dis-
cuss the factors to be considered when a user interface is being designed.
254 ◾ Software Engineering
3. Compare the three categories of user interfaces in terms of response time, ease of
usage, and complexity of design.
4. Construct a grid that shows how various interaction styles apply to the different
categories of user interface.
6. Construct a grid that compares the various output methods with respect to advan-
tages and disadvantages of each.
7. State four basic guidelines for designing printed output. State four basic guidelines
for designing screen output. State four basic guidelines for designing software input.
Operations Design
This chapter discusses operations design as an integral part of the software design
experience. The chapter proceeds under the following captions:
• Introduction
• Categorization of Operations
• Essentials of Operations Design
• Informal Methods for Specifying Operation Requirements
• Formal Specification
• Summary and Concluding Remarks
15.1 Introduction
Whether the functional approach or the object-oriented approach is employed, ulti-
mately, software systems will necessarily have operations. An important aspect of
software engineering is the preparation of operation specifications for the operations
of a system. Hence, operations design forms a very important component of software
design.
The spin-off from operations design is a set of operation specifications: each
operation has an operation specification (commonly abbreviated as operation spec),
which can be pulled by a programmer and used in developing the required opera-
tion (program). The more thorough the spec, the easier is the required programming
effort.
In OOD, the operations are implementation of the verbs that link objects and
allow communication among these objects. A common practice is to make the opera-
tions singular (monolithic) in nature, thus further simplifying the subsequent devel-
opment and maintenance processes. Further, complex operations are made to employ
the services of other (simpler) operations, thus promoting code reuse and efficiency.
As established from earlier chapters, we refer to the analysis of operations (and
other related issues) as object behavior analysis (OBA). You will recall that in Chapter
13, we used the corresponding term object structure analysis (OSA) to describe
255
256 ◾ Software Engineering
analysis relating to data structures of object types comprising the software system.
Take some time to review the OO modeling hierarchy (Figure 10.11) of Chapter 10.
What you need to remember is that OOD boils down to two things—OSA and OBA.
On the other hand, in FOD, the functions typify (functional) activities in the
organization and facilitate management and retrieval of information; verbs may be
combined in a single function. This sometimes leads to more complex functions, with
a significantly lower level of reusability of code.
Example 15.1 ontrasting the FOD Approach with the OOD Approach
C
for Operations DesIGN
For a typical information entity in a software system, the operations may be
defined as follows:
In OOD for a given database entity, the legitimate operations may be: ADD,
DELETE, MODIFY, RETRIEVE, QUERY, and LIST. In FOD, for the same entity,
the operations (typically referred to as functions) may be MAINTAIN, QUERY,
LIST, but may involve other entities.
15.2 Categorization of Operations
Categorization of the operations is a useful strategy, particularly during subsequent
software development:
• Some operations will be more complex than others, and will therefore need
longer development time.
• Also, by knowing about the relative complexity of operations making up a sys-
tem, a project manager can make prudent decisions about work schedule.
• Some operations will be more crucial to the overall software product than oth-
ers; if this information is known, important prioritization decisions can be made.
While the first two steps of Figure 15.1 may be considered optional, the latter two
are essential, as they help in guiding decisions about the project during the develop-
ment phase.
15.4.1 Traditional Methods
Traditional informal methods of operations specification include program flow-
charting, the use of IPO charts, decision techniques, and pseudo-coding (review
Chapters 8 and 10). The main advantages of these approaches are:
• Visual aid (in the case of IPO chart and program flow chart)
• Flexibility and creativity in treating unanticipated or complex situations
258 ◾ Software Engineering
Notwithstanding the advantages, these approaches also have inherent flaws, some of
which are stated below:
In view of the foregoing, the IPO chart of Figure 15.2 should illustrate the limitations
of the technique. The figure shows an IPO chart for an operation that facilitates addi-
tion, modification, or deletion of employee records in a human resource management
system (HRMS), or some other system requiring employee information. Traditionally,
operations that provide such functionalities (addition, update, and deletion) were
called MAINTAIN operations, and appeared frequently in software systems designed
in the FO paradigm.
• Use-case Diagrams
• State Diagrams
• Activity Diagrams
• Sequence Diagrams and Collaboration Diagrams
1. The required output formats and/or screen formats could be (and are usually)
designed and attached.
2. Validation rules are itemized and special notes are itemized.
3. The outline could be in the form of a pseudo-code (as illustrated in Figures 15.11
through 15.14), a flowchart, a Warnier–Orr diagram, or an activity diagram.
Figure 15.10 provides an excerpt from the object/entity specification grid (O/ESG) of
Chapter 13, repeated here for convenience; in the current context, we shall concentrate
on the Employee object type (entity), but recall from Figure 13.16 in Chapter 13, that
two referenced entities are Department and Classification. Figures 15.11 through
15.14 provide sample EOSs for an ADD operation, an UPDATE operation, a DELETE
operation, and an INQUIRE operation, respectively.
Three additional points to note from the illustrations (Figures 15.11 through 15.14):
1. The algorithms for adding, modifying and deleting data items (records) have
been standardized and can be used for different scenarios. How they are imple-
mented will vary for different software development tools.
2. The term Virtual Data Collection Object, as used in Figure 15.14, refers to any
user interface widget that may typically be employed by a RAD or CASE tool
(for instance, in Delphi, we could us a DB-Grid or a DB-Image; in Team
Developer, we could use a Child-Table).
266 ◾ Software Engineering
3. The term logical view has also been introduced in Figure 15.14. A logical view is a
virtual database object which stores an access path to data contained in persistent
database tables. In the example, we have a join logical view, based on the fact that
there is a relationship between E2 (HR_Employee_BR) and E1 (HR_Department_
BR) on the one hand, and E2 (HR_Employee_BR) and E3 (HR_Classif_BR) on
the other (see Figure 15.10 and review Figure 13.16 of Chapter 13). You will spend
much more time working with logical views in your database systems course.
• It allows the software engineer to pack all the relevant information about an
operation into one spec so that development is easy.
• It provides information that allows the project manager to make intelligent
work assignments during software development.
• Under the operation outline section, the software engineer has the flexibility of using
a program flowchart, a pseudo-code, a Warnier–Orr diagram, or an activity diagram.
• Important information such as I/O requirements, categorizations, etc. can be
included in the spec.
• The whole process of specifying an EOS for an operation can be automated by
developing a software system for that purpose.
15.5 Formal Specifications
A formal specification of software is a specification that is expressed in a language
whose syntax and semantics have been formally defined.
Formal specification methods have been developed and are widely used in soft-
ware engineering. Several program description languages (PDLs) have been pro-
posed and used in software engineering. Some examples are mentioned below:
One significant advantage of formal methods is that they force precise, unam-
biguous specification of software. Because of this, formal methods are widely used
in areas of software engineering where precision is required. Two examples of such
areas are hardware synthesis and compilation. However, to do justice to the field, fur-
ther exploration of formal specifications is best treated in a course on formal methods.
• Operations design is an integral part of the OBA process (assuming the OOD
paradigm). The spin-off from operations design is a set of operation specifica-
tions: each operation has an operation specification that outlines the blueprint
for the operation.
• Categorizing operations is very useful particularly during the development
of the software system. Each operating can be categorized by considering its
272 ◾ Software Engineering
alignment with quality factors or importance to the software system, the level
of importance of the operation, and its relative complexity.
• Each operation spec must have a unique name, followed by unambiguous
guidelines that will help a programmer to easily write the actual operation.
• Informal methods of operations specifications include (but are not confined to) the
following: traditional methods (program flow charts, pseudo-code, and IPO charts);
Warnier–Orr diagrams; UML diagrams (use-case diagrams, state diagrams, activity
diagrams, sequence diagrams, and collaboration diagrams); EOS formulations.
• Formal methods of operations specifications include (but are not confined to)
PSL, ADA/PDL, Z-specifications, Larch specifications, B specifications, and Lotos
specifications.
Armed with the software development standards, architectural specification, the data-
base specification, the user interface specification, and the operation specification,
you are almost ready to embark on the actual software development with confidence.
Bear in mind that if you are using an OO-CASE tool, actual design and development
may be merged into one modeling phase, since many of the diagrams may be execut-
able diagrams. We still have a few design issues to cover, and these will be discussed
in the next chapter.
15.7 Review Questions
4. Examine Figure 15.6 and thoroughly explain all the state transitions and the opera-
tions that trigger them.
Operations Design ◾ 273
5. Examine Figure 15.7 and thoroughly explain the behavior of the ADD Employee
operation.
We have looked at all the major aspects of software design. However, there are a
few outstanding areas that need some attention. This chapter covers these areas as
outlined below:
• System Catalog
• Product Documentation
• User Message Management
• Design for Real-time Software
• Design for Reuse
• System Security
• The Agile Effect
• Summary and Concluding Remarks
275
276 ◾ Software Engineering
• Name, description, proper coding, and aliases of each information entity (or
object type) in the system
• Name, description, proper characteristics (e.g. type and length), and coding of
data element in each information entity
• Required editing and integrity checks on data elements
• Indication as to whether a data element references another element in another
entity (object type) and the type of reference (relationship)
The catalog can then be accessed by the software engineer. This approach has
become mainstream in contemporary software engineering.
Whichever of the first two methods is employed, a top-down approach to defining
the system catalog is recommended:
• You can obtain assorted views of the system e.g. entity-operations lists; oper-
ation-entities lists; entity-elements lists; terms and aliases; list of system opera-
tions; list of system entities; etc.
• You can also obtain information about relationships. In the case of automatic
creation, you might even be able to obtain an ERD/ORD from the catalog.
• You will also be able to obtain assorted views of the systems business rules on
a system-wide basis, by operation, or by entity (object type).
The system catalog is very effective in guiding the design phase (particularly with
respect to database, operations, menu interface, and business rules). It can also
be used as a management tool in design, development, and maintenance phases.
Figure 16.1 provides a very basic illustration of the kind of information that a system
catalog could provide.
16.2 Product Documentation
Product documentation typically involves three main areas: the system help facility,
the users’ guide, and a more technical document often referred to as the system guide.
Of course, there are variations according to the product, as well as the organization
of responsibility. For instance, the users’ guide and system guide may be merged as
one document or set of documents. Also, if the software system is very large and
complex, there may be a product overview document.
For other categories of software such as development tools for software engineer-
ing, this distinction (between technical and nontechnical) is not relevant. What is
required here is a comprehensive set of documents that the user (in this case the
software engineer) can use. Typically, the set begins with a product overview, then
depending on the complexity and scope of the product, there is a document or set
of documents for different aspects of the software. This may also be supported by
comprehensive (set of) system manual(s). In the era of command-based user inter-
faces, system manuals were very voluminous. Nowadays (in the era of GUIs), they
are not as bulky.
280 ◾ Software Engineering
• Error Messages inform the user that an attempted activity is invalid, or an entry
is invalid. For example, keying in an invalid date, or attempting to access a data
item (record) that does not exist, should each elicit a software response that that
activity is not permissible at that point in time.
• Status Messages inform the user on the current state of an ensuing activity, for
example displaying the number of records read from a database file.
• Warning Messages alert the user that an attempted activity could result in
problems.
There should be some standard as to how and where on the screen, user messages
will be displayed. Two possibilities are, on the last line of the screen, or in a pop-up
window.
In message management, the software engineer specifies how messages will be
stored, retrieved, and displayed to users of the software. In many scenarios, message
management is addressed in predetermined software development standards (review
Chapter 12).
• Each application operation stores and manages its own user messages. This is
the easy way out. The main problems are:
o It promotes inconsistencies.
Other Design Considerations ◾ 281
Obviously, the second approach is preferred to the first, since it provides more
flexibility and control, particularly as the size and complexity of the project increases.
It also leads to a more maintainable software product.
16.3.2 Message Retrieval
If the operation-confined approach described above is employed, message retrieval
is not an issue. However, if the system-wide approach is employed, then it might be
prudent to define and specify an operation to retrieve user messages and return them
to calling operations. This retrieval operation would accept an input argument of the
message identification code and return it with an additional argument containing the
message text. The calling operation would determine how and where that message is
displayed, preferably based on established standards (Chapter 12).
1. Stimulus Identification: Identify the stimuli that the system must respond to
and the appropriate response to each stimulus.
2. Timing Constraints: For each stimulus and response, establish a timing
constraint.
3. Aggregation: Aggregate stimuli into classes (categories). Define a process for
each class of stimuli, with allocation for concurrent processes.
4. Algorithm Design: Design the required algorithm for each stimulus-response
combination. By aggregation, derive algorithms for processes.
5. Scheduling: Design a scheduling system that will synchronize processes accord-
ing to established (time) constraints.
6. Integration: Establish a method of integrating the system into a larger system
if necessary, via a real-time executive.
Since these techniques were introduced earlier (Chapter 8) and will be explored in
other advanced courses (such as Compiler Construction), they will not be discussed
further.
16.4.2 Real-Time Programming
Real-time programming remains an exciting (and sometimes lucrative) arm of
software engineering. Real-time programming is typically done using:
• A real-time clock
• An interrupt handler
• A scheduler
• A resource manager
• A dispatcher (responsible for starting and stopping processes)
16.6 System Security
System security has always been and will continue to be an integral part of software
design. There are three levels of security that should be addressed:
Among the categories of software that employ a system-level user account are the
following:
For these systems, the user accounts are stored in an underlying database file. When
the user attempts to log on, this file is accessed to determine whether this is a
legitimate user. If the test is successful, the user is admitted in; otherwise, an error
message is returned to the user. Of course, the database file must be appropriately
designed to store all required details about the user.
Of course, not all software products require the use of system-level user accounts
as described above. Some products make use of user accounts already defined and
stored in the underlying operating system. Others use no system-level security at all.
Desktop applications and multimedia enabling software are two categories of soft-
ware that embody this latter approach.
As mentioned earlier, a logical view stores the definition of the virtual database
file (table), but stores no physical data. It is simply a logical (conceptual/exter-
nal) interpretation of data stored in core database files. Figure 16.3 provides an
example of a situation requiring logical views. You will learn more about, and
develop a better appreciation of logical views after you have completed a course
in database systems.
Single Document: Having a single design specification ensures that the software
system is kept close to its original mission. The software engineer(s) will carry the
responsibility of crafting and preserving a design specification that comprehensively
and accurately represents the software system at each stage of its existence. Here are
two related considerations:
• The system catalog is a data dictionary of the software system. It contains infor-
mation such as the name, description, and characteristic details of the main
system components including information entities and operations. It may also
contain definition of system rules.
• With a sophisticated DBMS suite or CASE tool, the system catalog is automat-
ically created and maintained by the software development tool. In a more
primitive software development environment, the catalog can be created and
maintained as static word processing documents or dynamic files maintained by
utility programs.
• Once created, the system catalog should be carefully maintained as it contains
useful information about the software system.
• Software documentation typically includes a help facility, a user’s guide, and a
system guide.
• The help facility may be panel-by-panel, context sensitive, or hypermedia-based.
Whichever approach is used, the help facility must be carefully planned.
• The system guide is a technical document, for software engineers and/or man-
agers of the system. The user’s guide is a nontechnical document for end users.
Both should be carefully planned.
• User messages may be error messages, status messages, or warning mes-
sages. They are designed to assist the user in successfully using the software
system.
• User messages may be managed on an operation-by-operation basis, or via a
system-wide message file. The latter approach is preferred as it provides more
flexibility to the software engineer, and leads to fewer problems during software
maintenance.
• Real-time software systems are hardware-intensive systems that operate in real
time based on hardware signals and responses, rather than human intervention.
A real-time system passes through the stages of stimulus identification, timing
constraints, aggregation, algorithm design, scheduling, and integration.
Other Design Considerations ◾ 287
By following the principles and methodologies in this and the previous four chap-
ters, you are now in a position where you can confidently put together a design spec-
ification for your software system. Remember, we are assuming reversibility between
phases of the SDLC as well as between stages within any given phase of the SDLC.
The alternative to this assumption is to assume the waterfall model; however, as was
mentioned in Chapter 1, this model is particularly problematic, especially for large,
complex systems.
Take some time to review the ingredients of the design specification (see Chapter
12), and the various issues discussed in this division of the text. Then examine the
sample design specification of Appendix C with fresh eyes. You have been armed
with the basic skills needed to design quality software!
16.9 Review Questions
1. What details might be stored in a system catalog? How might it be constructed?
How might it be used?
2. Briefly discuss three approaches to structuring the help system of a software product.
4. Describe how you would manage error and status messages for a large software
engineering project.
6. Describe the three levels of security that many software products are required to
address. For each level, outline an effective approach for dealing with security at
that level.
[Kendall 2014] Kendall, Kenneth E., and Julia E. Kendall. 2014. Systems Analysis and Design, 9th ed.
Boston, MA: Pearson. See chapters 8 and 15.
[Rumbaugh 1999] Rumbaugh, James, Ivar Jacobson and Grady Booch. 1999. The Unified Modeling
Language Reference Manual. Reading, MA: Addison-Wesley.
[Schneiderman 2017] Schneideman, Ben, et al. 2017. Designing the User Interface, 6th ed. Boston, MA:
Pearson. See chapters 13 and 14.
[Sommerville 2016] Sommerville, Ian. 2016. Software Engineering, 10th ed. Boston, MA: Pearson.
See chapters 15 and 20.
Chapter 17
The last 16 chapters of the course have been spent on discussion of software
engineering as discipline, as well as on various aspects of software engineering
investigation, analysis, and design. Indeed, we have discussed several methodologies
that may be applied during these stages of a software engineering project. Before
moving on to latter stages of the SDLC, let us pause to put into perspective, what
have been covered so far. This brief chapter advances under the following captions:
289
290 ◾ Software Engineering
The project proposal is typically prepared and delivered in two formats––a detailed
document as well as an oral presentation (aided via an appropriate presentation soft-
ware such as PowerPoint, Publisher, Prezi, or some other product).
Among the diagramming techniques recommended for the project proposal are
the following:
• For system scope: the object flow diagram (OFD) is excellent for the main sys-
tem components and how they interact; the information topology chart (ITC)
Putting the Pieces Together ◾ 291
is great for depicting the main information entities and how they relate to the
various subsystems.
• For feasibility analysis report, evaluation grids are highly recommended for
comparing alternate solutions.
• For the initial project schedule, an activity table will suffice at this early
stage.
• Other techniques that may be considered include amortization schedules to
illustrate projected cash flow or NPV analysis; bar charts to illustrate time-based
comparisons; and process-oriented flowchart (POF) to provide a summarized
global perspective of the intended software system.
Figure 17.3 Summary of the Main Activities During Preparation of the Requirements
Specification
This course recommends that the requirements specification include the follow-
ing constituents: acknowledgments; problem synopsis; system overview; storage
requirements; operational requirements; system rules; interface specification; system
constraints; security requirements; revised schedule; concluding remarks; and appen-
dices. For ease of memory, these are depicted in Figure 17.4.
292 ◾ Software Engineering
The design specification is perhaps the most important deliverable for a software
engineering project; for this reason, it is sometimes called the blueprint for the soft-
ware system. The main components of this deliverable are highlighted in Figure 17.6.
In short, the design specification synthesizes the information from the requirements
Putting the Pieces Together ◾ 293
specification to produce a blueprint for the software system. Here are two points
worth remembering:
Given the importance of the design specification, it therefore behooves the conscien-
tious software engineer(s) to be diligent and unremittingly careful in crafting a deliv-
erable that is accurate and thorough. Missing this benchmark can prove to be very
costly. Since as human beings, we are prone to error, it is always a great idea to enlist
the input of multiple experts, to employ multiple brainstorming sessions, to advance
in iterations, and to cross-check the work before declaring it as a finished deliverable.
It is now time to embark on what is regarded by many as the most exciting part of
software engineering––the actual construction (development) of the product. The
next section of the book (covering three chapters) will discuss important software
development issues.
17.7 Review Questions
1. What scenario typically leads to the conceptualization of a software system?
2. What is the first deliverable in a software engineering project? Specify the main
components of this deliverable.
3. What is the second deliverable in a software engineering project? Specify the main
components of this deliverable.
4. What is the third deliverable in a software engineering project? Specify the main
components of this deliverable.
5. Identify two additional deliverables that succeed the design specification a software
system.
SOFTWARE D
DEVELOPMENT
This chapter discusses important software development issues that are critical to
the successful construction of a top-quality software product. It proceeds on the
presumption that appropriate steps were taken in the earlier phases of the software
engineering experience (namely investigation, analysis, and design), and under the
following subheadings:
• Introduction
• Standards and Quality Assurance
• Management of Targets and Financial Resources
• Leadership and Motivation
• Planning of the Implementation Strategy
• Summary and Concluding Remarks
18.1 Introduction
If enough thought and planning were put in the design phase, software development
should proceed smoothly. In fact, for the meticulous and keen software engineer,
software development is fun; it represents the beginning of seeing the fruition of
diligent work, invested up front, in the investigation, planning, and design of the
software. Indeed, the following statement is worth remembering.
297
298 ◾ Software Engineering
Software development may employ any of the life cycle strategies discussed in
Chapter 1. In the interest of clarity, these strategies are listed and clarified (in the
context of development) below:
• Waterfall Model: Keep writing code until the software system is finished.
• Phased Prototype Model: Develop the software system chunk by chunk.
• Iterative Development Model: Develop the software system iteration by
iteration.
• Rapid Prototype Model: Take a swipe at developing a working model of the
software system and hope for the best; then use user feedback to refine.
• Formal Transformation Model: Generate provable code for the software
system.
• Component-based Model: Develop the software system by integrating used
and tested components; write code only for the missing pieces and for integrat-
ing the components.
• Agile Development Model: Merge the ideas of phased prototyping and itera-
tive development, focusing on the construction and delivery of a product with
the minimum required essentials features. Then refine/expand in subsequent
versions as required.
Excellent software quality is not magic (though by design, it often appears that
way); rather, it’s a consequence of sound logic. Excellent software quality will
not just happen, if it was not deliberately built into the design, and consistently
pursued during development and implementation.
Software Development Issues ◾ 299
With respect to standards and quality assurance, three issues are worth mentioning:
In this regard, the project manager must be knowledgeable and preferably an expert
in order to effectively manage the software engineering project. In complex situa-
tions, he/she may have to lead and manage by example.
Quality assurance (QA) involves the process of ensuring that the software meets
the requirements and design specifications, and conforms to established standards.
QA is applicable to all aspects of business. With regard to software development,
Figure 18.1 defines a procedure for maintaining a high software quality during a
software engineering project. Essentially, the procedure establishes a loop between
software development and assessment against established standards and require-
ments. Looping continues until the standards and requirements are met.
In business, a concept that has become very popular since the 1990s, and has
remained so, is total quality management (TQM). A full discussion of TQM is beyond
the scope of this course. Suffice it to say, TQM is a comprehensive philosophy that
encompasses all aspects of the organization, and all management functions. Two
sound principles of TQM are worth stating here:
The first statement implies that the programmer or software engineer should spend
some time to convince himself/herself that a program or module or system works
before submitting it for QA evaluation. The QA evaluation then becomes a means of
fine-tuning the system rather than identification of major rework.
The second statement implies that the process of proliferation of good standards,
models, and methodologies should be pursued. As a practical example, a programmer
should spend some time to get his/her first ADD operation correctly. This can then
be used as the basis for other ADD operations.
Quality should be proactive rather than reactive. Put another way, quality should
seek to avoid errors, rather than respond to them. Quality should focus on all phases
of the system life cycle equally rather than the maintenance phase primarily. Quality
must characterize all aspects of the software, not just some aspects.
Quality standards must be effectively communicated to all relevant levels of the
organization. In particular, the project team must be aware of such requirements.
Here is a rhetorical question worth remembering:
In the electronic book DevOps without Measurement is a Fail (see [New Relic
2015]), the author identifies and elaborates on five essential drivers for the success of
a software system; these are summarized below:
As mentioned earlier in the course, these drivers and quality factors do not always
align with each other. For instance, quality and speed often generate opposing forces.
Given this reality, software development often involves pragmatic tradeoff decisions
by the software developer(s).
• Project manager
• Software engineer or programmer responsible for the component
• A principal user
• Someone to take notes (if not the software engineer)
18.3.1.1 Budget Preparation
The budget typically spans a fiscal year. However, it might be broken down on quar-
terly basis or a monthly basis. The budget contains summery items and line items
that make up the summary items. The summary items and some of the line items are
typically predetermined, based on the organization’s chart of accounts.
The budget may also be split into broad categories of expenditure items, for
instance, capital expenditures and recurrent expenditures. Capital expenditures
relate to investments in fixed assets and/or infrastructure. Recurrent expenditures
relate to operational issues (such as salaries, stationary, fuel, heating, electricity,
transportation, etc.)
Figure 18.3 illustrates how a budget might be composed. Please note:
1. Each summary item (e.g. Network Upgrade) would have associated detail line
items that may be part of the main document, or included as an appendage. The
details will show how each summary amount was arrived at.
2. In some instances, supporting documentation (such as quotations from ven-
dors) may be required.
Since one’s budget will ultimately affect one’s ability to pursue the projects of intent,
it is imperative that the budget be comprehensive. Also, to avoid embarrassments due
to budget overruns, it is always better to over-estimate rather than under-estimate
expenditure.
18.3.1.2 Budget Monitoring
Once a voted budget is in place, the project manager will be aware of this. Software
development should proceed according to the budget that is in vogue; ensuring
this is the responsibility of the project manager. Issues such as project crashing
(review Chapter 8) or recasting of certain targets may become relevant as the proj-
ect proceeds. However, note that recasting of targets reflects poorly on the project
304 ◾ Software Engineering
management, and must only be considered when it is clear that the circumstances
warranting these changes are beyond the control of the project manager.
her team and assign activities that will help the respective individuals to realize those
needs. This will ensure optimum productivity.
The project manager must be a good motivator. The project manager’s most valu-
able resource is his/her human resource. If you have a team of individuals who are
perpetually unmotivated, that team will not achieve much. Software engineering is
serious business and must be taken as such.
A full discussion of motivation theory is beyond the scope of this course.
Figure 18.5 provides a brief summary of some prominent motivation theories. Since
the software engineer may be often called upon to lead project teams, it is in his/
her interest to be cognizant of these theories, in order to be effective at project
management.
• Operating environment
• Installation
• Code conversion
• Training
• Change over
• Marketing
As you will soon see, these issues could influence the success or failure of the soft-
ware product in the organization and/or marketplace.
306 ◾ Software Engineering
• If enough thought and planning were invested in the design of the software,
actual construction will be an enjoyable, exciting, and rewarding experience.
Prudent project management will also be required of the project manager (who
is likely to be a lead software engineer) during this period.
• Excellent software quality is not a miracle; it will not just happen, if it was not
deliberately built into the design, and consistently pursued during development
and implementation. Procedures for building quality in the software product
must be clearly outlined and followed.
• The QA evaluation is used to ensure that established software standards are
upheld during the development process.
• During software development, resources, targets, and expenditure must be care-
fully managed to ensure that the project meets its deadlines.
• Leadership and motivation are also critical factors during software developed.
Ideally, the project manager must be an excellent leader and motivator.
• The implementation strategy for the software system must be planned well
ahead of the completion of the software development.
18.7 Review Questions
1. What are the critical issues to be managed during the development phase of a
software engineering project?
3. Discuss the QA evaluation exercise and propose an instrument for use during this
experience.
[Morse 2000] Morse, Wayne, James Davis, and Al L. Hartgraves. 2000. Management Accounting: A
Strategic Approach. Cincinnati, OH: South-Western College Publishing. See chapter 11.
[New Relic 2015] New Relic. 2015. DevOps without Measurement is a Fail. Accessed July, 2017. https://try.
newrelic.com/rs/412-MZS-894/images/MeasuringDevOpsSuccess_eBook_FINAL.pdf.
[Peters 2000] Peters, James F. and Witold Pedrycz. 2000. Software Engineering: An Engineering Approach.
New York, NY: John Wiley & Sons. See chapters 12–14.
[Pfleeger 2006] Pfleeger, Shari Lawrence. 2006. Software Engineering Theory and Practice, 3rd ed. Upper
Saddle River, NJ: Prentice Hall. See chapters 7–9.
[Pressman 2015] Pressman, Roger. 2015. Software Engineering: A Practitioner’s Approach, 8th ed.
New York: McGraw-Hill. See chapters 19–26.
[Sommerville 2016] Sommerville, Ian. 2016. Software Engineering, 10th ed. Boston, MA: Pearson.
See chapters 22-26.
[Van Vliet 2008] Van Vliet, Hans. 2008. Software Engineering, 3rd ed. New York, NY: John Wiley & Sons.
See chapter 13.
Chapter 19
Human Resource
Management
Human Resource Management (HRM) is arguably, the most important aspect of man-
agement in general. This argument can be easily supported, since the most important
resource in any organization is the human resource.
In most medium-sized and large organizations, there is a human resource director,
with responsibilities for the human resource needs of the organization. As indicated
in Chapter 1, in progressive organizations, HRM is given the same level of priority as
information technology.
At every level, managers have as one of their responsibilities, HRM. Software
engineers who operate as project managers are by no means excluded. People work
on projects, it requires people to administer software systems; people are needed
to administer backup procedures, and conduct preventive maintenance, etc. These
people will need direction, and in many cases this direction will come from the lead
software engineer.
HRM cannot be fully discussed in one chapter (in fact it is treated as a course in
many undergraduate and graduate programs). This chapter should therefore not be
construed as a substitute for training and education in this area, but rather an over-
view of the essential aspects of HRM from a software engineering perspective. The
chapter will proceed under the following captions:
• Management Responsibilities
• Management Styles
• Developing the Job Description
• Hiring
• Maintaining the Desired Environment
• Preserving Accountability
• Grooming and Succession Planning
• Summary and Concluding Remarks
309
310 ◾ Software Engineering
19.1 Management Responsibilities
The job a manager/leader may be summarized in the following broad objectives:
In the pursuit of these objectives, the manager uses various strategies and assumes
certain responsibilities (some of which would be indicated on a job description).
These strategies and responsibilities will vary according to the organization, the
nature of the job, and the individual. Nonetheless, some general functions of man-
agement have been identified by management scholars:
19.2 Management Styles
Many theories on management styles have been forwarded by social scientists. A
brief survey of the more popular ones follows:
19.2.1 Autocratic Management
In autocratic management, the manager dictates to and/or commands his/her team
members, and requires them to follow his/her instructions.
Two obvious advantages of this approach are:
• The manager’s way may not always be the most prudent. The approach pre-
sumes that team members are not smart enough to be trusted with major
responsibilities. This, we know to be fallacious.
Human Resource Management ◾ 311
• People do not like to be dictated to; experience has shown that treating people
like this tends to appeal to their latent propensity to rebellion, and brings dis-
sent to the surface. The manager’s sense of control may therefore be false.
The main disadvantage of this approach is that does not always yield positive results;
experience has shown that there are scenarios that do not warrant it.
19.2.4 Path-Goal Leadership
In path-goal leadership, the leader influences performance, satisfaction, and motiva-
tion of his/her team members by
The leader does this by adopting a certain leadership style based on the situation:
Disadvantages are
19.2.5 Transformational Leadership
In transformational leadership, the leader presents himself/herself as an agent of
change (presumably for the better). A strong relationship is built between leader and
followers. Transformational leadership often involves a vision to forge an organiza-
tion in a new direction and elicit change. It is characterized by strong ideas, inspira-
tion, innovation, and individual concerns.
The main advantage of this leadership style is that followers are “fired up” to
effect the required changes as enunciated by the leader. There is a strong sense of
commitment to set goals.
The disadvantages are:
• If change does not come in a timely manner frustration could overtake some of
the team members.
• The approach begs the question, what happens after the desired changes are
achieved?
The main challenge of this approach is that the super leader must be well prepared
and versed in the activities that he/she desires the team members to engage in.
19.2.7 Task-Oriented Leadership
In task-oriented leadership, the leader’s primary focus is the conducting of activities,
in pursuit of established goals. These activities must be done at whatever cost.
The main advantage of the approach is that it is achievement-oriented, and is
therefore likely to produce a high level of productivity.
The main disadvantages of the approach are as follows:
• The leader could become insensitive to the human needs of team members
while being absorbed with pursuing his/her objectives.
• This problem could result in a demoralized, demotivated team, thus inhibiting
the leader’s ability to achieve the very goals being pursued.
19.2.8 Relations-Oriented Leadership
A relation-oriented leader seeks, as a primary focus, to build good relationships with
team members. The thinking behind this is that if team members have a good rela-
tionship with their leader it will inspire them to perform.
The main advantage of this approach is that when it works, the results are very
convincing. One possible reason for this is that team members feel a strong sense of
belonging, and ownership of the project.
The main disadvantages of the approach are as follows:
• The approach does not always work. In fact, it is possible for team members to
enjoy good relationships with their leader, and still not perform well.
• The worst-case scenario of this approach is that the team becomes a social club
where there is much fellowship, but little work.
19.2.9 Contingency Leadership
Contingency leadership theory is an argument for pragmatism: Since the individual
approaches all have their advantages and disadvantages, the manager should reserve
the right to employ different approaches, depending on the scenarios that present
themselves.
The main advantage of contingency leadership is that the weaknesses of any
approach are avoided while capitalizing on the strengths of the respective approaches.
314 ◾ Software Engineering
Caution: In many cases, you will find that job descriptions you are looking for
are either in need of refinement, or are nonexistent. In either case, your task
must be to leave the situation in a better state than you found it.
19.4 Hiring
Hiring is a very important management function. No manager can function without
people (human resource). The software engineer may be called upon to participate
in the process of hiring suitably qualified individuals to be part of the project team.
Below are some important considerations for the hiring process:
1. Clearly define the position to be filled. If it is a new one, then approval from a
senior level of management may be required. In any case, a clearly defined job
description should be in place.
2. Advertise for applicants to fill the position.
3. Convene an interview panel.
4. Arrange for interviews of the applicants. Depending on the organization, the
interview schedule may vary. Typically, job interviews are done in three stages:
Firstly, a technical interview scrutinizes the technical and professional prepared-
ness of the applicant. Next, a human resource interview looks at the overall
individual and tries to determine whether they would be suitable for the job. A
final interview is usually done to make an offer to the selected person. Please
Human Resource Management ◾ 315
note that in some instances, the stages may be merged. For instance, technical
and human resource interview may be merged as one.
5. Select the most suitable individual.
Before conducting an interview, the software engineer must make the required
preparation:
In conducting the interview, below is a checklist of some of the things you should
probe for each candidate:
• Required Qualification: This may require asking questions about the institu-
tions attended by the candidate, and the courses pursued.
• Professional Preparation: This may require asking questions relating to prior
working experiences of the candidate.
• Familiarity with Technology: This may require asking technical questions
relating to the technologies and methodologies relating to the job.
316 ◾ Software Engineering
• Human Relations Skills: This may require asking questions relating to the can-
didate’s handling of human relations challenges in the past, as well as simply
observing how the candidate handles pressure.
• Motivation and Drive: Here you try to assess the candidate’s enthusiasm for
the job.
• Problem-Solving Skills: Is the candidate adept at solving various problems on
short notice? Here, problem scenarios are posed to the interviewee, and he/she
is asked to describe how they would address the various problems.
• There may be animosity in the camp as to whether you were most deserving of
the position. This possibility is increased if members of the team were consid-
ered for the position and then bypassed.
• There may be some resistance to changes that you want to put in place, in your
new capacity.
• Individuals may try to challenge your mettle during the early period of your
administration.
If you are in a position of leading software engineer, you will want to create an
environment where negative factors that could potentially undermine the success of
your team are discouraged, and positive factors are encouraged and reinforced. With
this focus in mind, it is a good idea to schedule an initiation meeting, shortly after
assuming your responsibilities. At this meeting the following activities should occur:
1. Meet the team members (if the team is very large, then meet the key players, for
instance, people who report to you, along with the supervisors).
2. Clearly outline what your expectations are, and perhaps the mode of operation
that you will pursue.
3. Find out what the team members expect from you, and determine whether you
can deliver on those expectations.
Human Resource Management ◾ 317
4. If you are new to the organization, try to get an appreciation of each (major)
team member’s job (prior to the meeting, you should familiarize yourself with
the company norms and policies).
In order to achieve and maintain the desired environment, the following strategies
will be also useful:
• Be a good motivator.
• Develop good conflict resolution skills.
• Be an effective communicator.
• Be generous on rewarding outstanding achievement, and consistent in treating
errant actions.
19.5.1 Effective Communication
Successful managers are usually effective communicators, both orally and in written
form. This is also true for software engineers. Having prepared the requirements
specification and design specification for your software engineering project, it will
be imperative that team members are sold on the project. If the team members were
involved during the preparatory work, then this should not be difficult.
Below are a few experiential tips on effective communication:
• Have the mission statement of the organization and that of the division or
department attractively framed and strategically positioned in each office.
• Consider putting beautifiers (e.g. potted plants) in various offices. Plants are
known to provide therapeutic value and natural beauty to corporate offices.
• Consider strategically placing memory gems to remind employees of their
responsibilities. Below are two examples of motivational quotes:
o Excellence Begins Here
o Excellence is our Standard Requirement
• Avoid being perceived as antagonistic or confrontational.
• Involve team members in the determination of development strategies so that
they can experience ownership of the plans.
19.5.2 Conflict Resolution
If you are successful at being an effective communicator, this will pave the way for
minimizing conflicts and resolving them. Conflict, by definition, is not necessarily a
bad thing, in fact, it can serve to provide different perspectives to a problem, and this
318 ◾ Software Engineering
• If the conflict is about personal feelings of team members and yourself, be pre-
pared to apply some empathy, or to be conciliatory.
• If the conflict is about work (e.g. how to approach a problem) be objective and
impartial.
• If the solution sought does not seriously threaten the success of the project, be
prepared to make or accept compromises.
• Understand that people are entitled to their own opinions. The solution should
be evidence-based, not opinion-based.
Human Resource Management ◾ 319
• Get all involved parties to discuss the problem related to the conflict.
• Start the discussion on a positive note.
• Obtain an accurate representation of each party’s viewpoint; ask for clarification
if necessary.
• Focus on the problem; not the individual(s).
• Communicate assertively and clearly, but not contemptuously.
• Listen without interrupting the speaker(s).
• Avoid prejudging one’s thoughts or actions.
• Avoid assigning motives to others.
• Avoid the cheap psychology of projecting your own flaws and/or fears on
others.
• Identify possible solutions to the problem.
• Where possible, explore win-win scenarios that allow the participants to feel
satisfied that their interests have been addressed.
• If a resolution cannot be immediately found, invite the participant(s) to table
the matter for a subsequent discussion. Alternately, you may “agree to disagree.”
• Thank the participant(s).
Please note, application of these strategies greatly increases the likelihood of suc-
cessful conflict resolution. However, there is no guarantee that success will always be
achieved for every crisis. The key is to understand the source and nature of conflict,
knowing that it can be an opportunity to enhance the success of your effort.
19.6 Preserving Accountability
It is the responsibility of every manager to put in place a system of accountability
which ensures that team members perform according to expectations. This will ulti-
mately ensure that important deadlines are met and goals are accomplished. The
software engineer is by no means excluded from this responsibility.
In preserving accountability, the software engineer may pursue a number of
strategies:
• Each employee must be assigned work that is commensurate with his/her job,
level of expertise and professional capability.
• Deadlines must be clearly established.
• Deadlines must be realistic.
• The employee must agree to both the assigned work and the deadline, in a cor-
dial discussion. If there are differences, they must be resolved.
• The employee must be made to clearly appreciate how their work fits into the
big picture of the department, division, and by extension, the organization.
• If required, there must be clearly established checkpoints to different activities
on the employee’s work schedule.
Figure 19.4 illustrates a sample work schedule of a team member on a software engi-
neering project. Note that the assignment clearly identifies the project, the specific
activities, and target date(s).
19.6.2 Evaluating Performance
Performance evaluation is typically done at the end of the determined evaluation
period. Typically, companies have monthly, quarterly, and annual evaluations.
If the organization is on an MBO program, then the annual evaluation is usually
significant, since it might mean a large or small bonus, depending on how favorable
of the evaluation is. Here are a few important points about performance evaluation:
• The evaluation must be based on the established objectives and assigned activi-
ties that were agreed upon with the employee at the start of the evaluation
period.
• The evaluation must be objective, and with supportive evidence.
• The evaluation must be signed by both appraised (i.e. the employee) and
appraiser.
• Where the employee might have missed established targets, or performed below
expectations, measures must be put in place to help the individual to improve
on the next appraisal.
Figure 19.5 illustrates an employee appraisal. Note that the appraisal clearly identi-
fies the evaluation criteria, the assessment period, comments, and signature by the
appraiser as well as the appraised.
▪ The super leader and path-goal leadership styles both facilitate the principles of
succession planning, without any additional effort on the part of the manager.
▪ The individuals being groomed need not know that they are in fact being spe-
cially prepared for possible takeover; this knowledge sometimes creates ten-
sions between (or among) the contenders.
▪ Implementing a succession plan is not usually easy. In many instances, there are
fallouts that might result in some individual(s) leaving the organization. Case
in point: When General Electric’s CEO and chairman stepped down (in 2000)
and named his successor, the other two contenders immediately started making
arrangements to leave the company.
322 ◾ Software Engineering
Another issue that needs to be addressed during development and refined over the
effective life of the software system is the matter of software economics. This will be
discussed in the next chapter.
19.9 Review Questions
1. What are the main responsibilities and functions of a manager? Why are they rel-
evant to software engineering?
2. What are the different management styles that are available to the software engi-
neer? For each style, identify the advantages and disadvantages; also identify a
scenario that would warrant the application of this approach?
3. Assume that you are a software engineer with the responsibility of managing a
software engineering project. Develop a job description for a programmer on your
team.
Software Economics
Software economics was first introduced in Chapter 3 (Section 3.7) though not by
that term. At that time, we were discussing the feasibility of the software engineering
project. After reading Chapter 3, one may get the impression that software cost is
equal to development cost. In this chapter, you will see that the two are often differ-
ent; that development cost is just one component of software cost; and that there are
other factors. You will also see that determination of software cost, price, and value
are difficult issues that continue to be the subject of research and further refinement.
The chapter proceeds under the following captions:
20.1.1 Software Cost
As mentioned in Chapter 3 (Section 3.7), there are many components that go into
the cost of developing a software system. These cost components are summarized in
Figure 20.1.
Software engineering is a business as well as an applied science. The business
approach that many organizations employ is simply to put a price tag on each of
these components based on experience as well as business policies: The equipment
cost, facilities cost, and operational cost will continue to remain purely business
issues. The standard business approach for determining the engineering cost is to
325
326 ◾ Software Engineering
multiply the organization’s prescribed hourly rate by the estimated number of hours
required for the project. However, as you will see later, there have been efforts to
apply more scientific and objective techniques to the evaluating engineering cost
through the exploration of deterministic models.
20.1.2 Software Price
Determining the software cost is important but it does not complete the software
evaluation process. We must also determine the software (selling) price. Naturally,
the biggest contributor to software price is software cost. Three scenarios are worth
noting:
Figure 20.2 summarizes some of the main factors affecting software pricing. Please
note that there may be other factors that affect the pricing of the software (for
instance, other quality factors). The intent here is to emphasize that pricing a soft-
ware system is not a straightforward or trivial matter.
Software Economics ◾ 327
20.2 Software Value
The value of a software system may be different from the price. Whether your orga-
nization intends to market the software or not, it is often useful to place a value on
the product, for the following reasons:
• If the product is being marketed, placing a value on it can provide a competitive
advantage to the host organization (i.e. the organization that owns the product) if
the value is significantly more than the price. The host organization can then use
this as marketing advantage to appear generous to its prospective consumers.
• If the product is being kept by the host organization, then having a value that
is significantly higher than its price/cost makes the acquisition more justifiable.
• Whatever the situation, it makes sense to place a value on the product from an
accounting point of view.
The big question is, how do we place a value on a software product? There is no set
formula or method for answering this question; therefore, we resort to estimation
techniques. A common-sense approach is to assume that software value is a function
of any or each of the following:
• Software cost
• Productivity brought to the organization (and how this translates to increased
profit)
• Cost savings brought to the organization
328 ◾ Software Engineering
In the end, determining a value for the software system is a management function
that is informed by software engineering. For this reason, we will examine some of
the estimation techniques that are available (Section 20.4). Before doing so, we will
take a closer look at evaluating software productivity.
20.3.1 Size-related Metrics
Size-related methodologies rely on the software size as the main determinant of
productivity evaluation. Common units of measure are the number of lines of source
code, the number of object code instructions, and the number of pages of system
documentation. To illustrate, a size-related metric may compute a software productiv-
ity index for a project, based on the formulas in Figure 20.3.
• If different programming languages are used on the same project, then making
a single calculation for PI{Code} would be incorrect, since the level of produc-
tivity varies from one software development environment to another. A more
prudent approach would be to calculate the PI{Code} for each language and
take a weighted average.
• Most of the documented size-related metrics concentrate on lines of code, with
scant or no regard for documentation. This plays squarely into the fallacy that
software engineering is equivalent to programming. The lower half of Figure
20.3 has been added to provide balance and proper perspective to the analy� -
sis. If as proposed by this course, more effort ought to be placed on software
design than on software development, and that the latter should be an exciting
and enjoyable follow-up of the former, then any evaluation of software cost or
productivity should reflect that perspective.
The main problem with this model is that it does not address the important matter of
software quality. What if the software product and documentation are both volumi-
nous due to faulty design? The model does not address this concern.
20.3.2 Function-related Metrics
Function-related methodologies rely on the software functionality as the main deter-
minant of productivity evaluation. The common unit of measure for these method-
ologies is the function-points (FP) per programmer-month (a programmer-month is
the time taken by one programmer for one month, assuming a normal work week
of 40 hours). The number of function points for each program is estimated based on
the following:
UFC = ∑[(FC) * (W)] where FC is the function-point count for a program com-
ponent and W is the complexity weight for that program component.
Next, complexity factors are assigned for the project based on other factors such
as code reuse, distributed processing, etc. The UFC is then multiplied to this/these
330 ◾ Software Engineering
The matter of software quality still remains a concern, though to some extent, it has been
addressed in the software’s functionality. Indeed, it can be argued that to some extent,
a software system’s functionality is determined by the quality of the software design.
These alternatives are by no means mutually exclusive; in fact, in many instances they
both apply. One way to conduct the analysis is to estimate the useful economic life
Software Economics ◾ 331
of the software system, and compute the above-mentioned values over that period. In
hindsight, this may be challenging, but by no means insurmountable. However, the
reality is, in most cases, it is desirable to conduct this analysis prior to the end of the
economic life of the system. Moreover, in many cases, this analysis is required up front,
as part of the feasibility study for a software engineering venture (review Section 3.7).
Figure 20.5 provides two formulae that may be employed in estimating the value
added by a software system. The first facilitates a crude estimate, assuming that inter-
est rates remain constant over the period of analysis (of course, this is not practical,
which is why it’s described as a crude estimate). Since this approach involves taking
the difference between the value added and the acquisition cost, for convenience,
let’s call this approach the difference method. The second formula computes the net
present value (NPV), with due consideration to interest rates; it is considered a more
realistic estimate. The simple adjustment to be made here is to ensure that the cash
flow per annum includes additional revenue due to the system as well as reduced
expenditure due to the system.
• Expert Judgment: A group of experts assess the project and estimate its cost.
• Analogy: The project is compared to some other completed project in the same
application domain, and its cost is estimated.
• Parkinson’s Law: The project cost is based on convenience factors such as
available resources, and time horizon.
• Pricing Based on Consumer: The project is assigned a cost based on the con-
sumer’s financial resources, and not necessarily on the software requirements.
Obviously, the latter four proposals are highly subjective and error-prone; they will
not be explored any further. The algorithmic approach has generated much interest
and subsequent proposals over the past twenty-five years, some of which have been
listed for recommended readings.
By way of observation, the exponent C typically lies in the range {0.8 .. 1.5}. The
constants A, B, and C are called adjustment parameters, and they are determined by
project characteristics (such as complexity, experience of the project team members,
the development environment, etc.). Pressman [Pressman 2015] lists a number of
specific cases-in-point of this cost model (in each case the acronym KLOC means
thousand lines of code):
Boehm used a three-mode approach, as follows (Figure 20.7 provides the formula
used for each model):
The original COCOMO model was designed based on traditional procedural pro-
gramming in languages such as C, Fortran, etc. Additionally, most (if not all) software
engineering projects were pursued based on the waterfall model. The next subsec-
tion discusses Boehm’s revision of this basic model.
3. The number of screens, reports, and components are weighted according to the
schedule in Figure 20.9. The weights actually represent the relative effort
required to implement an instance of that complexity level.
4. Determine the object point count (OPC) by multiplying the original number of
object instances by the weighting factor, and summing to obtain the total OPC.
Figure 20.10a clarifies the calculation and Figure 20.10b provides an illustration.
Software Economics ◾ 335
5. Calculate the number of object points (NOP) by adjusting the OPC based on the
level of code reuse in the application:
6. Determine a productivity rate (PR) for the project, based on the schedule of
Figure 20.11. Note that the schedule that it is in the project’s best interest to
have a project team of very talented and experienced software engineers, and
to use the best software development that is available.
E = ( NOP ) ∗ ( PR )
Figure 20.12 summarizes the steps in the application composition model. With prac-
tice on real projects, you will become more comfortable with this cost estimation
technique. The important thing to remember about the model is that the software
cost is construed to be a function of the engineering effort, and the complexity of
the software.
336 ◾ Software Engineering
As clarified earlier, B and C are constants, and P denotes the primary input (esti-
mated LOC or FP). Based on Boehm’s experiments, A is recommended to be 2.94,
and C may vary between 1.1 and 1.24. The EAF is a multiplier that is determined
based on the following seven factors (called cost drivers). In the interest of clarity, the
originally proposed acronyms have been changed:
EAF = ( PRC ) ∗ ( RR ) ∗ ( PD ) ∗ ( PC ) ∗ ( PE ) ∗ ( F ) ∗ S
20.4.3.3 Post-Architecture Model
The post-architecture model is the most detailed of the COCOMO II sub-models. It
is recommended for use during actual development, and subsequent maintenance of
the software system (Chapter 18 discusses software maintenance).
The formula used for calculating effort is of identical form as for the early design
model:
The criteria (also called scale factors) used to assign capability weights (CW)
about the project and the project team are as follows:
Figure 20.13 provides the recommended schedule for determining the capability
weights for these criteria. As can be seen from the figure, the weights range from 0
(extra high) to 6 (very low).
The EAF is determined from a much wider range of factors than the early
design model. Here, there are seventeen factors (cost drivers). Figure 20.14 lists
these cost drivers along with their assigned ratings. In the interest of clarity,
the original acronyms have been changed. The EAF is the product of these cost
multipliers.
You have no doubt observed that this is quite a complex cost model. It must
be emphasized that in order to be of any use, the model must be calibrated to suit
the local situation, based on local history. Moreover, there is considerable scope for
uncertainty in estimation of values for the various factors. The model must therefore
be used as a guideline, not a law cast in stone.
338 ◾ Software Engineering
20.6 Review Questions
1. What is the difference between software cost and software price?
2. What are the components of software cost? What are the challenges to determining
software cost?
3. State and briefly discuss the main factors that influence software price?
4. How is software value determined? What are the challenges to determining soft-
ware value?
7. Describe the basic algorithmic cost model that many software costing techniques
employ.
Software Implementation
Issues
• Introduction
• Operating Environment
• Installation of the System
• Code Conversion
• Change Over
• Training
• Marketing of the Software
• Summary and Concluding Remarks
21.1 Introduction
Irrespective of how the software is acquired (review Chapter 1), it must eventually
be implemented. Planning and preparation for this system implementation should
start long before the completion of the acquisition. If the implementation is not
carefully planned and all factors considered, the exercise can be very frustrating and
misrepresenting of the system and professionals responsible for its introduction.
Poor implementation can cause the failure and rejection of a well-designed
software system that actually meets the needs of its intended users. This underscores
that software engineering does not end after product development. Users must be
trained to use the product. To this end, the system must be installed, configured,
and monitored. If your organization is in the business of marketing computer
343
344 ◾ Software Engineering
software, then part of the implementation would be the development and pursuit of
a marketing plan for the product. These and other related matters will be addressed
in the upcoming sections.
21.2 Operating Environment
Consideration about the operating environment addresses the following questions:
21.2.1 Central System
The centralized approach is the traditional approach, where the software system
runs on a particular machine and is inaccessible except through that machine.
Traditionally, data processing (DP) departments used this approach to manage
centralized information systems that provided information services for the other
departments in the organization. All data entry, maintenance, and processing were
done centrally and reports were sent to various departments. This approach was (and
still is) particularly useful in a batch-processing environment.
Advantages of this approach are as follows:
• There is a central locus of control, which allows for easy tracking of system
problems.
• There is little or no ambiguity about accountability.
• The approach is ideal for embedded systems that do not need to interact with
multiple end users.
21.2.2 Distributed System
The distributed approach is the contemporary approach to software system
implementation. All users have access to the software system (via work-stations).
Data enters the system at various points of origin—via workstations operated by
users in different departments, or via electronic transfers (that may be transparent to
end users). The software system is accessed by various end users as required without
any intervention from the software engineering team.
Software Implementation Issues ◾ 345
• User training can be challenging. For information systems, even after compre-
hensive training, the odd user may key in inaccurate data and try to blame "the
system" or the "IS/IT Department."
• In the absence of adequately trained personnel, this approach could be a pre-
scription for chaos.
21.4 Code Conversion
Code conversion is applicable where software system replaces an existing one, and
the coding system used to identify data in one system is different in the other. In such
a circumstance, the software engineer must do the following:
• Analyze both systems and clearly identify points of differences in the coding
systems.
• Design and test a methodology of linking the differing coding systems.
• Design and test a methodology for converting data from the old format to the
new format.
In many cases, some amount of interface coding is necessary. Figure 21.1 repre-
sents the main components of a code conversion system, while Figure 21.2 provides
an example. The interface program(s) provide(s) conversion and communication
between old and new codes.
21.5 Change Over
The previous section provided a clue to the current section: change over from an old
software system to a new one. Four strategies can be identified:
21.5.2 Parallel Conversion
In the parallel conversion approach, the new and old systems are simultaneously
run until users are satisfied with the new system. Then and only then is the old
system discarded. This is traditionally the strategy used in converting from manual
to computerized systems, but it may also be applied to change over from an old
computerized system to a newer one.
The approach gives users a sense of security, but is costly in terms of effort. This
is so because in some cases, two sets of workers have to be employed to work on the
parallel systems; in others cases, employees may be called upon to work overtime.
348 ◾ Software Engineering
21.5.3 Phased Conversion
In phased conversion, change from old to new is gradual over a period of time.
Aspects of the new system are gradually introduced. The approach is consistent with
the phased prototype model of Chapter 1, but also applies to situations where the
system was acquired by other methods apart from direct development.
The main drawback in phased conversion can be protracted over an extended
period of time. This could potentially create anxiety between the project team and
end users.
One advantage is that each component is thoroughly tested before use. Also,
users are familiar with each component before it becomes operational. The main
drawback is that of interfacing among components.
21.5.4 Distributed Conversion
In the distributed conversion approach, many installations of the same system are
contemplated. Based on the evaluations of these installations a decision is made with
respect to global implementation.
The approach is very common in large financial institutions with several branch
offices (e.g. introducing ATM machines at various sites, a bank take-over, etc.).
21.6 Training
Training of end users is an integral part of software engineering. The following issues
often determine the training strategies:
• Product: This relates to the product line(s) the software will be marketed
with/as.
• Pricing: This relates to how the software will be priced (review Chapter 16).
• Promotion: This includes both positioning and packaging of the software.
Positioning relates to how the product is introduced and marketed in the mar-
ket place. Packaging relates to what other products that are marketed with the
software.
• Placement (or Physical Distribution): This relates to the avenues through
which the product eventually gets to the consumer.
• People: This relates to the customer services (including training and support)
that will be provided for the product.
• The operating environment for the software product may be a central system or
a distributed system.
• System installation must be carefully planned.
• If the software system is replacing a pre-existing system, then the matters of
code conversion and system changeover become very important.
• System changeover may be direct, parallel, phased, or distributed.
• Implementation often requires training of the end users. This must be carefully
planned.
• If the software system is to be marketed to the consuming public, then a mar-
keting plan for the product must be developed and followed.
21.9 Review Questions
1. What are the critical issues to be managed during the software implementation?
2. If you were in charge of outlaying your college or university with a strategic infor-
mation system for its core functions:
• What operating environment would you consider? Why?
• Describe a plan for the training of the faculty and staff.
• What strategy would you use for transitioning from an archaic system on which the
institution relied heavily, to your new system? What precautions would you take?
4. What are the possible approaches to system changeover? When would you use
each approach?
5. What guidelines would you follow in conducting user training for a new software
system?
Software Implementation Issues ◾ 351
Recommended Readings
[Kendall 2014] Kendall, Kenneth E., and Julia E. Kendall. 2014. Systems Analysis and Design, 9th ed.
Boston, MA: Pearson. See chapter 16.
[Pfleeger 2006] Pfleeger, Shari Lawrence. 2006. Software Engineering Theory and Practice, 3rd ed. Upper
Saddle River, NJ: Prentice Hall. See chapters 10 and 11.
[Schach 2011] Schach, Stephen R. 2011. Object-Oriented & Classical Software Engineering, 8th ed.
New York: McGraw-Hill. See chapter 15.
Chapter 22
Software Management
This chapter discusses software management as a vital part of the software engineer-
ing experience. As you are aware, it is the final phase of the SDLC. However, the
truth is, unless you are very lucky, it is the most likely entry point into a career as a
software engineer: In the marketplace, you will most likely have to start off by carry-
ing out management responsibilities on existing software before you get a chance to
develop a complete system from scratch. Being part of a project team that develops
a major system from scratch is an achievement that every software engineer should
aspire to experience at least once in his/her career. However, it is probably worth
remembering that many practicing software engineers never experience this.
Software management involves product maintenance, product integration, and
product reengineering. Against this background, the chapter proceeds under the fol-
lowing captions:
• Introduction
• Software Maintenance
• Legacy Systems
• Software Integration
• Software Re-engineering
• Summary and Concluding Remarks
22.1 Introduction
Once the software has been implemented, it then enters a usage phase. During this
time, the requirements of the software may change. Software maintenance ensures
that the software remains relevant for the duration of its life cycle. Failure to maintain
the software can reduce its life cycle, thus making it irrelevant and/or unwanted.
If, due to design and/or development flaws, or obsolescence, it has been deter-
mined that the cost of maintaining the software (nearly) outweighs the cost of
replacing it, then at such point, a decision needs to be taken about the future role
353
354 ◾ Software Engineering
and usefulness of the software as well as its possible replacement. However, in the
absence of such critical circumstance, the software must be maintained.
As you proceed through this chapter, bear in mind that various factors will affect
the management decisions taken about a software product. Three such factors are
mentioned in Figure 22.1.
22.2 Software Maintenance
In order to ensure that the software product remains relevant, despite the changing
requirements of the user environment(s), software maintenance is necessary. We
shall examine software maintenance under the following subheadings:
• Software Modifications
• Software Upgrades and Patches
• Maintenance Cost
22.2.1 Software Modifications
Software modifications may be put into three broad classifications:
• Enhancements
• Adaptive changes
• Corrective changes
• Addition of new features (and possibly program files) that seamlessly integrate
into the existing software
• Improvement of existing features and/or functionalities by replacement of exist-
ing program files with revised program files
• Removal of known bugs by replacement of existing program files with revised
program files
Software engineering companies that market products to the consuming public usu-
ally issue software upgrades in the form of releases. Traditionally, software releases
are typically numbered in the format that the sections of this text are numbered.
However, a more recent trend is to number the versions based on the year of release
and to add descriptive qualities to the version names. Following are three examples
in three different product lines:
• Early versions of Borland Delphi were of the form V1Rx (or V1.x) up to V8Rx
(or V8.x). This was followed by releases of Delphi 2006 Professional, Delphi
2006 Architect, and Delphi 2006 Enterprise; this trend continued into 2010 ver-
sions of the product line (except that it is now marketed by Embarcadero, and
not Borland). Since then, the version names have been Delphi XE, Delphi XE2,
Delphi XE3, and Delphi XE4.
• Microsoft product lines have been consistently named based on the year of
introduction.
• Companies such as Oracle and IBM tend to favor the more traditional approach
along with descriptive names, but Oracle applies a slight deviation, using version
names such as Oracle 9I, Oracle 10G, Oracle 11G, Oracle 12C, and Oracle 19C.
If you are working for an organization that does not market its software systems, this
meticulous version naming convention may not be necessary, but would nonetheless
be advantageous.
Software upgrades from these established software engineering companies are
usually made available via common portable storage media as well as via downloads
from the World Wide Web (WWW). Again, if your organization is not in the business
of marketing its software products, then this approach may or may not be necessary,
depending on the prevailing circumstances.
A software patch is a modification to a software product to improve its function-
ality or performance in specific areas. The patch is more narrowly focused than an
upgrade; it may be in any combination of the following possibilities:
Software engineering companies that market products to the consuming public usu-
ally issue software patches in the form of service patches (SP). They are typically
numbered sequentially (example SP1, SP2, etc.), with clear indications to consumers
as to what versions (releases) of the software product, the patches relate to. Patches
are commonly made available via the WWW, but may also be placed on common
portable storage media.
22.2.3 Maintenance Cost
The more poorly designed the software, the more maintenance will be required and
the higher will the maintenance cost be. Conversely, the better the design, the lower
the maintenance cost is likely to be.
Maintenance cost is influenced by the following factors:
• Lifetime of the software: In many (but not all) cases, longer lifetime means
more maintenance.
• Quality of the software design: Generally speaking, poor design leads to high
maintenance cost.
• Amount of changes required: The greater the number of changes required, the
higher the maintenance cost is likely to be.
• Quality and stability of the support staff: A very skilled and stable support
staff is likely to reduce the maintenance cost.
• Complexity of software design and configuration: The more complex the
design, the higher the maintenance cost is likely to be (there may be exceptions
to this).
• The development software used (programming language, DBMS, etc.):
Maintenance cost may be constrained by the cost of the software development
tools employed.
• Software size (in terms of components and source code): Generally speaking,
bigger the software system, the higher the maintenance cost (there may be
exceptions to this).
22.3 Legacy Systems
A legacy system is a system that was constructed using relatively old technology, but
its useful life continues within the organization. Companies have legacy systems due
to a number of compelling reasons:
358 ◾ Software Engineering
• Continue maintaining the system. If the system is stable and there are not many
user requests for changes, this is the most prudent alternative.
• Scrap the old system and replace it with a new one. This alternative should be
pursued when the following conditions hold:
o The old system is showing signs of being a liability rather than an asset, that
is, it has (almost) reached its scope of usefulness.
o It is determined that further maintenance would be an effort in futility.
o The company is confident that it has gathered enough information to success-
fully redesign the system.
• Transform the system to improve its maintainability. This process is referred to
as software re-engineering, and will be discussed shortly.
22.4 Software Integration
In many cases, and for a number of reasons, a software product may be excellent in
the provision of certain desirable services but deficient in the provision of others. In
other cases, it might be difficult to find a single software product that provides all
the services that an organization is looking for. Should such organizations abandon
the investments made in these individual products, in search of a single product? Not
necessarily. Rather, the organization could explore the path of software integration.
In software integration, a number of component software products are made to
peacefully coexist––i.e. they are integrated. This is consistent with the CBSE model
of earlier chapters (review Chapters 1 and 9). In order to provide them with the set
of services that they require, large organizations such as banks, insurance companies,
and universities often use a conglomeration of software products, merged together
in an integrated information infrastructure. The term information infrastructure is
Software Management ◾ 359
used to mean the complete environment (hardware and software) of the organiza-
tion, and would be more appropriately discussed in a course in strategic information
management.
Software integration has become a very important aspect of software engineering.
In recognition of this, large software engineering companies (for example Microsoft,
IBM, Oracle, Borland, etc.) typically have the services of integration experts who
are specially trained to provide technical advice and expertise to organizations that
need to integrate component software products. Evidently, these experts are trained
to promote the bias of the companies they represent. However, with some research
(and by asking pointed questions), you can obtain a good perspective of what your
integration options are. In many cases, the component products may be using differ-
ent software standards. If this is the case, then the integration team must be prepared
to write some interface coding.
Software integration has become a commonplace in contemporary software engi-
neering. As more software products are written to ubiquitous standards, we can
anticipate further proliferation of integration options. This is good for the industry,
as it will force higher quality software products.
22.5 Software Re-engineering
In a situation where the system quality continues to deteriorate, and the level of user
request for changes, as well as the cost of maintenance continues to be high, soft-
ware re-engineering is a viable treatment for legacy systems.
Re-engineering may include the following:
Software re-engineering is quite an involved and complex exercise and must be car-
ried out by qualified and experienced software engineers.
360 ◾ Software Engineering
Effective management of a software system can lengthen its useful life, and thereby
increase the organization’s return on its investment.
22.7 Review Questions
1. Describe how factors such as complexity, technology, and support affect decisions
taken about the maintenance of a software product.
2. Consider four categories of software. For each category, discuss how the above-
mentioned factors (complexity, technology, and support) have an influence on the
maintenance programs for software products in each respective category.
3. Describe three types of changes that are likely to be made to a software product
during its useful life.
4. What is the difference between a software upgrade and a software patch? Using
appropriate examples, explain how engineering companies typically handle soft-
ware upgrades and patches.
6. What are legacy systems? Why do they abound and will likely continue to do so
for the foreseeable future? Describe three approaches for dealing with legacy
systems.
Software Management ◾ 361
7. When should software integration be considered? What benefits are likely to accrue
from software integration?
363
364 ◾ Software Engineering
This chapter examines both scenarios. The chapter proceeds under the following
captions:
• Introduction
• Functional Organization
• Parallel Organization
• Hybrid Organization
• Organization of Software Engineering Firms
• Summary and Concluding Remarks
23.1 Introduction
Chapter 3 alluded to the alternatives to organizing a software engineering team, with-
out much discussion. We shall revisit this issue here, and add more clarity. How the
IT, SE, or IS division/department is organized will vary from one organization to the
other, depending on the following factors:
Large software engineering companies tend to be more creative in how they apply
these models. We will therefore examine each model and then take a look at how
they are applied in large software engineering companies.
23.2 Functional Organization
The functional approach is the most stable and widely used approach. Sections
(meaning departments of a division or units of a department) are defined to reflect a
specialization (division) of labor. Figure 23.1 illustrates this structure.
Advantages of this approach are as follows:
23.3 Parallel Organization
In the parallel organization (also called project-oriented) approach, the division/
department is split based on specific projects. The idea is to preserve the coherence
of software engineering projects. Figure 23.2 illustrates this structure.
This approach is ideal for a large or medium-sized organization with a large number
of projects within a given time horizon.
• The approach could result in conflict of project priority among team members.
• There could also be conflict on reporting authority.
• Conflict on resolving project progress versus personal performance could arise.
This approach is ideal for the very large, competitive, sophisticated organization,
where project teams are dynamically formed. These companies are likely to special-
ize in several large projects within a limited time horizon. It is not as widely used as
the functional approach or the project-oriented approach.
368 ◾ Software Engineering
reasonably covered in this brief discourse. To gain more insight into these organiza-
tions, an appropriate start would be to visit their respective websites.
Figure 23.5 provides an illustrative organization chart that could serve a small
or medium-sized software engineering firm. In the figure, the Software & Systems
Division could use the structure shown as the base from which individuals are drawn
for various projects.
This completes part E of the course. The upcoming section includes three chapters
on advanced software engineering concepts.
23.7 Review Questions
This division of the text contains three topics addressing advanced software engi-
neering concepts and ideas. The objectives of the division are as follows:
375
376 ◾ Software Engineering
Drawing from a previous research recorded in [Foster 2015], MSSs refer to a fam-
ily of software systems that are geared towards the promotion and facilitation of effi-
cient and effective management and decision-making in the organization. Included
among MSSs are the following categories: strategic information systems (SISs), deci-
sion support systems (DSSs), executive information systems (EISs), expert systems
(ESs), knowledge management systems (KMSs), business intelligence systems (BISs),
and enterprise resource planning systems (ERPSs). Following is a brief clarification
on each member of the MSS family.
Through these relational tables, one can accurately and comprehensively define
the constituents, structure, and security constraints of the user interface for any soft-
ware system that requires the use of user menu(s). Specifically, here is a summary of
information that could be specified for each software system:
With these logical views in place, the next step is to superimpose on the database,
a user interface that provides the user with the operational objectives mentioned in
Section 24.2, but reiterated here for reinforcement:
The user’s first interaction with the DMID is via logging on. In logging on, the user
specifies the following: user identification code or name; organization the user rep-
resents; and password (not displayed in the interest of security). This information
is checked against the internal representations stored in the database. If a match is
found, the user is taken to the next stage; otherwise, the user is given an appropri-
ate error message, and allowed to try logging on again (the number of allowable
attempts may be appropriately restricted). The current incarnation does not encrypt
the password, but this is an enhancement that could be pursued.
In its preliminary configuration, two classes of users are facilitated—end users and
system administrators (user classification is specified when the user account is defined).
System administrators have access to the Administrative Specification Management
Subsystem (ASMS). This subsystem provides SUDI privileges to all the data contained
in the DMID’s internal database. This means the administrator can carry out functions
of defining the operational requirements and constraints of software systems, subsys-
tems, and users (as described in the upcoming subsection). End users have access to
the End-user Access Control Subsystem (EACS), which will be elaborated on shortly.
Figure 24.4 shows a screen capture from the ASMS. In this illustration, a test user
called Lambert is working with system definitions. At first entry into this option, an
initial list of all software systems being managed through the DMID is provided.
As these system definitions are modified, or if items are removed during the ses-
sion, the list is updated. New entries can also be made. Finally, notice that there is a
Search button to the bottom right of the panel. If this is clicked, a related operation
is invoked as illustrated in Figure 24.5. This will allow the user (in this case Lambert)
to peruse through the system definitions using any combination of the search criteria
provided.
It should be noted that the illustrations of Figures 24.4 and 24.5 represent the most
basic operational features of the ASMS. There are other more sophisticated opera-
tions involving access of the logical views of subsection 24.2 (revisit Figure 24.3).
Figure 24.6 provides an example. Here, user-menu authorizations are being man-
aged; specifically, user Lambert is perusing a logical view that joins multiple tables
(review the spec for User Menus Summary [DM_UsrMnuA_LV1] in Figure 24.3). He
has the option of listing all user-menu combinations stored, or narrowing the search
by specifying data for any of the six search criteria shown. Please note that each
operation follows a similar design concept.
Using Database Systems to Anchor Management Support Systems ◾ 387
Only individuals who are duly authorized to carry out the functions of software
system configuration and management will have access to the ASMS; they must have
the administrator classification. Database administrators (DBAs) and software engi-
neers would typically fall in this category.
a. Being an end user, the user gets a menu with the software system(s) to which
he/she has access rights.
b. The end user is provided with a blank menu, representing zero access to
resources.
c. The user, being a system administrator, gains access to the ASMS menu.
Administrative users have access to all resources.
388 ◾ Software Engineering
From here on, the user’s display panel varies according to what system resources
he/she is authorized to access; only resources to which the user is authorized are
shown on his/her display panel. Figures 24.7 and 24.8 illustrate two extremes: one in
which a user has access to all the resources managed through the DMID, and another
in which the user has negligible access to system resources.
In Figure 24.7a, the main menu for a user called Edison is shown. Notice that
Edison has access to all the software systems managed via the current instance of
the DMID; you can tell this is so by comparing the screen-shot portrayed in Figure
24.7a with the one displayed in Figure 24.5. Also observe from the Figure 24.7a
that user Edison has selected the Auto-store Management System for the session
depicted. In Figure 24.7b, the user (in this case Edison) is provided with a submenu
of subsystems of the previously selected system, to which he/she has access privi-
leges. Then, in Figure 24.7c, after selecting the Acquisitions and Sales subsystem
from the previous screen, another submenu of related operations to which the user
is authorized is provided. At this point, the user may select any desired operation
for execution. At each level, the user’s display panel is filled with options so that
he/she is able to scroll and select the option of choice (by highlighting and clicking
the Select push button). The end user is never shown a resource that he/she is not
authorized to access.
Figure 24.7b Screen-shot from the DMID’s EACS—Subsystems Menu for a Specific Software
System
Figure 24.7c Screen-shot from the DMID’s EACS—Operations Menu for a Specific Subsystem
In Figures 24.8a through 24.8c, the user (in this case Ann Marie) has more limited
access to systems, subsystems, and operations managed by the DMID. In the most
extreme scenario, a user may have no access to any resource (system, subsystem, or
operation), in which case a blank screen would appear, and the user would not be
able to do anything.
Figure 24.8a Screen-shot from the DMID’s EACS—Main Menu with only one Option
390 ◾ Software Engineering
Figure 24.8b Screen-shot from the DMID’s EACS—Subsystems Menu with only one Option
Figure 24.8c Screen-shot from the DMID’s EACS—Operations Menu with Limited Options
related entities would emerge as part of the database design process. Finally, for
each of the projects mentioned, the concepts of a DMID (as described and illustrated
earlier) would be applicable.
Figure 24.9a shows an information topology chart (ITC) for the project, while
Figure 24.9b depicts an object flow diagram (OFD). While the list of information
entities for this EMS appears very small, the following must be noted:
1. Data volume on some of these entities would be very large, depending on the
population participating in the election in question.
2. The system could be configured to facilitate multiple local as well as national
elections.
3. Stringent data security mechanisms would be required to ensure the integrity of
the voting and vote-counting.
4. Depending on the country and/or territory, use of special voting technology
may be required. However, it is possible to develop a generic solution that uses
readily available technologies and methodologies.
392 ◾ Software Engineering
The overview diagrams—ITC and OFD—are shown in Figures 24.10a and 24.10b,
respectively. At first glance, this list of information entities for the HIMS appears very
small; however, bear in mind the following:
1. Similar to the previous case, data volume on some of these entities would be
very large, depending on the population being served.
2. Medical records often involve the use of high-precision graphical information
(for example X-rays and other similar records); the system must be designed to
efficiently and effectively handle such data.
3. Stringent data security mechanisms would be required to ensure the integrity of
all information stored and accessed, with a zero-tolerance for unauthorized
access. This security mechanism should include a strategy for encrypting the
data.
4. The system would be tailored for the application of various technologies used
in modern medicine.
394 ◾ Software Engineering
By way of illustration, Figure 24.11a shows the project’s ITC while Figure 24.11b
depicts its OFD. As in the previous two examples, the list of information entities for
this HIMS may appear to be small; however, the following must be noted:
1. Similar to the previous case, data volume on some of these entities would be
very large, depending on the population being served.
2. Educational records often involve the use of high-precision graphical informa-
tion (for example X-rays and other similar records); the system must be designed
to efficiently and effectively handle such data.
3. Stringent data security mechanisms would be required to ensure the integrity of
all information stored and accessed, with a zero-tolerance for unauthorized
access. This security mechanism should include a strategy for encrypting the data.
4. The system would be tailored for the application of various technologies (for
library management, financial management, learning management, etc.) used in
modern education.
• Countries of Interest
• Ports of Interest in various countries
• Airlines with which the port does business
• Aircraft information on each aircraft for each airline that uses the airport
• Information on each runway (including Terminals and Gates)
• Information on all pilots and flight attendants
• Standard Flight Schedule of all flights to and from the airport
• Log of Actual Arrivals/Departures for flights to and from the airport
The overview diagrams—ITC and OFD—are shown in Figures 24.12a and 24.12b,
respectively. Depending on airport where implementation takes place, FLIMS could
be a data-intensive system. For instance, at a busy airport such as Logan International,
there are over 20,000 flights per month on the average. At a less busy airport, this
average may be down to a few hundred flights per month. Additionally, security and
data integrity would be extremely important objectives, with zero-tolerance for unau-
thorized access or incorrect data.
Using Database Systems to Anchor Management Support Systems ◾ 397
• Account Balances
• Financial Transactions
• Transaction Classifications
• Purchase Payment Plans for payments to suppliers
• Payments Made to suppliers
• Financial Institutions
• Sales Payment Plans for payments from customers
• Payments Received from customers
• Investments Logs
• Departments of Interest within the organization
• Customers (representing sources of revenue)
• Suppliers (representing sources for expenditure)
• Inventory/resource Items (representing items used to conduct business)
• Purchase Orders generated and sent out to suppliers
• Purchase Invoices received from suppliers
• Purchase Returns made to suppliers
• Sale Orders generated and sent to customers
• Sale Invoices generated and sent to customers
• Sale Returns received from customers
In Figures 24.13a and 24.13b, the project’s ITC and OFD are, respectively, shown. This
list of entities gets even longer after normalization (for more insight, see Appendix
C). Here are some additional insights:
• Disease Categories
• Disease Definitions
• Disease Symptoms—listing various symptoms for the diseases of interest
• Disease-Symptoms Matrix—for mapping each disease to its various symptoms
• Countries of Interest—for addressing purposes
• Provinces/Territories within each country of interest—for addressing purposes
• Vising Patrons—for tracking individuals that use the DRS
• Standard Prescriptions—stored for various diseases
• Diagnosis Summaries—for summarizing each diagnosis
• Diagnosis Symptoms—for noting the observed symptoms of the diagnosed
disease
• Diagnosis Prescriptions—for storing information on prescriptions issued
• Medical Professionals—for storing information about the participating physicians
By way of illustration, Figure 24.14a shows the project’s ITC while Figure 24.14b depicts
its OFD. Since the number of known diseases is extremely large, it is impractical to
think that such a system covers all possibilities. More realistically, the system would be
configured to cover a specific set of diseases. Following are some additional insights:
The overview diagrams—ITC and OFD—are shown in Figures 24.15a and 24.15b,
respectively. Observe that the various leadership styles and qualities are not hard-
coded, but treated as data entry. The same is true for the questions geared toward
measuring these styles and qualities. The questions are connected to their related
styles and/or qualities through leadership analysis rules. These strategies make the
system very flexible and customizable for different scenarios of interest. This flex-
ibility is enabled and facilitated by thoughtful database design. Following are some
additional insights on the project:
By way of illustration, Figure 24.16a shows the project’s ITC while Figure 24.16b
depicts its OFD. While the specific formulas used by credit agencies are not known
(to this course), a software system like this enhances a more profound understand-
ing of what these agencies do, and what financiers look for in customers that they
sponsor. Here are some additional insights on the project:
1. As in the case of the previous case, the proposed FSAS project can be used by
individuals or by an organization. Depending on the context of usage as well as
the number of participants, data volume on some of these entities could be very
large or relatively small.
2. As in the previous cases, stringent data security mechanisms would be required
to ensure the integrity of all information stored and accessed, with a zero-toler-
ance for unauthorized access.
Using Database Systems to Anchor Management Support Systems ◾ 405
3. For the system to work, the following software engineering procedures will be
necessary: constructing an information-gathering instrument for specific the
financial dealings of individuals/organizations, as well as the criteria for mea-
suring them; codification of that information and entry into the database; con-
struction of an inference engine to evaluate the financial status of the respondents;
testing and refinement. Again, the intent here is to highlight the role of the
underlying database for such a system.
1. Depending on the size of the institution and the time period over which the
underlying database is used, the data volume on some of these entities would
be expected to get very large.
2. As in the previous cases, stringent data security mechanisms would be required
to ensure the integrity of all information stored and accessed, with a zero-
tolerance for unauthorized access.
3. The system would be tailored for the application of various technologies used
in higher education.
4. Similar to the discussion of Section 24.4.3, educational records often involve the
use of high-precision graphical information; the system design would need pro-
visions to efficiently and effectively handle such data.
Using Database Systems to Anchor Management Support Systems ◾ 407
Figure 24.17a Partial Information Topology Chart for the CUAIS Project
408 ◾ Software Engineering
in the DMID’s internal database. This means the administrator can carry out functions
of defining the operational requirements and constraints of software systems, sub-
systems, and users (as described in the upcoming subsection). End users have access
to the EACS, which dynamically generates their menus at login-time. The EACS also
controls user access by including on the user’s menu only system resources to which
they have be granted access privileges.
The design concepts for the DMID may be replicated for any set of one or more
complex software systems. Moreover, the DMID prototype that has been described
above can be easily adopted and used for any software engineering endeavor requir-
ing an elaborate user interface and stringent security arrangements for various end
users. If used in this context, the DMID could significantly reduce the timeframe for
the software development life cycle (SDLC) on specific software engineering projects
by transforming previously arduous and time-consuming activities of user interface
design and development to mere data entry.
MSSs appear in various aspects of life, including (but not confined to) engineer-
ing, management, education, health care, etc. Among the examples of MSSs discussed
are the following:
As you begin to practice database systems and/or software engineering, you will
learn that at the heart of most problematic legacy systems is a poorly designed data-
base system; you will also learn and understand that replacing a poorly designed
database after it has been placed in production is often a very daunting task. It there-
fore behooves every practicing software engineer and/or database expert to invest
410 ◾ Software Engineering
much time in getting the database properly designed at the outset; in so doing, you
will save yourself and/or others much grief later on.
For these more complex software systems, use and application of building blocks
is of paramount importance. The next chapter discusses another family of building
blocks — software engineering frameworks and patterns.
24.6 Review Questions
1. What two aspects of many software systems are usually intricately linked?
2. What do you understand by the acronym DMID? Briefly explain how a DMID as
described in this chapter, allows you to seamlessly tie aforementioned two aspects
of a software system together.
5. What does the acronym MSS mean? What is an MSS? Identify the different catego-
ries of software systems that comprise the MSS family.
7. Identify four examples of MSSs. For each, briefly outline the database
requirements.
[Keen & Scott Morton 1978] Keen, P. G. W. & M. S. Scott Morton. 1978. Decision Support Systems: an
Organizational Perspective. Reading, MA: Addison-Wesley.
[Kivisto 2000] Kivisto, Kari. 2000. A Third Generation Object-Oriented Process Model. Department of
Information Processing Science, University of Oulu, 2000. Accessed January 2016. http://herkules.oulu.
fi/isbn9514258371/isbn9514258371.pdf [July 2010). See chapter 3.
[Mulcahy 2007] Mulcahy, Ryan. 2007. “Business Intelligence Definition and Solutions.” CIO. Accessed June
1, 2016. http://www.cio.com/article/2439504/business-intelligence/business-intelligence-definition-and-
solutions.html
[Niemelä & Latvakoski 2004] Niemelä, E. & J. Latvakoski. 2004. “Survey of Requirements and Solutions
for Ubiquitous Software.” In Proceedings of the 3rd International Conference on Mobile and
Ubiquitous Multimedia MUM 04 (2004), ACM Press, 71-78.
[Oracle 2016] Oracle. 2016. Business Intelligence and Data Warehousing. Accessed June 1, 2016. http://www.
oracle.com/technetwork/topics/bi/whatsnew/index.html
[Rockart & DeLong 1988] Rockart, J. & D. DeLong. 1988. Executive Support Systems. Homewood, IL:
Dow Jones-Irwin.
[Schach 2011] Schach, Stephen R. 2011. Object-Oriented and Classical Software Engineering, 8th ed.
Boston, MA: McGraw-Hill.
[Wiseman 1988] Wiseman, C. 1988. Strategic Information Systems. Homewood, IL: Irwin.
Chapter 25
Software Architectures,
Frameworks, and Patterns
As the field of software engineering has developed over the years, the complexity has
increased even more. The paradigm has been changed from the traditional function-
oriented approaches to the object-oriented approach. This change of philosophy
and focus has resulted in the emergence of numerous applications and platforms.
This transformation has been catalyzed by the widespread use of architectures,
frameworks, and patterns. So widespread are their applications, many computer
scientists would find difficulty differentiating among them. Nonetheless, these three
software engineering catalysts are related. The purpose of this chapter is to clearly
differentiate them and provide a cursory introduction to each. The chapter proceeds
under the following subheadings:
413
414 ◾ Software Engineering
an application and how they interrelate with each other. The software architecture’s
goal is to promote the following:
how they are used in different situations. Among the generic software architectures
are the following categories:
• Structural Framework
• Layered Architecture
• Hierarchical Architecture
• Publish/Subscribe Architecture
Figure 25.1 provides a list of commonly used software architecture products that are
readily available. You will likely recognize some of these products; know that there
are several others not included in the list. The remainder of this section provides a
brief clarification on each of the aforementioned categories of software architecture.
25.1.1 Structural Frameworks
The structural framework is actually both architecture and a framework described
later. Because of the ambiguity of the terms, the two are often interchanged for one
another. The structural framework forces the software developer to place specific
portions of code in specific places. Consequently, this approach tends to limit some
use of the programming language to ensure good coding practice is adhered to.
However, this form of architecture is useful in producing code that is maintainable
and modularized. This style of architecture also assists in breaking up code imple-
mentation into parallel paths. Usually these architectures allow for some degree of
scalability but this is more of an implicit benefit of the modularity.
Figure 25.2 provides an example of structured framework that can be found in
Microsoft Visual Studio, if you create a form application. Here the code is broken
416 ◾ Software Engineering
down into two parts, the graphical user interface and the business logic for your
program. This is a simple example of a structural framework; we will explore a more
advanced form later this chapter.
25.1.2 Layered Architecture
The layered architecture was made famous by the OSI/ISO and TCP/IP network
models (Figure 25.3 left). As mentioned in Section 12.3.1, the layered architecture is
a common approach to creating complex software systems such as operating systems
and communication protocols. Each layer will do some narrowly-defined portion of
the overall (bigger) task. The layers will communicate either with the layer above or
below itself. The implementation for each layer is independent of the entire system as
long as the interface with its neighboring layers does not change. Therefore, should
a specific layer need to be updated or replaced entirely, it can be done without dis-
turbing the other layers.
This architecture is also used to modularize complex software problems to more
manageable sub-problems. This architecture can also be scaled quite easily by add-
ing additional layers on top, or replacing various layer implementations (Figure 25.3
Software Architectures, Frameworks, and Patterns ◾ 417
right). Overall, this architecture will usually result in very robust, manageable
systems.
Figure 25.3 The TCP/IP Project (left) and the Generic Layered Architecture (right)
25.1.3 Hierarchical Architecture
As the name implies, the hierarchical architecture facilitates design and development
via hierarchical structures with classes. The approach benefits from the fact that it
is commonly used as the primary organization technique for software systems. The
approach also aligns naturally with well-known benefits such as inheritance, code
re-use, and polymorphism. This architecture is typically more abstract at the top-
level (for most generic functionalities), and the most concrete at the bottom-levels
(for most specific functionalities). There is no limit to the number of layers that may
appear between the topmost level and the bottommost level; this is normally dictated
by the complexity of the software system and design approach.
Another significant spinoff stemming from related principles of inheritance, code
reuse, and polymorphism is low maintenance effort. This is particularly important
in complex software design scenarios, since the level of duplicate coding is kept at
a minimum. If you have well-designed hierarchical inheritance structure in place,
this will significantly minimize your effort at fixing bugs. If careful planning is done
at the beginning of the project, this architecture can be quite scalable. Software
extensions can be achieved by either adding a new leaf class(es) or adding a new
code segment(s) in the upper classes.
A common area that takes advantage of aforementioned principles is the video
game industry (see Figure 25.4). Here, a vast amount of the code can be imple-
mented in the inherited class(es), thus reducing the programming effort to create
a new character or object in the game. Moreover, developers can reuse previously
tested components (review Section 13.5 on code reuse).
418 ◾ Software Engineering
25.1.4 Publish/Subscribe Architecture
The publish/subscribe architecture is less known than the previous three. Nonetheless,
there are scenarios for which it is quite relevant. The approach allows different nodes
(often representing separate processes) to broadcast or publish information. Other
nodes can listen, or subscribe, to this information. A node can both publish and sub-
scribe should it wish to. This publish/subscribe strategy allows software systems to
be broken down into smaller components and reduce the inter-dependency between
nodes.
Most cases of the publish/subscribe architecture mandate very strict formatting
for the messages and type of information that is exchanged among participating
nodes. However, there are typically very little other restrictions for the programming
of the node itself.
There are several benefits to the publish/subscribe architecture. For one, the
approach is distributed, and when coupled with TCP/IP, can encompass multiple
computers simultaneously. Secondly, the approach modularizes the problem into
smaller, easier tasks. Finally, with appropriate planning, this architecture can be very
robust and recover from node failure.
The publish/subscribe architecture is most widely used in the areas of sen-
sor networks and robotics; in fact, this approach tends to dominate these two
problem domains. Figure 25.5 shows a graph for a problem scenario requiring
this approach. The problem scenario here is the ROS (Remote Operating System)
architecture.
Software Architectures, Frameworks, and Patterns ◾ 419
25.2 Software Frameworks
A software framework is an abstraction that provides general family of functional-
ities for some purpose but allows the developers to adopt those functionalities and
overwrite code behavior whenever necessary. The framework provides resources
that can be used in subsequent software development. Among the resources that
may be included in a framework (in any combination) are the following: applica-
tion programming interfaces (APIs), support programs and/or classes, compilers,
tool-sets, and code libraries. Essentially, a framework can be anything that extends
the functionality of a programming language, meaning everything from a structured
framework, to a third-party library. Among the desirable features of software frame-
works are the following:
25.2.1 Structural Frameworks
The structural framework is the most defined framework. This particular framework
provides added functionality to existing languages by dictating how the user will
organize their code (thus fulfilling the role of architecture as well). This framework is
very common in different languages where the programming language may be lack-
ing in providing coding standards for software developers. This particular framework
will emphasize modularity and software maintenance. The structural framework is
commonly used in web-applications such as Ruby on Rails (Ruby), Jenga (Python),
and Code-Igniter (PHP).
are API’s, libraries, or wrapper functions that abstract particularly difficult function
calls. While it is not necessarily introducing anything new to the programming lan-
guage, they are often more convenient to use versus the built-in facilities. A good
example of this would be the GLUT library to OpenGL. OpenGL is a 3D rendering
API for C/C++ and technically speaking you do not need any other libraries to ren-
der 3D objects to the screen. However, GLUT is a supplemental library that abstracts
some of the more difficult elements in OpenGL and makes 3D programming signifi-
cantly easier.
• Model: This component contains code that will interact with a database or
handle data. All reading, writing, and editing of stored data will be implemented
in one or more model(s).
• View: This component deals with what the user sees. This will contain all code
for the user interface and provide a mechanism for the user to interact with the
system. These components are often coded a little more loosely than the other
two as they often have HTML elements intertwined with code.
• Controller: This component acts as the coordinator between the database and
the view. The controller will also perform business logic of the program.
The flow of an MVC program generally follows the procedure summarized below
and illustrated in Figure 25.7:
There are several different names for the MVC framework, each with its own idiosyn-
cratic features. Among the commonly used names are the following:
• Hierarchical-View-Adapter
• Model-View-Presenter
• Model-View-Viewmodel
• Presentation-Abstraction-Control
modularized code and convenience. You may have seen a project that is monolithic, or
one with redundant levels of inheritance serving any real purpose. The MVC takes the
guesswork out––you get three major categories of code, and usually, the model is rarely
touched after it is initially created. Use of the MVC framework therefore capitalizes on
re-use without requiring an unwieldy inheritance tree. Because of this, any application
built with an MVC framework can instantly be parallelized between three groups of
developers. The database team can work on the model, a second team can work on
the controller, and the user interface team can work on the views. The only thing that
must be agreed upon is how the data will be interchanged between the three modules.
25.4 Software Patterns
Software patterns (also called software design patterns) are similar to frameworks,
providing a generic solution approach to a specific problem domain. However,
software patterns are typically not implemented but serve as template algorithms
for the programmer. Also, software patterns are usually much smaller in scope than
frameworks, focusing on common coding problems in the specific domain of interest.
As an aspiring or practicing software engineer, you may choose to develop your
own software pattern. Formally speaking, a software pattern should be accompanied
by the following five areas of documentation:
There are over 20 different known software design patterns. Rather than trying to
cover them all, this chapter observes that design patterns may be categorized in the
following four ways: creational patterns, structural pattern, behavioral patterns, and
concurrency patterns. Figure 25.8 provides examples of popular design patterns. This
is followed by a summary of each category of software patterns.
25.4.1 Creational Patterns
Creational patterns focus on instantiating objects in the most suitable way for a given
set of circumstances. There are several types of creational patterns; following are
three members of this family:
• Factory Pattern: In this design pattern, there is an object whose entire purpose
is to create new objects. The factory pattern will allow the user to call a func-
tion or method which will return different types of objects depending on the
parameters specified.
• Abstract Factory Pattern: This is an extension of the factory pattern. Here,
an abstraction (typically via an interface) is created, and different factories
are spawned from the abstraction. This allows a greater level of flexibility as
the programmer can now create all possible objects from the pattern with a
single call.
• Lazy Initialization: This pattern is employed when an object can be created but
elements of the object are not initialized until they are needed. This can greatly
reduce resources for creating objects, especially if there are components that
may not be called.
25.4.2 Structural Patterns
Structural patterns attempt to make an object’s relationship with other objects easier
to design. Remember that when we talk about object relationships we are talking
about object-object connection via inheritance, implementation, or aggregation.
Three types of structural patterns are described below:
• Adapter Pattern: This software pattern (also called a wrapper or translator pat-
tern) facilitates using the interface of an existing class as another interface, thus
providing flexibility to the developer. The effect of the adapter pattern is to allow
normally incompatible classes to work together by converting the interface of
one class into another form. The ultimate objective is polymorphic behavior.
• Decorator Pattern: This software pattern extends the functionality of a class
dynamically at run time. This is achieved by implementing a wrapper class
around a concrete class. The wrapper class can then instantiate other sub-classes
to forward the new functionality to the intended target object(s).
• Façade Pattern: This pattern creates an interface that masks a more complex
implementation of the code. This strategy greatly reduces the complexity of the
current code by allowing the developer to simply use the façade pattern instead
of trying to design a more complex family of internal classes. The façade pattern
may even be interfacing an internal class library.
25.4.3 Concurrency Patterns
The concurrency patterns deal solely with multi-threaded applications. As the names
imply, these patterns deal with timing problems of multiple threads.
Software Architectures, Frameworks, and Patterns ◾ 425
• Lock Pattern: This design pattern allows a thread to place a lock on a resource,
thus preventing other threads from accessing it.
• Read/write Lock Pattern: This pattern is an extension of the lock pattern, but
allows multiple concurrent accesses to a resource if, and only if, the threads are
only reading information. Should a thread need to write data it will have to have
exclusive access to that resource.
• Thread-Pool Pattern: Instantiating many threads throughout the life-cycle of
the program can be costly. Many times, threads are quickly finished and the
destroyed. This pattern creates a set of threads that will handle incoming
requests; the cost of instantiating a thread only occurs when the program is
started.
25.4.4 Behavioral Patterns
Behavioral patterns focus on how communication occurs within a set of objects and
how to improve communication with that family. Following is a description of three
members of this family:
As a case in point, one of the most well-known frameworks, which is also a software
architecture, is the Model-View-Controller (MVC) framework. This framework forces
the programmer to write their code in one of three areas––model, view, and control-
ler. The MVC framework is very common on web-applications and multiple versions
have been written across different programming languages. The most common lan-
guages to employ this framework are python, Ruby, and PHP.
Software patterns (also called software design patterns) are similar to frameworks,
providing a generic solution approach to a specific problem domain. However, soft-
ware patterns are typically not implemented but serve as template algorithms for the
programmer. Also, software patterns are usually much smaller in scope than frame-
works, focusing on common coding problems in the specific domain of interest. Four
categories of design patterns are creational patterns, structural pattern, behavioral
patterns, and concurrency patterns.
Software Architectures, Frameworks, and Patterns ◾ 427
Creational patterns focus on instantiating objects in the most suitable way for a
given set of circumstances. There are several types of creational patterns; three mem-
bers of this family factory patterns, abstract factory patterns, and lazy initialization
patterns.
Structural patterns attempt to make an object’s relationship with other objects
easier to design. Three types of structural patterns are adapter patterns, decorator
pattern, and façade pattern.
Behavioral patterns focus on how communication occurs within a set of objects
and how to improve communication with that family. Three members of this fam-
ily are publish/subscribe patterns, chain-of-responsibility patterns, and mediator
patterns.
The concurrency patterns deal solely with multi-threaded applications. Three
members of this family are lock patterns, read/write lock patterns, and thread-pool
patterns.
Figure 25.9 shows that there is overlap among architectures, frameworks, and pat-
terns. Because of this, there is much ambiguity over the terms and their boundaries.
25.6 Review Questions
1. Define software architecture. Identify and clarify four categories of software
architectures.
3. Define software pattern. Identify and clarify four categories of software patterns.
7. While doing a difficult project for a class, your friend Bob designs an elegant solu-
tion for the problem using class diagrams. Bob has not implemented anything but
can demonstrate its functionality on paper. Bob claims he has created a frame-
work, is this true? Why or why not?
New Frontiers in
Software Engineering
As the driving force behind computer science (CS) and information technology as
well as the catalyst in many other disciplines, software engineering continues on its
inevitable march forward. There are several amazing new frontiers on the horizon for
the discipline. This chapter provides a survey of several new and exciting directions
the field will be moving in. The chapter advances under the following subheadings:
429
430 ◾ Software Engineering
Careful attention must be given in defining what use cases to analyze, determine how
data should be collected, and finally collecting the data. Often, this methodology will
produce both quantitative and qualitative results, thus forcing the researcher to ana-
lyze the data before reporting.
Surveys: Another common over-arching category of testing software engineer-
ing techniques is the survey. Here, the characteristics and effect of the software
engineering resource will be evaluated across a large population of individuals. This
approach relies on the data averaging out to reveal evidence. The primary problem
with this mechanism is the large amount of subjectivity it has. Ideally, the question-
naire used for the survey would be carefully designed to minimize biases. Along with
this problem, the population surveyed may deliver different results. For example,
does a software engineer only survey experts in the field or do they include com-
mon users? Are the individuals being surveyed excited about the project or simply
participating due to obligation? These and many more issues can affect a survey and
must be considered.
26.2 Data Science
Data science is another burgeoning area of software engineering. Data science is
a discipline that employs scientific methods, algorithms, and software engineering
methodologies to extract and synthesize information from assorted (structured and
unstructured) data sources. Being multidisciplinary in nature, data science combines
skills from a number of areas including software engineering, programming, math-
ematics (forecasting and statistics), database systems, data warehousing, artificial
intelligence (AI), and machine learning (ML). The ultimate objective is the provision
of information that leads to improved decision making.
For a more detailed introduction to the data science terrain, see [Saltz & Stanton
2018]. Following is a brief discussion on selected areas that often come under the
umbrella of data science: big data, data warehousing, and data mining.
26.2.1 Big Data
Big Data refers to the field where large data sets are stored for subsequent informa-
tion extraction from them. It is important to note that big data deals with a much
larger amount of data than a conventional application. So, what size constitutes ‘big
data’? This tends to be a moving target; the threshold typically occurs when a current
system can no longer manage the volume of data required. However, the threshold
usually falls somewhere between hundreds of gigabytes and hundreds of terabytes.
It should be noted that big data does not simply mean storing massive amounts of
data. If this was the limit to the scope of the field, offline drives would be satisfactory.
Big data implies storage as well as usage of the large data sets of interest. As you will
see below, big data has also impacted the related field of ML with respect to inferring
new information that may otherwise be missed.
Since more and more devices are being networked (see Section 26.7 on the
Internet of Things) more and more devices can send information that is stored. In
fact, in this information age, we are creating it has been estimated that we create
432 ◾ Software Engineering
about 2.5 quintillion bytes of data per day [Marr 2019]. Such massive datasets have
their own set of challenges. Software systems and/or applications have to run mul-
tiple threads and processes in parallel in order to meet the demand for storage; and
retrieval and information access must be very efficient. Because of this, conventional
relational databases are not suited to handle such demands. Big data is one strategy
for meeting this challenge.
26.2.2 Data Warehousing
A data warehouse is a typically read-only database that is constructed from mul-
tiple source databases, and designed for query and analysis rather than transaction
processing (see [Foster 2016], Kimball & Ross 2013], and [Oracle 2015]). Data ware-
houses are designed to store summarized information drawn from their data sources
and may conform to different architectural structures. The process of updating the
data warehouse is called the extract-transform-load (ETL) process.
Data warehouses are used to store large volumes of information that may be sub-
sequently accessed by various information retrieval systems and/or tools. Discussion
of such resources is beyond the scope of this course; suffice it to say that an online
search engine is an excellent example of a retrieval system.
26.2.3 Data Mining
Data mining (also called knowledge discovery) is the process of searching through
and analyzing large volumes of (often) unstructured data with a view to identifying
patterns and relationships, and presenting information in a manner that is consistent
with user requirement. Data mining is often applied in the context of big data and/or
data warehouses. To achieve its objective, data mining often employs statistical and/
or descriptive mathematical models. Although data mining algorithms are not neces-
sarily computationally heavy, they often place a heavy load on the data stores due to
the high volume of read/write requests. Leading software engineering firms such as
Oracle and IBM provide their data mining tools. However, there is an abundance of
tools among smaller enterprises as well.
26.3 Bioinformatics
Another burgeoning area of CS that is driven by software engineering is bioinfor-
matics. As the name suggests, bioinformatics relates to the collection and analysis
of complex biological data. According to [Luscombe, Greenbaum, & Gerstein 2001],
bioinformatics may be defined as “the application of computational techniques to
understand and organize the information associated with biological macromolecules.”
Since bioinformatics covers everything from DNA sequencing to protein folding, the
amount of information generated by this field is astounding.
Bioinformatics is an interdisciplinary field that is showing up in many institutions
of higher learning. For obvious reasons, it is often sponsored and administered by
the CS departments at these institutions. Bioinformatics draws from the following
related fields:
New Frontiers in Software Engineering ◾ 433
• Computer Science
• Chemistry
• Biochemistry
• Biology
• Mathematics and Statistics
• Engineering
26.4 Machine Learning
Like big data, ML is a datacentric area of CS that involves the study of sophisticated
algorithms and statistical models that enable software systems to carry out specific
activities in the absence of explicit instructions. Rather than being instruction-driven,
ML relies on patterns, known rules, and inferences to influence behavior (see [Nevala
2017] and [Wikipedia 2019a]).
ML may be construed as the logical progression from AI and big data. An ML sys-
tem will analyze data to detect patterns similar to other known data. The ML system
will then use those patterns to create an algorithm and act upon it. The learning
aspect of ML refers to the act of developing an appropriate algorithm for a data set,
and then implementing the algorithm.
create solutions that are not correct. An example of this type of ML would be
clustering or cluster analysis.
• Reinforcement Learning: This category of ML attempts to train itself with
input data to maximize some form of metric. Mathematically, the algorithm will
provide more positive feedback to better-performing algorithms. This particular
set of ML algorithms will often run many different tests at the same time. The
vast majority will utterly fail and be culled from the tests. Those that do perform
above a threshold will be tweaked and tested in subsequent iterations. The
quintessential algorithm for reinforcement learning is the Monte Carlo.
• Anomaly Detection: This category of ML algorithms will look for unusual
results or outliers in data. In a way, this objective is the opposite of supervised
learning, where the goal is to train to place data within a known set of outputs.
However, in this situation, the software engineer is looking to see if it does
not fit the normal pattern. This category can also be used to analyze noise and
deviations and is most commonly used in bank fraud detection. This category
may use algorithms from supervised or unsupervised categories again with
the different goal in mind. The K-nearest neighbor is a common algorithm for
detecting outliers.
• Rule-based ML: In the 1980s, it was common for AI to simply be a set of rules
that were handcrafted by the computer scientist. These were a very low level
“if-something-then-do-something” style programming. Rule-based ML attempts
to read data, classify it, and then derive its own reactive rule set.
Still, there are other ML algorithms that are emerging. This trend may likely continue
as the relatively young field gains maturity and prominence.
So, while ML often does not get into the spotlight of CS, it is almost everywhere
within the field. With modern processors and cheaper RAM algorithms that were not
feasible to run in the 1980s, ML can now be incorporated into devices such as mobile
phones. Many of the conveniences experienced from contemporary digital devices
are probably directly linked to ML.
New Frontiers in Software Engineering ◾ 435
26.5 Game Design
Game design has become a very popular field of CS over the past two decades. Game
design involves the combination of art and science to create a simulated software
system for the purpose of facilitating entertainment, exercise, education, or other
experimental purposes [Wikipedia 2019b]. Despite its name, and as the definition
shows, game design addresses more than merely creating video games. It involves
all forms of programming where graphical objects are interacting with each other.
In game design, the user (player) can often control some outcome of the program.
This means game design principles can be used for other scenarios such as (but not
limited to):
• Interactive simulation
• Actual game design
• Serious games
• Training programs
• Visual effects for amusement parks
In game design, the user experience is central to the software’s mission, and there
are more qualitative considerations than quantitative. Due to this phenomenon, it
is impossible to create a set of requirements without having a prototype to interact
with. This means that quite often, the final product is different from the initial con-
ception (and sometimes significantly so). For this reason, game designers often have
to decide on the relative importance of the art versus the science involved in each
project.
From an end-user perspective, a game’s program state is quite often significantly
more complex than normal enterprise software state. Each object in the game will
most likely have a positional and movement component. More than likely, each object
will be changing its position per frame, and many of the objects have to interact with
each other should they collide. This makes for a very difficult experience in model-
ing all possible states of interacting objects in a game. In contrast, consider writing
an online business application. The controller element is not trying to destroy the
database with a rocket launcher. Instead, they are interacting in a very precise and
discrete manner that the software developer defines. This makes game design one of
the more challenging programming problems to negotiate.
436 ◾ Software Engineering
With games and simulations becoming more relevant, future software engineers will
need to be prepared to deal with these challenges. Conventionally, game design is
considered arduous and difficult, especially in the area of debugging. However, this
challenge presents an opportunity to push the field and provide new software engi-
neering methodologies that adapt for these particular problems. The good news is,
there is an abundance of good books on the subject matter. One such resource is
[Koster 2005].
Virtual reality (VR) has a captive audience. When a person uses a virtual headset,
they observe only what has been placed in that virtual world. This experience pro-
hibits users from being distracted. They cannot check their email or watch videos
on YouTube. All they do is observe and interact in the virtual world that has been
programmed. For this reason, VR is emerging as an excellent feature for learning.
There are some drawbacks as well. Virtual reality headsets must have a high frame
rate or they can induce motion sickness on the user. Another issue to be aware of is
that some users may experience eye strain and/or headaches. Also, some people may
become nauseous or experience exhaustion after an intense VR encounter.
26.7 Internet of Things
Today, internet connection is almost a necessity for life; the internet is ubiquitous
and pervasive. Without it, a lot of devices simply do not work. As embedded systems
become more powerful, more and more devices are including a Wi-Fi connection,
so they can communicate with other personal computers and/or telephones. These
devices can serve both as sensor and controllers for many conveniences around the
438 ◾ Software Engineering
26.8 Cloud Computing
Cloud computing (also called cloud technology) is a phenomenon that has become
commonplace as a progression from a number of earlier groundswells in the related
New Frontiers in Software Engineering ◾ 439
One gets the impression that cloud computing is one of the many noteworthy achieve-
ments of the software engineering industry that already has made, and will continue to
have lasting impact on twenty-first century lifestyle. It is therefore reasonable to expect
that cloud-based services will continue to gain preeminence in the foreseeable future.
Game design involves the combination of art and science to create a simulated
software system for the purpose of facilitating entertainment, exercise, education, or
other experimental purposes. Game design offers great potential in areas of com-
puter simulation, entertainment, and education.
Virtual reality uses a headset to immerse a user/player in a completely artificial
(virtual) world. The user will have no ability to use outside objects as a source of
reference, therefore, this has to be done in a safe area.
Augmented reality (AR) has some subtle differences from virtual reality, and the
application of the technology is vastly different. Unlike, VR, augmented reality does
not create a completely new virtual world. Rather, AR adds graphical artifacts to real-
world objects, thus creating a new enhanced experience.
The term internet of things (IoT) is used to refer to the vast global collection of
interrelated devices, resources, and people, with the capacity to transfer information
over a network. Technologies have advanced enough to the point where it is possible
to network almost any electronic device. With advances in powerful mobile smart-
phones, people can install applications on their mobile phones (just like installation
on a computer), and control things over the internet.
Cloud computing is a metaphor used to describe the delivery of various comput-
ing requirements as a service to a mixed community of end-recipients. A cloud rep-
resents a complex abstraction that integrates various technologies and resources into
a virtual information infrastructure. Cloud computing provides (typically centralized)
services with a user's data, software, and computation on an application program-
ming interface (API) over a network (typically the internet). End users access cloud
services through a Web browser, a desktop application, or a mobile application.
Cloud computing consolidates on vast reservoirs of essential services (such as data
storage and various software services) and making these services available to the
consuming public at a much more affordable rate than would otherwise be possible.
26.10 Review Questions
1. What is ESE? Explain its relevance. Briefly describe three common approaches that
are employed in ESE.
2. Provide a working definition of data science. What are the disciplines that drive this
field? Identify three prominent areas of data science and provide clarification of each.
4. What is ML? State and clarify the five categories of ML algorithms covered in the
chapter.
6. Differentiate between virtual reality and augmented reality. What is the potential
impact of each subfield on contemporary software engineering?
442 ◾ Software Engineering
7. What do you understand by the term internet of things? Explain its relevance and
implications for the future.
8. Define the term cloud computing. Identify and clarify four main areas of this field.
How has cloud computing impacted contemporary software engineering and life-
style in general? What are the implications for the future?
This final division applies principles and methodologies from the previous chapters
to a sample software engineering project: Included in the upcoming three chapters
are excerpts from the initial system requirements, the requirements specification, and
the design specification for an inventory management system.
The chapters are as follows:
This appendix provides excerpts from a sample project proposal (also called initial
system requirement) for a generic Inventory Management System that may be suit-
able for a small or medium-sized organization. The document includes the following:
• Problem Definition
• Proposed Solution
• Scope of the System
• System Objectives
• Expected Benefits
• Overview of Storage Requirements
• Anticipated Outputs
• Feasibility Analysis Report
• Initial Project Schedule
445
446 ◾ Software Engineering
A.1 Problem Definition
When operating a business, an inventory management system is one of the funda-
mental needs. Inventory management is critical to any business. The absence of such
a system could result in several problems, some of which are stated below:
1. If a business does not know what items are in stock it might lose significant sale
opportunities. On the other hand, if the inventory system shows items in stock
that are actually not in stock then that is an embarrassing situation where a
customer has to wait while the missing (nonexistent) item is being located. This
lack of professionalism could most certainly drive customers away.
2. In addition to this, there is also the problem of knowing exactly how much
inventory should be kept on hand. Keeping too much inventory on hand is
costly, resulting in storage costs, insurance costs, and salaries of individuals to
manage/locate inventory. On the other hand, not having sufficient stock on
hand is also costly, in that the business could lose significant opportunities for
additional sale.
3. Knowing exactly how much stock is on hand is crucial to knowing exactly
when items need to be reordered.
4. Inability to properly manage the inventory could severely affect the productivity
and profitability of the company.
A.2 Proposed Solution
This project seeks to address this problem by developing a generic Inventory
Management System (IMS) that is tailored to the specific needs of any company.
This software system must be portable and platform independent (if possible). In
light of this, the recommended software development tools include Java NetBeans on
the front-end and MySQL as the back-end DBMS.
A.4 System Objectives
he Inventory Management System (IMS) will fulfill the following objectives:
A.5 Expected Benefits
The IMS will bring a number of benefits to the organization:
• The system will help to keep accurate records of inventory. This will be an
invaluable aid to sales as well as purchasing.
• The maintenance of accurate records should reduce the likelihood of inventory
loss or misappropriation.
• The system will reduce the amount of human effort needed, and hence the
overhead cost of the business.
• The system will contribute to improving the public image of the business––cus-
tomers will appreciate being able to know instantly exactly what is available
without having to waste time.
• The system should facilitate better management decisions, as well as improved
productivity.
• The system will facilitate better management of the company’s resources. For
instance, instead of having money tied up in unnecessary inventory, the com-
pany can have a just-in-time ( JIT) delivery system, and thereby free up funds
that would otherwise be used in inventory storage, to be available for other
aspects of the business.
• Inventory Master
• Item Categories
448 ◾ Software Engineering
• Suppliers
• States or Provinces
• Customers
• Purchase Orders
• Purchase Invoices
• Purchase Returns
• Sale Orders
• Sale Invoices
• Sale Returns
• Chart of Accounts
• Accounting Balances
• Purchase Invoice Payment Plans
• Payments Made
• Financial Institutions of Interest
• Sale Invoice Payment Plans
• Payments Received
• Financial Transactions
• Investments
A.7 Anticipated Outputs
It will be possible to run queries and obtain reports on all information stored. As
such, operations will be provided to extract and display information from the afore-
mentioned information entities. Some of the more prominent outputs are as follows:
A.8.1 Feasibility of Alternative A
The technical feasibility of this alternative may be summarized as follows:
• The cost of this option is minimal (the wages of the employees who count stock
and fill out the inventory forms).
• The cost of the office supplies needed for this system would be minimal.
The risks associated with this approach are extremely high. All the problems stated
above would remain. This could potentially run the business into bankruptcy.
A.8.2 Feasibility of Alternative B
The technical feasibility of this alternative may be summarized as follows:
• The business no doubt already has the computer hardware that would be
required to run the software.
• Customizing the software package could be tedious if the acquired software
system is poorly designed.
• Maintaining the software could be problematic, especially if the system is poorly
designed, and the documentation is scanty and/or inadequate.
• There is no guarantee that the purchased software system will be comprehen-
sive enough.
The risks associated with this approach are high, since there is no guarantee that
software acquired will live up to expectations.
A.8.3 Feasibility of Alternative C
The technical feasibility of this alternative may be summarized as follows:
• The initial investment would be very high because paying a software engineer-
ing company for development time can be very costly.
• Development time could be as much as 6 months to a year, but for an experi-
enced software engineering firm, it shouldn’t take more than a few months.
• The economic life of such custom-made software should be relatively long if
the software is well made and well designed and if the needs of the business
don’t change drastically, in which case the system would either be not needed
or wouldn’t be adequate enough for the new needs.
The risks associated with this approach could be high or low, depending on how the
project is managed. There is no guarantee that software engineering firm will deliver
a good job; however, precautions can be taken to ensure software quality.
Project Proposal for a Generic Inventory Management System ◾ 451
A.8.4 Feasibility of Alternative D
The technical feasibility of this alternative may be summarized as follows:
• The implementation time would be long, mainly because the software would
have to be developed by student effort.
• Minimal user training would be required.
The risks associated with this approach could be high or low, depending on how the
project is administered. The student has total control over who works on the project,
so depending on the quality of the project team risks may or may not be reduced.
A.8.5 Evaluation of Alternatives
The following table provides a comparison of the project alternatives, based on a
number of feasibility factors. For each factor, a rank in the range {0 .. 20} is given for
each alternative, as summarized in Figure A.1.
452 ◾ Software Engineering
• System Overview
• Storage Requirements
• Operational Requirements
• Business Rules
• Summary and Concluding Remarks
453
454 ◾ Software Engineering
B.1 System Overview
B.1.1 Problem Definition
See Section A.1 of Appendix A. Typically, a refined problem statement is placed here.
B.1.2 Proposed Solution
See Section A.2 of Appendix A. Typically, a refined proposed solution is placed here.
B.1.3 System Architecture
The IMS project will have four main components as summarized in the two upcoming
figures:
Figure B.1 provides the object flow diagram (OFD) and Figure B.2 shows the
information topology chart (ITC) for the IMS project. The OFD shows the main sub-
systems and how they interact; the ITC shows the main information entities and the
related subsystems from which they will be managed.
B.2 Storage Requirements
The main storage requirements of the system will be covered in this chapter. The
conventions used are summarized below:
• The entities as presented will easily transition into a set of normalized relations
in a normalized relational database.
• Data elements that will be implemented as foreign keys, in the normalized
relational database, are identified by an asterisk (*) followed by a parenthesized
comment, specifying what entity they reference.
• Data elements that will be used as primary key attributes (or part of the pri-
mary key) at database implementation time are also identified by parenthesized
comments.
• For each entity, a comment describing the data to be stored is provided.
B.3 Operational Requirements
The information entities of the previous chapter will be implemented as a relational
database using MySQL or some other appropriate DBMS. Superimposed on this data-
base will be an OO GUI consisting of various operations that provide functionality
and flexibility to the end-users.
The user functionality and flexibility will be provided based on the following
approach:
• For each information entity, define an object type of the same name.
• For each object type, define a set of basic operations that will facilitate addition,
modification, deletion, inquiry, and reporting of data related to that object type
(note that each object type does not necessarily require all five basic operations).
• For selected object types, introduce flexibility and sophistication such as addi-
tional and/or more complex inquiry and/or report operations that facilitate end-
users specifying selection criteria of their choice.
• Define additional utility operations that will support the user interface of the
system.
Figure B.5 shows an initial list of operations that will be defined on each object
type. An operation specification will be provided for each of these operations in the
project’s design specification. The reference code for each operation is indicated in
square brackets.
B.4 System Rules
There are two main types of system rules that will be covered here:
Data validation rules are guidelines that should characterize the data entering
the software system. While these may be implemented at the database level, in the
interest of user-friendliness, it is often expedient that these validation rules will be
specified for related operations that facilitate the data entry.
Figure B.6 summarizes the main data integrity rules for the system; these are
specified on an entity-by-entity basis. For more details on the relevance of these
rules, please revisit Figures B.3 and B.4.
1. Supplier and Customer entities (E03 and E07) will each store a record called
Miscellaneous for Cash Purchases and Cash Sales, respectively.
2. Cash Purchases will impact the entities Purchase Invoice Summary (E10),
Purchase Invoice Detail (E11), Purchase Payments Log (E24), Item Definition
(E01), and Financial Transactions Log (E30) as follows:
a. Write a record to Purchase Invoice Summary (related Purchase Order is null).
If the Supplier is not listed in the Supplier entity (E03), use the default
Miscellaneous Supplier record and put an appropriate remark in the invoice’s
Comment-field.
b. Write corresponding detail records in Purchase Invoice Detail.
c. Write a record in the Purchase Payments Log, for the relevant items.
d. Adjust the Quantity-on-Hand in the Item Definition entity for the relevant items.
e. Write corresponding record in the Financial Transactions Log.
Requirements Specification for a Generic Inventory Management System ◾ 469
3. Credit Purchases impact the entities Purchase Order Summary (E08), Purchase
Invoice Summary (E10), Purchase Invoice Detail (E11), Purchase Payments
Log (E24), Item Definition (E01), and Financial Transactions Log (E30) as
follows:
a. Write a record to Purchase Invoice Summary.
b. Write corresponding records to Purchase Invoice Detail.
c. Update the related Purchase Order Summary record.
d. Adjust Quantity-on-Hand in Item Definition entity for the relevant items.
e. Write Accounts Payable entry in Financial Transactions Log.
4. Purchase Payments involve the entities Purchase Payments Log (E24), Purchase
Invoice Summary (E10), and Financial Transactions Log (E30) in the following way:
a. Write a record to Purchase Payments Log.
b. Update the Invoice-Outstanding-Amount in the Purchase Invoice Summary.
c. Write a record in the Financial Transactions Log.
5. Each Purchase Return impacts the entities Purchase Returns Summary (E12),
Purchase Returns Detail (E13), Item Definition (E01), Purchase Invoice
Summary (E10), and Financial Transactions Log (E30) in the following way:
a. Write a record to the Purchase Returns Summary entity.
b. Write corresponding detail records to Purchase Returns Detail.
c. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant
items.
d. Adjust Outstanding-Amount in Purchase Invoice Summary.
e. Write corresponding record in Financial Transactions Log.
6. Cash Sales will impact the entities Sale Invoice Summary (E16), Sale Invoice
Detail (E17), Sale Payments Log (E27), Item Definition (E01), and Financial
Transactions Log (E30) as follows:
a. Write a record to the Sales Invoice Summary. If the customer is not listed in
the Customer entity, use the default Miscellaneous Customer, with an appro-
priate remark in the invoice’s Comment-field.
b. Write corresponding include records in the Sale Invoice Detail.
c. Write a record in the Sale Payments Log.
d. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant
items.
e. Issue a receipt and write record(s) in the Financial Transactions Log.
7. Credit Sales Purchases impact the entities Sale Order Summary (E14), Sale
Invoice Summary (E16), Sale Invoice Detail (E17), Sale Payments Log (E27),
Item Definition (E01), and Financial Transactions Log (E30) as follows:
a. Write a record to the Sales Invoice Summary entity.
b. Write corresponding detail records in Sales Invoice Detail.
c. Update the related Sale Order Summary record.
d. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant
items.
e. Write Accounts Receivable record in Financial Transactions Log.
470 ◾ Software Engineering
Sale Payments involve the entities Sale Payments Log (E27), Sale Invoice
8.
Summary (E16), and Financial Transactions Log (E30) in the following way:
a. Write a record to Payments Received entity.
b. Update the Invoice Outstanding Amount in the Sales Invoice Summary entity.
c. Issue a receipt.
d. Write corresponding record in Financial Transactions Log.
9. Each Sale Return impacts the entities Sale Returns Summary (E18), Sale
Returns Detail (E19), Item Definition (E01), Sale Invoice Summary (E16), and
Financial Transactions Log (E30) in the following way:
a. Write a record to the Sales Returns Summary log.
b. Write corresponding details records to Sales Returns Detail log.
c. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant items.
d. Adjust the Outstanding-Amount for the related Sale Invoice Summary.
e. Write corresponding record in Financial Transactions Log.
These rules will be extremely useful during system development. Some of them
will be incorporated into the relevant operation specifications and included in the
project’s design specification.
The design specification will use these requirements to prepare a more detailed
set of specifications from which the system will be developed.
Appendix C: Design
Specification for a Generic
Inventory Management System
This appendix provides excerpts from a sample design specification for a generic
Inventory Management System (IMS) that may be suitable for a small or medium-
sized organization. The document is a follow-up to the requirements specification of
Appendix B and includes the following:
• System Overview
• Database Specification
• User Interface Specification
• Operations Specification
• Summary and Concluding Remarks
471
472 ◾ Software Engineering
C.1 System Overview
C.1.1 Problem Definition
See Section B.1.1 of Appendix B. Typically, a refined problem statement is placed
here.
C.1.2 Proposed Solution
See Section B.1.2 of Appendix B. Typically, a refined problem statement is placed
here.
C.1.3 System Architecture
The System will have five main components:
Figure C.1 shows the object flow diagram (OFD), while Figure C.2 shows the
information topology chart (ITC) for the IMS project. Notice that on the ITC there
are additional entities added under the System Controls Subsystem (SCS), compared
to the diagram provided in Appendix B. This represents a refinement of the ITC pro-
vided in the requirements specification.
C.2 Database Specification
The database specification will proceed under the following captions:
• Introduction
• Acquisitions Management Subsystem
• Financial Management Subsystem
• System Controls Subsystem
474 ◾ Software Engineering
C.2.1 Introduction
The database specification of the system will be covered in this section. The method-
ology employed for database specification is the object/entity specification grid (O/
ESG) developed by the current author. A Following is a summary of the conventions
used:
Naming of database objects will be very important for the following reasons:
• The database will host several objects. Without a proper naming convention, it
will be extremely difficult to keep track of them.
• The naming convention will enable us to easily categorize database objects on
sight.
Figure C.3 shows the object naming convention for the project; you will recall that
this was first introduced in Chapter 12.
Design Specification for a Generic Inventory Management System ◾ 475
• At the highest level, the main menu will consist of three options representing
the four subsystems.
• For each subsystem, the menu options will point to each information entity
managed in that subsystem.
• Any option taken from a subsystem menu will invoke a pop-up menu with the
operations relevant to that particular information entity (object type).
This user interface can be easily implemented using an OO RAD tool such as
Delphi or NetBeans. Moreover, it can be implemented in one of two ways:
• Static Approach: The options may be hard-coded into four menu operations––a
main menu and one for each subsystem. For each option taken by the end-user,
the appropriate operation would be invoked. This approach is simple but not
very flexible. Whenever options are to be changed or new options added, the
appropriate menu operation(s) have to be modified.
• Dynamic Approach: The options may be loaded into database tables cre-
ated for that purpose. Each entry would be the option description along
with the system name of the actual operation to be invoked. When the user
selects an option, the corresponding operation for that option is invoked.
The approach provides more flexibility to managers of the system: Menu
changes (modifications or option additions) will not necessitate changes to
the menu operations. Obviously, this approach requires a bit more intelli-
gent programming effort.
Design Specification for a Generic Inventory Management System ◾ 499
C.3.2 Utility Operations
The menu system will be controlled by the following utility operations:
• IMS_Login_XO: This operation presents the user with a basic system login that
allows authorized users to access the system. Upon successful login, the opera-
tions SC_Initialize_XO, SC_SessLog_AO, and IMS_Menu0_XO are called.
Operation specifications for SC_Initialize_XO and SC_SessLog_AO appear in
Section C.4.6.
• IMS_Menu0_XO: This operation is invoked by IMS_Login_XO after successful
login. The subsystems AMS, FMS, POSS, and SCS are presented to the user.
• IMS_Menu1_XO: This operation is invoked by IMS_Menu0_XO after success-
ful login. The options of the ACS are presented.
• IMS_Menu2_XO: This operation is invoked by IMS_Menu0_XO after success-
ful login. The options of the FMS are presented.
• IMS_Menu3_XO: This operation is invoked by IMS_Menu0_XO after success-
ful login. The options of the POSS are presented.
• IMS_Menu4_XO: This operation is invoked by IMS_Menu0_XO after success-
ful login. The options of the SCS are presented.
C.3.3 Message Specification
All user messages will be stored in a system-wide message file (as a database table)
called SC_Message_MF (see entity E36 of Figure C.6). Each message will be assigned
a unique code. Messages will be displayed in the form of pop-up messages from
related operations.
C.3.4 Help Specification
The system will host a hypermedia-based help system. Users will access the hyper-
media help by clicking appropriate links until they get to the desired help they seek.
Moreover, the help system will be organized according to the UITC, so that help will
be provided operation-by-operation. As the system matures, the help system can be
improved to include context-sensitivity.
C.4 Operations Specification
In this section, operation specifications for selected operations in the system are
provided. The algorithms needed for some of the operations (for different entities)
are similar. Therefore, in the interest of brevity, instead of repeating the same pseudo-
code for these similar operations, the following generic operation outlines will be
referenced. The section proceeds as follows:
• System Rules
• Procedural and Derivation Rules
• Generic Pseudo-codes
500 ◾ Software Engineering
C.4.1 System Rules
System rules are special guidelines that characterize the smooth operation of the
software system. They typically include data integrity rules, derivation rules, and
procedural rules. Additionally, generic operations serve to simplify and minimize
duplication relating to specifying the requirements for each system operation.
Data integrity rules include referential integrity rules and data validation rules.
The referential integrity rules have been implied in the database design of Section
C.2. In particular, each foreign key (i.e. referencing attribute) in a referencing entity
must have values drawn from the entity that it references. The only exception to this
rule is the instance where the foreign key value is null.
Data validation rules are guidelines that should characterize the data entering the
software system. While these may be implemented at the database level, in the interest
of user-friendliness, these validation rules will be specified for related operations that
facilitate the data entry. For instance, you will observe that ADD/MODIFY operations
for Province Definitions (entity E04 of Figure C.4) will not allow blank province names.
Figure C.8 summarizes the main data integrity rules for the system; these are
specified on an entity-by-entity bases.
1. Supplier and Customer entities (E03 and E07) will each store a record called
Miscellaneous for Cash Purchases and Cash Sales respectively.
2. Cash Purchases will impact the entities Purchase Invoice Summary (E10),
Purchase Invoice Detail (E11), Purchase Payments Log (E24), Item Definition
(E01), and Financial Transactions Log (E30) as follows:
a. Write a record to Purchase Invoice Summary (related Purchase Order is null).
If the Supplier is not listed in the Supplier entity (E03), use the default
Miscellaneous Supplier record and put an appropriate remark in the invoice’s
Comment-field.
b. Write corresponding detail records in Purchase Invoice Detail.
c. Write a record in the Purchase Payments Log, for the relevant items.
d. Adjust the Quantity-on-Hand in the Item Definition entity for the relevant items.
e. Write corresponding record in the Financial Transactions Log.
3. Credit Purchases impact the entities Purchase Order Summary (E08), Purchase
Invoice Summary (E10), Purchase Invoice Detail (E11), Purchase Payments Log
(E24), Item Definition (E01), and Financial Transactions Log (E30) as follows:
a. Write a record to Purchase Invoice Summary.
b. Write corresponding records to Purchase Invoice Detail.
c. Update the related Purchase Order Summary record.
d. Adjust Quantity-on-Hand in Item Definition entity for the relevant items.
e. Write Accounts Payable entry in Financial Transactions Log.
502 ◾ Software Engineering
4. Purchase Payments involve the entities Purchase Payments Log (E24), Purchase
Invoice Summary (E10), and Financial Transactions Log (E30) in the following way:
a. Write a record to Purchase Payments Log.
b. Update the Invoice-Outstanding-Amount in the Purchase Invoice Summary.
c. Write a record in the Financial Transactions Log.
5. Each Purchase Return impacts the entities Purchase Returns Summary (E12),
Purchase Returns Detail (E13), Item Definition (E01), Purchase Invoice
Summary (E10), and Financial Transactions Log (E30) in the following way:
a. Write a record to the Purchase Returns Summary entity.
b. Write corresponding detail records to Purchase Returns Detail.
c. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant items.
d. Adjust Outstanding-Amount in Purchase Invoice Summary.
e. Write corresponding record in Financial Transactions Log.
6. Cash Sales will impact the entities Sale Invoice Summary (E16), Sale Invoice
Detail (E17), Sale Payments Log (E27), Item Definition (E01), and Financial
Transactions Log (E30) as follows:
a. Write a record to the Sales Invoice Summary. If the customer is not listed in
the Customer entity, use the default Miscellaneous Customer, with an appro-
priate remark in the invoice’s Comment-field.
b. Write corresponding include records in the Sale Invoice Detail.
c. Write a record in the Sale Payments Log.
d. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant items.
e. Issue a receipt and write record(s) in the Financial Transactions Log.
7. Credit Sales Purchases impact the entities Sale Order Summary (E14), Sale
Invoice Summary (E16), Sale Invoice Detail (E17), Sale Payments Log (E27),
Item Definition (E01), and Financial Transactions Log (E30) as follows:
a. Write a record to the Sales Invoice Summary entity.
b. Write corresponding detail records in Sales Invoice Detail.
c. Update the related Sale Order Summary record.
d. Adjust the Quantity-on-Hand in the Item Definition entity, for the relevant items.
e. Write Accounts Receivable record in Financial Transactions Log.
8. Sale Payments involve the entities Sale Payments Log (E27), Sale Invoice
Summary (E16), and Financial Transactions Log (E30) in the following way:
a. Write a record to Payments Received entity.
b. Update the Invoice Outstanding Amount in the Sales Invoice Summary
entity.
c. Issue a receipt.
d. Write corresponding record in Financial Transactions Log.
9. Each Sale Return impacts the entities Sale Returns Summary (E18), Sale Returns
Detail (E19), Item Definition (E01), Sale Invoice Summary (E16), and Financial
Transactions Log (E30) in the following way:
a. Write a record to the Sales Returns Summary log.
Design Specification for a Generic Inventory Management System ◾ 503
These rules will be extremely useful during system development. Some of them
will be incorporated into the relevant operation specifications and included in the
project’s design specification.
C.4.3 Generic Pseudo-codes
Generic pseudo-codes are provided for the ADD operation, the MODIFY operation,
and the DELETE operation in Figures C.9, C.10, and C.11 respectively.
Figure C.16 Operation Specification for Adding to the Audit Table for Data Additions
Design Specification for a Generic Inventory Management System ◾ 509
Figure C.17 Operation Specification for Deletion from the Audit Table for Data Additions
Figure C.18 Operation Specification for Inquiry/Report on the Audit Table for Data Additions
510 ◾ Software Engineering
Figure C.19 Operation Specification for Adding to the Audit Table for Data Modifications
Figure C.20 Operation Specification for Deletion from Audit Table for Data Modifications
Design Specification for a Generic Inventory Management System ◾ 511
Figure C.21 Operation Specification for Inquiry/Report on Audit Table for Data Modifications
Figure C.22 Operation Specification for Addition to Audit Table for Data Deletions
512 ◾ Software Engineering
Figure C.23 Operation Specification for Deletion from Audit Table for Data Deletions
Figure C.24 Operation Specification for Inquiry/Report on Audit Table for Data Deletions
Design Specification for a Generic Inventory Management System ◾ 513
Figure C.26 Operation Specification for Deleting Sessions from the Sessions Log
514 ◾ Software Engineering
Figure C.29 Guidelines for Managing the System Login and Menus Infrastructure
Despite these potential enhancements, this is a solid start. Now have fun with the
development and implementation!
INDEX
517
518 ◾ Index
design phase (of SDLC), xxxii–xxxiii, 124, representing details about object types, 145–148
191–294 sequence diagrams, 162–163
importance, 297–298, 305 top-down versus bottom-up, 151, 163
design quality, 61 triggers, 158, 158, 163
design specification (DS), 90, 172, 173, 181, 193, Unified Modeling Language, 141
207–209, 287, 295, 298, 317, 443 use-cases, 152–155, 163
activities, 292, 292 diagramming techniques, 75, 76, 82, 87–88,
components, 292, 293 133–135, 141, 141, 287, 290–291
contents, 208 diagrams, xxxii, 117–138
guidelines, 208, 208–209 difference method, 331, 338
importance, 293 differentiation, 16, 49
third deliverable, xxxiv, 292–293, 292–293, 294 Diniz, W. J. S., 433
series, 286 Discrete Mathematics, 47
single document, 285 Disease Recognition System (DRS), 400, 409
design specification for IMS, 471–516 central database, 407
help specification, 499 ITC, 401
message specification, 499 OFD, 401
operations specification, 499–505, 505–515 disk storage, 119
user interface specification, 495–499, 515 distributed architecture, 202
utility operations, 499 divisions (of organization), 5, 6
design specification for IMS (database documentation, 48, 49, 51, 90, 205, 329
specification), 472–495, 515 software patterns, 423
AMS, 476, 476–484 documentation design, 86, 194, 194, 209, 292
FMS, 485, 485–493 definition, 15
SCS, 485, 486–488 document review, 105, 113–114
design specification for IMS (system overview), document symbol, 119–121, 120–121
471–472, 472–473, 502 Dumas, Myles, 124
information topology chart, 474 dummy nodes, 183
OFD, 472, 472 duration (D), 182–185, 187, 188, 452, 452
problem definition, 471 dynamic arrays, 34
proposed solution, 472 dynamic binding, 34
system architecture, 472–473 dynamic compilation, 34
desktop applications, 15, 212 dynamic files, 276
definition, 15 dynamic lifecycle, 62
desktop processing application, 92, 95 dynamic menu interface designer (DMID)
developed countries, 46 access to system resources, 387–390
developing countries, 22, 46 advantages, 377–378
development activities, 172, 173 ASMS, 384, 385–386, 387, 408
development constraints case study, 378–391, 409
MVC framework, 422 database requirements, 378–381, 379–383
development flexibility, 337, 337 enables constraints, 378
development frameworks, 94 end-user objectives, 384
development phase, 278, 293 ERD, 381
development teams, role players (agile approach), logging on, 384
94 logical views, 382, 382–383, 386, 386, 408
development time (DT), 51, 283, 330, 449–450, 451 normalized relations, 378, 379–380
diagramming, xxxii, 139–164 system constraints, 385–386, 408
activity diagrams, 160–162, 163 usefulness and applicability, 390
avoiding multiple inheritance relationships, user interface requirements, 384, 408
148–151, 163
collaboration diagram, 162, 162, 163
CRC card, 147–148 E
event diagrams, 156–158, 163 E-R diagram, see entity-relationship diagram
fern diagrams, 143–144, 163 earliest finish time (EF), 182, 183–184, 184, 188
object-relationship diagrams, 141–142 earliest start time (ES), 182, 183–184, 184, 188
object structure diagram, 145–146, 163 early binding, 35, 68
Index ◾ 523
early design model, 336–337, 339 engineering costs, 49, 50–51, 452
ease of usage (EOU), 240, 240 enhancements, 508–514, 516
economic feasibility, 46–48, 50–51, 55, 449–450, enterprise engineering
452 same as “information engineering” (qv), 73
economic life (EL) of software, 331, 331 enterprise modeling, 139, 140, 174
effective management (software engineering enterprise planning, 76, 77–82, 85
team), xxxiii, 363–372 enterprise resource planning (ERP), 32, 125
functional organization, 364–366, 367, 371–372 enterprise resource planning system (ERPS), 15,
hybrid (matrix) organization, 367, 368, 368, 406, 408
371–372 definition, 376
parallel organization, 366, 366–367, 372 entities, 97, 113, 124, 175, 224, 378, 379–381, 455,
software engineering firms, 368–371 456–462, 467, 468–470, 472, 476–495, 499,
efficiency, 16, 48, 49, 51, 257, 452 500, 500–502, 505–514
effort (E), 335–336, 336, 338–339 identification, 215, 234
effort adjustment factor (EAF), 333, 336–337, 339 identifying relationships, 216–217, 234
Electoral Management System (EMS), 391, 409 same as “data storage”, 122
ITC, 391, 392 entity specification grid (ESG), 235
OFD, 391, 392 entity-relationship diagram (ERD or E-R diagram),
electronic forms, 27 31, 93, 118, 133, 137, 142, 145, 173,
Embarcadero, 31–32, 356 229, 277
embedded mode, 333 definition, 218
empirical software engineering (ESE), 429–431, for DMID, 381
440 example (manufacturing environment), 217,
case studies, 430–431 220
controlled experimentation, 430 implementing relationships, 223
definition, 429–430 symbols, 218, 219
focus, 430 equipment costs, 50, 50–51
rationale, 430 error messages, 280, 286
surveys, 430 essential operations, 154
Employee, 66, 83, 197, 199, 220, 222, 231, event diagrams, 118, 133, 137, 140, 156–158, 163
258–259, 260 basic type, 156, 156
as “class”, 64–65 complementary to state transition diagrams,
as “object type”, 63–64, 133, 134, 196, 197, 265 156
employee records, Warnier-Orr diagram, 259, 260 example (processing purchase order), 156
encapsulation, 65, 196 purpose, 156
End-user Access Control Subsystem (EACS), 384, event-based control, 204, 209
409 event names, 134
main menu, 388, 388 event subtypes, 157, 158
main menu with only one option, 389 event supertypes, 157, 158
operations menu with limited options, 389, event types, 157
390 events, 176, 182, 183
operations menu for specific subsystem, 388, definition, 156
389 evolutionary prototype, 106
subsystem menu with only one option, 389, 390 executable diagrams, 199, 272
subsystem menu for specific software system, executive information system (EIS), 15, 397, 408
388, 389 definition, 376
end-user involvement, 12, 48, 112–113, 114 expertise availability, 45, 51
“user participation”, 10, 13, 74 expert system (ES), 11, 246, 400, 404, 408
end-users, 45, 52, 59, 94, 152, 171–172, 174, definition, 15, 376
177–178, 194, 211, 293, 298, 300, 344, 388, extended operation specification (EOS), xxx, 131,
435, 463 264–270, 266–270, 272, 505, 515
demands, 14; see also users advantages and disadvantages, 266
engineering cost estimation, 331–338 basic idea, 264
algorithmic models, 332, 332, 339 components, 265
COCOMO model, 333, 339 format recommended, 264, 265
COCOMO II model, 333–339 guidelines, 265
524 ◾ Index
International Business Machines (IBM), 11, 32, evaluation form, 315, 315
141, 280, 327, 356, 359, 400, 432, 439 probing each candidate, 315–316
IBM software product lines, 369 job specification, 22, 23
System i operating systems, 439 Joint Application Design ( JAD), 113–114
Internet of Things (IoT), 437–438, 441 Joint Enterprise Modeling ( JEM), 113–114
inter-object relationships, 174 Joint Requirements Planning ( JRP), 113–114
interoperability, 62, 408 Jones, M. C., 376
interpreter, 34 judgment sampling, 103
definition, 15 junior management, 7, 8
interpretive language, 34 just-in-time ( JIT), 447, 516
interrupt-driven model, 202
intersecting relation (associative entity), 223
interval scales, 100 K
interviewing, 99, 99, 113 Kanban, 94
Inventory Management Information System Keen, P. G. W., 376
(IMIS), 234–235 Khomh, Foutse, 430
inventory management system (feasibility factors) Kimball, Ralph, 432
economic feasibility, 449–450, 452 K-nearest neighbor algorithm, 434
operational feasibility, 449–451, 452 knowledge discovery: same as “data mining”, 432
risks, 449–451, 452 knowledge management system (KMS), 15, 376,
technical feasibility, 449–450, 451, 452 408
inventory management system (IMS), 55, 91, 95, Knowledge Query Language (KQL), 173
121–122, 129, 155, 209, 235 Koster, Ralph, 436
context diagram (Level-0 DFD), 131, 131
data entities, 129, 130
design specification, xxxiv, 471–516 L
initial system requirements, 443, 445–452
larch specifications, 271–272
Level-1 DFD, 131, 131
late binding, 35, 68, 71
Level-2 DFD, 131, 132
latest finish time (LF), 182, 183–184, 184, 186
operations, 129
latest start time (LS), 182, 183–184, 184, 188
ORD, 142
Latvakoski, J., 390
proposed object naming convention, 207
layered architecture, 415, 416–417, 417, 426
requirements specification, 443, 453–470
layered model: same as “abstract machine model”,
salient features, 126, 129
202
inventory ordering, extended-entry decision table,
lazy initialization pattern, 423, 424, 427
169
leadership analysis rules, 402
inventory storage, 446–447
leadership and motivation, 304–305,
investigation phase, 70, 249
304–305, 306
IPO chart, 129, 257, 272
leadership styles, 304, 304, 402
MAINTAIN operation, 258, 258; see also HIPO
leading, 310
chart
Le Courier’s legibility chart, 27, 28
ISR, see initial system requirements
Lee, Richard C., 162, 175
legacy systems, 33, 213–214, 240, 357–358, 360
J definition, 357
library (central holding area), 201
Jackson, P., Introduction to Expert Systems library management (CUAIS), 77, 82
(1999), 376 Likert scales, 100
Jacobson, Ivar, 11, 141, 152, 280 line chart, 28, 29, 36
Java, 31–32, 34, 64, 69, 111, 147–148, 169, 197, lines of code (LOC), 304, 329, 332–333, 336, 338,
282, 420, 438 430
Java NetBeans, 32, 446, 498 Linux, 31–32, 240, 415, 438
Jeopardy (game), 400 local area network (LAN), 345
Jiang, Rui, 433 location, 146, 146
job descriptions, 310, 314, 323, 367 lock pattern (software), 425, 427
components, 314 logical decisions, 258–259
job interviews, 314–317 logical groups, 241
528 ◾ Index
logical views, 175, 206, 266, 270, 284–285, 285, flight information management system, 396,
378, 475, 503, 508–509, 511–512, 514 397, 409
definition, 266 health information management system, 393,
DMID, 383–387, 408 394, 409
logic charts (traditional), 137 strategic education management system,
Logistics Management Subsystem (LMS), 392, 395 394–395, 395–396, 409
Lotos specifications, 271–272 manager model, 204
low-level use-case, 154, 155 manual systems, 21, 448–449, 452
Luscombe, N. M., 432 manufacturing environment
attributes list, 215
ERD, 218, 220
M O/ESG, 83–84, 229–230, 231
machine learning (ML), 431, 433–434, 440–441 relations-attributes list, 224–226
algorithms, 433–434 relationship list, 217, 218
rule-based, 434, 440 manufacturing firm’s database, 82
state-of-art, 434 many-to-many (M:M) relationship, 142, 142, 216,
magnetic and optical storage, 248, 249 217, 219, 223, 223, 378, 380
maintainability, 16, 200, 205, 266, 449 implementation, 227
MAINTAIN operation, IPO chart, 258 resolution, 224–226
Warnier-Orr diagram, 259, 260 many-to-one (M:1) relationship, 142, 216, 217,
maintenance, 62, 70, 200, 286 219, 277
maintenance phase, 90, 278 market dynamics, 271, 279
management, 55 market impatience, 10, 17–18, 301, 377
management by objectives (MBO), 320–321 marketing, 42, 44, 98, 106, 326–327, 343–344, 350,
management information system (MIS), 201, 212, 356
246 principles, 349
management issues, 35 marketing unit, 6, 7
management responsibilities, 310, 323 market research, 44, 103, 349
management styles, 310–314, 323 Marr, Bernard, 432
autocratic, 310–311 Martin, James, 30, 58, 61, 72, 74–75, 113, 156, 175
contingency leadership, 313–314 modeling pyramid, 75, 139, 140, 172, 174
egalitarian or democratic, 311 Maslow’s motivation theory, 305
laissez-faire, 311 mathematical principles, 12
path-goal leadership, 311–312, 313, 321 mathematical proof, 106–107, 113–114
relations-oriented, 313 McGregor’s motivation theories, 305
super leader, 312–313, 321 mean, 103
task-oriented, 313 mediator pattern (software), 425
transformational, 312 memory taxation, 238
management support systems (MSSs), xxxiv, 125, menu design, 377–378
284, 373 menu-driven interface, 240, 240–241, 241,
anchored by database systems, 373–410 246, 253
data-centeredness, 376, 408 menu hierarchy tree, 241
definition, 15 menu interface, 277
DMID (case study), 378–390 menus, 206, 381, 382–383, 383, 385, 387–390,
overview, 375–376, 419 495–496, 498–499, 515, 516
security (through database design), 377–378 menu system, 499
management support systems (project ideas), message design, 86, 194, 194–195, 209, 292
390–408 messages, 71, 152, 162–163, 196
cognitive leadership analysis system, 402, 403, method creation, 140
409 method design, 140, 140, 174
CUAIS, 406, 407–408, 409 methods, 196–197, 257
disease recognition system, 400, 401, 409 definition, 64
electoral management system, 391, 392, 409 method signatures, 68, 71
financial information management system, metropolitan area network (MAN), 345
397–398, 399, 409 microfiche, 248, 249
financial status assessment system, 404–405, 409 microfilm, 248, 249
Index ◾ 529
Financial Management System, 133, 133, 397, object-oriented diagramming techniques, 87, 141,
399 141
Financial Status Assessment System, 404, 405 object-oriented domain analysis (OODA),
Flight Information Management System, 396, 110–111, 114
397 object-oriented enterprise modeling (OOEM), 59
Health Information Management System, 393, identical to OOIE, 74
394 object-oriented environment, 67, 133, 257, 259,
IMS, 454, 455, 472 276
Strategic Education Management System, 394, database specification, 229
395–396 object-oriented GUI, 63, 463
object identification, 107–112, 114 object-oriented ICASE tools, 32, 59, 61, 70
descriptive narrative approach, 108, 108, 114 object-oriented information engineering (OOIE),
reusing hierarchies, individual objects, classes, xxxii, 59, 73–87
111, 114 business area analysis (BAA), 82–87
rule-of-thumb approach, 108–109, 114, 155 definition, 87
using class-responsibility-collaboration diagramming techniques, 75, 76, 87
method, 111–112, 112 engineering the infrastructure, 74–75
using decomposition, 109–110, 114 enterprise planning, 76, 77–82, 86–87
using definitions of objects, categories, software system construction, 86–87
interfaces, 109, 114 software system design, 86, 86
using generalizations and subclasses, 110, 114 object-oriented methodologies (OOM), xxxii, 16,
using OODA or application framework, 25, 30, 57–72, 93, 204, 271, 333
110–111, 114 benefits, 61, 62, 72
using personal experience, 111, 114 characteristics, 61, 61
using things to be modeled, 109, 114 encapsulation and classes, 65
object implementation, 65 engineering process (overview), 69–70
object instance, 64, 334 information engineering, 59, 60, 70
definition, 63 inherent bent, 64
classification guide, 334 inheritance and amalgamation, 65–66, 71
object integration diagram, same as “collaboration integration of hi-tech, 60–61
diagram” (qv), 162 interfaces, 68, 71
object interaction, 162–163 late binding, 68, 71
Objective C (from C), 34 methods, 64, 71
object naming, 206, 207 multithreading, 69, 71
object naming convention (ONC), xxx, 474, 475 objects and object types, 62–63, 71
object operation matrices, 82 operations, 63–65, 71
object-operation matrix, 82, 85 perception versus reality, 69
object-oriented analysis and design (OOAD), 58, polymorphism and reusability, 67–68
60–61 rationale, 58
object-oriented (OO) approach, 15–16, 18, 25, requests, 66–67, 71
69–70, 82, 126, 194 object-oriented modeling, 33, 34
object-oriented CASE (OO-CASE) tools, 32, 33, 60, aspects, 139
62, 64, 68, 118, 156–157, 173, 175, 178, 199, object-oriented modeling hierarchy, 211, 256
209, 272 object-oriented (OO) techniques, 58
benefits, 33, 33 object-oriented paradigm, 118, 118, 120, 124, 137,
categories, 32–33, 33 139, 165, 218
object-oriented code generation, 33, 34 object-oriented programming languages (OOPLs),
object-oriented database, 61, 142 34–36, 58–59, 61, 64, 70, 148, 282
object-oriented DBMS (OODBMS), 30 categories, 34
object-oriented design (OOD), 63, 195–196, 200, definition, 34
209, 247, 255, 264, 272 features, 35
advantages, 198–199 object-oriented programming principles, 34
facilitates amalgamation, 197, 199 object-oriented RAD tools, 34, 498
facilitates inheritance, 197, 198–199 object-oriented software, 63–65
operations design, 256 object-oriented software construction process,
what, wherefore, how, 196 172–173, 173
Index ◾ 531
Oracle, 31–32, 198, 276, 280, 327, 356, 359, 376, Step 3: determining ES, EF, LS, and LF for each
432, 439 activity, 182, 184, 184
software product lines, 369 Step 4: critical path determination, 182, 184
O-R diagram, see object-relationship diagram Step 5: sensitivity analysis, 182, 184–185, 185
ordinal scales, 100 PERT diagram, 53, 91, 186–189
organization PHP, 420, 420, 426
definition, 18 pie chart, 28–29, 36
functional areas, 5–7 Platform as a Service (PaaS), 440
organizational chart, 6 platform independence, 62
organizational theory and behavior (OTB), 304 Point of Sale Subsystem (POSS), 446, 454, 455,
organization as system, 5–6 472, 472–473, 499, 502, 516
organization chart (software engineering firm), UITC, 498
369–371 pointers, 34
organization (information levels), 7, 7–9 Pokémon Go, 437
importance in software engineering, 8 polymorphism, 67–68, 71, 197, 199, 282, 414, 417,
junior management and operational staff, 7, 8 424
middle management, 7, 8 port management subsystem (PMS), 397
top management, 7, 7 post-architecture model, 336–338, 337–338, 339
organization theory, 5 capability weights schedule, 337
output design (user interface), 246–247 post-condition rule, 176, 176
output method, 247–249, 249 pragmatism, 47, 71, 86, 178, 204–205, 218, 222,
audio, 248, 249 257, 301, 313
choice of appropriate, 248 precedence, 337, 337
magnetic and optical storage, 248, 249 pre-condition rule, 176, 176
microfilm, microfiche, 248, 249 presentation software with hyperlinks, 250, 252
monitor display, 247, 249, 250, 251–252 president (of organization), 6, 6
print, 247, 249 Pressman, Roger, 332
outsourcing, 86 primary key attributes, 455, 456–461
overloading (operation), 67, 71 primary key index, 83–84
overriding (inherited operation), 67, 71 primary keys, 474, 475–495, 500
primary operations, 154
printed output, 247, 249
P design guidelines, 249
Page Maker, 94 problem definition, 42–44
panel-by-panel help facility, 278, 286 constraints of system, 42–43
parallel organization, 366–367, 368, 372 guidelines, 42
structure, 366 identification aids, 43
parent class, 66, 197 identifying system void, 43–44
Pascal, 169 problem statement language (PSL), 271–272
Pascal “procedures”, 64 problem synopsis, 90
patched-up prototype, 105 procedural and derivation rules, 501–503
payback analysis, 45–46, 46 procedural programming, 65, 333
PDM strategic factors, 51, 52 procedure analysis chart (PAC), 118, 123–125, 137
perception, 69 example (credit check procedure), 123
performance, 200 process, 119–120, 131
performance evaluation, 319, 321 process maturity, 337, 337
personal computers (PCs), 438 process-oriented flowchart (POF), 118, 119, 121,
personal experience, 111, 114, 193, 215, 304, 332 121–122, 135, 196, 291
PERT, see Program Evaluation and Review process symbol, 119, 121, 121, 126, 129
PERT and CPM, 181–185, 188, 302 characteristics, 121
advantages, 181–182 product, 146, 147
example, 182 product documentation, 9, 293–294
origins, 181; see also critical path method product line, 146, 147
PERT and CPM (steps required) product overview document, 278–279
Step 1: tabulation of project activities, 182, 182 product owners: role players (agile approach), 94
Step 2: drawing PERT diagram, 182–183, 183 production documentation, 278–280, 286
Index ◾ 533
software engineering projects, 189, 295 agile development model, 13–14, 87, 94,
beginnings, 289, 290, 294 285–286, 298
selection, 289, 290 components based model, 12, 14, 298
software engineering standards, 86, 430 evolutionary development model, 10
software engineering team, xxxiii, 13, 55, 310 formal transformation model, 12, 14, 298
organizing effective management, 363–372 iterative development model, 10–11, 13–14, 87,
software engineer (SE), xxxi, 21–37, 55, 301, 298
309–310 phased prototype model, 10, 13–14, 86, 298, 348
“administrator” classification, 387 rapid prototype model, 11–14, 298
authority, 23 waterfall model, 9–10, 14, 87, 89, 204, 285,
core functions, 23, 24, 36 287, 298, 333
desirable qualities, 23, 24, 36 software lifetime, 357
effective communication, 317 software maintenance, 336, 353–355, 360
historical role, 21–22 cost, 357, 360
interviewing job applicants, 314–316 software modifications, 354–355, 360
job description, 22–24 software upgrades and patches, 356–357, 360
management issues, 35–36 software management, xxxiii, 9, 341, 353–361
modern role, 22 decision-making factors, 354, 360
preserving accountability, 319–321 legacy systems, 357–358, 360
start of career, 353 software integration, 358–360
software engineer (tools), 24–34, 36 software maintenance, 353–354, 357, 360
coding systems, 25–26, 36 software reengineering, 359–360
data analysis charts, 28, 36 tasks, 353
forms design, 26–27, 28, 36 software modeling and design tools, 30, 36
modeling techniques, 30 software modifications, 354–355, 360
object-oriented programming languages, 34, 35 adaptive changes, 354
technical documents, 28–29, 36 corrective changes, 354
software enhancements, 354; see also enhancements, 354
enhancements request form, 355
software error, zero tolerance, 282 software patches, 356–357, 360
software evaluation, 30, 33 definition, 356
software frameworks, 414, 419–421 software patterns, 423–425, 426
augmenting functionality of existing language, behavioral, 425, 427
420, 420, 426 concurrency, 423, 425, 427
differentiated from “architectures”, 419 creational, 423, 424
features, 419 documentation, 423
improving existing functionality, 420, 420–421, examples, 423
426 overlap with architectures and frameworks,
overlap with architectures and patterns, 427 427
structural, 419, 420, 426 structural, 423, 424, 427
types, 420, 421 software plan, 17
software generations, 58 software planning and development tools, 30–34,
software implementation, xxxiii, 9, 341, 343–351 31–32, 145, 188
changeover, 347–350 software price, 326
code conversion, 346, 346–347, 349–350 factors, 327, 338
deliverables, 350 software product, 305, 339, 350
importance, 343–344, 349 software product documentation, 298
installation of system, 345–346, 349–350 software productivity evaluation, 328–331, 339
marketing, 349 function-related metrics, 329–330, 330, 338
operating environment, 344–345, 349 size-related metrics, 328, 328–329, 338
training of users, 348–349 value added, 328, 330–331, 331, 338–339
software industry software quality, 12, 17, 51, 70, 205, 450, 451
response required to huge demand, 58 procedure for maintaining, 299
urgent concern, 58 software reengineering, 4, 358, 360
software integration, 358–360 main activities, 359
software life cycle, 9–14, 18 software research, 4–5, 17
Index ◾ 537
systematic random sampling, 102 DMID case study, 378–387, 391, 408
system business rules, 98, 113 system security mechanisms, 98, 113
system catalog, 212, 275–277 system security requirements, 91
building, 276–277, 284 system state, 196
contents, 275–276, 277 system state transitions, 172–173
definition, 286 systems analyst (SA), 22
top-down approach, 277 systems and procedure analyst, 21
using, 277 Systems Controls Subsystem (SCS), 471–472,
system components, 86–87, 90, 97, 132, 171–172 472–473, 499, 502, 508, 508–515, 516
system-component-business-area matrices, 82, 85 database specification, 493, 494–496
system constraints, 91, 384–387, 408 O/ESG, 493–495, 515
external, 42–43 UITC, 498
internal, 43
system construction, 75, 86–87, 139, 140, 174
Systems, Applications, Products (SAP), 32 T
system controls, 204, 209 TCP/IP, 418
system data, 284–285, 287 TCP/IP network model, 416, 417
system data integrity rules, 500 team cohesion, 337, 337
system design, 75, 87, 139, 140, 174 Team Developer, 32, 265
guidelines, 86, 86 team leaders, 316
OOIE, 86, 86 team motivation, 295
system documentation, 206, 239, 277 technical design, 178
system help facility, 278–279, 286 technical documents, 28–29, 75
content, 279 technical feasibility, 45, 50–51, 55, 449–450, 451
structure, 278 TELOS feasibility factors, 51, 52
System i (formerly OS-400), 240, 278 thousand lines of code (KLOC), 332, 332
system information entities, 97, 113 thread-pool pattern (software), 423, 425, 427
system installation, 345–346, 349–350 threads, 159, 432
system integration, 152, 204–205 throw-away prototype, 106
system integration specification, 194, 194 time, 13, 17, 48, 50–51, 70, 101, 105, 110–111,
system logic, see decision models for system logic 113, 146, 162–163, 182–186, 187, 247–248,
system manual, 278–279, 280, 286 256, 259, 266, 281–282, 291, 293, 295, 301,
deliverable, 350 348, 356, 371, 377–378, 409, 450–451
system mapping, 382–384, 385 time constraints, 98; see also market impatience
system menu, 239 time value of money (TMV), 47
system modeling, 291 top-down approach, 93, 124, 126, 195
system names, 291 defining system catalog, 277
system operations, 98, 113, 246, 381 diagramming, 151, 163
system overview, 90 top management, 7, 7
system overview diagram, 76 topology charts, 124–126
system requirements total quality management (TQM), 299
symbols, 70 traditional relationships, 216
system resources, 284, 287 traditional system flowcharts, 119–122, 137
system rules, 91, 165, 172–177, 276, 499, 500, 500 symbols, 119
categories, 174 training of end-users, 345, 348–350, 450–452
declarative versus procedural statements, 175 instructors, 348, 349
definition, 173 transition arc, 134
specification, 176–177 transition diagrams, 196
types, 175–176, 176–177 translator pattern, same as “adapter pattern”, 424
system security, 283–285, 287, 375 transparency, 59, 178
access to system, 283, 283–284, 287 definition, 69, 71
access to system data, 284–285, 287 trial model (of software), 105
access to system resources, 284, 287 triggers, 158, 163
database design, 377–378 relationship with operations, 158
details stored about user account, 283 rules, 185
Index ◾ 539