SlideShare a Scribd company logo
1 of 60
1. Emergence of Software Engineering
In the software industry, we have seen the complexity of
computer-based systems increase dramatically over the past
decades along with advances in technology. This new
technology has increased the demand for computer-based
systems to control many infrastructures with software. As a
result, designing and building cost-effective, reliable, and high-
quality software has become the focus of software engineering
in the computer industry.
In the past the processes used for designing and developing
software were very informal, which contributed to the rise in
development and maintenance costs. The results of ad hoc
development processes contributed to a higher percentage of
unreliable and lesser quality products entering the marketplace.
Many accidents resulted from failures in computer-based
systems with hardware devices that were controlled with
software. At the time, the industry was considered to be in a
crisis state, which then led to the emergence of new practices
and methods in software engineering.
Technological advances have had a big impact on the
complexity level required in software systems. The emergence
of new communication protocols, hardware devices, and
graphical user interface components have placed a greater
demand on software engineers to design quality, reliable, and
safe software.
A Brief History of Software Engineering
In the 1950s and the early 1960s, the various engineering
disciplines were beginning to analyze how aspects of the
engineering field could be applied to methods used in
developing software products. As computing power evolved
over the decades, the demand increased along with the
complexity of the problems that needed to be addressed in the
design of software. The term software engineering was
introduced in 1968 at the first international software
engineering conference, held by the North Atlantic Treaty
Organization (NATO) Science Committee (Mahoney 2004).
Many practitioners believe this is the milestone that marked the
emergence of the software engineering discipline.
Software was developed to control critical hardware devices in
the mid- to late-1960s and early 1970s. During this time, cases
emerged that involved operational errors and accidents resulting
in the loss of human lives and damage to property. Defects in
software were uncovered, which heightened public awareness to
the need for better quality and reliability of software. The
escalating cost of building quality and reliable software was on
the rise in the computer industry and the demand for skilled
programmers could not be met. The state of software
development was viewed by practitioners as being in a "crisis"
state and was commonly referred to as the software crisis.
In response to the software crisis, researchers and practitioners
have been trying to develop a set of methodologies, processes,
and tools as the "silver bullet" for building software. The
combination of these methodologies, processes, and tools is
what comprises the field of software engineering, which
continues to emerge today.
The software crisis can be summed up in economic terminology:
there is a greater demand for software than there is a supply.
The software in question is custom software written to solve
large, unique data-processing problems. Usually, the small
ubiquitous problems can be addressed by some combination of
commercially available software products, such as word
processing programs, spreadsheets, and so on. But these types
of problems are not the focus of this course. Our focus instead
is on large, unique problems that require custom software
solutions.
Software Engineering Defined
To fully understand the definition of software engineering, we
need to define what is meant by the term software. Software is
much more than just the code of a computer program. Software
is accompanied by a set of documentation that is necessary to
describe the details of the requirements, design, and any
external aspects of the software that are necessary for it to
execute successfully. These documents include any
configuration files and any aspects of the external environment
that surround the building and use of the software. We can refer
to these items as a collective whole, the software system or the
software configuration.
Software has unique characteristics that differ from hardware,
which is manufactured and tangible. Software is abstract and
intangible and is not manufactured or governed by physical
laws. Creative programming solutions are required by humans
because software is developed from a conceptual idea. There are
four characteristics that best describe software: its
maintainability, dependability, efficiency, and usability. These
characteristics are inherent of the design process that was used
to build the software. The uniqueness of programming solutions
makes these characteristics difficult to measure.
In order to build software, we use processes to address a unique
problem to be solved or a particular need to be satisfied.
Software engineering focuses on improving these processes to
build a better quality and more reliable product. In early times
these processes were often ad hoc and chaotic and resulted in
poor quality and unreliable software that was expensive to
maintain after deployment. The rising cost of maintaining
software was very expensive and unacceptable by software
companies. The ultimate goal of good software engineering
methodologies is to reduce these maintenance costs by building
a better product earlier in the development phases of the life
cycle.
To define software engineering, we can look at the definition
provided by the Institute of Electrical and Electronics Engineers
(IEEE, 1993)
1. The application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance of
software; that is the application of engineering to software.
2. The study of approaches as in 1.
The IEEE refers to a "systematic, disciplined, and quantifiable"
approach to developing software that can be measured for
effectiveness to allow for continuous improvement. As we
mentioned earlier, software is intangible and developed from a
conceptual idea. However, not all software teams may be
receptive and suitable to follow a strict disciplined process.
Pressman (2005) stresses that a process needs to be designed to
foster creativity and to be adaptable and agile to change.
It should be noted that the IEEE definition does not provide the
technical "how tos" to build software. In order to build quality
software, companies need to be committed to developing sound
processes, which requires the establishment of a set of methods
and tools. When we develop these processes we also need to
consider support for the business needs of the organization or
company.
If you search the Internet you can find a variety of automated
tools that have been developed to provide support for software
processes and methods. These tools are referred to as computer-
aided software engineering (CASE) tools. CASE tools have
been designed to ease software development and to allow for
integration of information from one process to another. It is
important to understand that complex processes rely on
individuals' judgment and creativity, so not every process can
be automated by using a CASE tool. We will elaborate more on
CASE tools in section 3.
Social and Ethical Responsibility
Software engineering is a respected profession and engineers
are expected to use good judgment when developing software
products. Software engineering is no different than any other
engineering discipline. Software engineers are bound by the
constraints of the legal and social framework when developing
software (Sommerville, 2004).
Software engineers possess technical skills and they need to use
them in an honest and moral way when developing software
products. Applications to solve a wide range of problems are
created and used in society, and society expects the software to
be correct and of high quality. Companies entrust engineers
with their assets and private data. It is the responsibility of the
software engineer to maintain professionalism in the areas of
confidentiality, competence, intellectual property rights, and
computer misuse (Sommerville, 2004).
Professional software engineers are encouraged to join
organizations in which ethical standards are established. The
Association for Computing Machinery (ACM) and IEEE are
known for establishing rules of professional conduct and ethics.
2. Introduction to Systems Engineering
In this section we will define system engineering and list some
of its distinct characteristics. To help you understand the
development of the software component within the system
framework, we will introduce the basic system life cycle model.
Because software requirements are derived from system
requirements, we will introduce the System Specifications
document.
Definition of System Engineering
The basic definition of system engineering (Blanchard, 1998, p.
12) is:
… the effective application of scientific and engineering efforts
to transform an operational need into a defined system
configuration through a top-down iterative process of
requirements analysis, functional analysis and allocation,
synthesis, design optimization, test and evaluation, and
validation.
This definition highlights the various phases in the life cycle of
a system, which we will discuss further in the next section.
The Department of Defense (1996) defines system engineering
as the … process that shall:
· Transform operational needs and requirements into an
integrated system design solution through concurrent
considerations of all life-cycle needs (i.e., development,
manufacturing, test, and evaluation, verification, deployment,
operations, support, training, and disposal).
· Ensure the compatibility, interoperability, and integration of
all functional and physical interfaces and ensure that system
definitions and design reflect the requirements for all systems
elements (i.e., hardware, software, facilities, people, data).
· Characterize and manage technical risks.
The Department of Defense's definition is similar to the one
provided by Blanchard in mentioning the life cycle, but it also
stresses risk-management activities as a separate process.
System Engineering Characteristics
System engineering has distinct characteristics (Stevens, n.d.)
that make its life cycle unique from software engineering:
· handles communication among disparate disciplines, each with
its own technical language
· is primarily a project management activity
· deals with multiple semi-independent subsystems
· deals with engineering requirements, constraints for hardware
· is difficult to change
· has mechanics and architecture that make progress easier to
measure
· is unlikely to require taking as many risks
· has a concrete working environment dependent on hardware
· has components that are manufactured or replicated and that
can be damaged
· has upgrades requiring physical contact to implement because
systems contain tangible components
· has development costs that are easier to determine
· has the primary maintenance goal of returning to its original
state by repairing units
If we think of system engineering from the perspective of
hardware, these characteristics can be easily understood. After
all, hardware is tangible, and it can be manufactured.
System Boundaries and Environment
Before we discuss the life cycle of a system, we need to define
what is meant by a system that involves one or more computers
and software. The term system is used loosely in society to
define systems that emerge from organizations and institutions,
systems that consist of hardware components, and systems that
consist of hardware and software components. Local and federal
governments are often referred to as a system. We also refer to
various institutions, the educational system, and the financial or
banking system. Hardware systems involve mechanical parts
that work together to perform a specific task; power tools are
good examples. Systems that contain both hardware and
software components are best described as integrated
subsystems that work together to accomplish an objective.
Sommerville (2004, p. 21) defines a system as "a purposeful
collection of interrelated components that work together to
achieve some objective." The focus of our systems engineering
discussion will be on systems that contain hardware and
software components, or subsystems, which are interrelated. An
example is a self-service checkout system that is used in stores
by customers to purchase items.
A system operates within a set of boundaries and limitations
unique to its overall environment. These are not considered part
of the overall system itself, but the mechanisms and constraints
can affect the system state at any given time. Anything that
crosses the system boundary is defined as the system's distinct
set of inputs and outputs. The following diagram demonstrates
these relationships.
Click on each item in figure 1.1 to read its description and see
some examples.
Figure 1.1
The System Environment
As you review the contents of this diagram, remember that a
system has a designated purpose and it responds to an identified
need. Further analysis of any system will result in a unique set
of inputs, outputs, and external constraints that are imposed on
the system, as well as the required mechanisms to achieve the
desired results. This system framework contains all the
necessary products and processes to fulfill the intended need.
Systems are functionally dependent on their physical and
organizational environment. It may also be the intent of the
system to change its environment.
System Components or Subsystems
Functionality within a system is performed at the component
level. A component can also be referred to as a subsystem.
Components require the involvement of engineers from different
disciplines working together to perform all the necessary
functions required within the entire system. Interdisciplinary
involvement consists of engineers from the software,
electronics, mechanical, structural, civil, human factors,
environmental, and architectural disciplines. Domain specialists
and representatives from the user community should work with
the engineers. The complexity level of the system, required to
satisfy the functionality, determines both the number of
subsystems and the interrelationships of the disciplines
necessary to satisfy the system requirements.
The diagram below shows the various components of a system.
Figure 1.2
Components of a System
Relationships between subsystems are defined in their
interfaces. These interfaces need to be defined at the system
level.
System Life Cycle
Now that we have defined a system as integrated hardware and
software components working together in its environment to
fulfill an objective, we will discuss its life cycle. The basic life
cycle of a system begins with identification of a need to be
fulfilled through the system's development, implementation, and
retirement phases. The various stages of the system life cycle
are identified in figure 1.3.
Figure 1.3
System Life Cycle
In order to develop software, it is necessary to understand how
the software interacts with the hardware to fulfill the need or
objective of the system. The role and boundaries of the software
subsystem need to be well-defined within the system
framework.
To satisfy the need for the system, a solution is established and
presented to the customer in a document called the system
specifications (SS). The SS describes what is needed by the
system, its subsystems, and the interfaces that need to exist
between the subsystems and other systems. When the SS is
complete it is submitted to the customer for approval. Once the
SS is approved by the customer, the life cycle for each
subsystem can independently commence. In figure 1.4, we
illustrate the parallel development cycle of hardware and
software subsystems.
Figure 1.4
Parallel Development of Hardware and Software Subsystems
System Specifications
In figure 1.4, we can see that the SS outlines the "top-level"
requirements for the overall system. Defining the requirements
for the software subsystem can commence after the system
requirements are agreed upon by the stakeholders and the
engineers. Subsequent development phases of software and
hardware can continue in parallel and then be integrated for
testing on a scheduled date as a whole working system.
Integration of software and hardware can take months, even
years, depending on the size and complexity of the system.
Development of a project begins at the system level by stating
its desired function. The functionality of the system is relayed
to designers as a set of requirements that address the question
"What is this system supposed to do?" At this point in the
development life cycle, the system is viewed as a whole
working unit encompassing the software and the hardware.
System engineers are responsible for defining the requirements
and the interfaces for the whole system and designing the
components of the system operations. The System
Specifications document is prepared by the engineers, and it
defines the architecture, the functional and non-functional
requirements, and defines the necessary interfaces between all
the components. We will concentrate on the required interfaces
between the software and hardware components in the
architecture for a self-service checkout system.
We view a system as a conceptual model. Consistency and
communication are the goals of the specifications phase in the
system life cycle. General guidelines for the SS include:
· stating the goals of the system
· defining the system boundary, which includes any constraints
imposed on the system
· specifying the inputs and outputs
· identifying the various components
· defining the structure
· specifying any interactions between the components
· identifying any safety concerns
Upon its completion, the SS document is submitted, reviewed,
revised, and approved by all of the stakeholders and serves as
the basis for the top-level design that defines the system
architecture.
Architectural Diagram
The basic process for gathering system requirements consists of
effective communications between the customer and the
technical community and a thorough understanding of the
environment in which the system is to operate. To illustrate the
system and its environment, a top-level architectural diagram is
used. Pressman (2005) describes the architectural context
diagram (ACD) as a block diagram that represents the flow of
information into and out of the system. Refer to the following
diagram to view a graphical representation of a self-service
checkout system as seen in Wal-Mart and major grocery store
chains.
Figure 1.5
Architectural Context Diagram of Self-Service Checkout System
Figure 1.5 represents all the external entities (shown as
rectangles) or terminators and the necessary relationships to
produce a working checkout system. The proposed software
subsystem is placed in the middle of the diagram (shown as a
circle) surrounded by the external entities. The software
subsystem is treated as a black box, without regard for the
internal workings. The connecting lines with directional arrows
reflect the expected flow of data inputs and outputs between the
external entities and the software component. You should note
that each directional line has a label describing the data flow or
object. Proper labeling of all inputs and outputs at the system
specifications stage will form the foundation for subsequent
definition of the operational scenarios and data objects during
software requirements development. We will discuss operational
scenarios later in this module and data objects in modules 2 and
3.
IEEE Guide for Developing System Requirements
Specifications
The IEEE has provided some guidelines for writing a System
Specifications document in the IEEE Guide for Developing
System Requirements Specifications, IEEE Standard 1223a-
1998. Later in this module we will discuss diagrams that can be
used to graphically represent information that needs to be
included in the SS. The use of diagrams is recommended in
technical documents and all diagrams should be supplemented
with a textual description.
3. Software Process and Product
In this section we will study the discipline of software
engineering by reviewing the development process and the
software product. There are many software products, with code
being just one of them. Process and product are really two sides
of the same coin. The goal of the process is the product, and
there's no product without the process. To accommodate the
differing roles of software products, we will study several
process models that vary the sequence and frequency of the
basic tasks of software development. The basic tasks, however,
are invariant and are illustrated below in one of the predominant
software development processes, linear-sequential:
Roger Pressman defines a software process as "the approach
that is taken as software is engineered" (Pressman, 2005, p. 21).
This approach includes all the technical methods and automated
tools that create the process used to make a complex software
product. You should keep in mind that a well-designed process
is customized to be applicable to the developer's work culture
and to stimulate creativity and support business decision
making. One process does not fit all projects.
As you can imagine, many activities are involved in engineering
software products. These activities include more than just the
development cycle of software, analysis, design, code, and test.
To convey these activities, Pressman outlines a framework to
form a foundation for a complete software process for any
project (Pressman, 2005, pp. 22-23). This common process
framework provides support for umbrella activities and is
outlined below in figure 1.6; it is applicable to all types and
sizes of projects.
Figure 1.6
Process Framework with Umbrella Activities
You should note that the most important element of this
framework is communications. It is essential for effective
communication to be present in all activities used in the phases
of the life cycle of software.
Process Improvement
Organizations that develop software products need to improve
their development process for several reasons. The demand for
software today requires high-quality systems to be delivered to
the customer at a low cost and within a specified time frame.
The organization is faced with challenges to meet this demand
and to produce software products within tight constraints. A
greater challenge exists for the development of the safety-
related system because software and project risk factors can
impede the completion of the final product. There is no
guarantee that a software system can be 100 percent safe and
reliable, but studies have shown that implementing a good
technical and management process in the development life cycle
can help reduce the chance of software and project failures.
At this point in our discussion, let's define a process and its
maturity in the context of the development of a software
product. A process is best described as the means used to bring
together the necessary knowledge that is integrated into the
final product (Pressman, 2005). This definition includes the
means of communication and the software tools used to aid in
this knowledge integration. Maturity of a process describes the
effectiveness of the means that are being used.
Process Improvement Models
Organizations can improve their technical and management
process and lower their risk factors by following the guidelines
of the Capability Maturity Model Integrated (CMMI) process
improvement model. We will discuss how this model can help
organizations achieve a higher level of process maturity.
A process improvement model offers a framework for assessing
the current state of an organization's way of developing
software. This blueprint of effective activities is used to
evaluate the current state of the process and to offer a baseline
for improvement to reach a higher level of maturity.
The underlying premise of process improvement is based on
Total Quality Management principles that were taught by
Shewhart, Juran, Deming, and Humphrey (1989). These
principles stress the importance of the process that is used to
develop and maintain a product. The process used to develop
the product will determine its overall quality; if a high-quality
process is used in software development, the product will also
be of high quality.
Figure 1.7 illustrates the relationship between process
improvement and a process model.
Figure 1.7
Achieving Process Improvement
Phillips (2003) provides several reasons why process models
should be used by an organization or company that develops
software:
· to set process improvement objectives and priorities
· to improve the current process
· to provide guidance to achieve a mature process
A process model can only offer guidance on what to do to
improve maturity of the process. No specific direction is given
on how to actually do it (Phillips, 2003). Each organization
must customize its activities according to its business objectives
and the type of product it produces. It should be noted that
process models vary and not all guidelines may be applicable to
a particular project or application.
To help select a process model, Pressman (2005) recommends
making the process model decision based on several factors:
· the nature of the project and application
· the methods and tools to be used
· the required controls and deliverables
Humphrey (1989) further defines a software process as all the
tools, methods, and practices that are used in the creation of the
software product. Some examples of activities that are used in a
process during the development life cycle are:
· software quality assurance
· configuration management
· project management
· subcontract management
· requirements management
You will notice Humphrey has highlighted activities in the
software process that are relative to managing the software
system or software configuration.
A summary of benefits (Phillips, 2003) derived from studies on
organizations that have followed process models are categorized
as improvements in the following areas:
· predictability of schedules and budgets
· development cycle time
· productivity levels
· quality (measured by the number of defects)
· customer satisfaction
· employee morale
· return on investment
· cost factor of quality
Process Assessment
To assess an organization's software process, all activities used
in building the product must be evaluated against a set of
standards. These standards provide guidance because the
process used in defining the standards has been proven effective
over time. Successful evaluation of process maturity is achieved
by following a framework that can offer direction to the
organization and its internal operations. Standards provide a
gauge that can be used to determine whether the process is in
compliance with the standard.
Process assessment is used by organizations and companies in
different ways:
· to determine the capability of a development organization in
the selection process
· to determine the organization's capability to keep in line with
its business aims
To summarize our discussion on process improvement,
companies can use process assessment as an evaluation tool or
incorporate it into their internal operation. The selection of a
development organization to build software is a very important
task, especially for systems that contain safety-critical
components. Companies can also adopt process assessment to
determine their capability to stay in line with their business
aims, to stay marketable.
Capability Maturity Model
In 1984, Carnegie Mellon University, in response to software
needs in the Department of Defense (DOD), formed the
Software Engineering Institute (SEI). The SEI developed the
Software Process Maturity Model as part of its early work at the
DOD. In 1986, the SEI initiated the Software Capability
Evaluation (SCE) project as requested by the United States Air
Force (Humphrey, 1992). After several more years of
refinement, in 1991, the SEI developed the Capability Maturity
Model (CMM) at Carnegie Mellon to denote a class of maturity
models.
Over the years, the SEI has revised the CMM based on new
knowledge acquired from studies conducted on private industry
and government. This new knowledge was compiled based on
process assessments, capability evaluations, and feedback
submitted by the participants in the studies. The conceptual
framework for the CMM was developed by Watts Humphrey,
who acted as the advisor during the refinement process of the
model (Paulk et al., 1993).
In December 2001, the Software Engineering Institute released
the Capability Maturity Model Integrated (CMMI), which was
an upgrade from the CMM. The CMMI is currently being
supported by the SEI and followed by organizations and
companies in the computer industry.
In module 5 we will discuss project management issues,
continue our discussion on process improvement, and take a
closer look at the key activities involved in CMMI.
Computer-Aided Software Engineering (CASE)
In this section we will introduce computer-aided software
engineering tools (CASE) that were developed to support
process activities. We will discuss the different types of CASE
tools that are available to automate process activities by
classifying them according to functionality. It should be noted
that many tools exist in the marketplace and some of these
packages contain a full set of tools to support multiple
functions.
Types of CASE Tools
The software development process is information-intensive. The
information generated takes different formats as software
development progresses through the tasks of analysis, design,
code, and test. Much of the information is textual, e.g.,
requirements, design descriptions, source code, test case
descriptions, and so on. The remainder of the information is
either graphical or binary, e.g., data flow diagrams (DFDs),
entity-relationship (E-R) diagrams, state-transition diagrams
(STDs), flowcharts, executable code, and so on.
For large systems, the amount of information that must be
created, managed, controlled, and evaluated is far too great for
developers to manage with paper and pencil. For this reason, the
use of automated tools to assist in the development of software
is crucial. Tools used for this purpose are called CASE
(computer-aided software engineering) tools.
If you search the Internet you will discover that CASE tools are
available for nearly every aspect of software development. To
keep them straight, it is useful to view them in taxonomy.
Sommerville (2004, p. 87) organizes tools by their specific
function or utility. Read through these descriptions and identify
their different roles in development. Note that these functions
cover the range from documentation to support for testing. The
sale of such tools is an active and important marketplace,
essential for modern development projects. Care must be
exercised to select those tools most suitable for the project at
hand. An inappropriate tool can do more harm than good by
diverting effort from development.
Figure 1.8
CASE Tools Classified by Functionality
Most CASE tools available today handle one or more different
formats and support one or more development tasks, but fall
short of supporting all tasks across the life cycle. For example,
several commercial database front-end application programs
assist in developing schema code. The software engineer defines
the data schema (i.e., data model) either textually or
graphically. The CASE tool will automatically generate the
executable code to implement that schema. This CASE tool
manages both textual and binary information formats, but only
for the design and coding tasks, not for analysis or test.
One common perception is that the selection and use of a CASE
tool will solve any problems associated with development.
Unfortunately, nothing could be further from the truth.
Although a tool can help to develop a product, and whereas not
using tools can doom a project to failure (particularly if the
system under development is large and complex), simply
providing tools, by itself, is not sufficient to ensure success.
The tools must be properly used in conjunction with a
disciplined process.
In module 5, we will discuss CASE tools and how they can be
used to support project management activities.
Integrated CASE Environments
The use of individual CASE tools can provide significant help
to the software engineer, but the process of getting the tools to
work together can sometimes be a difficult and frustrating task.
If the tools work with different file formats, perform different
functions, and execute on different machines, the engineer is
left with having to expend extra effort just to coordinate the
tools and their outputs. If, however, the tools can be integrated
in some way so that they work together seamlessly, with
compatible interfaces, then the engineer's job is made much
easier and he or she can focus on the creative aspects of
development. Specifically, the challenge is to integrate the
various CASE tools together into a single capability, i.e.,
integrated case (I-CASE).
CASE tool interface protocols and input and output data formats
must be standardized to permit individual CASE tools to
communicate with each other. Integrating frameworks has
evolved as an answer to the CASE tool communication problem,
but the actual data formats and interface protocols have not yet
been fully defined and standardized.
One key concept that is necessary to achieve I-CASE is that of
the CASE repository. For individual CASE tools to share
information during the software development process, each tool
will require access to the outputs of the other CASE tools. One
potentially effective approach to achieving this goal is to store
the outputs of the CASE tools in a central location called a
repository.
If, in addition to the collocation of CASE tool data, the CASE
repository can be built with common protocols and data
formats/conversions, then the CASE repository will serve as an
integrating framework and be of even more assistance to the
developers. Current industry publications that discuss "object
repositories" and "object-bases" are really referring to the
concept of CASE repository, in which information in different
formats is stored centrally for access by any interested
application program. For this discussion, the interested
application program is the CASE tool.
4. Software Process Models
So far in our discussion we have introduced the concept of
producing a high-quality software product by improving the
activities used in the development process. In this section we
will look closer at the various process models being used today
in the computer industry. These process models have formed the
basis for emerging process models, for example agile
methodology, which we will discuss separately in section 5. As
you read through this section, you should notice that all the
process models have a variation of the basic tasks used in
development: analysis, design, code, and test.
Life Cycle of Software
The full life cycle of a software system begins with its initial
concept and ends with its retirement from service. Each step of
this life cycle requires one or more activities to occur for the
product to be completed successfully. To direct the processes
within the development life cycle, the project manager selects a
model that best describes the flow of the tasks needed within
the project.
The IEEE (1996) generically describes a software life cycle
model as a "framework that contains all the necessary
processes, activities, and tasks to develop, to operate, and to
maintain a software product" from the point of conception to
termination of its use.
All life cycle models used in software development contain the
following core components, as outlined by Christensen and
Thayer (2001):
· a description of the major development phases
· a detailed description of the major processes and activities for
each phase
· a specification of the products and inputs for each phase
· a mapping of the activities to a framework
Basic Life Cycle Models
There are different types of life cycle models that exist for the
development of software. The basic ones are listed below. Move
your mouse over the highlighted words to see a brief
description.
· linear sequential
· prototyping
· evolutionary
· rapid application development
· component-based
To complete this section we will expand our process model
discussion and look at some specific models. You are
encouraged to do research on the Internet to learn more about
the various development models in software engineering.
Waterfall Model
The classic linear-sequential life-cycle model for software
engineering is sometimes referred to as the waterfall model. The
basis of the waterfall model originated in the late 1960s to
address needs for a complex military software development
(Baird, 2002). The waterfall model consists of a systematic
sequential approach to software development that begins at the
system level and progresses through several phases or steps. At
each phase or step it is recommended that one or more technical
documents be produced as products that are completed and
"signed off" before continuing on to the next phase
(Sommerville, 2004). In 1970, Royce introduced the model
following an iterative approach to software development in
which he stressed the importance of documentation at each step.
In Royce's paper, he also argued that the waterfall model was
flawed and needed strengthening by providing additional
supporting development steps to make it less risky.
In figure 1.9, we can trace through the phases of the life cycle
and view the major supporting technical documentation
proposed by Royce. You should note there can be several
documents produced at each phase. We have only mentioned the
major documents to help guide you through the phases in the
life cycle and to guide you through your course assignment. We
will discuss the software requirements specification, design
document, and test specifications throughout the subsequent
modules in this course.
Figure 1.9
Waterfall Model and Major Technical Documents
The lack of feedback between each phase and in getting the
approval for each document of the life cycle has proved to be
costly and has required a significant amount of rework when
changes were introduced during later phases. For these reasons,
the waterfall model is best suited for projects in which
requirements are stable and well-defined (Sommerville, 2004, p.
67). Introducing changes late in the life cycle is difficult due to
the sequential nature and dependency of phases followed in the
waterfall model.
The waterfall model is the oldest and most widely used
paradigm in the industry and is known to have inherent
deficiencies. To address the deficiencies in the waterfall model,
hybrids have been emerging over the decades that address:
· iteration of phases
· difficulty in getting all the requirements up front
· lateness of working product
Boehm's Spiral Model
In this section we will discuss the evolutionary process model
called Boehm's Spiral Model. The spiral model is highly
recommended to guide the development processes necessary to
produce high-quality, safety-critical software.
Dr. Barry Boehm was the founder of the spiral model that
emerged in the software industry in 1988. A major feature of
the spiral model is its iterative development and linear
sequential nature. Each cycle of the development process is
fully evolved and results in a new software release or build
before the next cycle commences.
The basic philosophy of each cycle in the development process
is based upon the principles of problem solving as outlined in
Polya's (1957) approach and as summarized in figure 1.10.
Figure 1.10
Polya's Approach to Problem Solving
Boehm identifies four phases in the spiral model to encompass
the basic principles of Polya's problem-solving approach. Each
phase of the model is entered multiple times in a sequential
fashion as the spiral continues to revolve. The activities within
each iteration or cycle are completed and used as the foundation
for the next iteration. Refer to figure 1.11 to see the basic
layout of Boehm’s spiral model (1988).
Click on each phase label to review its relevant activities.
Figure 1.11
Basic Layout of Boehm's Spiral Model
Phase IDetermine Objectives, Alternatives,
and
Constraints
Phase IVPlan
Phase IIEvaluate Alternatives
Phase IIIDevelop
and Verify
The spiral model is especially applicable for safety-critical
software development because it provides a risk evaluation and
analysis phase that is periodically visited throughout the
development life cycle.
The spiral model can be used to perform periodic risk
identification through the development and analysis of
prototypes. The function-oriented nature of the spiral model
supports parallel development of software modules by a team of
programmers. The underlying concept of developing prototypes
minimizes the overall risk factors by ensuring that the software
requirements are stable.
The spiral model offers a workable framework to support the
development of the system's hardware and the software
components. Addressing risk periodically throughout their
development cycles supports the elimination of unattractive
alternatives early in the project, which will help keep the
associated project costs down.
We have outlined the various phases of the spiral. The spiral
model has been used extensively in the development of defense
systems, but because of the high cost and time factors, it hasn't
been used extensively in private industry. Therefore, the spiral
model is being proposed only for extreme cases in which the
customer is willing to pay the cost of developing a secure
safety-critical system.
Rapid Application Development (RAD) Model
The Rapid Application Development approach to building
software stresses incremental development and a short time to
market. The concept of incremental software releases is used to
deliver a product to the customer for evaluation and to plan for
the next software release.
To gain a better understanding of a RAD approach, we can
examine evolutionary prototyping, which delivers a system with
functionality that can be used by the end-users. In order to build
the initial prototype, parts of the system's requirements need to
be clearly understood by the customer, developer, and the end-
user. The prototype's functionality evolves with each release as
the requirements for new features become fully defined.
Prototypes can be used by the customer to discover new
requirements for additional functionality or features. The main
advantage of the evolutionary approach is to provide a means
for the end-users to try out the system. The software engineers
can also benefit because the prototype provides insight on how
the end-user will use the system.
The evolutionary prototyping model stresses incremental
software releases. A software release, sometimes referred to as
a build in the industry, is identified with a version number. The
version number is assigned sequentially to identify the
difference in functionality from the previous release. Each
version refines the requirements for additional functionality. It
should be noted that the system following the evolutionary
model is not complete when first released to the end-user until
the requirements are finalized between the developer and
customer.
Gradually building the system is suitable for systems in which
specifications are difficult to fully define at the beginning of
the life cycle. The evolutionary prototyping model stresses
making changes quickly and demonstrating them to the
customer and the end user in several revisions.
Rational Unified Process (RUP)
As you learn more about software engineering you will
encounter many different processes and methodologies being
used in the industry. In this section we briefly mention one
methodology, the Rational Unified Process (RUP). RUP is a
popular process that was developed to provide a disciplined
approach to software development in large organizations. RUP
is incorporated into IBM's Rational software (IBM Rational
Unified Process), which uses the Unified Modeling Language
extensively as a tool for supporting communications throughout
the life cycle of software. RUP can be noted for its focus on
risk reduction in projects by using an iterative development
methodology (Baird, 2002). RUP portrays a flavor of the
traditional waterfall model because support documentation plays
an important role in its processes.
Code-Fix Approach
To complete our discussion of common approaches used in
software development, we will mention the code-fix approach,
sometimes referred to as the build-and-fix approach. The code-
fix approach is not recognized as a software engineering
methodology (Baird, 2002) but it does exist in the computer
industry and you should be able to recognize it.
The code-fix approach commences from an ill-defined set of
requirements received from the customer. The developer
attempts to satisfy the requirements in a quick fashion by
coding software that is presented to the customer for feedback.
The developer proceeds in the development by providing fixes
to the software and repeating this cycle until the customer is
satisfied with the software product. Practitioners question the
quality and scalability of the final product (Baird, 2002). Often
"spaghetti" code results from the code-fix approach and the
code is often not documented and is difficult to maintain or
change.
5. Agile Approach to Software Development
In this section we will discuss a new approach to software
development. The agile approach was conceived in response to
weaknesses discovered in earlier software development
practices and was spurred by the Internet. The growing trend for
web applications heavily influenced the need for agility in a
development approach. The nature of web programming requires
flexibility to adapt and respond to continuous and quick changes
in requirements and design. In our discussion on the traditional
waterfall model, we mentioned that stability in requirements
was necessary and changes were hard to accommodate.
Therefore, this inflexibility to allow change has led researchers
to develop a more agile model to accommodate development of
applications for the web.
The next section of this module will discuss a popular agile
process model, Extreme Programming, which can be used for
projects that require flexibility to adapt to a changing
requirement environment.
Extreme Programming (XP)
Extreme Programming (XP) has been emerging since the late
1990s as a proposed solution for small- to medium-sized teams
developing projects with continuously changing requirements.
The basic philosophy of XP is built from a set of values,
principles, practices, and activities (Baird, 2002) that are
outlined in figure 1.12 to produce high-quality software
products.
Figure 1.12
Extreme Programming Philosophy
In figure 1.12 we can see a set of values that is used to establish
the overall tone throughout the XP development process. The
focus of XP is to keep the design and structure as simple as
possible to avoid adding unnecessary features to the software
and to limit documentation. Because support documentation is
kept at a minimum, it's necessary to establish two-way
communication between all involved parties. It is preferred that
the customer be located on-site so that the means of
communication can be oral. Informal means of communications,
such as daily stand-up meetings, are used to transfer
information between parties. Written documents, reports, and
plans are kept at a minimum to save time and effort. Quick and
constructive feedback from the customer is encouraged, which
builds confidence among the team members. The confidence
level of the team fosters quick redevelopment when needed to
keep activity moving forward.
The strength of the XP methodology is found in several
principles that are used to direct developmental activities. We
mentioned feedback and simplicity in XP values but now we
will extend these to include short feedback loops and to limit
the design to a current iteration. The way in which changes in
requirements are handled is the most notable difference in XP
as compared to traditional approaches to development. XP
encourages small and frequent changes to address and resolve
problems as they occur. It’s easy to understand how this
philosophy plays an important role in developing applications
for the web, because the Internet environment is constantly
changing. The principles of XP contrast with the traditional
philosophies but the focus is the same – to produce a quality
product. XP focuses on quality of work by concentrating on the
coding and testing activities.
We will now turn the focus of our discussion to how these
values and principles are implemented in the actual activities of
the life cycle. The basis for all practices in XP is verbal
communications; practitioners therefore must master good
listening skills. Another interesting concept in XP is on testing
activities. Test cases are continually written as the requirements
emerge before any code is actually developed. This school of
thought is based on building quality into the code instead of
catching errors at a later stage in development. Another
prominent feature of XP is the pair programming concept. Two
programmers are selected for compatibility and assigned to
work on a code module to produce better quality code quickly
with fewer errors.
We have finished our discussion on the core of XP
methodology. You should now be able to apply the values,
principles, and activities as outlined in figure 1.12 to the XP
practices. We encourage you to conduct research on the Internet
to read more about XP practices and its success stories in the
computer industry.
6. Unified Modeling Language (UML)
In this section we will take a brief look at the history of the
Unified Modeling Language (UML) and how it can be applied to
the life cycle phases of software development. We introduce
UML at this point in our discussion to assist you in preparing
diagrams to represent your ideas in the system specifications
document.
A. History of Unified Modeling Language
UML has emerged in the software industry and has steadily
matured over the decades to become a standard. As a modeling
language, UML represents best practices in analysis and design
of large-scale software systems.
We can trace the roots of UML to the beginnings of object-
oriented languages. With the onset of early object-oriented
languages, Stimula-67 and Smalltalk, Objective-C, techniques
for object-oriented analysis and design began to appear in
software engineering. In the early 1990s, a variety of
diagramming techniques began to appear in publications written
by common authors Coad, Yourdon, Booch, Rumbaugh,
Premerlini, Eddy, Lorensen, Jacobsen, Christerson, Jonsson, and
Overgaard (Bennet et al, 2001). You may have purchased or
seen books on object-oriented analysis and design in your
favorite bookstore or library that were written by one or more of
these authors. If you scan through a few of these books you will
notice that each approach outlines a slightly different
diagramming notation and method to represent classes, objects,
and relationships. The difference in these notations and methods
was very confusing to developers when sharing designs. To
effectively communicate an object-oriented design, a visual
language with an established set of rules was needed in the
industry. UML attempts to provide this commonality of methods
in the software industry and to become the standard notation
language used among designers and developers.
B. Unified Modeling Language
The Unified Modeling Language provides a definition of a set
of elements and a set of rules on how to define these elements
to make programs (Bennet et al, 2001). The elements in UML
are defined by using a set of symbols, lines, rectangles, ovals,
and other shapes, which are grouped together to create a
graphical representation of a conceptual idea. These visual
representations increase understanding among all interested
parties involved in the design model.
In the current version of UML, there are different types of
diagrams that are defined and divided into three major
categories: structure, behavior, and interaction.
As we proceed through the phases of the life cycle you will
learn and practice with a few of these diagrams to present your
ideas for your project. You will be developing a set of technical
documents for a proposed system as a required assignment for
this course. The diagrams we will present in the subsequent
modules are summarized in table 1.1 and mapped to the
documents where you can use them throughout the life cycle.
Before you start to work on your first assignment, the SS
document, make sure you review the notes and examples on Use
Case and State diagrams. Click on the highlighted text in the
table below.
Table 1.1
Maps the UML Diagrams to Technical Documents
UML Diagram
Document(s)
Representation
Operational or Use Case Diagram
System Specifications
Software Requirements Specifications
Scenarios describing how the
system will be used by actors
of the system.
Statechart or State Transition Diagram
System Specifications
States of system operation and
the events to trigger these
different states.
Activity Diagram
System Specifications
Software Requirements Specifications
Activity flow of the various processes
needed to accomplish the task.
Class Diagram
Software Requirements Specifications
Software Design
Define classes and the necessary
relationships between classes.
Object Diagram
Software Design
Class instances and relationships
among these instances.
Component Diagram
Software Design
Code module breakdown of the
processes.
A variety of drawing tools exist on the market that provide the
symbol set necessary to draw UML diagrams. You can
download a trial version of SmartDraw software from the
Internet to create the required diagrams for your project
assignment. You are encouraged to perform a search on the
Internet for other available drawing tools.
Case Tools and UML
We mentioned earlier in this module that there are many CASE
tools available on the market to automate the tedious tasks
involved in software development. UML provides a
specification written for members of the Object Management
Group who develop CASE tools used in the industry to provide
standardization of notation. You are encouraged to search the
Internet and become familiar with the availability of CASE
tools that support UML features.
1. Problem Analysis
At the beginning of a project, the software engineer needs to
define the problem before establishing the requirements for the
software. In this section we will describe the scientific method
that can be used to clarify the problem in order to develop a
solution. In problem analysis, software engineers need to
include all the stakeholders who have different perspectives on
the proposed software. We will discuss the role of stakeholders
in requirements development and how their views of the
proposed software will affect deriving the different categories
of requirements.
Understanding the Problem
Defining requirements requires the software engineer to fully
comprehend the problem before trying to solve it. As with other
engineering disciplines, the software engineer can begin by
following the scientific method to uncover the facts of the
problem and to develop a hypothesis that can be used to solve
the problem.
The scientific method is the standard way in which all scientists
and engineers tackle problems, and the software engineer
practices the scientific method in developing software. The
solutions to the problems that the software engineer solves are
the programs that he or she develops to execute on computers in
a runtime environment.
There are three steps to the scientific method:
Analysis, the first task of software development, corresponds to
the first step of the scientific method—observing the problem.
The analysis step in software development involves partitioning
the problem in order to understand its essential parts so that a
solution can be proposed.
Analysis begins with a problem statement from the customer.
Ideally, the problem statement will be an exhaustive laundry list
of requirements that the customer has expressed for the solution
to their problem. Customers, however, typically have difficulty
expressing their requirements clearly. Clarifying customer
requirements is one of the software engineer's most important
tasks.
Here is an abbreviated example of a customer's problem
statement:
· The self-service checkout system should ensure that store
customers scan their products and pay their bill.
· All types of payment should be handled by the self-service
checkout system.
Try to clarify this problem statement yourself and then look at
our clarified problem statement. The software engineer then
allocates the clarified customer's requirements to a proposed
system as indicated in the following illustration:
There are different categories of requirements that are needed
for the varying components of a system. We will discuss the
different requirement categories in section 2 of this module.
Once the allocation of requirements to system components is
complete, the software engineer focuses on designing, building,
and testing the software component of the system. As we
already discussed in module 1, the system specification (SS)
records the allocation of requirements to system components
and forms the basis of all subsequent software engineering
activities.
Software engineers use a model to verify that their
comprehension of the software requirements is complete and
coherent. These models typically are arrow-and-bubble
diagrams, textual notations, or mathematical expressions, and
are powerful tools for verifying completeness and
communicating the required behavior of the software.
The software requirements analysis culminates with the
composition of a requirement specifications document. For our
discussion we will refer to the ANSI/IEEE Standard 830-1998
Recommended Practice for Software Requirements
Specifications (SRS). The SRS is referred to as a design-to
specification and is the definitive statement on the expected
behavior of the software component of the system. We will
discuss the contents of various sections of the SRS throughout
the remainder of this module.
Identifying the Stakeholders
Stakeholders play an important role in determining requirements
for a computing system. Each stakeholder has a different
viewpoint on what the software is supposed to do and the
software engineer needs to involve them when deriving the
requirements. A stakeholder can be defined as any individual, or
group of individuals, "who will be affected by the system
directly or indirectly" (Sommerville, 2004, p. 146). The effects
of software can be described as any stakeholders who "request,
pay for, select, specify, use, or receive the output generated by
a software product" Weigers (2003, p. 29). In figure 2.1 below,
we have outlined an example list of stakeholders and their
potential interest in the product that will form the foundation
for requirements elicitation.
Figure 2.1
Stakeholders and Their Viewpoints
The interest of each stakeholder will assist in defining
categories of requirements for the proposed software. For
example, the business manager may be concerned that the
product is being developed with budget limitations, which
restrict the number of features and the time allotted to develop
the software. The end user is concerned with the ease of use of
the software, which will affect the user interface requirements.
The software engineer must consider each stakeholder's
viewpoint when deriving a set of requirements. In section 2 we
will discuss the different categories of requirements in more
detail.
Pressman (2005, p. 102) categorizes stakeholders into two
groups: customers and end users. We have provided the outline
of functions in table 2.1 that are used to distinguish the role of a
customer and an end user. It is common for the customer to be
the end user and to perform all the functions. The customers and
end users have a significant impact on the technical aspects of
the software. As we continue our discussion, we will use the
terms customer and end user according to their functional role
as outlined by Pressman.
Table 2.1
Role of Customer and End User in Software Development
Customer
End user
1) requests software
2) defines overall business objectives
1) uses software to achieve business objectives
3) provides product requirements
2) defines operational details
4) coordinates funding
Getting to Know the Business
In order to provide a solution to a customer's problem, the
software engineer must become familiar with the customer's
business and the objectives for the proposed software.
Commonplace business problems can often be solved with
commercial off-the-shelf products, but unique business
problems require creative solutions. Understanding the nature of
the customer's business will assist the software engineer in
clarifying the requirements needed for the proposed software.
For example, financial and medical institutions require secure,
accurate, and responsive transaction processing software. The
software engineer must research and become educated about the
customer's business in order to form the foundation for the
different categories of requirements that are needed to support
the application domain.
2. The Software Requirement
To fully understand how to derive requirements from different
perspectives at the software level, we need to define a
requirement and discuss the various types of requirements. It is
also important to understand that deriving complete and correct
requirements is the driving force for the success of the
subsequent development phases: design, code, and test.
Types of Requirements
Requirements can be classified into three basic types that exist
for software. To read the definition of each type, move your
mouse over the type.
· functional
· non-functional
· domain
Software engineers commonly use the acronym FURPS to
describe these requirement categories: functionality, usability,
reliability, performance, and supportability. In figure 2.2 we
have extended the basic types of requirements for software to
include data base, security, safety, and external interface.
Additional software requirement categories can exist for a
customer's problem in the areas of constraints and
implementation (Grady, 1992).
Figure 2.2
Categories of Software Requirements
Figure 2.2 depicts that all the categories of software
requirements are derived from the system requirements that
form the basis for all subsequent development. As we mentioned
in section 1, special consideration for the stakeholders' business
objectives and their interests must exist in defining all the
requirement categories for the proposed software product.
The primary focus of our requirements development discussion
will be on deriving the functional requirements for software. A
complete SRS will address all the categories that apply to the
customer's problem. It is common for software engineers to
create supplemental requirement documents and then reference
them in the SRS. For example, if a system involves a safety-
critical component, a separate specification containing only
safety-related requirements may be compiled and used as a
reference. After all the software requirements have been fully
understood and elaborated for the business domain and the
customer's problem, the analysis task is complete.
Requirement Definition
The Institute of Electrical and Electronics Engineers (IEEE)
generically defines a software requirement as a condition or
capability to which the system being built must conform to
operate correctly.
A more refined definition of a software requirement is provided
in the IEEE Standard 729 (1983) as:
· a software capability needed by the user to solve a problem or
achieve an objective
· a software capability that must be met or processed by a
system or system component to satisfy a contract, specification,
standard, or other formally imposed documentation
Davis (1993) adds that software requirements are used to:
· define an object, function or state,
· limit or control actions associated with an object, function, or
state
· define relationships among objects, functions, and states
Conflicting Requirements
When specifying requirements, there is a potential risk that one
requirement may conflict with another in a different category.
To avoid this conflict, it's necessary for the software engineer
to cross-check requirements with those in other categories. For
example, a functional requirement may specify that something
should be done and the non-functional requirement may specify
that it should not be done. Early identification of conflicting
requirements will avoid rework and the introduction of software
errors in later stages of the development life cycle.
Importance of Requirements
Requirements guide the planning, designing, coding, and testing
of software, and therefore need to be correctly and completely
defined by the software engineer. Correct and complete
requirements will reduce misinterpretation that can cause errors
in later stages of development. Latent errors in the requirements
can have a negative impact in the subsequent phases of software
development, in the following ways:
· expensive to fix or change
· does not satisfy the needs of the user(s)
· result in disagreements between the customer and the
developer
· cannot derive test cases
· result in wrong system and customer dissatisfaction
Software engineers, customers, and end users should spend an
adequate amount of time defining the requirements. Spending
more time during requirements development has proven to be
worth the investment. Blackburn et al (1996) reports in a study
that improvement was seen in the development speed of
companies when more time was spent during the software
requirements stage. Companies that developed faster actually
"spent less time and effort on average in all of the other stages
of development and significantly less time in the final
testing/integration stage." Blackburn et al concluded that the
development speed was increased due to less rework involved in
fixing errors discovered in the design, code, and test phases.
3. Requirements Development Model
In figure 2.3 we summarize the various phases and the activities
that occur at each phase of the basic requirements development
model (Wiegers, 2003). In subsequent sections we will discuss
several of the key activities contained in each phase.
Figure 2.3
Requirements Development Model
Requirements Elicitation
Requirements elicitation for a software product is the most
difficult phase in development. Understanding the application
domain, problem, and the needs of the customer and end user
requires various means of oral and written communication to
transfer this information among all parties. Any breakdown in
this communication process can lead to ill-defined, missing, and
incorrect requirements, which will result in the delivery of a
low-quality product or even the wrong software product.
In section 1 we discussed the importance of understanding the
problem, the stakeholders, and the business objectives.
Requirements elicitation begins with the customer who initiates
communication by contacting a software engineer with a
business-related problem. The software engineer responds to the
customer's problem by clarifying the needs by using effective
means of communication in a written description.
Effective Communication
Communication among the software engineer, customer, and end
user begins with a series of either informal or formal meetings,
preferably face to face. The software engineer should be
prepared with a list of well-formed questions before any
meeting. The responses to these questions provided by the
customer and end user will assist the software engineer in fully
understanding what functions need to be satisfied by the
proposed software. The following list outlines tips for effective
communication among the software engineer, customer, and end
user:
· listen carefully to the customers and end users of the proposed
system
· keep the language simple and free of technical terms
· prepare well-formed questions in advance
· perform research and gain understanding of the application's
domain
· draw diagrams or pictures to represent complex ideas
· take good notes
· use a facilitator, if necessary
The process of effective communication in translating the
customer's and end user's needs into requirements can break
down among all parties for a variety of reasons. The software
engineer, customer, and end user often see a communication gap
in the requirements phase, which has been commonly referred to
as the "user and the developer" syndrome (Leffingwell et al,
2003, p. 92). The customer and end user will often know exactly
what they want but have difficulty in articulating their needs in
language that the software engineer understands. The software
engineer must realize that the customer and end user are the
domain experts. An effective communication approach must be
established by the software engineer and be used during
requirements elicitation.
Effective communication can sometimes be preempted by the
different personalities among the involved parties. Conflicts
may result from misunderstandings in the use of language,
differing cultures, or personal agendas. The use of a facilitator
can greatly mitigate conflicts to keep a positive and productive
communication process flowing among all parties.
Use Case Model
Earlier in our discussion we stressed the importance of effective
communication among the software engineer, customers, and
end users in understanding the requirements of the proposed
software. We also highlighted that conveying this information
back to the customer and end user was important for directing
subsequent phases of development. At this point in our
discussion we will elaborate on a technique that can be used to
specify and model the expected behavior for software. Software
engineers refer to this behavioral model as the use case model.
The use case model defines use cases and scenarios that can
"easily capture a set of functional requirements" and "provide a
vehicle for organizing the software requirements in an easy-to-
manage way" (Bittner et al, 2003, p. 11). Following the use case
model during requirements development can ease the transition
from the analysis to the design phase.
About Use Cases
Our discussion on use cases will begin with a brief history. The
use case was introduced as part of an object-oriented
development methodology originated by Ivar Jacobson and
described in his book called Object-Oriented Software
Engineering: A Use Case Driven Approach (Addison-Wesley,
1992). Researchers Larry Constantine and others have extended
this concept into a general technique for requirements analysis
and user interface design. The Unified Modeling Language
provides support for modeling a use case.
Leffingwell et al (2003, p. 149) defines a use case as
"sequences of actions a system performs that yield an
observable result of value to a particular actor." A sequence of
actions refers to a "set of functions" or an "algorithmic
procedure" that is initiated and used by an actor. The use case
describes the input to the system and the response that is
necessary to satisfy the function that produces the intended
output.
A use case is best summarized as having the following
characteristics (Leffingwell et al, 2003; Weigers, 2003):
· provides the foundation for deriving scenarios in which an
actor interacts with the system
· encompasses several tasks with a common goal
· achieves a specific goal or accomplishes a particular task or
function
· describes an action in terminology relative to the actor's
domain and not terminology relative to the computer
· focuses on the simplicity of the use or action being performed
without regard to how it is implemented in the software or
alternate ways of accomplishing the same task
· provides a means to derive detailed requirements for
accomplishing the objective for each scenario by using a
software application
When forming a use case, you should think of all the various
external entities that interact with the system and the different
ways in which they may possibly use the system. Specifying use
cases is part of functional modeling of desired system behavior.
By modeling the expected behavior with use cases, we can
uncover required classes and associations that will be needed
during the construction phase of the object model. We
emphasize the necessary components for a complete use case in
the following list:
· actor, who initiates an event or events
· specific interaction that takes place between this actor and the
system
· expected response from the system
The steps to derive functional requirements following a use-
case approach are summarized below in figure 2.4.
Figure 2.4
Use-case Approach to Derive Functional Requirements
In the list below we summarize the benefits derived from
following a use case approach during requirements elicitation:
· determine system and software requirements
· determine actor profiles
· assist in identification of an initial set of classes and objects,
at the system and software level
· assist in identification of software subsystems according to
required functionality
When the software engineer meets with the potential end users
of the desired system during requirements elicitation, the
objective is to get answers to information-seeking questions
(Leffingwell et al, 2003) to form the components of a use case.
We have provided a list of sample questions that the software
engineer can use during meetings with the customers and end
users:
· What is the expected behavior of the system?
· How is the user supposed to use the system?
· What types of services is the system supposed to provide?
· What is the expected result/output of the system?
· Who will be using the system?
The software engineer composes a use case from the
information and then uses the use case as the foundation for
deriving one or more scenarios to carry out the functions.
Each use case scenario involves an actor, the system, and a
single function to be performed. Once all the use cases are
developed, they will assist you in identifying the data objects
needed to create the proposed software system. We will provide
an example of a use case and model the possible scenarios with
UML during our discussion on requirements analysis.
Requirements Analysis
During requirements elicitation, we discussed how to
communicate and gather the requirements from the customers
and end users for the proposed software. After we form a good
idea of what the customers and end users want the software to
do, we can expand our model of the expected behavior and
develop profiles for the actors of the system. In this section we
will discuss how to perform analysis that will result in detailed
requirements that will form the bulk of the specifications
document.
During requirements analysis, the software engineer elaborates
on the information gathered during elicitation. At this stage the
focus continues on the whats, rather than the hows, by defining
the top-level objects and their attributes, their relationships
with other objects, and the interfaces required with external
entities. We can begin to analyze and model the required flow
and transformation of data between the identified entities
(Pressman, 2005). There are several major data products that
can result from requirements analysis; these are listed as:
· behavioral diagrams (use case scenario, data flow, and state
transition)
· prototypes
· class identification
· data dictionary
Use Case and the Unified Modeling Language
The Unified Modeling Language (UML) provides a user model
and notation for the specification of the different ways an end
user will interact with the system, the use case. Models of
scenarios are created from the use case to depict the expected
behavior from the perspective of the actors. These scenarios
assist the software engineer with elicitation and analysis of the
requirements by describing the functionality that is required in
the software. A functional requirement and the corresponding
test case can be derived by the action that is modeled in the use
case. A test case is used later in development to verify that a
functional requirement has been met in the software product.
We will discuss scenario-based testing in module 4.
UML stresses the importance of textual documentation for each
use case to accompany each scenario illustration. Following is a
list of the items to be included in the use case documentation:
· unique name and number for the use case
· description of the role and purpose of the action
· description of the basic sequence of events
· description outlining any special requirements or conditions
· description stating the specific pre-conditions and post-
conditions
A descriptive name is selected and assigned to each use case
that best describes the function required by the software.
Nomenclature for use cases is very important in software
engineering, as it enhances documentation. When possible,
similar functions should be categorized in one use case. A
unique number or identifier is assigned to each use case to
enhance the traceability to the requirement, the software
component, and the test case. We will discuss requirements
traceability and its role in the development process later in this
module. In module 5, we will discuss traceability through the
development cycle as a project management activity.
Example Use Case
Let's take a look at a use case that we can define for the self-
service checkout system. The use case for the customer in a
retail store using the self-service checkout system to start a new
purchase order is outlined in table 2.2.
Table 2.2
Use Case to Start a New Purchase Order
Use Case 1.0: Start new purchase order
A customer selects one or more items to purchase in a retail
store. Once customers have completed selecting all the items,
they will walk up to the checkout counter and start a new
purchase order to prepare for scanning each item.
Precondition: The checkout system needs to be configured
properly and have access to the local area network and store
database. The system needs to be ready to accept a new
purchase order.
Post-condition: The system is ready to scan items for a new
purchase order.
Actor Profile: Customer shopping in a retail store who desires
to purchase one or more items. A customer can be new to the
system or be a frequent shopper familiar with the system.
Frequent customers may have a discount card. Many customers
will shop in the retail store.
Sequence of events:
1. Customer walks up to an available self-service checkout.
2. Customer reads instructions and selects either Spanish or
English language.
3. Customer selects the option to begin the order.
4. Customer scans frequent shopper discount card, if one exists.
5. Customer reads the directions for scanning an item.
User Scenarios
User scenarios, also referred to as user stories, describe a
unique theme for interacting with the system. Scenarios are
derived from the use case textual description. When creating
scenarios, you select the actors that interact with the system and
model different ways in which they will use the system to
accomplish the required tasks. As we mentioned earlier, a user
scenario consists of an actor, who initiates events, and an
explanation of the interaction that takes place between this actor
and the system. As a result of this interaction, the system will
generate a response. Refer to figure 2.5 below for a
representation of the various components of a user scenario.
Figure 2.5
Components of a User Scenario
It should be noted that an actor is any external entity that uses a
system in a particular way to perform a desired function to
accomplish a task. The actor can be a person, another software
system, a hardware device, or an organization. For example,
actors can be people who assume various roles (operator,
customer, manager, system administrator) or an external entity
(hardware device) that interacts with the system. The software
engineer must have a good understanding of the characteristics
of each actor or group of actors before composing a user
scenario. These characteristics are documented and referred to
as an actor profile.
For the self-service checkout system, we can write the
following scenarios presented in table 2.3 from the use case
presented in table 2.2.
Table 2.3
User Scenario for the Start of a New Purchase Order Use Case
User scenario 1: start the order
1. Customer selects either the English or Spanish language.
2. System displays the "Begin Order" option in the English or
Spanish language.
User scenario 2: set up the order
1. Customer selects the "Begin Order" option when ready to
start the order.
2. System responds by displaying a message with instructions to
scan frequent shopper discount card.
User scenario 3: scan discount card
1. Customer places the discount card over the scanner.
2. System responds by reading the barcode imprinted on the
card.
3. System displays welcome message and instructions to scan an
item.
Once the use case scenarios are written for the use case, we can
model them with a use case diagram as shown in figure 2.6.
Figure 2.6
Start a New Purchase Order Use Case Diagram
Identification of Objects and Classes
Data Objects
The use case can provide insight into the identification of
objects that can be grouped by similarity to form classes for
these objects. Objects are easily identifiable because the actors
of a system manipulate objects when they use the software to
perform a function to accomplish a task. Identifying the
commonality among the objects will help software engineers to
derive the base classes and establish attributes, needed
functionality, and relationships. Software engineers model
classes and their relationships with diagrams. UML is the
common notation language being used in today's software
industry for creating class diagrams.
Context Diagram
In module 1 we suggested the context diagram be used at the
system level for specifying requirements. We present the
context diagram for the self-service checkout system again as a
means of modeling the necessary flow of data items into and out
of the software system.
Figure 2.7
Context Diagram for the Self-service Checkout System
The context diagram represented in figure 2.7 shows a sketch of
the data items that are to be manipulated by the system's
external entities and actors. At this point, the view of the
software system is considered a black box and is represented by
the circle. During the design phase, we will refine the software
system to the process level to extend our view to the functional
level, which will yield the subsystems and components.
If an object-oriented development approach is to be followed,
each external entity and data item is a good candidate for an
object. For example, we can easily derive several objects for the
self-service checkout system by following the directional
arrows that flow in and out of the external entities.
Additionally, we can imagine objects for the external entities
that represent the hardware devices.
Class Diagrams
Once the potential objects are identified, they can be grouped
by similarity and used to determine base classes with a set of
attributes. A class describes a group of objects with similar
properties or attributes, common behaviors, relationships to
other objects, and semantics. For example, think of a person as
an object. Every person has the same set of common attributes,
including a name, gender, height, weight, eye color, nationality,
fingerprint, and social security number. These attributes are
used to identify an individual and distinguish one person from
another. A base class can be designed with these attributes and
the class can be used to create instances of different individuals
with a unique set of characteristics. Class instances are also
referred to as objects. An object is defined as a concept, idea, or
thing with crisp boundaries and meaning for the problem at
hand.
Once the software engineer establishes all the base classes, the
relationships between the classes are modeled using a class
diagram. A class diagram is a schema, pattern, or template used
for describing the class. Each class description contains a name,
a set of attributes, and a set of operations.
Bennett et al (2001, p. 49) outlines how creating a UML class
diagram can achieve several goals in modeling expected
behavior. The class diagram can be used to:
· document classes within a system or subsystem
· describe association, generalization, and aggregation between
classes
· show characteristics of the class
· show the operations and interfaces of objects
· direct activities throughout the development process
Class instances or objects collaborate with other objects through
message passing. An association between two classes is
described when a class instance or object passes a message to
another object and that message is received by the recipient
object. When drawing a class diagram, a connecting line is used
to depict the association. The association is assigned a
descriptive name. Software engineers can further define the
association existing between the two class instances by adding
its multiplicity, which indicates the possible number of
instances for the class. In table 2.4 we summarize the indicators
that can be placed at each end of the line in the class diagram to
show multiplicity.
Table 2.4
Multiplicity Indicators for Class Diagrams
Indicator
Meaning
0..1
Zero or one
1
One only
0..*
Zero or more
1..*
One or more
n
Only n, where n > 1
0..n
Zero to n, where n > 1
1..n
One to n, where n > 1
Refer to figure 2.8 for a class diagram that depicts the card
reader and the card objects that are necessary for the payment
transaction of the self-service checkout system.
Figure 2.8
Example Class Diagram
Data Dictionary
We will mention the data dictionary during requirements
analysis because it can be used to store logical representations
of data objects. It is important to adopt a notation for a data
dictionary that provides for unambiguous and accurate
descriptions of the data. Such notations facilitate interpretation
and also allow for the use of CASE tools to assist in developing
and maintaining dictionaries.
Modern systems may require extremely large data dictionaries,
which may be practical only when a CASE tool is available to
reduce the human effort and manage the complexity. Such tools,
however, are useful for more than simple management of the
data objects. If a formalized notation is used to describe the
data, the tool can perform automated analyses of the data to
ensure consistency across the system. Such analyses would be
quite difficult if developers had to perform them by themselves.
We will extend our discussion on the data dictionary in module
3 when we look at the functional analysis model.
Requirement Specification
Software requirements are expressed in a simple and concise
language and compiled into a formal document. The
specification document should be easy for all the stakeholders
to understand.
A simple set of guidelines (IEEE, 1998) is provided to assist in
writing the software requirements specification. Each
requirement should:
· consist of one sentence
· be free of technical jargon, abbreviations, and acronyms
· contain no conditional logic (if A then B)
· use active voice
· contain no references
· be grammatically correct
A software requirement can be composed by following either
the "shall" or "shall not" format. Using the word shall in the
requirement indicates that the requirement is mandatory. Using
the self-service checkout system as an example, a requirement
for processing a debit card payment transaction is a four-digit
number. Here are two different and acceptable ways to write
this requirement.
The software shall require a four-digit code to be entered for a
debit card transaction.
The software shall not process a debit card transaction without a
four-digit code.
The preferable way to write a software requirement is to use the
"shall" format because the positive approach simplifies writing
the software test case. The Boolean "not" can be somewhat
tricky to code and test. The positive approach is commonly used
in preparing the formal requirement document; however, you
should be aware that both ways are acceptable to software
engineers.
Other words, such as should, will, and must, can be used
(Sommerville and Sawyer, 1997) if they are consistent with the
meanings provided in table 2.5.
Table 2.5
Words and Their Meanings Used for Writing Software
Requirements
Word
Meaning
shall
mandatory
should
desirable, but not mandatory
will
something that will be externally provided
must
best avoided; a synonym for "shall"
Writing a good set of requirements can be a challenging task
because many software engineers find it difficult to write clear
and concise natural language and have a tendency to write
requirements in an unnecessarily verbose way. Table 2.6
contains a list of attributes of a well-written software
requirement, and the do's and don'ts while writing the
specifications document.
Table 2.6
Summary of Attributes for a Software Requirement
Attribute
Description
Do
Don't
correct
meets a user need
communicate with customer and user
add unnecessary features
unambiguous
no interpretation variations
choose simple words
use technical jargon
complete
include everything
be precise
embellish
verifiable
provide method to verify
write a test case
use words like "usually," "often," "user friendly"
consistent
no conflicts with other requirements
cross check with other categories
use the word "don't"
modifiable
easy to reference
provide index or table of contents
traced
provide origin of each requirement
provide a traceability matrix
traceable
identify each requirement
provide a unique number for each requirement
design independent
no design constraints
imply a specific software architecture or algorithm
annotated
categories of requirements
group requirement by function or task
concise
overall length and understandability
keep it short and as simple as possible
organized
readability
use meaningful titles and category names
understandable by the customer
meaningful content to both customer and developer
use simple language
use technical terms, unless simply defined
In table 2.7 we have provided a set of requirements for the start
a new purchase order use case described in table 2.2 for our
self-service checkout system.
Table 2.7
Requirements for the Start a New Purchase Order Use Case
Requirement 1.0: Start a new purchase order
1.1 The system shall display a message with an option to select
the English or Spanish language.
1.1.1 If the English language option is selected, the system shall
select the English language to display text.
1.1.2 The Spanish language option is selected, the system shall
select the Spanish language to display text.
1.2 The system shall display an option to activate a new
purchase order.
1.2.1 The option to activate the purchase order is detected, the
system shall respond by displaying instructions to insert a
frequent shopper discount card.
1.3 The system shall display an option to cancel the current
session.
1.3.1 The cancel option is detected, the system shall respond by
setting up for a new purchase order.
1.4 The system shall detect a frequent shopper discount card.
1.5 The system shall read an imprinted barcode from the
frequent shopper discount card.
1.5.1 An error occurs while reading the barcode from a frequent
shopper discount card, the system shall eject the card and
display an error message.
1.5.2 The barcode is read without an error from the frequent
shopper discount card, the system shall request the customer
information from the store database.
1.6 The system shall use the barcode on the frequent shopper
discount card to query the database for customer information.
1.6.1 The customer information is successfully queried from the
database, the system shall display a welcome message with the
customer's name.
1.6.2 The customer information was not successfully queried
from the database, the system shall return a message "customer
not located in database."
1.7 The system shall display instructions for scanning an item
for purchase.
Traceability of Requirements
Each software requirement should be unique and traceable to
the corresponding system requirement, use case, and software
requirement. Traceability can be accomplished by creating a
traceability matrix.
We will extend the column headings in the traceability matrix
as we discuss the various phases of development. The
traceability matrix should be included as an appendix in the
specifications document, updated at each phase in development,
and included with each document created in that phase.
Specifications Document
The Software Requirements Specifications (SRS) document is
used as a communication tool and serves as a contract between
the customer and the software engineers. The SRS explains to
the customer what the software engineer's perception is and
what needs to be done in order to accomplish building the
correct system. The requirements are outlined and categorized
in simple language. In addition to satisfying communication
needs, the SRS is the basis for integrated system testing and
verification activities, and it also helps control the evolution of
the software system.
The SRS is a deliverable document that is reviewed and
accepted by the customer before design of the software actually
begins. The SRS is developed after the system specifications
and the system design documents are completed and accepted by
the customer. The SRS must be complete, concise, and accurate
to direct the subsequent phases of development. Roger Pressman
(2005) proposes following a "use case driven" design. In this
module, we discussed how to develop a use case and model
scenarios with UML as a tool for requirements elicitation and
analysis.
Once the SRS is approved by the customers, it serves as the
baseline for all software requirements. Any change or addition
to the requirements needs to be recorded, approved, and traced.
We will discuss managing software changes as an activity of
project management in module 5.
IEEE Recommended Practice for Software Requirements
Specifications
The Institute of Electrical and Electronics Engineers has
provided some guidelines for writing a Software Requirements
Specification (SRS) in the IEEE Recommended Practice for
Software Requirements Specifications, IEEE Standard 830-
1998. Annex A of the IEEE Recommended Practice for Software
Requirements Specifications provides guidelines for writing the
specific requirements for a complete SRS. The templates
outlined in Annex A organize specific requirements for a
proposed software solution by describing:
· system modes
· user classes
· objects
· features
· stimulus
· response
· functional hierarchy
Software engineers choose the best template, or combinations of
templates, that best describe the requirements for the proposed
software solution. Combinations of templates can also be used
to organize requirements.
In module 1 and in section 3 of this module, we have discussed
several diagrams that can be used to graphically represent
requirements for the SRS. The use of diagrams is recommended
in technical documents and all diagrams should be
supplemented with a textual description.
Requirements Validation
The final phase of the requirements development model is
validation. Validating the requirements is necessary to ensure
that the requirements are complete and unambiguous to build a
high-quality and correct product. Early in module 1 we
discussed how software engineering emerged in the computer
industry to address the legacy problems of poor quality and cost
overruns and to reduce maintenance costs after deployment of
software products. Many studies have been done by Boehm,
Grady, Kelly, Sherif, and Hops (Weigers, 2003) that have
supported that early discovery of errors during the requirements
development phase will reduce the cost and time to correct
them. Errors in requirements can lay dormant in software and
may not be discovered until system testing or by the customer
after delivery of the product. Correcting latent errors in
requirements requires significant rework by the software
engineers, which takes time and money. Software engineers can
validate the requirements by developing a set of preliminary test
cases and participating in a formal peer review or inspection.
Time spent validating the requirements can actually shorten the
delivery schedule because less rework will be required
(Blackburn et al, 1996) during this phase.
A preliminary set of test cases can easily be developed when the
use-case model is followed during requirements elicitation and
analysis. Writing test cases during the requirements validation
phase follows a scenario-based approach that will uncover
ambiguities in the functional requirements. These test cases are
extended during the test phase of development. We will discuss
how to write scenario-based test cases in module 4.
Another requirements validation method commonly used by
software engineers is to conduct and participate in a formal
review or inspection. A review committee is formed from the
stakeholders who represent varying perspectives and interests in
the proposed software product. A small team consisting of six
or fewer participants is formed. During the review, the software
engineer presents the categories of requirements to the team for
discussion. Any deficiency in a requirement identified by the
participants is included in a summary portfolio that consists of
one or more "requests for action." The software engineer
addresses each request and takes corrective action to revise or
clarify the requirement. The revisions to the requirements are
resubmitted to the reviewers for final approval.
Instructions
Scenario
You have been asked to lead a software development team to
build a system fulfilling the Statement of Need below. Your
team is employed by a small company. The customer wants a
project that balances reasonable development cost, timely
delivery, software quality, and functionality.
1. Emergence of Software EngineeringIn the software industry, we.docx
1. Emergence of Software EngineeringIn the software industry, we.docx
1. Emergence of Software EngineeringIn the software industry, we.docx
1. Emergence of Software EngineeringIn the software industry, we.docx
1. Emergence of Software EngineeringIn the software industry, we.docx

