2. Introduction to Computing 2Chapter # 7
Software Engineering
Software engineering (SE) is an intellectual activity
and thus human-intensive
Software is built to meet a certain functional goal
and satisfy certain qualities
Software processes also must meet certain qualities
Software qualities are sometimes referred to as
“ilities”
3. Introduction to Computing 3Chapter # 7
SE: A Unique Brand of Engineering
SE is a unique brand of engineering
Software is malleable
Software construction is human-intensive
Software is intangible and generally invisible
Software problems are unprecedentedly complex
Software directly depends upon the hardware
It is at the top of the system engineering
Software solutions require unusual rigor
Software “state” means behaviors can depend on history
Software has discontinuous operational nature
4. Introduction to Computing 4Chapter # 7
What does a Software Engineer Do?
Software engineers should
adopt a systematic and organised approach to all aspects
of software development
use appropriate tools and techniques depending on
the problem to be solved
the development constraints and
the resources available
Understand and communicate processes for improved
software development within their organization
Be effective team members and/or leaders
Can be very technical or more managerial depending on
organizational need
5. Introduction to Computing 5Chapter # 7
Software Product
Different from traditional types of products
intangible
difficult to describe and evaluate
malleable
human intensive
involves only trivial “manufacturing” process
6. Introduction to Computing 6Chapter # 7
Software Process
Prescribes all major activities
Uses resources, within a set of constraints, to produce
intermediate and final products
May be composed of sub-processes
Each activity has entry and exit criteria
Activities are organized in a sequence
Has a set of guiding principles to explain goals
Constraints may apply to activity, resource or product
7. Introduction to Computing 7Chapter # 7
Software Development Stages
1. Requirements Analysis & Specification
2. Design
a. Conceptual/System/Architectural Design
b. Detailed/Program Design
3. Implementation/Coding
4. Testing
a. Unit & Integration Testing
b. System Testing/Validation
5. System Delivery/Deployment
6. Maintenance
8. Introduction to Computing 8Chapter # 7
Software Lifecycle Model
A software lifecycle model is a standardized format for
planning organizing, and running a new development project
Hundreds of different kinds of models are known and used
Many are minor variations on just a small number of basic
models
9. Introduction to Computing 9Chapter # 7
Software Lifecycle Model
Few software lifecycle models are
Waterfall Model
Iterative & Incremental Model
Prototyping Model
Spiral Model
Rapid application development
Agile development
Code and fix
10. Introduction to Computing 10Chapter # 7
Software Lifecycle Model (Waterfall)
Requirement
Design
Implementation
Verification
Maintenance
12. Introduction to Computing 12Chapter # 7
Classification of S/W Qualities "ilities"
Internal vs. External
External
visible to the user
Internal
developers concern
Product vs. Process
Our goal is to develop software products
The process is how we do it
Internal qualities affect external qualities
Process quality affects product quality
13. Introduction to Computing 13Chapter # 7
Internal vs. External Qualities
External qualities are visible to the user
reliability, usability, efficiency (maybe), robustness, scalability
Internal qualities are the concern of developers
they help developers achieve external qualities
verifiability, maintainability, extensibility, evolve ability, adaptability,
portability, testability, reusability
Internal qualities affect external qualities
14. Introduction to Computing 14Chapter # 7
Product vs. Process Qualities
Product qualities concern the developed artifacts
maintainability, performance, understandability
Process qualities deal with the development activity
products are developed through process
maintainability, productivity, predictability
Process quality affects product quality
15. Introduction to Computing 15Chapter # 7
Correctness
Software is correct if it satisfies the functional requirements
specifications
assuming that specification exists!
established w.r.t. the requirements/specification
If specifications are formal, since programs are formal
objects, correctness can be defined formally
It can be proven as a theorem or disproved by counterexamples
(testing)
Ideal quality
The limit of correctness
It is an absolute (yes/no) quality
there is no concept of “degree of correctness”
there is no concept of severity of deviation
What if specifications are wrong?
(e.g., they derive from incorrect requirements or errors in domain knowledge)
16. Introduction to Computing 16Chapter # 7
Reliability
It is informally, user can rely on it
It can be defined mathematically as “probability of
absence of failures for a certain time period”
If specs are correct, all correct software is reliable,
but not vice-versa
It is a statistical property
17. Introduction to Computing 17Chapter # 7
Robustness
Software behaves “reasonably” even in unforeseen
circumstances (e.g., incorrect input, hardware
failure)
“Reasonable” behavior in unforeseen circumstances
A specified requirement is an issue of correctness
whereas an unspecified requirement is an issue of
robustness
18. Introduction to Computing 18Chapter # 7
Performance
Efficient use of resources
memory, processing time, communication
Can be verified
complexity analysis
measurement, analysis, and simulation
performance evaluation (on a model, via simulation)
Performance can affect scalability
a solution that works on a small local network may not work on a
large intranet
19. Introduction to Computing 19Chapter # 7
Usability
Ability of end-users to easily use software
Expected users find the system easy to use
Other term: user-friendliness
Affected mostly by user interface
e.g., visual vs. textual
20. Introduction to Computing 20Chapter # 7
Verifiability
How easy it is to verify properties
mostly an internal quality
can be external as well (e.g., security critical application)
It is performed by formal analysis or testing
21. Introduction to Computing 21Chapter # 7
Maintainability
Maintainability: ease of maintenance
Maintenance: changes after release
Maintenance costs exceed 60% of total cost of software
Can be decomposed as
Reparability
ability to correct defects in reasonable time
Evolvability
ability to adapt software to environment changes and to improve it in
reasonable time
Three main categories of maintenance
corrective: removing remaining errors (20%)
adaptive: adjusting to environment changes (20%)
perfective: quality improvements (>50%)
22. Introduction to Computing 22Chapter # 7
Evolvability
Ability to add or modify functionality
Addresses adaptive and perfective maintenance
Problem: evolution of implementation is too easy
Evolution should start at requirements or design
23. Introduction to Computing 23Chapter # 7
Reusability
Ability to construct new software from existing pieces
Existing product (or components) used (with minor modifications) to
build another product
Also applies to process
Reuse of standard parts measure of maturity of the field
Occurs at all levels
from people to process, from requirements to code
24. Introduction to Computing 24Chapter # 7
Portability
Software can run on different hw platforms or sw
environments
Remains relevant as new platforms and
environments are introduced (e.g. digital assistants)
Relevant when downloading software in a
heterogeneous network environment
25. Introduction to Computing 25Chapter # 7
Understandability
Ability of developers to easily understand produced
artifacts
It is subjective
Ease of understanding software
Program modification requires program
understanding
26. Introduction to Computing 26Chapter # 7
Interoperability
Ability of a system to coexist and cooperate with
other systems
e.g., word processor and spreadsheet
Ability to easily integrate into larger systems
Common techniques include APIs, distributed
programming interfaces (CORBA, DCOM), plug-in
protocols, etc
27. Introduction to Computing 27Chapter # 7
Scalability
Ability of a software system to grow in size while
maintaining its properties and qualities
Assumes maintainability and evolvability
Goal of component-based development
28. Introduction to Computing 28Chapter # 7
Typical Process Qualities
Productivity
denotes its efficiency and performance
Timeliness
ability to deliver a product on time
Visibility
all of its steps and current status are documented clearly
29. Introduction to Computing 29Chapter # 7
Timeliness: Issues
Often the development process does not follow the
evolution of user requirements
A mismatch occurs between user requirements and
status of the product
30. Introduction to Computing 30Chapter # 7
Application-Specific Qualities
E.g., information systems
Data integrity
Security
Data availability
Transaction performance
31. Introduction to Computing 31Chapter # 7
Quality Measurement
Many qualities are subjective
No standard metrics defined for most qualities