Understanding Software: Types & Engineering
Understanding Software: Types & Engineering
INTRODUCTION
Today, software takes on a dual role. It is a product, and at the same time, the vehicle for
delivering a product. As a product, it delivers the computing potential embodied by computer
hardware or more broadly, by a network of computers that are accessible by local hardware.
As the vehicle used to deliver the product, software acts as the basis for the control of the
computer (operating systems), the communication of information (networks), and the creation and
control of other programs (software tools and environments).
Software is-
1) Instructions (computer programs) that when executed provide desired features, function, and
performance;
(2) Data structures that enable the programs to adequately manipulate information, and
(3) Descriptive information in both hard copy and virtual forms that describes the operation and use of
the programs.
Software is a Logical rather than a physical system element. Therefore, software has
characteristics that are considerably different than those of hardware
Undiscovered defects will cause high failure rates early in the life of a program. However,
these are corrected and the curve flattens as shown.
The idealized curve is a gross oversimplification of actual failure models for software.
However, the implication is clear—software doesn’t wear out.
But it does deteriorate.
Another aspect of wear illustrates the difference between hardware and software. When a
hardware component wears out, it is replaced by a spare part.
There are no software spare parts. Every software failure indicates an error in design or in the
process through which design was translated into machine executable code.
Open-world computing: the rapid growth of wireless networking may soon lead to
true pervasive, distributed computing. The challenge for software engineers will be to
develop systems and application software that will allow mobile devices, personal
computers, and enterprise systems to communicate across vast networks.
Netsourcing: the World Wide Web is rapidly becoming a computing engine as well
as a content provider. The challenge for software engineers is to architect simple (e.g.,
personal financial planning) and sophisticated applications that provide a benefit to
targeted end-user markets worldwide.
Open source: a growing trend that results in distribution of source code for systems
applications (e.g., operating systems, database, and development environments)so that
many people can contribute to its development.
It follows that a concerted effort should be made to understand the problem before a
software solution is developed.
It follows that design becomes a pivotal activity.
It follows that software should exhibit high quality.
It follows that software should be maintainable.
1. Engineering discipline: Engineers make things work. They apply theories, methods
and tools where these are appropriate, but they use them selectively and always try to
discover solutions to problems even when there are no applicable theories and
methods. Engineers also recognise that they must work to organisational and financial
constraints, so they look for solutions within these constraints
2. All aspects of software production Software engineering is not just concerned with the
technical processes of software development but also with activities such as software
project management and with the development of tools, methods and theories to
support software production
A process is a collection of activities, actions, and tasks that are performed when
some work product is to be created.
An activity strives to achieve a broad objective (e.g., communication with
stakeholders) and is applied regardless of the application domain, size of the project,
complexity of the effort, or degree of rigor with which software engineering is to be
applied.
An action(e.g., architectural design) encompasses a set of tasks that produce a major
work product (e.g., an architectural design model).
A task focuses on a small, but well-defined objective (e.g., conducting a unit tests)
that produces a tangible outcome.
In the context of software engineering, a process is not a rigid prescription for how to
build computer software. Rather, it is an adaptable approach that enables the people
doing the work (the software team) to pick and choose the appropriate set of work
actions and tasks.
A process framework establishes the foundation for a complete software engineering
process by identifying a small number of framework activities that are applicable to
all software projects, regardless of their size or complexity.
Process framework encompasses a set of umbrella activities that are applicable
across the entire software process.
A generic process framework for SE encompasses five activities:
1. Software project tracking and control: allows the software team to assess progress
against the project plan and take any necessary action to maintain the schedule.
2. Risk management: assesses risks that may affect the outcome of the project or the
quality of the product.
3. Software quality assurance: defines and conducts the activities required to ensure
software quality.
4. Technical reviews: assesses software engineering work products in an effort to
uncover and remove errors before they are propagated to the next activity.
5. Measurement: defines and collects process, project, and product measures that assist
the team in delivering software that meets stakeholders’ needs; can be used in
conjunction with all other framework and umbrella activities.
6. Software configuration management: manages the effects of change throughout the
software process.
7. Reusability management: defines criteria for work product reuse (including software
components) and establishes mechanisms to achieve reusable components.
8. Work product preparation and production—encompasses the activities required to
create work products such as models, documents, logs, forms, and lists.
Agile process models emphasize project “agility” and follow a set of principles that
lead to a more informal (but, proponents argue, no less effective) approach to
software process. These process models are generally characterized as “agile” because
they emphasize adaptability. They are appropriate for many types of projects and are
particularly useful when Web applications are engineered.
Plan the solution. Now you understand the problem (or so you think) and you can’t
wait to begin coding. Before you do, slow down just a bit and do a little design:
• Have you seen similar problems before? Are there patterns that are recognizable in a
potential solution? Is there existing software that implements the data, functions, and
features that are required?
• Has a similar problem been solved? If so, are elements of the solution reusable?
• Can sub problems be defined? If so, are solutions readily apparent for the sub
problems?
• Can you represent a solution in a manner that leads to effective implementation?
Can a design model be created?
Carry out the plan. The design created serves as a road map for the system to build.
There may be unexpected detours, and it’s possible that you’ll discover an even better
route as you go, but the “plan” will allow you to proceed without getting lost.
• Does the solution conform to the plan? Is source code traceable to the design model?
• Is each component part of the solution provably, correct? Have the design and code
been reviewed, or better, have correctness proofs been applied to the algorithm?
Examine the result. You can’t be sure that your solution is perfect, but you can be
sure that you’ve designed a sufficient number of tests to uncover as many errors as
possible.
• Is it possible to test each component part of the solution? Has a reasonable testing
strategy been implemented?
• Does the solution produce result that conform to the data, functions, and features
that are required? Has the software been validated against all stakeholder
requirements?
1.5.2 General Principles
David Hooker has proposed seven principles that focus on software engineering practice as a
whole. They are-
Software myths: erroneous beliefs about software and the process that is used to build
it .can be traced to the earliest days of computing. Myths have a number of attributes
that make them insidious.
Management myths: Managers with software responsibility, like managers in most
disciplines, are often under pressure to maintain budgets, keep schedules from
slipping, and improve quality.
1. Management myths: Managers with software responsibility, like managers in most
disciplines, are often under pressure to maintain budgets, keep schedules from
slipping, and improve quality. Like a drowning person who grasps at a straw, a
software manager often grasps at belief in a software myth, if that belief will lessen
the pressure.
2. Customer myths: A customer who requests computer software may be a person at
the next desk, a technical group down the hall, the marketing/sales department, or an
outside company that has requested software under contract. In many cases, the
customer believes myths about software because software managers and practitioners
do little to correct misinformation. Myths lead to false expectations (by the customer)
and, ultimately, dissatisfaction with the developer.
3. Practitioner’s myths: Myths that are still believed by software practitioners have
been fostered by over 50 years of programming culture. During the early days,
programming was viewed as an art form. Old ways and attitudes die hard.
1.7 A Generic Process Model
Each software engineering action is defined by a task set that identifies the
worktasks that are to be completed, the work products that will be produced,
the quality assurance points that will be required, and the milestones that will
be used to indicate progress.
Describes how the framework activities and the actions and tasks that occur
within each framework activity are organized with respect to sequence and
time and is illustrated in Figure
1.7.1 Defining a Framework Activity
A software team would need significantly more information before it could properly
execute any one of activities as part of the software process.
For a small software project requested by one person (at a remote location) with
simple, straightforward requirements, the communication activity might encompass little
more than a phone call with the appropriate stakeholder. Therefore, the only necessary action
is phone conversation, and the work tasks (the task set) that this action encompasses are:
1. Make contact with stakeholder via telephone.
2. Discuss requirements and take notes.
3. Organize notes into a brief written statement of requirements.
4. E-mail to stakeholder for review and approval.
If the project was considerably more complex with many stakeholders, each
with
a different set of (sometime conflicting) requirements, the communication activity might have
six distinct actions (described in Chapter 5): inception, elicitation, elaboration, negotiation,
specification, and validation. Each of these software engineering actions would have many
work tasks and a number of distinct work products.
4. ISO 9001:2000 for Software: -a generic standard that applies to any organization that
wants to improve the overall quality of the products, systems, or services that it provides.
Therefore, the standard is directly applicable to software organizations and companies.
The waterfall model, sometimes called the classic life cycle, suggests a systematic,
sequential approach to software development that begins with customer specification of
requirements and progresses through planning, modelling, construction, and deployment,
culminating in ongoing support of the completed software.
The waterfall model is the oldest paradigm for software engineering. However, over
the past three decades, criticism of this process model has caused even ardent supporters to
question its efficacy. Among the problems that are sometimes encountered when the
waterfall model is applied are:
1. Real projects rarely follow the sequential flow that the model proposes. Although the
linear model can accommodate iteration, it does so indirectly. As a result, changes can cause
confusion as the project team proceeds.
2. It is often difficult for the customer to state all requirements explicitly. The waterfall
model requires this and has difficulty accommodating the natural uncertainty that exists at the
beginning of many projects.
3. The customer must have patience. A working version of the program(s) will not be
available until late in the project time span. A major blunder, if undetected until the working
program is reviewed, can be disastrous.
A variation in the representation of the waterfall model is called the V-model. Represented
in below figure.
The V-model depicts the relationship of quality assurance actions to the actions associated
with communication, modelling, and early construction activities. As software team
moves down the left side of the V, basic problem requirements are refined into
progressively more detailed and technical representation s of the problem and its solution.
Once code has been generated, the team moves up the right side of the V, essentially
performing a series of tests (quality assurance actions) that validate each of the models
created as the team moved down the left side.
In reality, there is no fundamental difference between the classic life cycle and the V-
model. The V-model provides a way of visualizing how verification and validation
actions are applied to earlier engineering work.
The incremental model combines elements of linear and parallel process flows.
The incremental model applies linear sequences in a staggered fashion as calendar time
progresses.
Each linear sequence produces deliverable “increments” of the software in a manner that is
similar to the increments produced by an evolutionary process flow.
When an incremental model is used, the first increment is often a core product. That
is, basic requirements are addressed but many supplementary features remain
undelivered.
The plan addresses the modification of the core product to better meet the needs of the
customer and the delivery of additional features and functionality.
This process is repeated following the delivery of each increment, until the complete
product is produced.
The incremental process model focuses on the delivery of an operational product with
each increment.
Incremental development is particularly useful when staffing is unavailable for a
complete implementation by the business deadline that has been established for the
project.
Advantages of Incremental model:
Generates working software quickly and early during the software life cycle.
This model is more flexible – less costly to change scope and requirements.
It is easier to test and debug during a smaller iteration.
In this model customer can respond to each built.
Lowers initial delivery cost.
Easier to manage risk because risky pieces are identified and handled during it’d
iteration.
Disadvantages of Incremental model:
Needs good planning and design.
Needs a clear and complete definition of the whole system before it can be broken
down and built incrementally.
Total cost is higher than waterfall.
The prototyping paradigm begins with communication.
Prototyping iteration is planned quickly, and modeling (in the form of a “quick
design”) occurs. A quick design focuses on a representation of those aspects of the
software that will be visible to end users (e.g., human interface layout or output
display formats). The quick design leads to the construction of a prototype.
The prototype is deployed and evaluated by stakeholders, who provide feedback that
is used to further refine requirements. Iteration occurs as the prototype is tuned to
satisfy the needs of various stakeholders, while at the same time enabling you to
better understand what needs to be done.
5. Customers sometimes demand the actual product to be delivered soon after seeing an
early prototype.
The Spiral Model: -Originally proposed by Barry Boehm [Boe88], the spiral model is an
evolutionary software process model that couples the iterative nature of prototyping with the
controlled and systematic aspects of the waterfall model. It provides the potential for rapid
development of increasingly more complete versions of the software.
As this evolutionary process begins, the software team performs activities that are
implied by a circuit around the spiral in a clockwise direction, beginning at the center.
The first circuit around the spiral might result in the development of a product
specification;
subsequent passes around the spiral might be used to develop a prototype and then
progressively more sophisticated versions of the software.
Each pass through the planning region results in adjustments to the project plan.
Cost and schedule are adjusted based on feedback derived from the customer after
delivery.
In addition, the project manager adjusts the planned number of iterations required to
complete the software. Unlike other process models that end when software is
delivered, the spiral model can be adapted to apply throughout the life of the
computer software.
Therefore, the first circuit around the spiral might represent a “concept development
project” that starts at the core of the spiral and continues for multiple iterations until
concept development is complete.
[Link] spiral model is a realistic approach to the development of large-scale systems and
software. Because software evolves as the process progresses, the developer and customer
better understand and react to risks at each evolutionary level.
2. The spiral model uses prototyping as a risk reduction mechanism but, more important,
enables you to apply the prototyping approach at any stage in the evolution of the product.
3. It maintains the systematic stepwise approach suggested by the classic life cycle but
incorporates it into an iterative framework that more realistically reflects the real world
4. The spiral model demands a direct consideration of technical risks at all stages of the
project, if properly applied, should reduce risks before they become problematic.
Disadvantages:
[Link] is much more complex than other SDLC models. Process is complex.
The formal methods model encompasses a set of activities that leads to formal
mathematical specification of computer software.
Formal methods enable you to specify, develop, and verify a computer-based system by
applying a rigorous, mathematical notation.
A variation on this approach, called cleanroom software engineering, is currently applied
by some software development organizations.
Formal methods are used during development; they provide a mechanism for eliminating
many of the problems that are difficult to overcome using other software engineering
paradigms.
Ambiguity, incompleteness, and inconsistency can be discovered and corrected more
easily.
Yet have some defects they are.
1. The development of formal models is currently quite time consuming and expensive.
2. Because few software developers have the necessary background to apply formal
methods, extensive training is required.
3. It is difficult to use the models as a communication mechanism for technically
unsophisticated customers.
Aspectual requirements define those crosscutting concerns that have an impact across the
software architecture.
Aspect-oriented software development (AOSD), often referred to as aspect-oriented
programming (AOP), is a relatively new software engineering paradigm that provides
a process and methodological approach for defining, specifying, designing, and
constructing aspects
Watts Humphrey extended the lessons learned from the introduction of PSP and
proposed a Team Software Process (TSP).
The goal of TSP is to build a “selfdirected” project team that organizes itself to
produce high-quality software.
Humphrey defines the following objectives for TSP:
1. Build self-directed teams that plan and track their work, establish goals, and
own their processes and plans. These can be pure software teams or integrated product
teams (IPTs) of 3 to about 20 engineers.
2. Show managers how to coach and motivate their teams and how to help them
sustain peak performance.
3. Accelerate software process improvement by making CMM Level 5
behaviour normal and expected.
4. Provide improvement guidance to high-maturity organizations.
5. Facilitate university teaching of industrial-grade team skills.
Any agile software process is characterized in a manner that addresses a number of key
assumptions [Fow02] about the majority of software projects:
1. It is difficult to predict in advance which software requirements will persist and which will
change. It is equally difficult to predict how customer priorities will change as the project
proceeds.
2. For many types of software, design and construction are interleaved. That is, both activities
should be performed in tandem so that design models are proven as they are created. It is
difficult to predict how much design is necessary before construction is used to prove the
design.
3. Analysis, design, construction, and testing are not as predictable (from a planning point of
view) as we might like
Agility Principles:
The Agile Alliance (see [Agi03], [Fow01]) defines 12 agility principles for those who want to
achieve agility:
1. Our highest priority is to satisfy the customer through early and continuous delivery of
valuable software.
2. Welcome changing requirements, even late in development. Agile processes harness change
for the customer’s competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with a
preference to the shorter timescale.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and support they
need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation.
8. Agile processes promote sustainable development. The sponsors, developers, and users
should be able to maintain a constant pace indefinitely.
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. The best architectures, requirements, and designs emerge from self– organizing teams.
12. At regular intervals, the team reflects on how to become more effective, then tunes and
adjusts its behavior accordingly
Extreme Programming
Extreme Programming (XP), the most widely used approach to agile software development
XP values:
Beck defines a set of five values that establish a foundation for all work performed as part of XP—
[Link]:
XP emphasizes close, yet informal (verbal) collaboration between customers and developers,
continuous feedback, and the avoidance of voluminous documentation as a
communication medium.
[Link]:
XP restricts developers to design only for immediate needs, rather than consider
future needs. The intent is to create a simple design that can be easily implemented in
code)
[Link]:
Feedback is derived from three sources: the implemented software itself, the
[Link]:
The strict adherence to certain XP practices demands courage. A better word might
be discipline. For example, there is often significant pressure to design for future
requirements.
[Link]:
The agile team inculcates respect among its members, between other stakeholders and
Each of these values is used as a driver for specific XP activities, actions, and tasks
The XP Process
1. The planning activity (also called the planning game) begins with listening—a requirements
gathering activity that enables the technical members of the XP team to understand the
business context for the software
2. Listening leads to the creation of a set of “stories” (also called user stories) that describe
required output, features, and functionality for software to be built
4. The customer assigns a value (i.e., a priority) to the story based on the overall business value
of the feature or function.
[Link] the story is estimated to require more than three development weeks, the customer is
asked to split the story into smaller stories
6. Customers and developers work together to decide how to group stories into the next release
7. Once a basic commitment is made for a release, the XP team orders the stories that will be
developed in one of three ways: (1) all stories will be implemented immediately (within a few
weeks), (2) the stories with highest value will be moved up in the schedule and implemented
first, or (3) the riskiest stories will be moved up in the schedule and implemented first
NOTE: project velocity is the number of customer stories implemented during the first release.
Project velocity can then be used to
(1) help estimate delivery dates and schedule for subsequent releases and
(2) determine whether an overcommitment has been made for all stories across the entire
development project. If an overcommitment occurs, the content of releases is modified or end
delivery dates are changed
Design
[Link] design rigorously follows the KIS (keep it simple) principle. The design provides
implementation guidance for a story as it is written—nothing less, nothing more
2. XP encourages the use of CRC cards as an effective mechanism for thinking about the
software in an object-oriented context. CRC (class-responsibility collaborator) cards identify and
organize the object-oriented classes that are relevant to the current software increment
Refactoring:
The intent of refactoring is to control these modifications by suggesting small design changes
that can radically improve the design
Coding:
[Link] stories are developed and preliminary design work is done, the team does not move to
code, but rather develops a series of unit tests that will exercise each of the stories that is to be
included in the current release.
[Link] the coding activity one of aspect is pair programming. XP recommends that two people
work together at one computer workstation to create code for a story. This provides a
mechanism for realtime problem solving and real-time quality assurance (the code is reviewed
as it is created)
3. As pair programmers complete their work, the code they develop is integrated with the work
of others. In some cases this is performed on a daily basis by an integration team
[Link] pair programmers have integration responsibility. This “continuous integration” strategy
helps to avoid compatibility and interfacing problems and provides a “smoke testing”
environment that helps to uncover errors early.
Testing:
[Link] of unit tests before coding commences is a key element of the XP approach. The unit
tests that are created should be implemented using a framework that enables them to be
[Link] individual unit tests are organized into a “universal testing suite” integration and
validation
testing of the system can occur on a daily basis. This provides the XP team with a continual
indication of progress
3. XP acceptance tests, also called customer tests, are specified by the customer and focus on
overall system features and functionality that are visible and reviewable by the customer.
4. Acceptance tests are derived from user stories that have been implemented as part of a
software release