More Related Content

Similar to 1. Emergence of Software EngineeringIn the software industry, we.docx

Introduction1ObjectivesThe objectives of this chapte.docx
Introduction1ObjectivesThe objectives of this chapte.docxIntroduction1ObjectivesThe objectives of this chapte.docx
Introduction1ObjectivesThe objectives of this chapte.docxmariuse18nolet
 
六合彩|香港六合彩
六合彩|香港六合彩六合彩|香港六合彩
六合彩|香港六合彩ohtpwshx
 
香港六合彩
香港六合彩香港六合彩
香港六合彩pchgmf
 
香港六合彩 » SlideShare
香港六合彩 » SlideShare香港六合彩 » SlideShare
香港六合彩 » SlideSharehcslenk
 
六合彩|香港六合彩
六合彩|香港六合彩六合彩|香港六合彩
六合彩|香港六合彩tnxaht
 
香港六合彩-六合彩
香港六合彩-六合彩香港六合彩-六合彩
香港六合彩-六合彩eqhnwl
 
六合彩,香港六合彩
六合彩,香港六合彩六合彩,香港六合彩
六合彩,香港六合彩bxuket
 
Ian Sommerville, Software Engineering, 9th Edition Ch1
Ian Sommerville,  Software Engineering, 9th Edition Ch1Ian Sommerville,  Software Engineering, 9th Edition Ch1
Ian Sommerville, Software Engineering, 9th Edition Ch1Mohammed Romi
 
