1 Introduction
1 Introduction
SOFTWARE ENGINEERING
ENGINEERING
INTRODUCTION
INTRODUCTION AND
AND OVERVIEW
OVERVIEW
INTRODUCTION &
OVERVIEW OUTLINE
• Trends
• software demand
• importance of software
• software effort (cost)
• software maintenance
• Problems
• software “construction”
• software development
• Solutions
• modular development
• personal development
• quality development
Personal computing,
information,
education
Commercial
3
TRENDS — IMPORTANCE OF
SOFTWARE
4
TRENDS — SOFTWARE
EFFORT (COST)
8000
Man-months
6000
4000
2000
New
development
effort ?
Time (years)
Failure rate
Actual
Idealized
Time Time
2. productivity of software developers has not kept pace with demand for
their services
WHY?
8
SOLUTIONS — MODULAR
DEVELOPMENT
Large software systems are complex and changing.
The coupling
System
CHALLENGES
– define good modules with the right things in their interfaces
– specify suitable software architectures to support components
12
SOLUTIONS — PERSONAL
DEVELOPMENT
“programming-in-the-small” vs. “programming-in-the-large”
14
SOLUTIONS — QUALITY
DEVELOPMENT
correct - behaves according to the specifications of its functions (functionally correct)
reliable - probability that the software will work as expected over a specified time
interval
robust - if it behaves “reasonably” in unanticipated circumstances
efficient - in use of time, space (memory, bandwidth…), etc.
user friendly - if human users find it easy to use (user interface aspect very important)
verifiable - if properties can be easily checked (e.g., correct, efficient, etc.)
maintainable - if software can be easily fixed/changed after implementation
repairable - if defects can be easily corrected with limited/reasonable effort
evolvable - if software can be easily changed over time
reusable - if we can reuse parts, perhaps with minor changes
portable - if software can run in different hardware/software environments
interoperable - if software can co-exist and cooperate with other hardware/software
systems
understandable - if it is easy to figure out what is going on/being done
productive - efficiency of the software production process
timely - ability to deliver a product on time
visible - if all steps/current status are available and easily accessible for external
examination 15
WHAT IS SOFTWARE
ENGINEERING?
“The establishment and use of sound engineering
principles in order to obtain economically
software that is reliable and works efficiently on
real machines.” — Frtiz Bauer
“... multi-person construction of multi-version
software.” — Dave Parnas
16
WHAT IS SOFTWARE
ENGINEERING?
• a modeling activity
• problem domain model models the application domain
• solution model models the system to be built
17
SOFTWARE ENGINEERING —
COMPONENTS
• project management
• team organization, dynamics
• requirements based development
• systematic use of methodologies, techniques and tools
• modular approach to system building – phases
• formal testing of modules and system as a whole
• meaningful quality assurance (e.g., standards)
• excellent documentation
• store of relevant knowledge, architectures and
components
18