Module 1
INTRODUCTION
Introduction
•In today’s world computer software is the single most important technology in
all fields.
•Every where we find computers and a controlling software.
•Incorporated in all kinds of system
◦ Transportation
◦ Medical
◦ Telecommunication
◦ Military
◦ Industry
◦ Education
SUSHREE S. , IIIT BHUBANESWAR 2
Introduction
•A software has a dual role
• It is a product
• It is a vehicle for delivering a product
•In any system, the software represents a large proportion of the total cost of the
system.
•These software need to corrected , adapted and enhanced with time to suit the
changing needs of the users.
•The maintenance activities take more people and resource than to create one.
SUSHREE S. , IIIT BHUBANESWAR 3
Introduction
•Thus, given the growing need and importance of software, there are various
technologies that make is easier , faster and less expensive to build and maintain
high quality software.
•And here comes the role of software engineering.
SUSHREE S. , IIIT BHUBANESWAR 4
Definitions
•Program : a set of instructions given to a computer to perform a particular task.
•Software : the collection of computer programs, procedures, rules, and
associated documentation and data. (IEEE Definition)
•This implies that the discipline dealing with the development of software
should not deal only with developing pro grams, but with developing all the
things that constitute software.
•Thus, software engineering is largely concerned with the development of
industrial-quality software.
SUSHREE S. , IIIT BHUBANESWAR 5
Software
Characteristics that differentiate software from hardware
•Software is developed or engineered, it is not manufactured in the classical
sense
•Software does not wear out. It deteriorates.
•Software is intangible.
Failure curve for software
SUSHREE S. , IIIT BHUBANESWAR 6
Software
Characteristics that differentiate software from hardware
•Although the industry is moving toward component-based assembly, most
software continues to be custom built. A software component should be
designed and implemented so that it can be reused in many different programs.
For example, today's graphical user interfaces are built using reusable
components that enable the creation of graphics windows, pull-down menus,
and a wide variety of interaction mechanisms. The data structure and processing
detail required to build the interface are contained within a library of reusable
components for interface construction.
•Software development is a complex process. The specification , design and
testing are the difficult part of the process.
SUSHREE S. , IIIT BHUBANESWAR 7
Program vs software product
BASIS OF COMPARISON PROGRAM SOFTWARE PRODUCT
Developed by Individuals Software professionals
Number of developers Single developer Large number of developers
are involved
Purpose Personal use To be used by a large number
of individuals called as
customers
Size small Extremely large
Functionality limited Complex
SUSHREE S. , IIIT BHUBANESWAR 8
Program vs software product
BASIS OF COMPARISON PROGRAM SOFTWARE PRODUCT
Developing strategy According to the programmer’s Must be developed using
individual style of development accepted software engineering
principles
User interface Not very important as the Must be carefully designed and
programmer is the sole user and implemented because developers
he has developed it of that product and the users of
the product are totally different
Documentation Very little documentation is Software product must be well
expected documented
SUSHREE S. , IIIT BHUBANESWAR 9
Definition
•Industrial strength software
•In software engineering we are not dealing with programs that are build for
demonstration purpose.
•Rather we are building software that will solve real problems of any organization
and can lead to significant direct or indirect loss.
•These software are referred to as industrial strength software.
SUSHREE S. , IIIT BHUBANESWAR 10
Definition
•Characteristics of Industrial strength software
1. Expensive - very expensive because the development process is very labor
intensive
2. Tight schedule – there is a demand for short delivery time for a software.
Cycle time is an important driving force.
3. Productivity – high productivity leads to low cost and low cycle time. It can
be measured in terms of output per unit effort(LOC per person per month)
4. Quality – developing high-quality software is the basic goal
5. Large scale – usually build for a complete business organization and needs to
control everything.
SUSHREE S. , IIIT BHUBANESWAR 11
Student system vs Industrial strength software
STUDENT SYSTEM INDUSTRIAL STRENGTH
SOFTWARE
Developer Developer is the user Developer and the users are
different
Bugs Bugs are tolerable Bugs are not tolerated
User interface UI not important UI is very important
Documentation No or minimal documentation Documentation are required for
required the user as well as the
organization and the project
SUSHREE S. , IIIT BHUBANESWAR 12
Student system vs Industrial strength software
STUDENT SYSTEM INDUSTRIAL STRENGTH
SOFTWARE
Use Does not have a critical use Supports important business
function
Reliability Reliability and robustness are not Reliability and robustness are
important very important
Investment No investment required Heavy investment are required
Portability Don’t care about portability Portability is a key issue here.
SUSHREE S. , IIIT BHUBANESWAR 13
Student system vs Industrial strength software
•Thus the key difference lies in quality along with usability, reliability, portability,
robustness etc.
•The cost and schedule are another two major driving forces in the development
process of a software.
•Brooks thumb-rule: Industrial strength s/w costs 10 times more than student
s/w
•And the area of software engineering focuses on development of such software
and all the associated things that constitute a SOFTWARE
SUSHREE S. , IIIT BHUBANESWAR 14
Definition
•Software engineering is defined as [IEE87]:
•Software engineering is the systematic approach to the development,
operation, maintenance, and retirement of software.
•Another definition from the economic and human perspective is given by
Boehm[Boe81]
•Software Engineering is the application of science and mathematics by which
the capabilities of computer equipment are made useful to man via computer
programs, procedures, and associated documentation.
SUSHREE S. , IIIT BHUBANESWAR 15
Scope and necessity of Software Engineering
•Software engineering is an engineering approach for software development.
•It is a systematic collection of past experience arranged in the form of
methodologies and guidelines.
•It provides methodologies for developing software as close to the scientific
method as possible. That is, these methodologies are repeatable, and if the
methodology is applied by different people, similar software will be produced.
SUSHREE S. , IIIT BHUBANESWAR 16
Scope and necessity of Software Engineering
•A small program can be written without using software engineering principles.
But if one wants to develop a large software product, then software engineering
principles are indispensable to achieve a good quality software cost effectively.
•This can be explained using a building construction analogy.
•Suppose you want to build a small wall
•Using your common sense you will bring bricks and cement and build a small
wall very easily.
SUSHREE S. , IIIT BHUBANESWAR 17
Scope and necessity of Software Engineering
•But what if you were to build a multi-storied building..??
•Even if you tried to build a large building, it would collapse because you would
not have the requisite knowledge about the strength of materials, testing,
planning, architectural design, etc. to build a multi storied building.
SUSHREE S. , IIIT BHUBANESWAR 18
Scope and necessity of Software Engineering
•It would be very difficult to extend your idea about a small wall construction into
constructing a large building. You can use your intuition and still be successful in
building a small wall, but building a large building requires knowledge of civil,
architectural and other engineering
SUSHREE S. , IIIT BHUBANESWAR 19
Scope and necessity of Software Engineering
•Challenges that software engineering faces:
•The problem of scale
SUSHREE S. , IIIT BHUBANESWAR 20
Scope and necessity of Software Engineering
•Challenges that software engineering faces:
•Cost, schedule and quality
•Low cost – high quality software
•Small cycle time from concept to delivery
•Quality can be viewed as having 3 dimensions
• Product operation,
• Product transition and
• Product revision.
SUSHREE S. , IIIT BHUBANESWAR 21
Scope and necessity of Software Engineering
•Correctness is the extent to which a program satisfies its specifications.
•Reliability is the property that defines how well the software meets its
requirements.
•Efficiency is a factor in all issues relating to the execution of software; it includes
such considerations as response time, memory requirement, and throughput.
•Usability, or the effort required to learn and operate the software properly, is an
important property that emphasizes the human aspect of the system.
SUSHREE S. , IIIT BHUBANESWAR 22
Scope and necessity of Software Engineering
•Maintainability is the effort required to locate and fix errors in operating
programs.
•Testability is the effort required to test to ensure that the system or a module
performs its intended function.
••Flexibility is the effort required to modify an operational program (perhaps to
enhance its functionality).
SUSHREE S. , IIIT BHUBANESWAR 23
Scope and necessity of Software Engineering
•Portability is the effort required to transfer the software from one hardware
configuration to another.
•Reusability is the extent to which parts of the software can be reused in other
related applications.
•Interoperability is the effort required to couple the system with other systems.
SUSHREE S. , IIIT BHUBANESWAR 24
Scope and necessity of Software Engineering
•Challenges that software engineering faces:
•The problem of consistency
•Software development organization would like to produce consistent quality
with consistent productivity.
•Consistency allows an organization to predict the outcome of a project with
reasonable accuracy, and to improve its processes to produce higher-quality
products and to improve its productivity.
SUSHREE S. , IIIT BHUBANESWAR 25
Objective
•Develop methods and procedures for software development that can scale up
for large systems and that can be used to consistently produce high-quality
software at low cost and with a small cycle time(optimality).
••That is, the key objectives are
• consistency,
• Low cost,
• High quality,
• Small cycle time, and
• Scalability(applicable to large projects).
•The basic approach that software engineering takes is to separate the
development process from the developed product
SUSHREE S. , IIIT BHUBANESWAR 26
Software Crisis
•The software crisis was due to using the same workforce, same methods, and
same tools even though rapidly increasing software demand, the complexity of
software, and software challenges. With the increase in software complexity,
many software problems arose because existing methods were insufficient.
•Organizations are appending larger portion of their budget on the software.
SUSHREE S. , IIIT BHUBANESWAR 27
Software Crisis
•Causes of software crisis
• More expensive than the hardware
• Use resources non-optimally
• Often fail to meet the user requirements (low quality)
• Frequently crash (not reliable)
• Delivered late and overshoot the schedule
• Difficult to debug, alter and enhance ( low maintainability)
SUSHREE S. , IIIT BHUBANESWAR 28
Software Crisis
•Factors contributing to the software crisis
• Larger and complex problems
• Lack of adequate training in software engineering
• Increasing skill shortage
• Low productivity improvements
SUSHREE S. , IIIT BHUBANESWAR 29
Software Crisis
•Solution to the software crisis
• It is believed that the only satisfactory solution to the present software crisis
can possibly come from a spread of software engineering practices among the
engineers, coupled with further advancements to the software engineering
discipline itself.
• Reduction in software over budget.
• The quality of the software must be high.
• Less time is needed for a software project.
• Experienced and skilled people working on the software project.
• Software must be delivered.
• Software must meet user requirements.
SUSHREE S. , IIIT BHUBANESWAR 30
Abstraction and Decomposition
Software engineering principles use two important techniques to reduce
problem complexity:
• Abstraction
• Decomposition.
SUSHREE S. , IIIT BHUBANESWAR 31
Abstraction
Hierarchy of abstraction
SUSHREE S. , IIIT BHUBANESWAR 32
Abstraction
•The principle of abstraction implies that a problem can be simplified by omitting
irrelevant details.
•In other words, the main purpose of abstraction is to consider only those
aspects of the problem that are relevant for certain purpose and suppress other
aspects that are not relevant for the given purpose.
•Once the simpler problem is solved, then the omitted details can be taken into
consideration to solve the next lower level abstraction, and so on.
•Abstraction is a powerful way of reducing the complexity of the problem.
SUSHREE S. , IIIT BHUBANESWAR 33
Decomposition
•The other approach to tackle problem complexity is decomposition.
•In this technique, a complex problem is divided into several smaller problems
and then the smaller problems are solved one by one.
•However, in this technique any random decomposition of a problem into smaller
parts will not help.
•The problem has to be decomposed such that each component of the
decomposed problem can be solved independently and then the solution of the
different components can be combined to get the full solution.
SUSHREE S. , IIIT BHUBANESWAR 34
Decomposition
•A good decomposition of a problem as shown in
the figure should minimize interactions among
various components.
•If the different subcomponents are interrelated,
then the different components cannot be solved
separately and the desired reduction in complexity
will not be realized
SUSHREE S. , IIIT BHUBANESWAR 35
Evolution of software design techniques over the last 50 years
•During the 1950s, most programs were being written in assembly language.
These programs were limited to about a few hundreds of lines of assembly code,
i.e. were very small in size. Every programmer developed programs in his own
individual style - based on his intuition. This type of programming was called
Exploratory Programming.
SUSHREE S. , IIIT BHUBANESWAR 36
Evolution of software design techniques over the last 50 years
•The next significant development which occurred during early 1960s in the area
computer programming was the high-level language programming. Use of high-
level language programming reduced development efforts and development
time significantly. Languages like FORTRAN, ALGOL, and COBOL were introduced
at that time.
SUSHREE S. , IIIT BHUBANESWAR 37
Evolution of software design techniques over the last 50 years
•As the size and complexity of programs kept on increasing, the exploratory
programming style proved to be insufficient. Programmers found it increasingly
difficult not only to write cost-effective and correct programs, but also to
understand and maintain programs written by others.
•To cope with this problem, experienced programmers advised other programmers
to pay particular attention to the design of the program’s control flow structure (in
late 1960s). It was found that the "GOTO" statement made control structure of a
program complicated and messy. At that time most of the programmers used
assembly languages extensively. They considered use of "GOTO" statements in high-
level languages were very natural and they did not really accept that they can write
programs without using GOTO statements, and considered the frequent use of
GOTO statements inevitable.
SUSHREE S. , IIIT BHUBANESWAR 38
Evolution of software design techniques over the last 50 years
•At this time, Dijkstra [1968] published his (now famous) article “GOTO
Statements Considered Harmful”. Expectedly, many programmers were enraged
to read this article. They published several counter articles highlighting the
advantages and inevitably of GOTO statements. But, soon it was conclusively
proved that only three programming constructs – sequence, selection, and
iteration – were sufficient to express any programming logic. This formed the
basis of the structured programming methodology.
SUSHREE S. , IIIT BHUBANESWAR 39
Evolution of software design techniques over the last 50 years
•Structured programming methodology
•A structured program uses three types of program constructs
✓Selection (if, switch)
✓Sequence(statements, blocks)
✓Iteration(loops like for , while)
•Structured programs avoid unstructured control flows by restricting the use of
GOTO statements.
•A structured program consists of a well partitioned set of modules.
•Structured programming uses single entry, single-exit program constructs such
as if-then-else, do-while, etc.
•Thus, the structured programming principle emphasizes designing neat control
structures for programs.
SUSHREE S. , IIIT BHUBANESWAR 40
Evolution of software design techniques over the last 50 years
•The next important development was data structure-oriented design.
Programmers argued that for writing a good program, it is important to pay
more attention to the design of data structure of the program rather than to the
design of its control structure. Data structure-oriented design techniques
actually help to derive program structure from the data structure of the
program.
SUSHREE S. , IIIT BHUBANESWAR 41
Evolution of software design techniques over the last 50 years
•Next significant development in the late 1970s was the development of data
flow-oriented design technique. Experienced programmers stated that to have a
good program structure, one has to study how the data flows from input to the
output of the program. Every program reads data and then processes that data
to produce some output. Once the data flow structure is identified, then from
there one can derive the program structure.
SUSHREE S. , IIIT BHUBANESWAR 42
Evolution of software design techniques over the last 50 years
•Object-oriented design (1980s) is the latest and very widely used technique. It
has an intuitively appealing design approach in which natural objects (such as
employees, pay-roll register, etc.) occurring in a problem are first identified.
Relationships among objects (such as composition, reference and inheritance)
are determined. Each object essentially acts as a data hiding entity. The program
structure here is determined based on the interactions that occurs between the
objects.
SUSHREE S. , IIIT BHUBANESWAR 43
Evolution of software design techniques over the last 50 years
Exploratory Programming(assembly code)
High-level language programming(GOTO)
Control flow based design(selection, sequence , iteration)
Data structure oriented design technique
Data flow-oriented design technique
Object-oriented design technique
SUSHREE S. , IIIT BHUBANESWAR 44
Exploratory style vs Modern style of software development
EXPLORATORY STYLE MODERN STYLE
Development strategy No fixed strategy Development goes through
several well-defined stages such
as requirement specification,
design, coding, testing etc.
Error removal Error correction Error prevention(phase
containment of errors)
Coding Considered as the major activity Regarded as a small part of the
complete development process
Testing Not very important, defects are Testing is all encompassing in the
detected much later in the development process starting
lifecycle from the requirement
specification stage
Documentation May or may not exist Documentation at every stage
SUSHREE S. , IIIT BHUBANESWAR 45
Modern style of development
•Key features
• Modern software engineering principles are based on error prevention that
emphasize detection of errors as close to the point where the errors are
committed as possible(phase containment of error).
• Development of software happens through well defined stages such as
requirement specification, design, coding, testing etc.
• Coding is only a small part of the complete development process
• Periodic reviews are being carried out during all stages of the development
process. The main objective of carrying out reviews is phase containment of
errors, i.e. detect and correct errors as soon as possible.
SUSHREE S. , IIIT BHUBANESWAR 46
Modern style of development
•Key features
• Testing activity has also become all encompassing in the sense that test cases are
being developed right from the requirements specification stage.
• There is better visibility of design and code. By visibility we mean production of
good quality, consistent and standard documents during every phase. This has
made fault diagnosis and maintenance smoother.
• Now, projects are first thoroughly planned. Project planning normally includes
preparation of various types of estimates, resource scheduling, and development
of project tracking plans. Several techniques and tools for tasks such as
configuration management, cost estimation, scheduling, etc. are used for
effective software project management.
• Several metrics are being used to help in software project management and
software quality assurance.
SUSHREE S. , IIIT BHUBANESWAR 47
Modern style of development
•Other developments in modern s/w development style
✓Life cycle model
✓Specification techniques
✓Project management techniques
✓Testing techniques
✓Debugging techniques
✓Quality assurance techniques
✓CASE tools(computer aided software engineering tool) etc.
SUSHREE S. , IIIT BHUBANESWAR 48
Software products
Software engineers are concerned with developing software products (i.e.,
software which can be sold to a customer). There are two kinds of software
products:
1. Generic products These are stand-alone systems that are produced by a
development organization and sold on the open market to any customer who is
able to buy them. Examples of this type of product include software for PCs such
as databases, word processors, drawing packages, and project-management
tools. It also includes so-called vertical applications designed for some specific
purpose such as library information systems, accounting systems, or systems for
maintaining dental records.
SUSHREE S. , IIIT BHUBANESWAR 49
Software products
Software engineers are concerned with developing software products (i.e.,
software which can be sold to a customer). There are two kinds of software
products:
2. Customized (or bespoke) products These are systems that are commissioned
by a particular customer. A software contractor develops the software especially
for that customer. Examples of this type of software include control systems for
electronic devices, systems written to support a particular business process, and
air traffic control systems.
SUSHREE S. , IIIT BHUBANESWAR 50
Categories of software
System software
System software is a collection of programs written to service other programs.
e.g., compilers, editors, and file management utilities, operating system
components, drivers, etc.
Real-time software
Software that monitors/analyses/controls real-world events as they occur is
called real time.
SUSHREE S. , IIIT BHUBANESWAR 51
Categories of software
Business software
Business information processing is the largest single software application area.
Eg. payroll, accounts receivable/payable, inventory
Engineering/scientific software
Engineering and scientific software have been characterized by "number
crunching" algorithms. Computer aided design tools , system simulation
SUSHREE S. , IIIT BHUBANESWAR 52
Categories of software
Embedded software
Embedded software resides in read-only memory and is used to control products
and systems for the consumer and industrial markets. Embedded software can
perform very limited and esoteric functions (e.g., keypad control for a microwave
oven.
Personal Computer Software
Word processing, spread sheets, computer graphics, multimedia, entertainment,
database management, personal and business financial applications, external
network, and database access are only a few of hundreds of applications. They
include all necessary functionality and do not need to be connected to the
network.
SUSHREE S. , IIIT BHUBANESWAR 53
Categories of software
WebApps (Web applications)
The Web pages retrieved by a browser are software that incorporates executable
instructions (e.g., CGI,HTML, Perl, or Java), and data (e.g., hypertext and a variety
of visual and audio formats).
Artificial intelligence software.
Artificial intelligence (AI) software makes use of nonnumerical algorithms to
solve complex problems that are not amenable to computation or
straightforward analysis. Expert systems, also called knowledge-based systems,
pattern recognition (image and voice), artificial neural networks, theorem
proving, and game playing are representative of applications within this
category.
SUSHREE S. , IIIT BHUBANESWAR 54