Software engineering study materials
Software engineering study materialsSoftware engineering study materials
Software engineering study materialssmruti sarangi
 
Lecture 01
Lecture 01Lecture 01
Lecture 01Rana Ali
 
Software Engineering notes by K. Adisesha.pdf
Software Engineering notes by K. Adisesha.pdfSoftware Engineering notes by K. Adisesha.pdf
Software Engineering notes by K. Adisesha.pdfProf. Dr. K. Adisesha
 
SE 18CS35 Module 1.pdf
SE 18CS35 Module 1.pdfSE 18CS35 Module 1.pdf
SE 18CS35 Module 1.pdfbalaji984829
 
Constructing a software requirements specification and design for electronic ...
Constructing a software requirements specification and design for electronic ...Constructing a software requirements specification and design for electronic ...
Constructing a software requirements specification and design for electronic ...Ra'Fat Al-Msie'deen
 
Lecture-1,2-Introduction to SE.pptx
Lecture-1,2-Introduction to SE.pptxLecture-1,2-Introduction to SE.pptx
Lecture-1,2-Introduction to SE.pptxYaseenNazir3
 

Similar to 1. Emergence of Software EngineeringIn the software industry, we.docx (20)

Ch1
Ch1Ch1
Ch1
 
17CS45_CBCS_Moulde 1 ppt
17CS45_CBCS_Moulde 1 ppt17CS45_CBCS_Moulde 1 ppt
17CS45_CBCS_Moulde 1 ppt
 
