Complete Curriculum Software Test and An...

Foundations of Software Engineeering

Lecture

"I conclude that there are two ways of constructing a software design:
One way is to make it so simple that there are obviously no deficiencies,
and the other is to make it so complicated that there are no obvious deficiencies."
[C. A. R. Hoare]


Contents
1. Introduction
2. Phases of the Software Development Process
3. Models of Software Life Cycle
4. Software Quality
5. Coping with Complexity
6. Requirements Phase
7. Specification: Languages and Methods
8. Object-oriented Analysis
9. Design Phase
10. Re-use
11. Implementation Phase
12. Software Metrics
13. V&V Techniques
14. Maintenance Phase
15. Software Project Management
Literature

Extended Contents


1. Introduction
definition "software engineering", historical background, software crisis
examples: Mars Climate Observer, Ariane 5 Mission, Berlin fire brigade, Therac-25
comparison with classical engineering sciences, software-specific risks

2. Phases of the Software Development Process
overview of software life cycle, specification and design faults
costs: fault detection and removal, development and testing
maintenance types and cost, 4Ps: personnel, process, product, project

3. Models of Software Life Cycle
sequential models: build-and-fix model, waterfall model, V-model
incremental models: rapid prototyping, spiral model
object-oriented paradigm: O-O vs. structured paradigm, fountain model

4. Software Quality
overview and classification: quality properties
definitions: dependability, types of software incorrectness
fault-handling measures, random vs. systematic faults
correctness, dependability attributes, verification vs. validation
human faults: types, sources, principles, thinking traps
catalogue of typical programming faults

5. Coping with Complexity
strategies: abstraction, divide & conquer
historical evolution, styles
cohesion and coupling: classes, cost, examples
data encapsulation, information hiding, object oriented paradigm: inheritance, polymorphism
data encapsulation from the perspectives of development and maintenance

6. Requirements Phase
requirements engineering, classes of requirements
challenges of problem analysis
requirement documents, feasibility study, requirement analysis
system models, viewpoints, data flow diagrams, examples

7. Specification: Languages and Methods
informal, semi-formal and formal methods
Gane & Sarsen's 9 steps, entity relationship diagrams with examples
finite (extended) state machines, state charts, examples: safe, lift
transformational vs. reactive software systems
Petri nets, time Petri nets, state classes and reachability graph
LOTOS, temporal logic, Z, XTG (eXtended Timed Graphs)
examples: lift, alternating bit protocol, Therac-25, railway crossing

8. Object-oriented Analysis
UML, historical overview, use case diagrams, scenarios
class diagrams, CRC cards, OOA-CASE tools, example: lift controller

9. Design Phase
classical data- resp. action-oriented design techniques, examples: pressure vessel, word counter
object-oriented design techniques: class diagrams, interaction diagrams, sequence diagrams, collaboration diagrams, example: lift controller

10. Re-use
overview: definitions, types, motivation, difficulties
history: Raytheon Missile Systems Division, Toshiba, NASA, GTE Data Services, Ariane 5
types: library, application framework, design pattern, software architecture
maintenance, portability, interoperability, COM, CORBA, off-the-shelf software

11. Implementation Phase
overview: programming languages, clarity, defensive programming
real time properties, hardware properties, modularisation rules
comments, layout, programming standards

12. Software Metrics
motivation, lines of code, Halstead's software science, MacCabe's cyclomatic complexity, Henry & Kafura's information flow metric, Emersons's cohesion metric

13. V&V Techniques
inspection, review, walkthrough, static analysis, testing
testing in the software life cycle: module test, integration test, system test, acceptance test
functional testing, structural testing
structural testing strategies: statement, branch, path coverage, data flow oriented testing
incremental testing
evaluation of software reliability, models
formal methods: overview, tools, restrictions, partial and total correctness
axiomatic proofs (Dijkstra, Floyd, Hoare), example: search in sorted list
model checking, computational tree logic (CTL)
example: mutual exclusion, cache consistency protocol

14. Maintenance Phase
cost, models, goals, importance, personnel
fault report, correction, regression testing, reverse engineering
maintenance management, maintenance of object-oriented Software

15. Software Project Management
overview: CMM (capability maturity model), Key Process Areas, ISO9000, SPICE
programming team organisation: democratic team, chief programming team
planning, estimation of project duration and cost: size, function points, COCOMO


Literature
top