Software Engineering
Textbook Recommended only: • Software Engineering - A Practitioner's Approach Pressman (McGraw Hill)
The Nature of Software •
• •
Software is a set of items or objects that form a “configuration” that includes: – Programs – Documents – Data Software products may be developed for a particular customer (bespoke) or for a general market (generic) Software Characteristics: – Software is developed or engineered, rather than being manufactured – Although the industry is moving toward component-based assembly, most software continues to be custom built. – Software doesn’t wear out – Software is complex
Characteristics of today’s software development • Development of large & complex systems • Software systems must fulfill the requirements of a client • Number of persons involved in the development > 1 • Software systems are expected to live long and be used by many people
Systematic approach to creation & ownership of software •
Systematic approach to the development, operation, maintenance & retirement of software.
•
Software –
•
Source code of a program, documentation, etc. Engineering
–
Application of a systematic approach (based on scientific & mathematical principles) toward the production of a structure, machine, process or system
?What is Software Engineering • The practical application of scientific knowledge to the design and construction of computer programs and the associated documentation required to develop, operate, and maintain them [Boehm]. • The systematic approach to the development, operation, maintenance, and retirement of software [IEEE]. • The establishment and use of sound engineering principles (methods) in order to obtain economically software that is reliable and works on real machines [Bauer]. • Multi-person construction of multi-version software [Parnas]. • “Software from womb to tomb.”
?What is a software process • •
A set of activities whose goal is the development or evolution of software Generic activities in all software processes are: – Specification - what the system should do and its development constraints – Development - production of the software system – Validation - checking that the software is what the customer wants – Evolution - changing the software in response to changing demands
?Why study Software Engineering • Building software without discipline is crazy • Software is critical to society • Building a large complete software project is hard • There is a perceived crisis in our ability to build software • to get away from ad hoc and unpredictable software development towards a systematic, understood one...
•
Discipline of software engineering emerged because people involved in software development efforts in 60s & 70s were wrong in estimates of time, effort & cost
•
Estimates usually spectacularly wrong !
•
Reliability & maintainability were serious problems
Other forces behind emergence of software engineering: •
Changes in ratio of hardware to software costs
•
Increasingly important role of maintenance
•
Advances in both hardware & software
•
Increased demands for software
•
Demand for larger & more complex software
•
• • • • • • •
Software Information content andApplications determinacy determine the nature of a
software application. – Content – meaning and form of incoming and outgoing information. – Determinancy refers to constant vs arbitrary ordering timing of messages or event. system software – written to service other programs application software – standalone, solve specific business need engineering/scientific software – number crunching algorithms CAD embedded software – intelligent products product-line software – specific capability for many customers (spreadsheet) WebApps (Web applications) – hypertext to e-commerce AI software – nonnumerical algorithms
Software—New Categories • Ubiquitous computing—wireless networks • Netsourcing—the Web as a computing engine • Open source—”free” source code open to the computing community (a blessing, but also a potential curse!) • Also … (see Chapter 32) – Data mining – Grid computing – Cognitive machines – Software for nanotechnologies
Legacy Software Why must it change? • software must be adapted to meet the needs of new computing environments or technology. • software must be enhanced to implement new business requirements. • software must be extended to make it interoperable with other more modern systems or databases. • software must be re-architected to make it viable within a network environment. – Problem is that it is usually poor quality.
E-Type Systems • E-Type Systems: Software that has been implemented in a realworld computing context and will therefore evolve over time
Software Evolution • The Law of Continuing Change (1974): E-type systems must be continually adapted else they become progressively less satisfactory. • The Law of Increasing Complexity (1974): As an E-type system evolves its complexity increases unless work is done to maintain or reduce it. • The Law of Self Regulation (1974): The E-type system evolution process is selfregulating with distribution of product and process measures close to normal. • The Law of Conservation of Organizational Stability (1980): The average effective global activity rate in an evolving E-type system is invariant over product lifetime. • The Law of Conservation of Familiarity (1980): As an E-type system evolves all associated with it, developers, sales personnel, users, for example, must maintain mastery of its content and behavior to achieve satisfactory evolution. • The Law of Continuing Growth (1980): The functional content of E-type systems must be continually increased to maintain user satisfaction over their lifetime. • The Law of Declining Quality (1996): The quality of E-type systems will appear to be declining unless they are rigorously maintained and adapted to operational environment changes. • The Feedback System Law (1996): E-type evolution processes constitute multilevel, multi-loop, multi-agent feedback systems and must be treated as such to achieve significant improvement over any reasonable base.
Software Myths • Affect managers, customers (and other nontechnical stakeholders) and practitioners • Are believable because they often have elements of truth, but … • Invariably lead to bad decisions, therefore … • Insist on reality as you navigate your way through software engineering
Customer Myths • All you need is a general statement of what I want to start programming. • Requirements change but SW can accommodate change easily since it is flexible.
Practitioner’s Myths • Once we get the program to run we are done. • Until the program is running, I don’t have any idea how good it really is. • The only deliverable is the working program. • SE causes massive and unnecessary documentation that will only slow us down.
Management Myths • The book of standards and procedures for building SW will provide developers with everything they need to know. • If we get behind we can add more people. • We can outsource it to a third party and relax and let them handle it.
?What is a software process model • •
•
A simplified representation of a software process, presented from a specific perspective Examples of process perspectives are – Workflow perspective - sequence of activities – Data-flow perspective - information flow – Role/action perspective - who does what Generic process models – Waterfall – Evolutionary development – Formal transformation – Integration from reusable components
Software Costs • Software costs often dominate 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 costeffective software development
?What are the costs of software engineering • Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs • Costs vary depending on the type of system being developed and the requirements of system attributes such as performance and system reliability • Distribution of costs depends on the development model that is used
The Cost of Change 60100x
1.56x 1x Definition
Development
After release
The Life of Software
Aims of Software Engineering
• • •
To produce quality software At low cost On time
Software Quality • • • •
• •
The software should deliver the required functionality to the user and should be: Maintainable – Software must evolve to meet changing needs Dependable – Software must be reliable Efficient – Software should not make wasteful use of system resources Usable – Software must be usable by the target users Software engineering is concerned with producing quality software
What do we mean by Quality Software? •
No simple answer - depends on who is answering it !
Software Life Cycle • • – – • – – • – – – – –
Software has childhood, adulthood & retirement ... Childhood Software developed & tested. Activities taken together form the software development cycle. Adulthood Often known as: Operational & Maintenance phase Additional functions can be added & refinements made during this phase. Retirement Reasons for retiring a piece of software: Software becomes functionally obsolete. Old software replaced by software which performs same functions better. Hardware constraints Retirement can come to software during its childhood - Up to 25% of large software projects are abandoned before delivery.
Some Problems • Customer has only a vague idea of what is required. • Developer is often willing to proceed with the "vague idea" on the assumption that "we'll fill in the details as we go". • Customer keeps changing the requirements. • Developer responds to these changes, making errors in specification and development. and so it goes ...
Software Applications • Approaches to developing software (even the entire Software Engineering process, people, tools, management and estimation techniques) depend on the application: – System software – Real-time software – Business software – Engineering and scientific software – Embedded software – Personal computer software – Web-based software
Software Development Cycle • • • • • •
Requirements Analysis & Specifications Design User Interface Design Preliminary Design Detailed Design Implementation – Coding – Unit Testing – Integration • Testing • Delivery & Installation.