- Abdul Majeed
• What is software?
• Definition of Software Engineering
• Software Process
• Generic view of Software Engineering
• Software Process Paradigms
• Software Testing Strategies
• Computer documentation programs and associated
• Software products may be developed for a particular customer or may be developed for a general market
• Software products may be
– Generic developed to be sold to a range of different customers
– Bespoke (custom) - developed for a single customer according to their specification
Software engineering is an engineering discipline which is concerned with all aspects of software production (development and maintenance).
In general sense the product will exist three times of the development duration so the total efforts will be distributed as 30/70 or 40/60 for development and maintenance respectively.
• Software production = development + maintenance (evolution)
• Development costs will be 40%
– 40% analysis and design
– 20% coding
– 40% testing
• Maintenance costs > 60% of all development costs
– 20% corrective
– 30% adaptive
– 50% perfective
• Quicker development is not always preferable
– higher up-front costs may defray downstream costs
– poorly designed/implemented software is a critical cost factor
30%
25%
20%
15%
10%
5%
0%
16%
8%
16%
12%
18%
30%
Activities
What is the difference between software engineering and computer science?
is concerned with
theory
fundamentals
the practicalities of developing
delivering useful software
are currently insufficient to act as a complete underpinning for software engineering, BUT it is a foundation for practical aspects of software engineering
What is the difference between software engineering and system engineering?
• Software engineering is part of System engineering
• System engineering is concerned with all aspects of computer-based systems development including
– hardware,
– software and
– process engineering
• System engineers are involved in system specification, architectural design , integration and deployment
• 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
There are Three Phases of any software process
1. Definition phase which include activities such as
- System/Information engineering
- Software project planning
- Requirement analysis
2 . Development phase which include activities such as
- Design
- Coding
- Testing
3. Maintenance which include activities such as
- Fixing the bugs
- Adaptation
- Enhancement
Different categories of software process paradigms are
- Classical Life Cycle Model/ Linear
Sequential Model/Waterfall Model
- Prototype Model
- Rapid Application Development
Model (RAD)
- Evolutionary Model (Incremental and
Spiral Model)
- Component based model
- Formal Transformation
Requirements
Design
Implementation
Integration
Validation
Deployment
Determine objectives alternatives, constraints
Evaluate alternatives, identify, resolve risks, develop prototypes
Develop, verify next-level product
Plan next phases
• Problem Definition → Requirements
Specification
– determine exactly what the customer and user want
– develop a contract with the customer
– specifies what the software product is to do
• Difficulties
– client asks for wrong product
– client is computer/software illiterate
– specifications are ambiguous, inconsistent, incomplete
• Requirements Specification →
Architecture/Design
– architecture: decompose software into modules with interfaces
– design: develop module specifications
(algorithms, data types)
– maintain a record of design decisions and traceability
– specifies how the software product is to do its tasks
• Difficulties
– miscommunication between module designers
– design may be inconsistent, incomplete, ambiguous
• Architecture is concerned with the selection of architectural elements , their interactions, and the constraints on those elements and their interactions necessary to provide a framework in which to satisfy the requirements and serve as a basis for the design.
• Design is concerned with the modularization and detailed interfaces of the design elements, their algorithms and procedures, and the data types needed to support the architecture and to satisfy the requirements.
• Design → Implementation
– implement modules; verify that they meet their specifications
– combine modules according to the design
– specifies how the software product does its tasks
• Difficulties
– module interaction errors
– order of integration may influence quality and productivity
Testing is categorized into
Unit Testing verifies the coding of the product
Integration Testing verifies the design of the product
Validation Testing verifies the requirement
System Testing verifies system engineering
System testing
Validation testing
Integration testing
Unit testing
Code
Design
Requirements
System engineering
Integration testing includes
Top down using stubs
- Bottom up using drivers
Validation testing includes
Alpha testing
- Beta testing
System testing includes
Recovery testing
- Security testing
- Stress testing
- Performance testing