You are on page 1of 33

FUNDAMENTALS

OF
SOFTWARE ENGINEERING
Objectives
► To introduce software engineering and to explain its
importance

► To set out the answers to key questions about


software engineering

► To introduce ethical and professional issues and to


explain why they are of concern to software
engineers
Introduction
► The economies of ALL developed nations are
dependent on software.
► More and more systems are software controlled
► Software engineering is concerned with theories,
methods and tools for professional software
development.
► Expenditure on software represents a significant
fraction of GNP in all developed countries.
Software costs
► Software costs often dominate computer system
costs. The costs of software on a PC are often greater
than the hardware cost.
► Software costs more to maintain than it does to
develop. For systems with a long life, maintenance
costs may be several times development costs.
► Software engineering is concerned with cost-
effective software development.
FAQs about software engineering

► What is software?
► What is software engineering?
► What is the difference between software engineering
and computer science?
► What is the difference between software engineering
and system engineering?
► What is a software process?
► What is a software process model?
FAQs about software engineering

► What are the costs of software engineering?


► What are software engineering methods?
► What is CASE (Computer-Aided Software
Engineering)
► What are the attributes of good software?
► What are the key challenges facing software
engineering?
What is software?
► Computer programs and associated documentation
such as requirements, design models and user
manuals.
► Software products may be developed for a particular
customer or may be developed for a general market.
► Software products may be
 Generic - developed to be sold to a range of different
customers e.g. PC software such as Excel or Word.
 Bespoke (custom) - developed for a single customer
according to their specification.
► New software can be created by developing new
programs, configuring generic software systems or
reusing existing software.
What is software engineering?
► Software engineering is an engineering discipline that
is concerned with all aspects of software production.
► Software engineers should adopt a systematic and
organised approach to their work and use appropriate
tools and techniques depending on the problem to be
solved, the development constraints and the
resources available.
► Software engineering is an engineering discipline that
is concerned with all aspects (specification,
development, management and evolution) of
software production.
• Software engineers should adopt a systematic and organised
approach to their work and use appropriate tools and
techniques depending on the problem to be solved, the
development constraints and the resources available.
• The application of a systematic, disciplined, quantifiable
approach to development, operation, and maintenance of
software; that is, the application of engineering to software.
(IEEE Standard Computer Dictionary , 610.12, ISBN 1-55937-
079-3, 1990)
• Software engineering is concerned with the theories, methods
and tools for developing, managing and evolving software
products. (Sommerville, 6Ed.)
• A discipline whose aim is the production of quality software,
delivered on time, within budget, and satisfying users' needs.
(Stephen R. Schach, Software Engineering, 2ed.)
• Multi-person construction of multi-version software
(Parnas, 1987)
The technological and managerial discipline concerned with
systematic production and maintenance of software products
that are developed and modified on time and within cost
constraints (R. Fairley)
A discipline that deals with the building of software systems
which are so large that they are built by a team or teams of
engineers (Ghezzi, Jazayeri, Mandrioli)
► Program vs. Software Products
► Emergence of Software Engineering
► Notable Changes in Software Development
Practices
► Software Life Cycle Models

Emergence of Software Engineering


► Early Computer Programming
► High-Level Language Programming
► Control Flow-Based Design
► Data Structured-Oriented Design
► Data Flow-Oriented Design
► Object-Oriented Design
Notable Changes in Software
Development Practices
Several noteworthy differences between the exploratory style of
software development and the modern practices of software
development exist. These are as follows:
• An important difference is that the main emphasis has
shifted from error correction to error prevention.
• In exploratory style, coding was considered synonymous with
program development. Now, coding is regarded as a small
part of the different activities undertaken for program
development.
• A lot of effort and attention is paid to requirements analysis
and specification.
• Periodic reviews are carried out during all stages of the
development process.
• Today software testing has become more systematic and for
which standard testing techniques are available.
• There is better visibility of design and code.
• In exploratory style, design and test activities were not
documented satisfactorily.
• Several techniques and tools for tasks such as configuration
management, cost estimation, scheduling and task allocation
have been developed to make software development more
effective.
• Projects are being thoroughly planned.
Software Life Cycle Models
► Classical Waterfall Model
► Iterative Waterfall Model
► Prototyping Model
► Evolutionary Model
► Spiral Model
► Comparison of Different Life Cycle Models
Classical Waterfall Model
Feasibility
Study

