COMP 211 COMP 211 INTRODUCTION TO INTRODUCTION TO SOFTWARE ENGINEERING SOFTWARE ENGINEERING
INTRODUCTION AND OVERVIEW INTRODUCTION AND OVERVIEW
COMP 211
INTRODUCTION & OVERVIEW
LEARNING OBJECTIVES
1. Understand the nature and importance of software.
2. Understand that developing large software systems is complex.
3. Know some approaches for dealing with software development complexity.
4. Understand what software engineering is and why it is important in software development.
COMP 211
INTRODUCTION & OVERVIEW
SOFTWARE IS
computer programs plus
configuration data documentation (system; user)
Types of software:
generic custom
Copies in use medium low high
Annual development effort medium high low
Requirements come from market research client needs client/hardware needs
Our focus
embedded
Alternative classification:
data processing organizes and stores business data real-time controls devices/processes in real time
COMP 211
INTRODUCTION & OVERVIEW
SOFTWARE IS (contd)
Important
pervasive and essential part of almost all organizations key part of many products (design; embedded systems)
Big business
several hundred billion dollars/year spent worldwide and growing
Software Demand
Personal computing, information, education Commercial Scientific & Technical 1950 1960 1970 1980 1990 2000
Man-months
But complex to develop
B-2 bomber: 3.5MLOC Windows 95: 15MLOC
(plus 5,000 estimated bugs!)
8000 6000 4000 2000 100 200 300 400 500 1000s of language statements 600
Windows NT: 25MLOC
COMP 211
INTRODUCTION & OVERVIEW
SOFTWARE COMPLEXITY COMES FROM
Application domain
problems are complex developers are not domain experts
Communication among stakeholders (developers, clients, )
different vocabulary: domain experts <=> developers <=> developers inherent ambiguity of language different background knowledge of stakeholders
Managing the process
dividing the project into pieces and reassembling the pieces coordinating many people
Coding
creating useful software is a complicated engineering process
COMP 211
INTRODUCTION & OVERVIEW
SOFTWARE COMPLEXITY LEADS TO
1. software quality problems
unreliable unsafe inflexible abandoned Hong Kong Airport; Ariane 5 rocket London Ambulance; Therac-25 hard to change/maintain London Stock Exchange
2. project management problems
over schedule over budget
3. programmer productivity problems For large software projects:
25% are canceled 50% take longer than planned 75% are operational failures
COMP 211 INTRODUCTION & OVERVIEW 6
SOFTWARE COMPLEXITY LEADS TO (contd)
Ariane 5 Its maiden flight on June 4, 1996 ended in the launcher being exploded because of a chain of software failures London Ambulance Because of a succession of software engineering failures, especially defects in project management, a system was introduced that failed twice in the autumn of 1992. Although the monetary cost, at only about 9m, was small by comparison with other examples, it is believed that people died who would not have died if ambulances had reached them as promptly as they would have done without this software failure. Therac-25 Between 1985 and 1987 six people (at least) suffered serious radiation overdoses because of software-related malfunctions of the Therac-25 radiation therapy machine. Three of them are thought to have died of the overdoses. An important root cause was a lack of quality assurance, which led to an overcomplex, inadequately tested, under-documented system being developed, and subsequently to the failure to take adequate corrective action. London Stock Exchange Taurus was a planned automated transaction settlement system. The project was canceled in 1993 after having lasted more than five years and costing around 75m; the estimated loss to customers was around 450m; and the damage to the reputation of the London Stock Exchange was incalculable.
COMP 211 INTRODUCTION & OVERVIEW 7
DEALING WITH SOFTWARE QUALITY PROBLEMS QUALITY DESIGN GOALS
There are many desirable software quality characteristics:
correct reliable robust efficient usable verifiable maintainable repairable evolvable reusable portable interoperable understandable productive timely visible
Impossible (or unnecessary) to achieve all of them simultaneously (time/cost/conflicting or not important)
Need to choose most important qualities for a given project
and base the development around these. This reduces the complexity of designing the system!
COMP 211 INTRODUCTION & OVERVIEW 8
DEALING WITH SOFTWARE QUALITY PROBLEMS QUALITY DESIGN GOALS (contd)
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, etc. usable - 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
COMP 211 INTRODUCTION & OVERVIEW 9
DEALING WITH PROJECT MANAGEMENT PROBLEMS MODULAR DEVELOPMENT
Large software systems are complex and changing. Large software systems are complex and changing. There is a limit to how much a person can understand There is a limit to how much a person can understand at any one time. at any one time. DIVIDE and CONQUER
The System
coupling
module: any piece of a system which it makes sense to consider separately modules not arbitrary (should have cohesion) cohesion
modules also need to depend on each other
COMP 211 INTRODUCTION & OVERVIEW 10
DEALING WITH PROJECT MANAGEMENT PROBLEMS MODULAR DEVELOPMENT (contd)
cohesion a measure of the number of functionally different things a module has to do
a module is most cohesive when it does only one thing
(i.e., provides an abstraction of some intuitively understood function which may nevertheless be complex to implement; a good abstractions is a pluggable component can replace and/or reuse it fairly easily)
coupling a measure of the number and types of interconnections (dependencies) a module has with other modules
a module has the lowest coupling when it has minimal
dependencies with other modules
COMP 211 INTRODUCTION & OVERVIEW 11
DEALING WITH PROJECT MANAGEMENT PROBLEMS MODULAR DEVELOPMENT (contd)
interface Use interfaces to control coupling (and thus complexity)
abstracts a module so the developer does not have to understand how a module is implemented
A module can be used without knowing
how it is implemented.
This reduces the complexity of understanding the system!
COMP 211 INTRODUCTION & OVERVIEW 12
DEALING WITH PROJECT MANAGEMENT PROBLEMS MODULAR DEVELOPMENT (contd)
interface
encapsulates a module so the developer is prevented from using knowledge about how the module is implemented
A module can be changed without
changing the rest of the system. This reduces the complexity of maintaining the system!
abstraction + encapsulation = information hiding abstraction + encapsulation = information hiding
COMP 211 INTRODUCTION & OVERVIEW 13
DEALING WITH PROJECT MANAGEMENT PROBLEMS MODULAR DEVELOPMENT (contd)
modularity defined via interfaces allows for:
more productivity in team development fewer bugs more maintainable software more reusable software
and the possibility of module-based (component-based) development using a suitable software architecture
This reduces the complexity of cost and time estimates for developing the system!
COMP 211
INTRODUCTION & OVERVIEW
14
DEALING WITH PROJECT MANAGEMENT PROBLEMS MODULAR DEVELOPMENT (contd)
SOFTWARE ENGINEERING SOFTWARE ENGINEERING CHALLENGES CHALLENGES
1. Define good modules with the right 1. Define good modules with the right things in their interfaces. things in their interfaces. 2. Specify suitable software architectures 2. Specify suitable software architectures to support modules. to support modules.
COMP 211
INTRODUCTION & OVERVIEW
15
DEALING WITH PROGRAMMER PRODUCTIVITY PROBLEMS TRAINING SOFTWARE ENGINEERS
programming-in-the-small coding programming-in-the-small coding programming-in-the-large software engineering programming-in-the-large software engineering Software engineers need to be able to:
talk with users in terms of the application, rather than computer jargon translate vague requirements and desires into precise specifications move among different levels of abstraction at different stages of the project build a model of the application (actually several models) use and apply several design approaches choose among alternatives (make tradeoffs) work in well-defined roles in a team
This reduces the complexity of building the system!
COMP 211 INTRODUCTION & OVERVIEW 16
1.2
SOFTWARE ENGINEERING IS
Theestablishment and use of sound engineering The establishment and use of sound engineering principles in order to obtain economically software that is principles in order to obtain economically software that is reliable and works efficiently on real machines. reliable and works efficiently on real machines. Frtiz Bauer Frtiz Bauer ...multi-person construction of multi-version software. ... multi-person construction of multi-version software. Dave Parnas Dave Parnas
engineering principles is a disciplined effort economicallyreliableefficiently has built-in quality real machines solves a real problem (implied) multi-person requires team effort multi-version is not a one-shot effort
INTRODUCTION & OVERVIEW 17
COMP 211
SOFTWARE ENGINEERING IS
engineering principles is a disciplined effort that: systematically uses methodologies, techniques and tools, and a store of relevant knowledge, architectures and components uses a modular approach to system building with phases applies appropriate project management techniques economicallyreliableefficiently has built-in quality that: meets cost, time and other constraints has meaningful quality assurance (e.g., standards) does formal testing of modules and the system as a whole real machines solves a real problem (implied), therefore: development is focused on meeting user requirements multi-person requires team effort that: pays attention to team organization, dynamics, and management multi-version is not a one-shot effort, therefore, we: plan for maintenance have excellent documentation
INTRODUCTION & OVERVIEW 18
COMP 211
SOFTWARE ENGINEERING INVOLVES
a modeling activity
problem domain model models the application domain solution model models the system to be built
a problem solving activity
search for an appropriate solution in the presence of change not algorithmic, but should be systematic
a knowledge acquisition activity
not a linear process learn as you go, but may need to unlearn sometimes, you may even need to start over!
a rationale management activity
assumptions and solutions change constantly may need to revisit decisions already made bugs, technology, etc. need to remember: Why did we make this choice?
COMP 211
INTRODUCTION & OVERVIEW
19
SOFTWARE ENGINEERING INVOLVES
A
LOT of documentation
and SOME coding.
COMP 211
INTRODUCTION & OVERVIEW
20
SUMMARY
Developing large software systems is complex We need to deal with this complexity by
Having appropriate quality design goals Using modular development techniques Training computer scientists to use software engineering techniques
Most of software engineering involves modeling and documenting system requirements and solutions, not coding Modeling and documenting may often seem tedious and boring but they are essential for helping to reduce complexity and thus building better software systems!
COMP 211
INTRODUCTION & OVERVIEW
21