Introduction To Software Engineering: Session I
Introduction To Software Engineering: Session I
SOFTWARE ENGINEERING
Session I
SE Layers
What is Software Engineering?
• Many Definitions
– “… the establishment and use of sound engineering
principles in order to obtain economically software that is
reliable and works efficiently on real machines.” (Bauer
1969)
– “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.” (Boehm 1981)
– “The application of a systematic, disciplined, quantifiable
approach to the development, operation and maintenance
of software; that is the application of engineering to
software.” (IEEE 1993)
– Designing, building and maintaining large software
systems in a cost-effective way.
Why bother with Software
Engineering?
• Many very successful projects don’t use software engineering,
e.g.
– early Microsoft
– ID Software’s Doom
– Sausage’s Hotdog
BUT they are often not repeatable
• Many more projects fail because they don’t use software
engineering. Failures occur because:
– of the size of the project relative to previous efforts
– key personnel have left
– of failure to understand requirements
– the project delivers, but lacks the required quality
– of the introduction of new technology
– of many, many other reasons
Product and Process
• Both are key aspects in software engineering
• We move from an emphasis on product to
process, and back and forth
– Structured programming - Product
– Structured analysis and design - Process
– Data encapsulation (OO languages) - Product
– Capability Maturity Model/ISO9000 - Process
– Next step?
• We need to be able to deliver quality software
products to our customers with a consistent,
well-managed and cost-effective process
• Product and process are not a dichotomy
The Software Product
• Is not the same as a hardware product
– Software is developed or engineered, it isn’t manufactured
like a personal computer
– Software doesn’t wear out
– Most software is custom-built, rather than being
assembled from existing components
• A software product should
– perform the required function
– be reliable
– be maintainable
– be efficient
– have an appropriate user interface
– have an appropriate lifetime
A good software product?
The Software Product
• Is composed of
– Programs
– Data
– Documentation
• requirements, analysis & design documents, walk-through
minutes, test plan, user manuals, etc.
often referred to as the “software configuration”
• Two main types of product
– Generic - eg. Windows, Macintosh application software
– Bespoke - Systems created for specific application areas
• Most software expenditure is generic
• Most software development effort is bespoke
The Software Process
• The set of activities and associated results which
produce a software product
• The sequence of steps required to develop and
maintain software
• Sets out the technical and management
framework for applying methods, tools and
people to the software task
• Definition:
– The Software Process is a description of the process
which guides software engineers as they work by
identifying their roles and tasks.
Characteristics of a good process
• Understandability
• Visibility
• Supportability
• Acceptability
• Reliability
• Robustness
• Maintainability
• Rapidity
Two questions
• Is there a right process for software
engineers to adopt?
• Will having a good process
guarantee a good product?
When do we need process?
• We always have some process!
• The larger the project, the greater the need
for a formal process
• Complexity of building a system when related
to size is not linear.
Size Effort Errors
Required after
release
Gigatron 5,000 1 25