Requirement analysis
and specification

Design

Coding and
unit testing

Integration and
System testing

Maintenance
Relative effort distribution among different phases of a typical product

70

60

50

40
% Effort
30

20

10

Phases
Feasibility Study

The aim of the feasibility study is to determine whether developing the


product is financially and technically feasible
The data collected in this phase are analyzed to arrive at the following:

• An abstract definition of the problem.


• Formulation of the different solution strategies.
• Examination of alternative solution strategies and their
benefits, indicating resources required, development, cost
and time in respect of each of the alternative solutions.
• A cost/benefit analysis is performed to determine which
solution is the best. At this stage, it may also be determined
whether any of the solutions is not feasible due to high cost,
resource constraints, or extraordinary technical reasons.
Requirement Analysis and Specification

The aim of the requirement analysis and specification phase is to


understand the exact requirements of the customer and to document them
properly. This phase consists of two distinct activities:

• Requirement analysis
• Requirement specification

The goal of the requirements analysis is to collect and analyze all related data
and information with a view to understanding the customer requirements
clearly and weeding out inconsistencies and incompleteness in these
requirements.
During requirements specification, the user requirements are properly
organized and documented in a SRS document. The SRS document addresses
the functional requirements, the nonfunctional requirements and the special
requirements on the maintenance and development of the software product, if
any.
Design

The goal of the design phase is to transform the requirements specification


into a structure that is suitable for implementation in some programming
language. Two distinct design approaches followed in different industries
are:
• Traditional design approach

 Structured analysis
 Architectural design

• Object-oriented design
Coding and Unit Testing

The purpose of this phase (also called the implementation phase) of


software development is to translate the software design into source code.
The end product of the implementation phase is a set of program modules
that have been individually tested.

Integration and System Testing


During this phase the different modules are integrated in a planned manner.
The different modules making up a system are almost never integrated in a
single shot. The goal of system testing is to ensure that the developed
system functions according to its requirements as specified in the SRS
document. The system testing usually consisting of three different kinds of
testing activities:

• α-testing
• β-testing, and
• Acceptance testing
Maintenance

Maintenance involves performing any one or more of the following three


kinds of activities:

1. Correcting errors that were not discovered during the product


development phase. This is called corrective maintenance.
2. Improving the implementation of the system and enhancing the
functionalities of the system according to the customer’s requirements.
This is called perfective maintenance.
3. Porting the software to a new environment, e.g. to a new computer or to
a new operating system. This is called adaptive maintenance.
Iterative Waterfall Model
Feasibility
Study

Requirement analysis
and specification

Design

Coding and
unit testing

Integration and
System testing

Maintenance
Prototyping Model
Requirements
gathering

Quick design

Refine requirements Build prototype

Customer
evaluation of
the prototype

Design Implement Test

Maintain
Evolutionary Model
This model is also known as the successive versions model. In this model, the
system is first broken down into several modules or functional units that can be
incrementally implemented and delivered.

A A B A B C

A, B, C are modules of a software product that are incrementally developed and delivered
The Evolutionary model combines the concepts of the linear
model with the concept of iteration. It delivers the software in
small parts called "increments." The first increment is called the
"core product." It is the basic product meeting the requirements
without any added frills. The successive increments then add to
the functionality of the product.

For example, in a security suite, the core product may include


an anti-virus, a firewall and an encryption tool. The next
increment could add a spyware removal tool. The next could
add a SPAM blocker and documentation, and so on. The
incremental model is particularly useful in the case of tight
deadlines. It is also used when human resource is a constraint.
Spiral Model
Determine objectives Evaluate alternatives

Identify alternatives Identify and resolve risks

Customer evaluation Develop the next


of the prototype level of the product
Spiral model of the software process

Deter mine objecti ves,