Introduction1ObjectivesThe objectives of this chapte.docx
Introduction1ObjectivesThe objectives of this chapte.docxIntroduction1ObjectivesThe objectives of this chapte.docx
Introduction1ObjectivesThe objectives of this chapte.docx
 
六合彩|香港六合彩
六合彩|香港六合彩六合彩|香港六合彩
六合彩|香港六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
香港六合彩 » SlideShare
香港六合彩 » SlideShare香港六合彩 » SlideShare
香港六合彩 » SlideShare
 
六合彩|香港六合彩
六合彩|香港六合彩六合彩|香港六合彩
六合彩|香港六合彩
 
香港六合彩-六合彩
香港六合彩-六合彩香港六合彩-六合彩
香港六合彩-六合彩
 
六合彩,香港六合彩
六合彩,香港六合彩六合彩,香港六合彩
六合彩,香港六合彩
 
Lecture-1-3.pptx
Lecture-1-3.pptxLecture-1-3.pptx
Lecture-1-3.pptx
 
Unit1
Unit1Unit1
Unit1
 
Ian Sommerville, Software Engineering, 9th Edition Ch1
Ian Sommerville,  Software Engineering, 9th Edition Ch1Ian Sommerville,  Software Engineering, 9th Edition Ch1
Ian Sommerville, Software Engineering, 9th Edition Ch1
 
Software engineering study materials
Software engineering study materialsSoftware engineering study materials
Software engineering study materials
 
se
sese
se
 
Lecture 01
Lecture 01Lecture 01
Lecture 01
 
Ch1
Ch1Ch1
Ch1
 
Software Engineering notes by K. Adisesha.pdf
Software Engineering notes by K. Adisesha.pdfSoftware Engineering notes by K. Adisesha.pdf
Software Engineering notes by K. Adisesha.pdf
 
SE 18CS35 Module 1.pdf
SE 18CS35 Module 1.pdfSE 18CS35 Module 1.pdf
SE 18CS35 Module 1.pdf
 
Constructing a software requirements specification and design for electronic ...
Constructing a software requirements specification and design for electronic ...Constructing a software requirements specification and design for electronic ...
Constructing a software requirements specification and design for electronic ...
 
Lecture-1,2-Introduction to SE.pptx
Lecture-1,2-Introduction to SE.pptxLecture-1,2-Introduction to SE.pptx
Lecture-1,2-Introduction to SE.pptx
 

More from jackiewalcutt

briefly summarize how the Electoral College works. Explain some of t.docx
briefly summarize how the Electoral College works. Explain some of t.docxbriefly summarize how the Electoral College works. Explain some of t.docx
briefly summarize how the Electoral College works. Explain some of t.docxjackiewalcutt
 
Briefly summarize and analyze two primary sources, identifying their.docx
Briefly summarize and analyze two primary sources, identifying their.docxBriefly summarize and analyze two primary sources, identifying their.docx
Briefly summarize and analyze two primary sources, identifying their.docxjackiewalcutt
 
