LECT1
LECT1
(LECT 1)
Engineering
Technology
Esoteric Past
Craft Systematic Use of Past
Experience Experience and Scientific Basis
Unorganized Use of
Past Experience
Art
Time
Why Study Software Engineering? (1)
· To acquire skills to be a
better programmer:
*Higher Productivity
*Better Quality Programs
Software Crisis
· The term software crisis refers to the numerous
challenges and difficulties faced by the software
industry during the 1960s and 1970s.
· The difficulty of writing the code for a computer program
which is correct and understandable is referred to as
software crisis.
· or Software crisis is also referred to as inability to hire
enough qualified programmers.
Software Crisis
· Software products:
- fail to meet user
requirements.
- frequently crash.
- expensive.
- difficult to alter, debug, and
enhance.
- often delivered late.
- use resources non-optimally.
Software Crisis (cont.)
Hw cost
Sw cost
1960 Year
1999
Relative Cost of Hardware and Software
Software Crisis (cont.)
• The North East blackout in 2003- has been major power system failures in
the history of north which involves 100 power plants, 50 million customer
faced problem, $ 6 million dollar financial loss.
• Year 2000(Y2k) refers to the widespread snags in processing date after the
Year 2000. In 1960-80 when shortened the four digit date format like 1972 to
a 2 digit format like 72 because of "Limited Memory. Because of that 2000 was
shortened to 00. Million dollar were spent to handle this problem.
• "Dollar 924 lakhs": In 1996, US bank credit accounts of nearly 800 customer
with dollar 924 lakhs. This problem was due to main programming bug in the
banking system.
• 1991 during Gulf War, :The USA use patriot missiles as a defence against Iraqi
scud missile . However, patriot failed to hit the scud many times with cost life of
28 USA soldiers. In an inquiry it is found that a small bug had resulted in
miscalculation of missile path.
Factors contributing to the
software crisis
· Larger problems,
· Lack of adequate training in
software engineering,
· Increasing skill shortage,
· Low productivity
improvements.
General issues that affect
most software
· Heterogeneity
- Increasingly, systems are required to operate as
distributed systems across networks that include
different types of computer and mobile devices.
· Business and social change
- Business and society are changing incredibly quickly as
emerging economies develop and new technologies
become available. They need to be able to change their
existing software and to rapidly develop new software.
· Security and trust
- As software is intertwined with all aspects of our lives, it
is essential that we can trust that software.
Chapter 1 Introduction
Software engineering
diversity
Chapter 1 Introduction
Application types
Chapter 1 Introduction
Software engineering
fundamentals
· Some fundamental principles apply to all types of
software system, irrespective of the development
techniques used:
- Systems should be developed using a managed and
understood development process. Of course, different
processes are used for different types of software.
- Dependability and performance are important for all
types of system.
- Understanding and managing the software specification
and requirements (what the software should do) are
important.
- Where appropriate, you should reuse software that has
already been developed rather than write new software.
Chapter 1 Introduction
Software engineering and the
web
· The Web is now a platform for running application
and organizations are increasingly developing
web-based systems rather than local systems.
· Web services (discussed in Chapter 19) allow
application functionality to be accessed over the
web.
· Cloud computing is an approach to the provision
of computer services where applications run
remotely on the ‘cloud’.
- Users do not buy software but pay according to use.
Chapter 1 Introduction
Web software engineering
· Software reuse is the dominant approach for
constructing web-based systems.
- When building these systems, you think about how you can
assemble them from pre-existing software components and
systems.
· Web-based systems should be developed and
delivered incrementally.
- It is now generally recognized that it is impractical to
specify all the requirements for such systems in advance.
· User interfaces are constrained by the capabilities of
web browsers.
- Technologies such as AJAX allow rich interfaces to be
created within a web browser but are still difficult to use.
Web forms with local scripting are more commonly used.
Chapter 1 Introduction
Web-based software
engineering
· Web-based systems are complex
distributed systems but the fundamental
principles of software engineering
discussed previously are as applicable to
them as they are to any other types of
system.
· The fundamental ideas of software
engineering, discussed in the previous
section, apply to web-based software in
the same way that they apply to other
types of software system.
Chapter 1 Introduction
Key points
· Software engineering is an engineering discipline
that is concerned with all aspects of software
production.
· Essential software product attributes are
maintainability, dependability and security,
efficiency and acceptability.
· The high-level activities of specification,
development, validation and evolution are part of
all software processes.
· The fundamental notions of software engineering
are universally applicable to all types of system
development.
Chapter 1 Introduction
Key points
· There are many different types of system
and each requires appropriate software
engineering tools and techniques for their
development.
· The fundamental ideas of software
engineering are applicable to all types of
software system.
Software engineering ethics
PREAMBLE
The short version of the code summarizes aspirations at a high level of the
abstraction; the clauses that are included in the full version give examples and
details of how these aspirations change the way we act as software engineering
professionals. Without the aspirations, the details can become legalistic and
tedious; without the details, the aspirations can become high sounding but
empty; together, the aspirations and the details form a cohesive code.
Software engineers shall commit themselves to making the analysis,
specification, design, development, testing and maintenance of software a
beneficial and respected profession. In accordance with their commitment to the
health, safety and welfare of the public, software engineers shall adhere to the
following Eight Principles:
Chapter 1 Introduction
Ethical principles
1. PUBLIC - Software engineers shall act consistently with the public interest.
2. CLIENT AND EMPLOYER - Software engineers shall act in a manner that is in the best
interests of their client and employer consistent with the public interest.
3. PRODUCT - Software engineers shall ensure that their products and related modifications
meet the highest professional standards possible.
4. JUDGMENT - Software engineers shall maintain integrity and independence in their
professional judgment.
5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and
promote an ethical approach to the management of software development and
maintenance.
6. PROFESSION - Software engineers shall advance the integrity and reputation of the
profession consistent with the public interest.
7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.
8. SELF - Software engineers shall participate in lifelong learning regarding the practice of
their profession and shall promote an ethical approach to the practice of the profession.
Chapter 1 Introduction
Ethical dilemmas
Feasibility
Study
Requirements
Analysis and
Specification Hardware
Development
Hardware
Software
Partitioning
Software
Development Integration
and Testing
Project Management
Emergence of Software Engineering
· Early Computer
Programming (1950s):
- Programs were being written
in assembly language.
- Programs were limited to
about a few hundreds of lines
of assembly code.
Early Computer Programming
(50s)
· Every programmer
developed his own style of
writing programs:
- according to his intuition
(exploratory programming).
* informal development style or
builds and fix the style
High-Level Language
Programming (Early 60s)
· Software development
style was still exploratory.
- Typical program sizes were
limited to a few thousands
of lines of source code.
Control Flow-Based Design (late
60s)
· Programmers found:
- very difficult to write cost-
effective and correct
Control Flow-Based Design
(late 60s)
· Programmers found:
- programs written by others
very difficult to understand and
maintain.
· To cope up with this
problem, experienced
programmers advised: ``Pay
particular attention to the design
of the program's control
Control Flow-Based Design (late 60s)
· A program having a
messy flow chart
representation:
- difficult to understand
and debug.
111
Control Flow-Based Design (Late 60s)
· It was found:
- GO TO statements makes
control structure of a program
messy
- GO TO statements alter the
flow of control arbitrarily.
- The need to restrict use of GO
TO statements was
recognized.
Control Flow-Based Design (Late 60s)
· Everyone accepted:
- it is possible to solve any
programming problem
without using GO TO
statements.
- This formed the basis of
Structured Programming
methodology.
Structured Programming
· A program is called
structured
- when it uses only the
following types of
constructs:
*sequence,
*selection,
*iteration
Structured programs
· Unstructured control
flows are avoided.
· Consist of a neat set of
modules.
· Use single-entry, single-exit
program constructs.
Structured programs
· However, violations to
this feature are
permitted:
- due to practical
considerations such as:
*premature loop exit to
support exception handling.
Structured programs
· Research experience
shows:
- programmers commit less
number of errors
*while using structured if-
then-else and do-while
statements
*compared to test-and-
Data Structure-Oriented Design
(Early 70s)
· Techniques which
emphasize designing the
data structure:
- derive program structure from
it:
*are called data structure-
oriented design
techniques.
Data Structure Oriented Design
(Early 70s)
· Example of data
structure-oriented design
technique:
- Jackson's Structured
Programming(JSP)
methodology
*developed by Michael
Jackson in 1970s.
Data Structure Oriented Design
(Early 70s)
· JSP technique:
- program code structure
should correspond to the
data structure.
Data Structure Oriented Design
(Early 70s)
· In JSP methodology:
- a program's data structures
are first designed using
notations for
* sequence, selection, and
iteration.
- Then data structure design is
used :
* to derive the program structure.
Data Structure Oriented Design
(Early 70s)
· Data flow-oriented
techniques advocate:
- the data items input to a
system must first be
identified,
- processing required on the
data items to produce the
required outputs should be
determined.
Data Flow-Oriented Design (Late 70s)
· Object-oriented technique:
- an intuitively appealing
design approach:
- natural objects (such as
employees, pay-roll-register,
etc.) occurring in a problem
are first identified.
Object-Oriented Design (80s)
· Relationships among
objects:
- such as composition,
reference, and inheritance are
determined.
· Each object essentially acts
as
- a data hiding (or data
Object-Oriented Design (80s)
· Object-Oriented Techniques
have gained wide
acceptance:
- Simplicity
- Reuse possibilities
- Lower development time and
cost
- More robust code
- Easy maintenance
Evolution of Design
Techniques
Object-Oriented
Data flow-based
Data structure-
based
Control flow-
based
Ad hoc
Evolution of Other Software
Engineering Techniques
· The improvements to the
software design
methodologies
- are indeed very conspicuous.
· In additions to the software
design techniques:
- several other techniques
evolved.
Evolution of Other Software
Engineering Techniques
- life cycle models,
- specification techniques,
- project management
techniques,
- testing techniques,
- debugging techniques,
- quality assurance techniques,
- software measurement
techniques,
- CASE tools, etc.
Differences between the exploratory style
and modern software development
practices
· In exploratory style,
- errors are detected only
during testing,
· Now,
- focus is on detecting as
many errors as possible in
each phase of
development.
Differences between the exploratory style
and modern software development
practices (CONT.)
· In exploratory style,
- coding is synonymous with
program development.
· Now,
- coding is considered only a
small part of program
development effort.
Differences between the exploratory style
and modern software development
practices (CONT.)
· Because of good
documentation:
- fault diagnosis and maintenance
are smoother now.
· Several metrics are being used:
- help in software project
management, quality assurance,
etc.
Differences between the exploratory style
and modern software development
practices (CONT.)
· When a program is
developed by a single
programmer ---
- he has the freedom to decide
his exact steps.
Life Cycle Model (CONT.)
· A fundamental necessity
while developing any large
software product:
- adoption of a life cycle
model.
Summary
· Adherence to a software life
cycle model:
- helps to do various development
activities in a systematic and
disciplined manner.
- also makes it easier to manage a
software development effort.
Reference