Evalua te alterna tives,
alterna tives and
identify, resolv e risks
constr aints Risk
anal ysis
Risk
anal ysis
Risk
Oper a-
anal ysis
Prototype 3 tional
Prototype 2 protoype
Risk
REVIEW anal ysis Proto-
type 1
Requir ements plan Simula tions , models , benchmar ks
Life-cy cle plan Concept of
Oper a tion S/W
requir ements Product
design Detailed
Requir ement design
De velopment
plan valida tion Code
Unit test
Integ ra tion Design
V&V Integ ra tion
and test plan
Plan ne xt phase test
Acceptance
Service test De velop , verify
ne xt-le vel pr oduct
The spiral model is similar to the incremental model, in the sense that it also
combines the elements of the linear model with iteration. But the graphical
representation is of a spiral nature and is divided into a number of framework
activities called task regions.
Common task regions include:

 Customer communication
 Planning
 Risk analysis
 Engineering
 Construction and release
 Customer evaluation

Each task region in turn consists of a number of task sets. The advantage of
this type of model is that both the developer and the customer are better able
to understand the concept of software evolution, thus leading to a better final
product. The disadvantage of such a model is that it requires expertise in the
field of risk assessment for the project to be successful.
The WINWIN Spiral model:
This model is similar to the above mentioned spiral model except that in
this, instead of a single customer communication activity, three sub-activities
are derived, these being:

 Identification of stakeholders
 Determination of their 'win' condition
 Negotiation

Negotiation is the key here. Successful negotiation results in the "win" for
both parties - the customer and the development team. Both try to maintain
a balance between functionality and ease of development. In addition, during
the process, there are three milestones called anchor points:

 Life cycle objectives


 Life cycle architecture
 Initial operational capability
Comparison of Different Life Cycle Models
► The classical waterfall model with feedback is the most widely used
software development model. It is too simplistic. There are no
milestones in the model, no mention of the documents generated or
the reviews conducted and no identification of the quality assurance
activities.
► The Iterative waterfall model is suitable for well-understood problems.
► The prototype model is suitable for projects whose user requirements
or the underlying technical aspects are not well understood.
► The evolutionary approach is suitable for large problems which can be
decomposed into a set of modules that can be implemented
incrementally and where incremental delivery of the system is
acceptable to the customer.
► The spiral model is called meta model since it encompasses all the
above models and uses prototyping as a risk reduction mechanism.
The spiral model suitable for development of technically challenging
software products that are prone to several kinds of risks.
Assignment Questions
1. What is the aim of software engineering? What does the
discipline of software engineering discuss?
2. What do you understand by the term life cycle model of
software development? Why is it important to adhere to a life
cycle model while developing a large software product?
3. What are the four important attributes of a software product?
Suggest four other attributes which may be significant.
4. Explain why the waterfall model of the software process is
not an accurate reflection of software development activities.
5. Giving reasons for your answer based on the type of type of
system being developed, suggest the most appropriate
generic software process model which might be used as a
basis for managing the development of the following
systems:
• A university accounting system which is intended to replace an
existing system.
• An interactive system which allows railway passengers to find train
times from terminals installed in stations.
• A well-understood data processing application.
• A software product that would function as the controller of a
telephone switching system.
• A new text editor.
• A new library automation software that would link various libraries in
the city.
• A compiler for a new language.

6. Explain why programs which are developed using


evolutionary development are likely to be difficult to maintain.
7. Explain how both waterfall model of the software process and
the prototype model can be accommodated in the spiral
model.
Sample Questions
1. What are the major advantages of first developing the prototype of a
system?
2. Explain why the spiral model is considered to be a meta model.
3. Why are three different levels of testing – unit testing, integration
testing and system testing – necessary? What is the main purpose of
each of these different levels of testing?
4. Discus the various software design methodologies and their relative
advantages and disadvantages.
5. In any software development effort, why is it advantageous to defects
in the same phase in which they are introduced?
6. What is meant by software maintenance? Discuss the three kinds of
activities involved in software maintenance.
7. Compare different software life cycle models.

You might also like