Briefly respond to the following questions. Use facts and examples t.docx
Briefly respond to the following questions. Use facts and examples t.docxBriefly respond to the following questions. Use facts and examples t.docx
Briefly respond to the following questions. Use facts and examples t.docxjackiewalcutt
 
Briefly in your own words describe the distinction between explicit .docx
Briefly in your own words describe the distinction between explicit .docxBriefly in your own words describe the distinction between explicit .docx
Briefly in your own words describe the distinction between explicit .docxjackiewalcutt
 
Briefly explain   Victoria Australia Covid19 update and impact.docx
Briefly explain   Victoria Australia Covid19 update and impact.docxBriefly explain   Victoria Australia Covid19 update and impact.docx
Briefly explain   Victoria Australia Covid19 update and impact.docxjackiewalcutt
 
Briefly introduce the détente policies of the early 1970s, and des.docx
Briefly introduce the détente policies of the early 1970s, and des.docxBriefly introduce the détente policies of the early 1970s, and des.docx
Briefly introduce the détente policies of the early 1970s, and des.docxjackiewalcutt
 
Briefly explain the role of information systems in an organization.docx
Briefly explain the role of information systems in an organization.docxBriefly explain the role of information systems in an organization.docx
Briefly explain the role of information systems in an organization.docxjackiewalcutt
 
briefly describe, in 2-3 pages, the problemissue and the proble.docx
briefly describe, in 2-3 pages, the problemissue and the proble.docxbriefly describe, in 2-3 pages, the problemissue and the proble.docx
briefly describe, in 2-3 pages, the problemissue and the proble.docxjackiewalcutt
 
Briefly explain the mission of the OSH Act. What is the rationale be.docx
Briefly explain the mission of the OSH Act. What is the rationale be.docxBriefly explain the mission of the OSH Act. What is the rationale be.docx
Briefly explain the mission of the OSH Act. What is the rationale be.docxjackiewalcutt
 
Briefly discuss the various organizational approaches to managing .docx
Briefly discuss the various organizational approaches to managing .docxBriefly discuss the various organizational approaches to managing .docx
Briefly discuss the various organizational approaches to managing .docxjackiewalcutt
 
Briefly explain the identified security issues during Risk Assessmen.docx
Briefly explain the identified security issues during Risk Assessmen.docxBriefly explain the identified security issues during Risk Assessmen.docx
Briefly explain the identified security issues during Risk Assessmen.docxjackiewalcutt
 
Briefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docx
Briefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docxBriefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docx
Briefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docxjackiewalcutt
 
Briefly describe what a monopoly is and give an example using the ch.docx
Briefly describe what a monopoly is and give an example using the ch.docxBriefly describe what a monopoly is and give an example using the ch.docx
Briefly describe what a monopoly is and give an example using the ch.docxjackiewalcutt
 
Briefly describe the spread of industry throughout Europe and into.docx
Briefly describe the spread of industry throughout Europe and into.docxBriefly describe the spread of industry throughout Europe and into.docx
Briefly describe the spread of industry throughout Europe and into.docxjackiewalcutt
 
Briefly describe the path of food through the digestive system and e.docx
Briefly describe the path of food through the digestive system and e.docxBriefly describe the path of food through the digestive system and e.docx
Briefly describe the path of food through the digestive system and e.docxjackiewalcutt
 
Briefly describe the different parenting styles discussed in this we.docx
Briefly describe the different parenting styles discussed in this we.docxBriefly describe the different parenting styles discussed in this we.docx
Briefly describe the different parenting styles discussed in this we.docxjackiewalcutt
 
Briefly describe how the BIOS boots or starts the computer and.docx
Briefly describe how the BIOS boots or starts the computer and.docxBriefly describe how the BIOS boots or starts the computer and.docx
Briefly describe how the BIOS boots or starts the computer and.docxjackiewalcutt
 
Briefly describe how to deploy a Continuous Improvement effort.W.docx
Briefly describe how to deploy a Continuous Improvement effort.W.docxBriefly describe how to deploy a Continuous Improvement effort.W.docx
Briefly describe how to deploy a Continuous Improvement effort.W.docxjackiewalcutt
 
briefly define democracy and evaluate in detail THREE of.docx
briefly define democracy and evaluate in detail THREE of.docxbriefly define democracy and evaluate in detail THREE of.docx
briefly define democracy and evaluate in detail THREE of.docxjackiewalcutt
 
Briefly define, listcontrast, identify the significance of, or .docx
Briefly define, listcontrast, identify the significance of, or .docxBriefly define, listcontrast, identify the significance of, or .docx
Briefly define, listcontrast, identify the significance of, or .docxjackiewalcutt
 

More from jackiewalcutt (20)

briefly summarize how the Electoral College works. Explain some of t.docx
briefly summarize how the Electoral College works. Explain some of t.docxbriefly summarize how the Electoral College works. Explain some of t.docx
briefly summarize how the Electoral College works. Explain some of t.docx
 
Briefly summarize and analyze two primary sources, identifying their.docx
Briefly summarize and analyze two primary sources, identifying their.docxBriefly summarize and analyze two primary sources, identifying their.docx
Briefly summarize and analyze two primary sources, identifying their.docx
 
Briefly respond to the following questions. Use facts and examples t.docx
Briefly respond to the following questions. Use facts and examples t.docxBriefly respond to the following questions. Use facts and examples t.docx
Briefly respond to the following questions. Use facts and examples t.docx
 
Briefly in your own words describe the distinction between explicit .docx
Briefly in your own words describe the distinction between explicit .docxBriefly in your own words describe the distinction between explicit .docx
Briefly in your own words describe the distinction between explicit .docx
 
Briefly explain   Victoria Australia Covid19 update and impact.docx
Briefly explain   Victoria Australia Covid19 update and impact.docxBriefly explain   Victoria Australia Covid19 update and impact.docx
Briefly explain   Victoria Australia Covid19 update and impact.docx
 
Briefly introduce the détente policies of the early 1970s, and des.docx
Briefly introduce the détente policies of the early 1970s, and des.docxBriefly introduce the détente policies of the early 1970s, and des.docx
Briefly introduce the détente policies of the early 1970s, and des.docx
 
Briefly explain the role of information systems in an organization.docx
Briefly explain the role of information systems in an organization.docxBriefly explain the role of information systems in an organization.docx
Briefly explain the role of information systems in an organization.docx
 
briefly describe, in 2-3 pages, the problemissue and the proble.docx
briefly describe, in 2-3 pages, the problemissue and the proble.docxbriefly describe, in 2-3 pages, the problemissue and the proble.docx
briefly describe, in 2-3 pages, the problemissue and the proble.docx
 
Briefly explain the mission of the OSH Act. What is the rationale be.docx
Briefly explain the mission of the OSH Act. What is the rationale be.docxBriefly explain the mission of the OSH Act. What is the rationale be.docx
Briefly explain the mission of the OSH Act. What is the rationale be.docx
 
Briefly discuss the various organizational approaches to managing .docx
Briefly discuss the various organizational approaches to managing .docxBriefly discuss the various organizational approaches to managing .docx
Briefly discuss the various organizational approaches to managing .docx
 
Briefly explain the identified security issues during Risk Assessmen.docx
Briefly explain the identified security issues during Risk Assessmen.docxBriefly explain the identified security issues during Risk Assessmen.docx
Briefly explain the identified security issues during Risk Assessmen.docx
 
Briefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docx
Briefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docxBriefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docx
Briefly discuss some KSAs for Fighting Cybercrime and submit in a wo.docx
 
Briefly describe what a monopoly is and give an example using the ch.docx
Briefly describe what a monopoly is and give an example using the ch.docxBriefly describe what a monopoly is and give an example using the ch.docx
Briefly describe what a monopoly is and give an example using the ch.docx
 
Briefly describe the spread of industry throughout Europe and into.docx
Briefly describe the spread of industry throughout Europe and into.docxBriefly describe the spread of industry throughout Europe and into.docx
Briefly describe the spread of industry throughout Europe and into.docx
 
Briefly describe the path of food through the digestive system and e.docx
Briefly describe the path of food through the digestive system and e.docxBriefly describe the path of food through the digestive system and e.docx
Briefly describe the path of food through the digestive system and e.docx
 
Briefly describe the different parenting styles discussed in this we.docx
Briefly describe the different parenting styles discussed in this we.docxBriefly describe the different parenting styles discussed in this we.docx
Briefly describe the different parenting styles discussed in this we.docx
 
Briefly describe how the BIOS boots or starts the computer and.docx
Briefly describe how the BIOS boots or starts the computer and.docxBriefly describe how the BIOS boots or starts the computer and.docx
Briefly describe how the BIOS boots or starts the computer and.docx
 
Briefly describe how to deploy a Continuous Improvement effort.W.docx
Briefly describe how to deploy a Continuous Improvement effort.W.docxBriefly describe how to deploy a Continuous Improvement effort.W.docx
Briefly describe how to deploy a Continuous Improvement effort.W.docx
 
briefly define democracy and evaluate in detail THREE of.docx
briefly define democracy and evaluate in detail THREE of.docxbriefly define democracy and evaluate in detail THREE of.docx
briefly define democracy and evaluate in detail THREE of.docx
 
Briefly define, listcontrast, identify the significance of, or .docx
Briefly define, listcontrast, identify the significance of, or .docxBriefly define, listcontrast, identify the significance of, or .docx
Briefly define, listcontrast, identify the significance of, or .docx
 

Recently uploaded

Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application ) Sakshi Ghasle
 
Micromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of PowdersMicromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of PowdersChitralekhaTherkar
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991RKavithamani
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3JemimahLaneBuaron
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxpboyjonauth
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Celine George
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxSayali Powar
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon AUnboundStockton
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxheathfieldcps1
 
Concept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfConcept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfUmakantAnnand
 
Solving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxSolving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxOH TEIK BIN
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionSafetyChain Software
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdfssuser54595a
 

Recently uploaded (20)

Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application )
 
Micromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of PowdersMicromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of Powders
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptx
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon A
 
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdfTataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
Concept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfConcept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.Compdf
 
Solving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxSolving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptx
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory Inspection
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
 

