Introduction to Software
Engineering
Outline
•
Nature of software projects
•
Engineering approaches
•
Software Process
•
A process step
•
Characteristics of a good process
•
Waterfall model for development
•
Other models
•
Project planning
Software systems
•
Ubiquitous, used in variety of applications
- Business, engineering, scientific
applications
•
Simple to complex, internal to public,
single function to enterprise-wide, one
location to distributed, batch or real time,
informational to mission-critical,…
Challenge in large projects
•
Developing large/complex software application is
very challenging
- Effort intensive
- High cost
- Long development time
- Changing needs for users
- High risk of failure, user acceptance,
performance, maintainability
•
Quite different from one-time programs where
author and user are same!
Successful software system
•
Software development projects have not always
been successful
•
When do we consider a software application
successful?
- Development completed
- It is useful
- It is usable, and
- It is used
•
Cost-effectiveness, maintainability implied
Reasons for failure
•
Schedule Slippage
•
Cost over-runs
•
Does not solve user’s problem
•
Poor quality of software
•
Poor maintainability
Reasons for failure…
•
Ad hoc software development results in such
problems
- No planning of development work (e.g. no
milestones defined)
- Deliverables to user not identified
- Poor understanding of user requirements
- No control or review
- Technical incompetence of developers
- Poor understanding of cost and effort by both
developer and user
Engineering: other disciplines
•
Large projects common and successfully
- Building bridges, dams
- Power plants
- Aircrafts, missiles,…
•
“engineering” a solution:
- To design, develop (build, fabricate) an artifact
that meets specifications efficiently, cost-
effectively and ensuring quality
- Using scientific principles
Engineering
•
Requires well-defined approach: repeatable,
predictable
•
Large projects requires managing the project itself
- Manage people, money (cost), equipment,
schedule
- Scale makes big difference: compare building a
hut, 2-storeyed house, or 50-storeyed apartment
building
•
Quality extremely important: relates to failures,
efficiency, usability,…
- People willing to pay for quality!
Large Projects
•
Involve different types of people
- Large building: architect, civil engineer,
electrical engineer, workers (masons,
carpenters),
•
Continuous supervision for quality
assurance
- On site supervisors (check cement/steel
quality, ensuring proper mix of sand &
cement,…)
Large projects…
•
Many deliverables: architecture plan,
model, structure diagrams, electrical
cabling layouts,…
•
Standards, regulations, conventions need
to be followed
•
Steps, milestones defined and reviews are
carried out; progress is visible
Software projects
•
Software is different from other products
- Cost of production concentrated in
development
- Maintenance consists of making
corrections and enhancing or adding
functions
- Progress in development is difficult to
measure
Apply Engineering Approach
•
Hence planning and control even more important in
software development -> engineering approach
- Attempt to estimate cost/effort
- Plan and schedule work
- Involve users in defining requirements
- Identify stages in development
- Define clear milestones so that progress can be
measured
- Schedule reviews both for control and quality
- Define deliverables
- Plan extensive testing
Job of Software developer is difficult
•
Dealing with users
- Ill-defined requirements
- Concern with ease-of-use and response
time
•
Dealing with technical people
- Concerned with coding, databases, file
structures, etc.
•
Dealing with management
- Concerned with return on their investment
- Cost-benefit analysis
- Schedule
For success in large software
development, it is important to follow an
engineering approach, consisting of a
well-defined process
Software Process
•
Process consists of activities/steps to be
carried out in a particular order.
•
Software process deals with both technical
and management issues
•
Consists of different types of process
•
Process for software development:
produces software as end-result
- multiple such processes may exist
- a project follows a particular process
Process types
•
Process for managing the project
- defines project planning and control
- effort estimations made and schedule
prepared
- resources are provided
- feedback taken for quality assurance
- monitoring done
Process types…
•
Process for change and configuration
management.
- Resolving requests for changes
- Defining versions, their compositions
- Release control
•
Process for managing the above processes
themselves
- Improving the processes based on new
techniques, tools, etc.
- Standardizations and certifications (ISO, CMM)
Multiple processes
•
A large software development company may
have multiple development processes
A. For client-server based conventional
applications (sales processing, payroll)
B. For enterprise-level (ERP) projects based on
packages and customization
C. For web-based e-commerce type
D. For data-warehousing/decision-support type
•
The company may have many projects in each
category
Step in a process
•
Each step has a well-defined objective
•
Requires people with specific skills
•
Takes specific inputs and produces well-
defined outputs
•
Step defines when it may begin (entry
criteria) and when it ends (exit criteria)
•
Uses specific techniques, tools,
guidelines, conventions
Process step…
•
Step must be executed as per project plan that
gives duration, effort, resources, constraints, etc.
•
It must produce information for management so
that corrective actions can be taken
- E.g. adding more resources
•
A steps ends in a review (V&V)
- Verification: check consistency of outputs with
inputs (of the step)
- Validation: check consistency with user needs
Process step
Project control
info
Info for
management
(exit criteria)
Review
V &V
Inputs
Actions to
be carried
out
(entry criteria)
outputs
Characteristics of a Good Process
•
Should be precisely defined – no ambiguity
about what is to be done, when, how, etc.
•
It must be predictable – can be repeated in other
projects with confidence about its outcome
- Predictable with respect to effort, cost:
-> Project A: Web-based library application done
by 3 persons in 4 months
-> another project B (guest house bookings),
similar in complexity should also take about 12
persons in a month.
A Good Process…
•
Predictable for quality, with respect to number
and type of defects, performance
•
Predictable process is said to be “under
statistical control’, where actual values are close
to expected values
•
It supports testing and maintainability
- Maintenance by third party
- Follow standards, provide necessary
documentation
- This characteristic differentiates between
prototype and product
A Good Process…
•
Facilitates early detection of and removal of
defects
- Defects add to project cost
- Late detection/correction is costly
•
It should facilitate monitoring and improvement
- Based on feedback
- Permit use of new tools, technologies
- Permit measurements