1. Emergence of Software EngineeringIn the software industry, we.docx

  • 1. 1. Emergence of Software Engineering In the software industry, we have seen the complexity of computer-based systems increase dramatically over the past decades along with advances in technology. This new technology has increased the demand for computer-based systems to control many infrastructures with software. As a result, designing and building cost-effective, reliable, and high- quality software has become the focus of software engineering in the computer industry. In the past the processes used for designing and developing software were very informal, which contributed to the rise in development and maintenance costs. The results of ad hoc development processes contributed to a higher percentage of unreliable and lesser quality products entering the marketplace. Many accidents resulted from failures in computer-based systems with hardware devices that were controlled with software. At the time, the industry was considered to be in a crisis state, which then led to the emergence of new practices and methods in software engineering. Technological advances have had a big impact on the complexity level required in software systems. The emergence of new communication protocols, hardware devices, and graphical user interface components have placed a greater demand on software engineers to design quality, reliable, and safe software. A Brief History of Software Engineering In the 1950s and the early 1960s, the various engineering disciplines were beginning to analyze how aspects of the engineering field could be applied to methods used in developing software products. As computing power evolved over the decades, the demand increased along with the complexity of the problems that needed to be addressed in the design of software. The term software engineering was introduced in 1968 at the first international software
  • 2. engineering conference, held by the North Atlantic Treaty Organization (NATO) Science Committee (Mahoney 2004). Many practitioners believe this is the milestone that marked the emergence of the software engineering discipline. Software was developed to control critical hardware devices in the mid- to late-1960s and early 1970s. During this time, cases emerged that involved operational errors and accidents resulting in the loss of human lives and damage to property. Defects in software were uncovered, which heightened public awareness to the need for better quality and reliability of software. The escalating cost of building quality and reliable software was on the rise in the computer industry and the demand for skilled programmers could not be met. The state of software development was viewed by practitioners as being in a "crisis" state and was commonly referred to as the software crisis. In response to the software crisis, researchers and practitioners have been trying to develop a set of methodologies, processes, and tools as the "silver bullet" for building software. The combination of these methodologies, processes, and tools is what comprises the field of software engineering, which continues to emerge today. The software crisis can be summed up in economic terminology: there is a greater demand for software than there is a supply. The software in question is custom software written to solve large, unique data-processing problems. Usually, the small ubiquitous problems can be addressed by some combination of commercially available software products, such as word processing programs, spreadsheets, and so on. But these types of problems are not the focus of this course. Our focus instead is on large, unique problems that require custom software solutions. Software Engineering Defined To fully understand the definition of software engineering, we need to define what is meant by the term software. Software is much more than just the code of a computer program. Software is accompanied by a set of documentation that is necessary to
  • 3. describe the details of the requirements, design, and any external aspects of the software that are necessary for it to execute successfully. These documents include any configuration files and any aspects of the external environment that surround the building and use of the software. We can refer to these items as a collective whole, the software system or the software configuration. Software has unique characteristics that differ from hardware, which is manufactured and tangible. Software is abstract and intangible and is not manufactured or governed by physical laws. Creative programming solutions are required by humans because software is developed from a conceptual idea. There are four characteristics that best describe software: its maintainability, dependability, efficiency, and usability. These characteristics are inherent of the design process that was used to build the software. The uniqueness of programming solutions makes these characteristics difficult to measure. In order to build software, we use processes to address a unique problem to be solved or a particular need to be satisfied. Software engineering focuses on improving these processes to build a better quality and more reliable product. In early times these processes were often ad hoc and chaotic and resulted in poor quality and unreliable software that was expensive to maintain after deployment. The rising cost of maintaining software was very expensive and unacceptable by software companies. The ultimate goal of good software engineering methodologies is to reduce these maintenance costs by building a better product earlier in the development phases of the life cycle. To define software engineering, we can look at the definition provided by the Institute of Electrical and Electronics Engineers (IEEE, 1993) 1. The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is the application of engineering to software. 2. The study of approaches as in 1.
  • 4. The IEEE refers to a "systematic, disciplined, and quantifiable" approach to developing software that can be measured for effectiveness to allow for continuous improvement. As we mentioned earlier, software is intangible and developed from a conceptual idea. However, not all software teams may be receptive and suitable to follow a strict disciplined process. Pressman (2005) stresses that a process needs to be designed to foster creativity and to be adaptable and agile to change. It should be noted that the IEEE definition does not provide the technical "how tos" to build software. In order to build quality software, companies need to be committed to developing sound processes, which requires the establishment of a set of methods and tools. When we develop these processes we also need to consider support for the business needs of the organization or company. If you search the Internet you can find a variety of automated tools that have been developed to provide support for software processes and methods. These tools are referred to as computer- aided software engineering (CASE) tools. CASE tools have been designed to ease software development and to allow for integration of information from one process to another. It is important to understand that complex processes rely on individuals' judgment and creativity, so not every process can be automated by using a CASE tool. We will elaborate more on CASE tools in section 3. Social and Ethical Responsibility Software engineering is a respected profession and engineers are expected to use good judgment when developing software products. Software engineering is no different than any other engineering discipline. Software engineers are bound by the constraints of the legal and social framework when developing software (Sommerville, 2004). Software engineers possess technical skills and they need to use them in an honest and moral way when developing software products. Applications to solve a wide range of problems are created and used in society, and society expects the software to
  • 5. be correct and of high quality. Companies entrust engineers with their assets and private data. It is the responsibility of the software engineer to maintain professionalism in the areas of confidentiality, competence, intellectual property rights, and computer misuse (Sommerville, 2004). Professional software engineers are encouraged to join organizations in which ethical standards are established. The Association for Computing Machinery (ACM) and IEEE are known for establishing rules of professional conduct and ethics. 2. Introduction to Systems Engineering In this section we will define system engineering and list some of its distinct characteristics. To help you understand the development of the software component within the system framework, we will introduce the basic system life cycle model. Because software requirements are derived from system requirements, we will introduce the System Specifications document. Definition of System Engineering The basic definition of system engineering (Blanchard, 1998, p. 12) is: … the effective application of scientific and engineering efforts to transform an operational need into a defined system configuration through a top-down iterative process of requirements analysis, functional analysis and allocation, synthesis, design optimization, test and evaluation, and validation. This definition highlights the various phases in the life cycle of a system, which we will discuss further in the next section. The Department of Defense (1996) defines system engineering as the … process that shall: · Transform operational needs and requirements into an integrated system design solution through concurrent considerations of all life-cycle needs (i.e., development, manufacturing, test, and evaluation, verification, deployment, operations, support, training, and disposal). · Ensure the compatibility, interoperability, and integration of
  • 6. all functional and physical interfaces and ensure that system definitions and design reflect the requirements for all systems elements (i.e., hardware, software, facilities, people, data). · Characterize and manage technical risks. The Department of Defense's definition is similar to the one provided by Blanchard in mentioning the life cycle, but it also stresses risk-management activities as a separate process. System Engineering Characteristics System engineering has distinct characteristics (Stevens, n.d.) that make its life cycle unique from software engineering: · handles communication among disparate disciplines, each with its own technical language · is primarily a project management activity · deals with multiple semi-independent subsystems · deals with engineering requirements, constraints for hardware · is difficult to change · has mechanics and architecture that make progress easier to measure · is unlikely to require taking as many risks · has a concrete working environment dependent on hardware · has components that are manufactured or replicated and that can be damaged · has upgrades requiring physical contact to implement because systems contain tangible components · has development costs that are easier to determine · has the primary maintenance goal of returning to its original state by repairing units If we think of system engineering from the perspective of hardware, these characteristics can be easily understood. After all, hardware is tangible, and it can be manufactured. System Boundaries and Environment Before we discuss the life cycle of a system, we need to define what is meant by a system that involves one or more computers and software. The term system is used loosely in society to define systems that emerge from organizations and institutions, systems that consist of hardware components, and systems that
  • 7. consist of hardware and software components. Local and federal governments are often referred to as a system. We also refer to various institutions, the educational system, and the financial or banking system. Hardware systems involve mechanical parts that work together to perform a specific task; power tools are good examples. Systems that contain both hardware and software components are best described as integrated subsystems that work together to accomplish an objective. Sommerville (2004, p. 21) defines a system as "a purposeful collection of interrelated components that work together to achieve some objective." The focus of our systems engineering discussion will be on systems that contain hardware and software components, or subsystems, which are interrelated. An example is a self-service checkout system that is used in stores by customers to purchase items. A system operates within a set of boundaries and limitations unique to its overall environment. These are not considered part of the overall system itself, but the mechanisms and constraints can affect the system state at any given time. Anything that crosses the system boundary is defined as the system's distinct set of inputs and outputs. The following diagram demonstrates these relationships. Click on each item in figure 1.1 to read its description and see some examples. Figure 1.1 The System Environment As you review the contents of this diagram, remember that a system has a designated purpose and it responds to an identified need. Further analysis of any system will result in a unique set of inputs, outputs, and external constraints that are imposed on the system, as well as the required mechanisms to achieve the desired results. This system framework contains all the necessary products and processes to fulfill the intended need. Systems are functionally dependent on their physical and organizational environment. It may also be the intent of the
  • 8. system to change its environment. System Components or Subsystems Functionality within a system is performed at the component level. A component can also be referred to as a subsystem. Components require the involvement of engineers from different disciplines working together to perform all the necessary functions required within the entire system. Interdisciplinary involvement consists of engineers from the software, electronics, mechanical, structural, civil, human factors, environmental, and architectural disciplines. Domain specialists and representatives from the user community should work with the engineers. The complexity level of the system, required to satisfy the functionality, determines both the number of subsystems and the interrelationships of the disciplines necessary to satisfy the system requirements. The diagram below shows the various components of a system. Figure 1.2 Components of a System Relationships between subsystems are defined in their interfaces. These interfaces need to be defined at the system level. System Life Cycle Now that we have defined a system as integrated hardware and software components working together in its environment to fulfill an objective, we will discuss its life cycle. The basic life cycle of a system begins with identification of a need to be fulfilled through the system's development, implementation, and retirement phases. The various stages of the system life cycle are identified in figure 1.3. Figure 1.3 System Life Cycle In order to develop software, it is necessary to understand how the software interacts with the hardware to fulfill the need or objective of the system. The role and boundaries of the software
  • 9. subsystem need to be well-defined within the system framework. To satisfy the need for the system, a solution is established and presented to the customer in a document called the system specifications (SS). The SS describes what is needed by the system, its subsystems, and the interfaces that need to exist between the subsystems and other systems. When the SS is complete it is submitted to the customer for approval. Once the SS is approved by the customer, the life cycle for each subsystem can independently commence. In figure 1.4, we illustrate the parallel development cycle of hardware and software subsystems. Figure 1.4 Parallel Development of Hardware and Software Subsystems System Specifications In figure 1.4, we can see that the SS outlines the "top-level" requirements for the overall system. Defining the requirements for the software subsystem can commence after the system requirements are agreed upon by the stakeholders and the engineers. Subsequent development phases of software and hardware can continue in parallel and then be integrated for testing on a scheduled date as a whole working system. Integration of software and hardware can take months, even years, depending on the size and complexity of the system. Development of a project begins at the system level by stating its desired function. The functionality of the system is relayed to designers as a set of requirements that address the question "What is this system supposed to do?" At this point in the development life cycle, the system is viewed as a whole working unit encompassing the software and the hardware. System engineers are responsible for defining the requirements and the interfaces for the whole system and designing the components of the system operations. The System Specifications document is prepared by the engineers, and it defines the architecture, the functional and non-functional
  • 10. requirements, and defines the necessary interfaces between all the components. We will concentrate on the required interfaces between the software and hardware components in the architecture for a self-service checkout system. We view a system as a conceptual model. Consistency and communication are the goals of the specifications phase in the system life cycle. General guidelines for the SS include: · stating the goals of the system · defining the system boundary, which includes any constraints imposed on the system · specifying the inputs and outputs · identifying the various components · defining the structure · specifying any interactions between the components · identifying any safety concerns Upon its completion, the SS document is submitted, reviewed, revised, and approved by all of the stakeholders and serves as the basis for the top-level design that defines the system architecture. Architectural Diagram The basic process for gathering system requirements consists of effective communications between the customer and the technical community and a thorough understanding of the environment in which the system is to operate. To illustrate the system and its environment, a top-level architectural diagram is used. Pressman (2005) describes the architectural context diagram (ACD) as a block diagram that represents the flow of information into and out of the system. Refer to the following diagram to view a graphical representation of a self-service checkout system as seen in Wal-Mart and major grocery store chains. Figure 1.5 Architectural Context Diagram of Self-Service Checkout System Figure 1.5 represents all the external entities (shown as rectangles) or terminators and the necessary relationships to
  • 11. produce a working checkout system. The proposed software subsystem is placed in the middle of the diagram (shown as a circle) surrounded by the external entities. The software subsystem is treated as a black box, without regard for the internal workings. The connecting lines with directional arrows reflect the expected flow of data inputs and outputs between the external entities and the software component. You should note that each directional line has a label describing the data flow or object. Proper labeling of all inputs and outputs at the system specifications stage will form the foundation for subsequent definition of the operational scenarios and data objects during software requirements development. We will discuss operational scenarios later in this module and data objects in modules 2 and 3. IEEE Guide for Developing System Requirements Specifications The IEEE has provided some guidelines for writing a System Specifications document in the IEEE Guide for Developing System Requirements Specifications, IEEE Standard 1223a- 1998. Later in this module we will discuss diagrams that can be used to graphically represent information that needs to be included in the SS. The use of diagrams is recommended in technical documents and all diagrams should be supplemented with a textual description. 3. Software Process and Product In this section we will study the discipline of software engineering by reviewing the development process and the software product. There are many software products, with code being just one of them. Process and product are really two sides of the same coin. The goal of the process is the product, and there's no product without the process. To accommodate the differing roles of software products, we will study several process models that vary the sequence and frequency of the basic tasks of software development. The basic tasks, however, are invariant and are illustrated below in one of the predominant software development processes, linear-sequential:
  • 12. Roger Pressman defines a software process as "the approach that is taken as software is engineered" (Pressman, 2005, p. 21). This approach includes all the technical methods and automated tools that create the process used to make a complex software product. You should keep in mind that a well-designed process is customized to be applicable to the developer's work culture and to stimulate creativity and support business decision making. One process does not fit all projects. As you can imagine, many activities are involved in engineering software products. These activities include more than just the development cycle of software, analysis, design, code, and test. To convey these activities, Pressman outlines a framework to form a foundation for a complete software process for any project (Pressman, 2005, pp. 22-23). This common process framework provides support for umbrella activities and is outlined below in figure 1.6; it is applicable to all types and sizes of projects. Figure 1.6 Process Framework with Umbrella Activities You should note that the most important element of this framework is communications. It is essential for effective communication to be present in all activities used in the phases of the life cycle of software. Process Improvement Organizations that develop software products need to improve their development process for several reasons. The demand for software today requires high-quality systems to be delivered to the customer at a low cost and within a specified time frame. The organization is faced with challenges to meet this demand and to produce software products within tight constraints. A greater challenge exists for the development of the safety- related system because software and project risk factors can impede the completion of the final product. There is no guarantee that a software system can be 100 percent safe and
  • 13. reliable, but studies have shown that implementing a good technical and management process in the development life cycle can help reduce the chance of software and project failures. At this point in our discussion, let's define a process and its maturity in the context of the development of a software product. A process is best described as the means used to bring together the necessary knowledge that is integrated into the final product (Pressman, 2005). This definition includes the means of communication and the software tools used to aid in this knowledge integration. Maturity of a process describes the effectiveness of the means that are being used. Process Improvement Models Organizations can improve their technical and management process and lower their risk factors by following the guidelines of the Capability Maturity Model Integrated (CMMI) process improvement model. We will discuss how this model can help organizations achieve a higher level of process maturity. A process improvement model offers a framework for assessing the current state of an organization's way of developing software. This blueprint of effective activities is used to evaluate the current state of the process and to offer a baseline for improvement to reach a higher level of maturity. The underlying premise of process improvement is based on Total Quality Management principles that were taught by Shewhart, Juran, Deming, and Humphrey (1989). These principles stress the importance of the process that is used to develop and maintain a product. The process used to develop the product will determine its overall quality; if a high-quality process is used in software development, the product will also be of high quality. Figure 1.7 illustrates the relationship between process improvement and a process model. Figure 1.7 Achieving Process Improvement Phillips (2003) provides several reasons why process models
  • 14. should be used by an organization or company that develops software: · to set process improvement objectives and priorities · to improve the current process · to provide guidance to achieve a mature process A process model can only offer guidance on what to do to improve maturity of the process. No specific direction is given on how to actually do it (Phillips, 2003). Each organization must customize its activities according to its business objectives and the type of product it produces. It should be noted that process models vary and not all guidelines may be applicable to a particular project or application. To help select a process model, Pressman (2005) recommends making the process model decision based on several factors: · the nature of the project and application · the methods and tools to be used · the required controls and deliverables Humphrey (1989) further defines a software process as all the tools, methods, and practices that are used in the creation of the software product. Some examples of activities that are used in a process during the development life cycle are: · software quality assurance · configuration management · project management · subcontract management · requirements management You will notice Humphrey has highlighted activities in the software process that are relative to managing the software system or software configuration. A summary of benefits (Phillips, 2003) derived from studies on organizations that have followed process models are categorized as improvements in the following areas: · predictability of schedules and budgets · development cycle time · productivity levels · quality (measured by the number of defects)
  • 15. · customer satisfaction · employee morale · return on investment · cost factor of quality Process Assessment To assess an organization's software process, all activities used in building the product must be evaluated against a set of standards. These standards provide guidance because the process used in defining the standards has been proven effective over time. Successful evaluation of process maturity is achieved by following a framework that can offer direction to the organization and its internal operations. Standards provide a gauge that can be used to determine whether the process is in compliance with the standard. Process assessment is used by organizations and companies in different ways: · to determine the capability of a development organization in the selection process · to determine the organization's capability to keep in line with its business aims To summarize our discussion on process improvement, companies can use process assessment as an evaluation tool or incorporate it into their internal operation. The selection of a development organization to build software is a very important task, especially for systems that contain safety-critical components. Companies can also adopt process assessment to determine their capability to stay in line with their business aims, to stay marketable. Capability Maturity Model In 1984, Carnegie Mellon University, in response to software needs in the Department of Defense (DOD), formed the Software Engineering Institute (SEI). The SEI developed the Software Process Maturity Model as part of its early work at the DOD. In 1986, the SEI initiated the Software Capability Evaluation (SCE) project as requested by the United States Air Force (Humphrey, 1992). After several more years of
  • 16. refinement, in 1991, the SEI developed the Capability Maturity Model (CMM) at Carnegie Mellon to denote a class of maturity models. Over the years, the SEI has revised the CMM based on new knowledge acquired from studies conducted on private industry and government. This new knowledge was compiled based on process assessments, capability evaluations, and feedback submitted by the participants in the studies. The conceptual framework for the CMM was developed by Watts Humphrey, who acted as the advisor during the refinement process of the model (Paulk et al., 1993). In December 2001, the Software Engineering Institute released the Capability Maturity Model Integrated (CMMI), which was an upgrade from the CMM. The CMMI is currently being supported by the SEI and followed by organizations and companies in the computer industry. In module 5 we will discuss project management issues, continue our discussion on process improvement, and take a closer look at the key activities involved in CMMI. Computer-Aided Software Engineering (CASE) In this section we will introduce computer-aided software engineering tools (CASE) that were developed to support process activities. We will discuss the different types of CASE tools that are available to automate process activities by classifying them according to functionality. It should be noted that many tools exist in the marketplace and some of these packages contain a full set of tools to support multiple functions. Types of CASE Tools The software development process is information-intensive. The information generated takes different formats as software development progresses through the tasks of analysis, design, code, and test. Much of the information is textual, e.g., requirements, design descriptions, source code, test case descriptions, and so on. The remainder of the information is either graphical or binary, e.g., data flow diagrams (DFDs),
  • 17. entity-relationship (E-R) diagrams, state-transition diagrams (STDs), flowcharts, executable code, and so on. For large systems, the amount of information that must be created, managed, controlled, and evaluated is far too great for developers to manage with paper and pencil. For this reason, the use of automated tools to assist in the development of software is crucial. Tools used for this purpose are called CASE (computer-aided software engineering) tools. If you search the Internet you will discover that CASE tools are available for nearly every aspect of software development. To keep them straight, it is useful to view them in taxonomy. Sommerville (2004, p. 87) organizes tools by their specific function or utility. Read through these descriptions and identify their different roles in development. Note that these functions cover the range from documentation to support for testing. The sale of such tools is an active and important marketplace, essential for modern development projects. Care must be exercised to select those tools most suitable for the project at hand. An inappropriate tool can do more harm than good by diverting effort from development. Figure 1.8 CASE Tools Classified by Functionality Most CASE tools available today handle one or more different formats and support one or more development tasks, but fall short of supporting all tasks across the life cycle. For example, several commercial database front-end application programs assist in developing schema code. The software engineer defines the data schema (i.e., data model) either textually or graphically. The CASE tool will automatically generate the executable code to implement that schema. This CASE tool manages both textual and binary information formats, but only for the design and coding tasks, not for analysis or test. One common perception is that the selection and use of a CASE tool will solve any problems associated with development. Unfortunately, nothing could be further from the truth.
  • 18. Although a tool can help to develop a product, and whereas not using tools can doom a project to failure (particularly if the system under development is large and complex), simply providing tools, by itself, is not sufficient to ensure success. The tools must be properly used in conjunction with a disciplined process. In module 5, we will discuss CASE tools and how they can be used to support project management activities. Integrated CASE Environments The use of individual CASE tools can provide significant help to the software engineer, but the process of getting the tools to work together can sometimes be a difficult and frustrating task. If the tools work with different file formats, perform different functions, and execute on different machines, the engineer is left with having to expend extra effort just to coordinate the tools and their outputs. If, however, the tools can be integrated in some way so that they work together seamlessly, with compatible interfaces, then the engineer's job is made much easier and he or she can focus on the creative aspects of development. Specifically, the challenge is to integrate the various CASE tools together into a single capability, i.e., integrated case (I-CASE). CASE tool interface protocols and input and output data formats must be standardized to permit individual CASE tools to communicate with each other. Integrating frameworks has evolved as an answer to the CASE tool communication problem, but the actual data formats and interface protocols have not yet been fully defined and standardized. One key concept that is necessary to achieve I-CASE is that of the CASE repository. For individual CASE tools to share information during the software development process, each tool will require access to the outputs of the other CASE tools. One potentially effective approach to achieving this goal is to store the outputs of the CASE tools in a central location called a repository. If, in addition to the collocation of CASE tool data, the CASE
  • 19. repository can be built with common protocols and data formats/conversions, then the CASE repository will serve as an integrating framework and be of even more assistance to the developers. Current industry publications that discuss "object repositories" and "object-bases" are really referring to the concept of CASE repository, in which information in different formats is stored centrally for access by any interested application program. For this discussion, the interested application program is the CASE tool. 4. Software Process Models So far in our discussion we have introduced the concept of producing a high-quality software product by improving the activities used in the development process. In this section we will look closer at the various process models being used today in the computer industry. These process models have formed the basis for emerging process models, for example agile methodology, which we will discuss separately in section 5. As you read through this section, you should notice that all the process models have a variation of the basic tasks used in development: analysis, design, code, and test. Life Cycle of Software The full life cycle of a software system begins with its initial concept and ends with its retirement from service. Each step of this life cycle requires one or more activities to occur for the product to be completed successfully. To direct the processes within the development life cycle, the project manager selects a model that best describes the flow of the tasks needed within the project. The IEEE (1996) generically describes a software life cycle model as a "framework that contains all the necessary processes, activities, and tasks to develop, to operate, and to maintain a software product" from the point of conception to termination of its use. All life cycle models used in software development contain the following core components, as outlined by Christensen and Thayer (2001):
  • 20. · a description of the major development phases · a detailed description of the major processes and activities for each phase · a specification of the products and inputs for each phase · a mapping of the activities to a framework Basic Life Cycle Models There are different types of life cycle models that exist for the development of software. The basic ones are listed below. Move your mouse over the highlighted words to see a brief description. · linear sequential · prototyping · evolutionary · rapid application development · component-based To complete this section we will expand our process model discussion and look at some specific models. You are encouraged to do research on the Internet to learn more about the various development models in software engineering. Waterfall Model The classic linear-sequential life-cycle model for software engineering is sometimes referred to as the waterfall model. The basis of the waterfall model originated in the late 1960s to address needs for a complex military software development (Baird, 2002). The waterfall model consists of a systematic sequential approach to software development that begins at the system level and progresses through several phases or steps. At each phase or step it is recommended that one or more technical documents be produced as products that are completed and "signed off" before continuing on to the next phase (Sommerville, 2004). In 1970, Royce introduced the model following an iterative approach to software development in which he stressed the importance of documentation at each step. In Royce's paper, he also argued that the waterfall model was flawed and needed strengthening by providing additional supporting development steps to make it less risky.
  • 21. In figure 1.9, we can trace through the phases of the life cycle and view the major supporting technical documentation proposed by Royce. You should note there can be several documents produced at each phase. We have only mentioned the major documents to help guide you through the phases in the life cycle and to guide you through your course assignment. We will discuss the software requirements specification, design document, and test specifications throughout the subsequent modules in this course. Figure 1.9 Waterfall Model and Major Technical Documents The lack of feedback between each phase and in getting the approval for each document of the life cycle has proved to be costly and has required a significant amount of rework when changes were introduced during later phases. For these reasons, the waterfall model is best suited for projects in which requirements are stable and well-defined (Sommerville, 2004, p. 67). Introducing changes late in the life cycle is difficult due to the sequential nature and dependency of phases followed in the waterfall model. The waterfall model is the oldest and most widely used paradigm in the industry and is known to have inherent deficiencies. To address the deficiencies in the waterfall model, hybrids have been emerging over the decades that address: · iteration of phases · difficulty in getting all the requirements up front · lateness of working product Boehm's Spiral Model In this section we will discuss the evolutionary process model called Boehm's Spiral Model. The spiral model is highly recommended to guide the development processes necessary to produce high-quality, safety-critical software. Dr. Barry Boehm was the founder of the spiral model that emerged in the software industry in 1988. A major feature of the spiral model is its iterative development and linear
  • 22. sequential nature. Each cycle of the development process is fully evolved and results in a new software release or build before the next cycle commences. The basic philosophy of each cycle in the development process is based upon the principles of problem solving as outlined in Polya's (1957) approach and as summarized in figure 1.10. Figure 1.10 Polya's Approach to Problem Solving Boehm identifies four phases in the spiral model to encompass the basic principles of Polya's problem-solving approach. Each phase of the model is entered multiple times in a sequential fashion as the spiral continues to revolve. The activities within each iteration or cycle are completed and used as the foundation for the next iteration. Refer to figure 1.11 to see the basic layout of Boehm’s spiral model (1988). Click on each phase label to review its relevant activities. Figure 1.11 Basic Layout of Boehm's Spiral Model Phase IDetermine Objectives, Alternatives, and Constraints Phase IVPlan Phase IIEvaluate Alternatives Phase IIIDevelop and Verify The spiral model is especially applicable for safety-critical software development because it provides a risk evaluation and analysis phase that is periodically visited throughout the development life cycle. The spiral model can be used to perform periodic risk identification through the development and analysis of prototypes. The function-oriented nature of the spiral model supports parallel development of software modules by a team of programmers. The underlying concept of developing prototypes
  • 23. minimizes the overall risk factors by ensuring that the software requirements are stable. The spiral model offers a workable framework to support the development of the system's hardware and the software components. Addressing risk periodically throughout their development cycles supports the elimination of unattractive alternatives early in the project, which will help keep the associated project costs down. We have outlined the various phases of the spiral. The spiral model has been used extensively in the development of defense systems, but because of the high cost and time factors, it hasn't been used extensively in private industry. Therefore, the spiral model is being proposed only for extreme cases in which the customer is willing to pay the cost of developing a secure safety-critical system. Rapid Application Development (RAD) Model The Rapid Application Development approach to building software stresses incremental development and a short time to market. The concept of incremental software releases is used to deliver a product to the customer for evaluation and to plan for the next software release. To gain a better understanding of a RAD approach, we can examine evolutionary prototyping, which delivers a system with functionality that can be used by the end-users. In order to build the initial prototype, parts of the system's requirements need to be clearly understood by the customer, developer, and the end- user. The prototype's functionality evolves with each release as the requirements for new features become fully defined. Prototypes can be used by the customer to discover new requirements for additional functionality or features. The main advantage of the evolutionary approach is to provide a means for the end-users to try out the system. The software engineers can also benefit because the prototype provides insight on how the end-user will use the system. The evolutionary prototyping model stresses incremental software releases. A software release, sometimes referred to as
  • 24. a build in the industry, is identified with a version number. The version number is assigned sequentially to identify the difference in functionality from the previous release. Each version refines the requirements for additional functionality. It should be noted that the system following the evolutionary model is not complete when first released to the end-user until the requirements are finalized between the developer and customer. Gradually building the system is suitable for systems in which specifications are difficult to fully define at the beginning of the life cycle. The evolutionary prototyping model stresses making changes quickly and demonstrating them to the customer and the end user in several revisions. Rational Unified Process (RUP) As you learn more about software engineering you will encounter many different processes and methodologies being used in the industry. In this section we briefly mention one methodology, the Rational Unified Process (RUP). RUP is a popular process that was developed to provide a disciplined approach to software development in large organizations. RUP is incorporated into IBM's Rational software (IBM Rational Unified Process), which uses the Unified Modeling Language extensively as a tool for supporting communications throughout the life cycle of software. RUP can be noted for its focus on risk reduction in projects by using an iterative development methodology (Baird, 2002). RUP portrays a flavor of the traditional waterfall model because support documentation plays an important role in its processes. Code-Fix Approach To complete our discussion of common approaches used in software development, we will mention the code-fix approach, sometimes referred to as the build-and-fix approach. The code- fix approach is not recognized as a software engineering methodology (Baird, 2002) but it does exist in the computer industry and you should be able to recognize it. The code-fix approach commences from an ill-defined set of
  • 25. requirements received from the customer. The developer attempts to satisfy the requirements in a quick fashion by coding software that is presented to the customer for feedback. The developer proceeds in the development by providing fixes to the software and repeating this cycle until the customer is satisfied with the software product. Practitioners question the quality and scalability of the final product (Baird, 2002). Often "spaghetti" code results from the code-fix approach and the code is often not documented and is difficult to maintain or change. 5. Agile Approach to Software Development In this section we will discuss a new approach to software development. The agile approach was conceived in response to weaknesses discovered in earlier software development practices and was spurred by the Internet. The growing trend for web applications heavily influenced the need for agility in a development approach. The nature of web programming requires flexibility to adapt and respond to continuous and quick changes in requirements and design. In our discussion on the traditional waterfall model, we mentioned that stability in requirements was necessary and changes were hard to accommodate. Therefore, this inflexibility to allow change has led researchers to develop a more agile model to accommodate development of applications for the web. The next section of this module will discuss a popular agile process model, Extreme Programming, which can be used for projects that require flexibility to adapt to a changing requirement environment. Extreme Programming (XP) Extreme Programming (XP) has been emerging since the late 1990s as a proposed solution for small- to medium-sized teams developing projects with continuously changing requirements. The basic philosophy of XP is built from a set of values, principles, practices, and activities (Baird, 2002) that are outlined in figure 1.12 to produce high-quality software products.
  • 26. Figure 1.12 Extreme Programming Philosophy In figure 1.12 we can see a set of values that is used to establish the overall tone throughout the XP development process. The focus of XP is to keep the design and structure as simple as possible to avoid adding unnecessary features to the software and to limit documentation. Because support documentation is kept at a minimum, it's necessary to establish two-way communication between all involved parties. It is preferred that the customer be located on-site so that the means of communication can be oral. Informal means of communications, such as daily stand-up meetings, are used to transfer information between parties. Written documents, reports, and plans are kept at a minimum to save time and effort. Quick and constructive feedback from the customer is encouraged, which builds confidence among the team members. The confidence level of the team fosters quick redevelopment when needed to keep activity moving forward. The strength of the XP methodology is found in several principles that are used to direct developmental activities. We mentioned feedback and simplicity in XP values but now we will extend these to include short feedback loops and to limit the design to a current iteration. The way in which changes in requirements are handled is the most notable difference in XP as compared to traditional approaches to development. XP encourages small and frequent changes to address and resolve problems as they occur. It’s easy to understand how this philosophy plays an important role in developing applications for the web, because the Internet environment is constantly changing. The principles of XP contrast with the traditional philosophies but the focus is the same – to produce a quality product. XP focuses on quality of work by concentrating on the coding and testing activities. We will now turn the focus of our discussion to how these values and principles are implemented in the actual activities of
  • 27. the life cycle. The basis for all practices in XP is verbal communications; practitioners therefore must master good listening skills. Another interesting concept in XP is on testing activities. Test cases are continually written as the requirements emerge before any code is actually developed. This school of thought is based on building quality into the code instead of catching errors at a later stage in development. Another prominent feature of XP is the pair programming concept. Two programmers are selected for compatibility and assigned to work on a code module to produce better quality code quickly with fewer errors. We have finished our discussion on the core of XP methodology. You should now be able to apply the values, principles, and activities as outlined in figure 1.12 to the XP practices. We encourage you to conduct research on the Internet to read more about XP practices and its success stories in the computer industry. 6. Unified Modeling Language (UML) In this section we will take a brief look at the history of the Unified Modeling Language (UML) and how it can be applied to the life cycle phases of software development. We introduce UML at this point in our discussion to assist you in preparing diagrams to represent your ideas in the system specifications document. A. History of Unified Modeling Language UML has emerged in the software industry and has steadily matured over the decades to become a standard. As a modeling language, UML represents best practices in analysis and design of large-scale software systems. We can trace the roots of UML to the beginnings of object- oriented languages. With the onset of early object-oriented languages, Stimula-67 and Smalltalk, Objective-C, techniques for object-oriented analysis and design began to appear in software engineering. In the early 1990s, a variety of diagramming techniques began to appear in publications written by common authors Coad, Yourdon, Booch, Rumbaugh,
  • 28. Premerlini, Eddy, Lorensen, Jacobsen, Christerson, Jonsson, and Overgaard (Bennet et al, 2001). You may have purchased or seen books on object-oriented analysis and design in your favorite bookstore or library that were written by one or more of these authors. If you scan through a few of these books you will notice that each approach outlines a slightly different diagramming notation and method to represent classes, objects, and relationships. The difference in these notations and methods was very confusing to developers when sharing designs. To effectively communicate an object-oriented design, a visual language with an established set of rules was needed in the industry. UML attempts to provide this commonality of methods in the software industry and to become the standard notation language used among designers and developers. B. Unified Modeling Language The Unified Modeling Language provides a definition of a set of elements and a set of rules on how to define these elements to make programs (Bennet et al, 2001). The elements in UML are defined by using a set of symbols, lines, rectangles, ovals, and other shapes, which are grouped together to create a graphical representation of a conceptual idea. These visual representations increase understanding among all interested parties involved in the design model. In the current version of UML, there are different types of diagrams that are defined and divided into three major categories: structure, behavior, and interaction. As we proceed through the phases of the life cycle you will learn and practice with a few of these diagrams to present your ideas for your project. You will be developing a set of technical documents for a proposed system as a required assignment for this course. The diagrams we will present in the subsequent modules are summarized in table 1.1 and mapped to the documents where you can use them throughout the life cycle. Before you start to work on your first assignment, the SS document, make sure you review the notes and examples on Use Case and State diagrams. Click on the highlighted text in the
  • 29. table below. Table 1.1 Maps the UML Diagrams to Technical Documents UML Diagram Document(s) Representation Operational or Use Case Diagram System Specifications Software Requirements Specifications Scenarios describing how the system will be used by actors of the system. Statechart or State Transition Diagram System Specifications States of system operation and the events to trigger these different states. Activity Diagram System Specifications Software Requirements Specifications Activity flow of the various processes needed to accomplish the task. Class Diagram Software Requirements Specifications Software Design Define classes and the necessary relationships between classes. Object Diagram Software Design Class instances and relationships among these instances. Component Diagram Software Design Code module breakdown of the processes. A variety of drawing tools exist on the market that provide the
  • 30. symbol set necessary to draw UML diagrams. You can download a trial version of SmartDraw software from the Internet to create the required diagrams for your project assignment. You are encouraged to perform a search on the Internet for other available drawing tools. Case Tools and UML We mentioned earlier in this module that there are many CASE tools available on the market to automate the tedious tasks involved in software development. UML provides a specification written for members of the Object Management Group who develop CASE tools used in the industry to provide standardization of notation. You are encouraged to search the Internet and become familiar with the availability of CASE tools that support UML features. 1. Problem Analysis At the beginning of a project, the software engineer needs to define the problem before establishing the requirements for the software. In this section we will describe the scientific method that can be used to clarify the problem in order to develop a solution. In problem analysis, software engineers need to include all the stakeholders who have different perspectives on the proposed software. We will discuss the role of stakeholders in requirements development and how their views of the proposed software will affect deriving the different categories of requirements. Understanding the Problem Defining requirements requires the software engineer to fully comprehend the problem before trying to solve it. As with other engineering disciplines, the software engineer can begin by following the scientific method to uncover the facts of the problem and to develop a hypothesis that can be used to solve the problem. The scientific method is the standard way in which all scientists and engineers tackle problems, and the software engineer
  • 31. practices the scientific method in developing software. The solutions to the problems that the software engineer solves are the programs that he or she develops to execute on computers in a runtime environment. There are three steps to the scientific method: Analysis, the first task of software development, corresponds to the first step of the scientific method—observing the problem. The analysis step in software development involves partitioning the problem in order to understand its essential parts so that a solution can be proposed. Analysis begins with a problem statement from the customer. Ideally, the problem statement will be an exhaustive laundry list of requirements that the customer has expressed for the solution to their problem. Customers, however, typically have difficulty expressing their requirements clearly. Clarifying customer requirements is one of the software engineer's most important tasks. Here is an abbreviated example of a customer's problem statement: · The self-service checkout system should ensure that store customers scan their products and pay their bill. · All types of payment should be handled by the self-service checkout system. Try to clarify this problem statement yourself and then look at our clarified problem statement. The software engineer then allocates the clarified customer's requirements to a proposed system as indicated in the following illustration: There are different categories of requirements that are needed for the varying components of a system. We will discuss the different requirement categories in section 2 of this module. Once the allocation of requirements to system components is complete, the software engineer focuses on designing, building, and testing the software component of the system. As we already discussed in module 1, the system specification (SS)
  • 32. records the allocation of requirements to system components and forms the basis of all subsequent software engineering activities. Software engineers use a model to verify that their comprehension of the software requirements is complete and coherent. These models typically are arrow-and-bubble diagrams, textual notations, or mathematical expressions, and are powerful tools for verifying completeness and communicating the required behavior of the software. The software requirements analysis culminates with the composition of a requirement specifications document. For our discussion we will refer to the ANSI/IEEE Standard 830-1998 Recommended Practice for Software Requirements Specifications (SRS). The SRS is referred to as a design-to specification and is the definitive statement on the expected behavior of the software component of the system. We will discuss the contents of various sections of the SRS throughout the remainder of this module. Identifying the Stakeholders Stakeholders play an important role in determining requirements for a computing system. Each stakeholder has a different viewpoint on what the software is supposed to do and the software engineer needs to involve them when deriving the requirements. A stakeholder can be defined as any individual, or group of individuals, "who will be affected by the system directly or indirectly" (Sommerville, 2004, p. 146). The effects of software can be described as any stakeholders who "request, pay for, select, specify, use, or receive the output generated by a software product" Weigers (2003, p. 29). In figure 2.1 below, we have outlined an example list of stakeholders and their potential interest in the product that will form the foundation for requirements elicitation. Figure 2.1 Stakeholders and Their Viewpoints The interest of each stakeholder will assist in defining
  • 33. categories of requirements for the proposed software. For example, the business manager may be concerned that the product is being developed with budget limitations, which restrict the number of features and the time allotted to develop the software. The end user is concerned with the ease of use of the software, which will affect the user interface requirements. The software engineer must consider each stakeholder's viewpoint when deriving a set of requirements. In section 2 we will discuss the different categories of requirements in more detail. Pressman (2005, p. 102) categorizes stakeholders into two groups: customers and end users. We have provided the outline of functions in table 2.1 that are used to distinguish the role of a customer and an end user. It is common for the customer to be the end user and to perform all the functions. The customers and end users have a significant impact on the technical aspects of the software. As we continue our discussion, we will use the terms customer and end user according to their functional role as outlined by Pressman. Table 2.1 Role of Customer and End User in Software Development Customer End user 1) requests software 2) defines overall business objectives 1) uses software to achieve business objectives 3) provides product requirements 2) defines operational details 4) coordinates funding Getting to Know the Business In order to provide a solution to a customer's problem, the software engineer must become familiar with the customer's
  • 34. business and the objectives for the proposed software. Commonplace business problems can often be solved with commercial off-the-shelf products, but unique business problems require creative solutions. Understanding the nature of the customer's business will assist the software engineer in clarifying the requirements needed for the proposed software. For example, financial and medical institutions require secure, accurate, and responsive transaction processing software. The software engineer must research and become educated about the customer's business in order to form the foundation for the different categories of requirements that are needed to support the application domain. 2. The Software Requirement To fully understand how to derive requirements from different perspectives at the software level, we need to define a requirement and discuss the various types of requirements. It is also important to understand that deriving complete and correct requirements is the driving force for the success of the subsequent development phases: design, code, and test. Types of Requirements Requirements can be classified into three basic types that exist for software. To read the definition of each type, move your mouse over the type. · functional · non-functional · domain Software engineers commonly use the acronym FURPS to describe these requirement categories: functionality, usability, reliability, performance, and supportability. In figure 2.2 we have extended the basic types of requirements for software to include data base, security, safety, and external interface. Additional software requirement categories can exist for a customer's problem in the areas of constraints and implementation (Grady, 1992). Figure 2.2 Categories of Software Requirements
  • 35. Figure 2.2 depicts that all the categories of software requirements are derived from the system requirements that form the basis for all subsequent development. As we mentioned in section 1, special consideration for the stakeholders' business objectives and their interests must exist in defining all the requirement categories for the proposed software product. The primary focus of our requirements development discussion will be on deriving the functional requirements for software. A complete SRS will address all the categories that apply to the customer's problem. It is common for software engineers to create supplemental requirement documents and then reference them in the SRS. For example, if a system involves a safety- critical component, a separate specification containing only safety-related requirements may be compiled and used as a reference. After all the software requirements have been fully understood and elaborated for the business domain and the customer's problem, the analysis task is complete. Requirement Definition The Institute of Electrical and Electronics Engineers (IEEE) generically defines a software requirement as a condition or capability to which the system being built must conform to operate correctly. A more refined definition of a software requirement is provided in the IEEE Standard 729 (1983) as: · a software capability needed by the user to solve a problem or achieve an objective · a software capability that must be met or processed by a system or system component to satisfy a contract, specification, standard, or other formally imposed documentation Davis (1993) adds that software requirements are used to: · define an object, function or state, · limit or control actions associated with an object, function, or state · define relationships among objects, functions, and states Conflicting Requirements
  • 36. When specifying requirements, there is a potential risk that one requirement may conflict with another in a different category. To avoid this conflict, it's necessary for the software engineer to cross-check requirements with those in other categories. For example, a functional requirement may specify that something should be done and the non-functional requirement may specify that it should not be done. Early identification of conflicting requirements will avoid rework and the introduction of software errors in later stages of the development life cycle. Importance of Requirements Requirements guide the planning, designing, coding, and testing of software, and therefore need to be correctly and completely defined by the software engineer. Correct and complete requirements will reduce misinterpretation that can cause errors in later stages of development. Latent errors in the requirements can have a negative impact in the subsequent phases of software development, in the following ways: · expensive to fix or change · does not satisfy the needs of the user(s) · result in disagreements between the customer and the developer · cannot derive test cases · result in wrong system and customer dissatisfaction Software engineers, customers, and end users should spend an adequate amount of time defining the requirements. Spending more time during requirements development has proven to be worth the investment. Blackburn et al (1996) reports in a study that improvement was seen in the development speed of companies when more time was spent during the software requirements stage. Companies that developed faster actually "spent less time and effort on average in all of the other stages of development and significantly less time in the final testing/integration stage." Blackburn et al concluded that the development speed was increased due to less rework involved in fixing errors discovered in the design, code, and test phases. 3. Requirements Development Model
  • 37. In figure 2.3 we summarize the various phases and the activities that occur at each phase of the basic requirements development model (Wiegers, 2003). In subsequent sections we will discuss several of the key activities contained in each phase. Figure 2.3 Requirements Development Model Requirements Elicitation Requirements elicitation for a software product is the most difficult phase in development. Understanding the application domain, problem, and the needs of the customer and end user requires various means of oral and written communication to transfer this information among all parties. Any breakdown in this communication process can lead to ill-defined, missing, and incorrect requirements, which will result in the delivery of a low-quality product or even the wrong software product. In section 1 we discussed the importance of understanding the problem, the stakeholders, and the business objectives. Requirements elicitation begins with the customer who initiates communication by contacting a software engineer with a business-related problem. The software engineer responds to the customer's problem by clarifying the needs by using effective means of communication in a written description. Effective Communication Communication among the software engineer, customer, and end user begins with a series of either informal or formal meetings, preferably face to face. The software engineer should be prepared with a list of well-formed questions before any meeting. The responses to these questions provided by the customer and end user will assist the software engineer in fully understanding what functions need to be satisfied by the proposed software. The following list outlines tips for effective communication among the software engineer, customer, and end user: · listen carefully to the customers and end users of the proposed system
  • 38. · keep the language simple and free of technical terms · prepare well-formed questions in advance · perform research and gain understanding of the application's domain · draw diagrams or pictures to represent complex ideas · take good notes · use a facilitator, if necessary The process of effective communication in translating the customer's and end user's needs into requirements can break down among all parties for a variety of reasons. The software engineer, customer, and end user often see a communication gap in the requirements phase, which has been commonly referred to as the "user and the developer" syndrome (Leffingwell et al, 2003, p. 92). The customer and end user will often know exactly what they want but have difficulty in articulating their needs in language that the software engineer understands. The software engineer must realize that the customer and end user are the domain experts. An effective communication approach must be established by the software engineer and be used during requirements elicitation. Effective communication can sometimes be preempted by the different personalities among the involved parties. Conflicts may result from misunderstandings in the use of language, differing cultures, or personal agendas. The use of a facilitator can greatly mitigate conflicts to keep a positive and productive communication process flowing among all parties. Use Case Model Earlier in our discussion we stressed the importance of effective communication among the software engineer, customers, and end users in understanding the requirements of the proposed software. We also highlighted that conveying this information back to the customer and end user was important for directing subsequent phases of development. At this point in our discussion we will elaborate on a technique that can be used to specify and model the expected behavior for software. Software engineers refer to this behavioral model as the use case model.
  • 39. The use case model defines use cases and scenarios that can "easily capture a set of functional requirements" and "provide a vehicle for organizing the software requirements in an easy-to- manage way" (Bittner et al, 2003, p. 11). Following the use case model during requirements development can ease the transition from the analysis to the design phase. About Use Cases Our discussion on use cases will begin with a brief history. The use case was introduced as part of an object-oriented development methodology originated by Ivar Jacobson and described in his book called Object-Oriented Software Engineering: A Use Case Driven Approach (Addison-Wesley, 1992). Researchers Larry Constantine and others have extended this concept into a general technique for requirements analysis and user interface design. The Unified Modeling Language provides support for modeling a use case. Leffingwell et al (2003, p. 149) defines a use case as "sequences of actions a system performs that yield an observable result of value to a particular actor." A sequence of actions refers to a "set of functions" or an "algorithmic procedure" that is initiated and used by an actor. The use case describes the input to the system and the response that is necessary to satisfy the function that produces the intended output. A use case is best summarized as having the following characteristics (Leffingwell et al, 2003; Weigers, 2003): · provides the foundation for deriving scenarios in which an actor interacts with the system · encompasses several tasks with a common goal · achieves a specific goal or accomplishes a particular task or function · describes an action in terminology relative to the actor's domain and not terminology relative to the computer · focuses on the simplicity of the use or action being performed without regard to how it is implemented in the software or alternate ways of accomplishing the same task
  • 40. · provides a means to derive detailed requirements for accomplishing the objective for each scenario by using a software application When forming a use case, you should think of all the various external entities that interact with the system and the different ways in which they may possibly use the system. Specifying use cases is part of functional modeling of desired system behavior. By modeling the expected behavior with use cases, we can uncover required classes and associations that will be needed during the construction phase of the object model. We emphasize the necessary components for a complete use case in the following list: · actor, who initiates an event or events · specific interaction that takes place between this actor and the system · expected response from the system The steps to derive functional requirements following a use- case approach are summarized below in figure 2.4. Figure 2.4 Use-case Approach to Derive Functional Requirements In the list below we summarize the benefits derived from following a use case approach during requirements elicitation: · determine system and software requirements · determine actor profiles · assist in identification of an initial set of classes and objects, at the system and software level · assist in identification of software subsystems according to required functionality When the software engineer meets with the potential end users of the desired system during requirements elicitation, the objective is to get answers to information-seeking questions (Leffingwell et al, 2003) to form the components of a use case. We have provided a list of sample questions that the software engineer can use during meetings with the customers and end users:
  • 41. · What is the expected behavior of the system? · How is the user supposed to use the system? · What types of services is the system supposed to provide? · What is the expected result/output of the system? · Who will be using the system? The software engineer composes a use case from the information and then uses the use case as the foundation for deriving one or more scenarios to carry out the functions. Each use case scenario involves an actor, the system, and a single function to be performed. Once all the use cases are developed, they will assist you in identifying the data objects needed to create the proposed software system. We will provide an example of a use case and model the possible scenarios with UML during our discussion on requirements analysis. Requirements Analysis During requirements elicitation, we discussed how to communicate and gather the requirements from the customers and end users for the proposed software. After we form a good idea of what the customers and end users want the software to do, we can expand our model of the expected behavior and develop profiles for the actors of the system. In this section we will discuss how to perform analysis that will result in detailed requirements that will form the bulk of the specifications document. During requirements analysis, the software engineer elaborates on the information gathered during elicitation. At this stage the focus continues on the whats, rather than the hows, by defining the top-level objects and their attributes, their relationships with other objects, and the interfaces required with external entities. We can begin to analyze and model the required flow and transformation of data between the identified entities (Pressman, 2005). There are several major data products that can result from requirements analysis; these are listed as: · behavioral diagrams (use case scenario, data flow, and state transition) · prototypes
  • 42. · class identification · data dictionary Use Case and the Unified Modeling Language The Unified Modeling Language (UML) provides a user model and notation for the specification of the different ways an end user will interact with the system, the use case. Models of scenarios are created from the use case to depict the expected behavior from the perspective of the actors. These scenarios assist the software engineer with elicitation and analysis of the requirements by describing the functionality that is required in the software. A functional requirement and the corresponding test case can be derived by the action that is modeled in the use case. A test case is used later in development to verify that a functional requirement has been met in the software product. We will discuss scenario-based testing in module 4. UML stresses the importance of textual documentation for each use case to accompany each scenario illustration. Following is a list of the items to be included in the use case documentation: · unique name and number for the use case · description of the role and purpose of the action · description of the basic sequence of events · description outlining any special requirements or conditions · description stating the specific pre-conditions and post- conditions A descriptive name is selected and assigned to each use case that best describes the function required by the software. Nomenclature for use cases is very important in software engineering, as it enhances documentation. When possible, similar functions should be categorized in one use case. A unique number or identifier is assigned to each use case to enhance the traceability to the requirement, the software component, and the test case. We will discuss requirements traceability and its role in the development process later in this module. In module 5, we will discuss traceability through the development cycle as a project management activity. Example Use Case
  • 43. Let's take a look at a use case that we can define for the self- service checkout system. The use case for the customer in a retail store using the self-service checkout system to start a new purchase order is outlined in table 2.2. Table 2.2 Use Case to Start a New Purchase Order Use Case 1.0: Start new purchase order A customer selects one or more items to purchase in a retail store. Once customers have completed selecting all the items, they will walk up to the checkout counter and start a new purchase order to prepare for scanning each item. Precondition: The checkout system needs to be configured properly and have access to the local area network and store database. The system needs to be ready to accept a new purchase order. Post-condition: The system is ready to scan items for a new purchase order. Actor Profile: Customer shopping in a retail store who desires to purchase one or more items. A customer can be new to the system or be a frequent shopper familiar with the system. Frequent customers may have a discount card. Many customers will shop in the retail store. Sequence of events: 1. Customer walks up to an available self-service checkout. 2. Customer reads instructions and selects either Spanish or English language. 3. Customer selects the option to begin the order. 4. Customer scans frequent shopper discount card, if one exists. 5. Customer reads the directions for scanning an item. User Scenarios User scenarios, also referred to as user stories, describe a unique theme for interacting with the system. Scenarios are derived from the use case textual description. When creating scenarios, you select the actors that interact with the system and model different ways in which they will use the system to accomplish the required tasks. As we mentioned earlier, a user
  • 44. scenario consists of an actor, who initiates events, and an explanation of the interaction that takes place between this actor and the system. As a result of this interaction, the system will generate a response. Refer to figure 2.5 below for a representation of the various components of a user scenario. Figure 2.5 Components of a User Scenario It should be noted that an actor is any external entity that uses a system in a particular way to perform a desired function to accomplish a task. The actor can be a person, another software system, a hardware device, or an organization. For example, actors can be people who assume various roles (operator, customer, manager, system administrator) or an external entity (hardware device) that interacts with the system. The software engineer must have a good understanding of the characteristics of each actor or group of actors before composing a user scenario. These characteristics are documented and referred to as an actor profile. For the self-service checkout system, we can write the following scenarios presented in table 2.3 from the use case presented in table 2.2. Table 2.3 User Scenario for the Start of a New Purchase Order Use Case User scenario 1: start the order 1. Customer selects either the English or Spanish language. 2. System displays the "Begin Order" option in the English or Spanish language. User scenario 2: set up the order 1. Customer selects the "Begin Order" option when ready to start the order. 2. System responds by displaying a message with instructions to scan frequent shopper discount card. User scenario 3: scan discount card 1. Customer places the discount card over the scanner. 2. System responds by reading the barcode imprinted on the
  • 45. card. 3. System displays welcome message and instructions to scan an item. Once the use case scenarios are written for the use case, we can model them with a use case diagram as shown in figure 2.6. Figure 2.6 Start a New Purchase Order Use Case Diagram Identification of Objects and Classes Data Objects The use case can provide insight into the identification of objects that can be grouped by similarity to form classes for these objects. Objects are easily identifiable because the actors of a system manipulate objects when they use the software to perform a function to accomplish a task. Identifying the commonality among the objects will help software engineers to derive the base classes and establish attributes, needed functionality, and relationships. Software engineers model classes and their relationships with diagrams. UML is the common notation language being used in today's software industry for creating class diagrams. Context Diagram In module 1 we suggested the context diagram be used at the system level for specifying requirements. We present the context diagram for the self-service checkout system again as a means of modeling the necessary flow of data items into and out of the software system. Figure 2.7 Context Diagram for the Self-service Checkout System The context diagram represented in figure 2.7 shows a sketch of the data items that are to be manipulated by the system's external entities and actors. At this point, the view of the software system is considered a black box and is represented by the circle. During the design phase, we will refine the software system to the process level to extend our view to the functional
  • 46. level, which will yield the subsystems and components. If an object-oriented development approach is to be followed, each external entity and data item is a good candidate for an object. For example, we can easily derive several objects for the self-service checkout system by following the directional arrows that flow in and out of the external entities. Additionally, we can imagine objects for the external entities that represent the hardware devices. Class Diagrams Once the potential objects are identified, they can be grouped by similarity and used to determine base classes with a set of attributes. A class describes a group of objects with similar properties or attributes, common behaviors, relationships to other objects, and semantics. For example, think of a person as an object. Every person has the same set of common attributes, including a name, gender, height, weight, eye color, nationality, fingerprint, and social security number. These attributes are used to identify an individual and distinguish one person from another. A base class can be designed with these attributes and the class can be used to create instances of different individuals with a unique set of characteristics. Class instances are also referred to as objects. An object is defined as a concept, idea, or thing with crisp boundaries and meaning for the problem at hand. Once the software engineer establishes all the base classes, the relationships between the classes are modeled using a class diagram. A class diagram is a schema, pattern, or template used for describing the class. Each class description contains a name, a set of attributes, and a set of operations. Bennett et al (2001, p. 49) outlines how creating a UML class diagram can achieve several goals in modeling expected behavior. The class diagram can be used to: · document classes within a system or subsystem · describe association, generalization, and aggregation between classes · show characteristics of the class
  • 47. · show the operations and interfaces of objects · direct activities throughout the development process Class instances or objects collaborate with other objects through message passing. An association between two classes is described when a class instance or object passes a message to another object and that message is received by the recipient object. When drawing a class diagram, a connecting line is used to depict the association. The association is assigned a descriptive name. Software engineers can further define the association existing between the two class instances by adding its multiplicity, which indicates the possible number of instances for the class. In table 2.4 we summarize the indicators that can be placed at each end of the line in the class diagram to show multiplicity. Table 2.4 Multiplicity Indicators for Class Diagrams Indicator Meaning 0..1 Zero or one 1 One only 0..* Zero or more 1..* One or more n Only n, where n > 1 0..n Zero to n, where n > 1 1..n One to n, where n > 1 Refer to figure 2.8 for a class diagram that depicts the card reader and the card objects that are necessary for the payment transaction of the self-service checkout system. Figure 2.8
  • 48. Example Class Diagram Data Dictionary We will mention the data dictionary during requirements analysis because it can be used to store logical representations of data objects. It is important to adopt a notation for a data dictionary that provides for unambiguous and accurate descriptions of the data. Such notations facilitate interpretation and also allow for the use of CASE tools to assist in developing and maintaining dictionaries. Modern systems may require extremely large data dictionaries, which may be practical only when a CASE tool is available to reduce the human effort and manage the complexity. Such tools, however, are useful for more than simple management of the data objects. If a formalized notation is used to describe the data, the tool can perform automated analyses of the data to ensure consistency across the system. Such analyses would be quite difficult if developers had to perform them by themselves. We will extend our discussion on the data dictionary in module 3 when we look at the functional analysis model. Requirement Specification Software requirements are expressed in a simple and concise language and compiled into a formal document. The specification document should be easy for all the stakeholders to understand. A simple set of guidelines (IEEE, 1998) is provided to assist in writing the software requirements specification. Each requirement should: · consist of one sentence · be free of technical jargon, abbreviations, and acronyms · contain no conditional logic (if A then B) · use active voice · contain no references · be grammatically correct A software requirement can be composed by following either the "shall" or "shall not" format. Using the word shall in the
  • 49. requirement indicates that the requirement is mandatory. Using the self-service checkout system as an example, a requirement for processing a debit card payment transaction is a four-digit number. Here are two different and acceptable ways to write this requirement. The software shall require a four-digit code to be entered for a debit card transaction. The software shall not process a debit card transaction without a four-digit code. The preferable way to write a software requirement is to use the "shall" format because the positive approach simplifies writing the software test case. The Boolean "not" can be somewhat tricky to code and test. The positive approach is commonly used in preparing the formal requirement document; however, you should be aware that both ways are acceptable to software engineers. Other words, such as should, will, and must, can be used (Sommerville and Sawyer, 1997) if they are consistent with the meanings provided in table 2.5. Table 2.5 Words and Their Meanings Used for Writing Software Requirements Word Meaning shall mandatory should desirable, but not mandatory will something that will be externally provided must best avoided; a synonym for "shall" Writing a good set of requirements can be a challenging task because many software engineers find it difficult to write clear and concise natural language and have a tendency to write requirements in an unnecessarily verbose way. Table 2.6
  • 50. contains a list of attributes of a well-written software requirement, and the do's and don'ts while writing the specifications document. Table 2.6 Summary of Attributes for a Software Requirement Attribute Description Do Don't correct meets a user need communicate with customer and user add unnecessary features unambiguous no interpretation variations choose simple words use technical jargon complete include everything be precise embellish verifiable provide method to verify write a test case use words like "usually," "often," "user friendly" consistent no conflicts with other requirements cross check with other categories use the word "don't" modifiable easy to reference provide index or table of contents traced provide origin of each requirement provide a traceability matrix
  • 51. traceable identify each requirement provide a unique number for each requirement design independent no design constraints imply a specific software architecture or algorithm annotated categories of requirements group requirement by function or task concise overall length and understandability keep it short and as simple as possible organized readability use meaningful titles and category names understandable by the customer meaningful content to both customer and developer use simple language use technical terms, unless simply defined In table 2.7 we have provided a set of requirements for the start a new purchase order use case described in table 2.2 for our self-service checkout system. Table 2.7 Requirements for the Start a New Purchase Order Use Case Requirement 1.0: Start a new purchase order 1.1 The system shall display a message with an option to select the English or Spanish language. 1.1.1 If the English language option is selected, the system shall select the English language to display text. 1.1.2 The Spanish language option is selected, the system shall
  • 52. select the Spanish language to display text. 1.2 The system shall display an option to activate a new purchase order. 1.2.1 The option to activate the purchase order is detected, the system shall respond by displaying instructions to insert a frequent shopper discount card. 1.3 The system shall display an option to cancel the current session. 1.3.1 The cancel option is detected, the system shall respond by setting up for a new purchase order. 1.4 The system shall detect a frequent shopper discount card. 1.5 The system shall read an imprinted barcode from the frequent shopper discount card. 1.5.1 An error occurs while reading the barcode from a frequent shopper discount card, the system shall eject the card and display an error message. 1.5.2 The barcode is read without an error from the frequent shopper discount card, the system shall request the customer information from the store database. 1.6 The system shall use the barcode on the frequent shopper discount card to query the database for customer information. 1.6.1 The customer information is successfully queried from the database, the system shall display a welcome message with the customer's name. 1.6.2 The customer information was not successfully queried from the database, the system shall return a message "customer not located in database." 1.7 The system shall display instructions for scanning an item for purchase. Traceability of Requirements Each software requirement should be unique and traceable to the corresponding system requirement, use case, and software requirement. Traceability can be accomplished by creating a traceability matrix. We will extend the column headings in the traceability matrix as we discuss the various phases of development. The
  • 53. traceability matrix should be included as an appendix in the specifications document, updated at each phase in development, and included with each document created in that phase. Specifications Document The Software Requirements Specifications (SRS) document is used as a communication tool and serves as a contract between the customer and the software engineers. The SRS explains to the customer what the software engineer's perception is and what needs to be done in order to accomplish building the correct system. The requirements are outlined and categorized in simple language. In addition to satisfying communication needs, the SRS is the basis for integrated system testing and verification activities, and it also helps control the evolution of the software system. The SRS is a deliverable document that is reviewed and accepted by the customer before design of the software actually begins. The SRS is developed after the system specifications and the system design documents are completed and accepted by the customer. The SRS must be complete, concise, and accurate to direct the subsequent phases of development. Roger Pressman (2005) proposes following a "use case driven" design. In this module, we discussed how to develop a use case and model scenarios with UML as a tool for requirements elicitation and analysis. Once the SRS is approved by the customers, it serves as the baseline for all software requirements. Any change or addition to the requirements needs to be recorded, approved, and traced. We will discuss managing software changes as an activity of project management in module 5. IEEE Recommended Practice for Software Requirements Specifications The Institute of Electrical and Electronics Engineers has provided some guidelines for writing a Software Requirements Specification (SRS) in the IEEE Recommended Practice for Software Requirements Specifications, IEEE Standard 830- 1998. Annex A of the IEEE Recommended Practice for Software
  • 54. Requirements Specifications provides guidelines for writing the specific requirements for a complete SRS. The templates outlined in Annex A organize specific requirements for a proposed software solution by describing: · system modes · user classes · objects · features · stimulus · response · functional hierarchy Software engineers choose the best template, or combinations of templates, that best describe the requirements for the proposed software solution. Combinations of templates can also be used to organize requirements. In module 1 and in section 3 of this module, we have discussed several diagrams that can be used to graphically represent requirements for the SRS. The use of diagrams is recommended in technical documents and all diagrams should be supplemented with a textual description. Requirements Validation The final phase of the requirements development model is validation. Validating the requirements is necessary to ensure that the requirements are complete and unambiguous to build a high-quality and correct product. Early in module 1 we discussed how software engineering emerged in the computer industry to address the legacy problems of poor quality and cost overruns and to reduce maintenance costs after deployment of software products. Many studies have been done by Boehm, Grady, Kelly, Sherif, and Hops (Weigers, 2003) that have supported that early discovery of errors during the requirements development phase will reduce the cost and time to correct them. Errors in requirements can lay dormant in software and may not be discovered until system testing or by the customer after delivery of the product. Correcting latent errors in requirements requires significant rework by the software
  • 55. engineers, which takes time and money. Software engineers can validate the requirements by developing a set of preliminary test cases and participating in a formal peer review or inspection. Time spent validating the requirements can actually shorten the delivery schedule because less rework will be required (Blackburn et al, 1996) during this phase. A preliminary set of test cases can easily be developed when the use-case model is followed during requirements elicitation and analysis. Writing test cases during the requirements validation phase follows a scenario-based approach that will uncover ambiguities in the functional requirements. These test cases are extended during the test phase of development. We will discuss how to write scenario-based test cases in module 4. Another requirements validation method commonly used by software engineers is to conduct and participate in a formal review or inspection. A review committee is formed from the stakeholders who represent varying perspectives and interests in the proposed software product. A small team consisting of six or fewer participants is formed. During the review, the software engineer presents the categories of requirements to the team for discussion. Any deficiency in a requirement identified by the participants is included in a summary portfolio that consists of one or more "requests for action." The software engineer addresses each request and takes corrective action to revise or clarify the requirement. The revisions to the requirements are resubmitted to the reviewers for final approval. Instructions Scenario You have been asked to lead a software development team to build a system fulfilling the Statement of Need below. Your team is employed by a small company. The customer wants a project that balances reasonable development cost, timely delivery, software quality, and functionality.