One
of the major challenges that the software community has to face nowadays is to
develop systems that have a high level of quality at reasonable cost and time
delay. The pressure to be the first in the market has drastically compressed
the development process so that software products are often delivered without
meeting the minimum quality assurance criteria, with vendors often relying on
the patience and skills of customers to discover and report bugs. Though lower
costs and rapid delivery seem to be the main issues in the contemporary
marketing environment, meeting some level of quality assurance is still an
important concern in highly competitive markets, in particular in organizations
concerned with the development of critical systems such as aerospace industry,
healthcare, or nuclear sectors. Mistakes in such organizations can lead to loss
of life, injury, significant damage to the environment, or significant monetary
loss.
In this course we will look at how to build and verify quality in software
systems, with a strong emphasis on the verification aspects. The course will
survey quality standards and processes and discuss their role in the
development of quality software systems. There are several facets to software
quality also referred to as software quality attributes; examples of such
attributes include maintainability, usability, performance, security, and
reliability. Each of these quality attributes is a complex notion in itself,
requiring special verification techniques and tools. The course will
concentrate on the verification and validation of two the most important
quality aspects, specifically correctness and reliability. Lab works will
consist of a mainstream project aimed at documenting, reviewing and testing the
code of an open source software system.
Syllabus
The following syllabus is subject to the time available and may change during
the term. Some of the topics may not be covered. References to the reading
materiel corresponding to each of the lecture sessions are indicated in bracket
(TB for textbook).
Lectures:
Unit
1. Software Quality: Overview and Basics (2h, TB: Chap. 1: 1.1-1.6; Chap. 17:
17.1-17.4; Chap. 18: 18.1-2)
Introduce software quality standards and processes, quality
planning and control, quality attributes and specification. Specifically, the
following issues will be covered:
- Quality Assurance and Standards
- Quality Specification
- Quality Control
Unit
2. Software Inspection (2h, TB: Chapter 3: 3.2)
Overview of different types of software review and focus on
quality review through (formal) inspection. Introduce inspection process,
documents and metrics
Unit
3. Quality Models and Measurements (4h, TB: Chapter 13: 13.4, 13.11)
Presentation of quality management models; Use of quality models
and data for in-process quality management and to guide software testing. Introduction of a number of
techniques to quantify, classify and analyze discovered defects
Unit
4. Software Reliability Models (2h, TB: Chapter 15: 15.1-15.7)
Notions of software reliability and reliability growth. Overview
of software reliability growth models (SGRM). Use of SGRM in tracking software
quality.
Unit
5. Testing: Concepts and Management (1h, TB: Chapter 1: 1.3-1.15)
Presentation of testing dimensions, concepts, terminologies and
processes. Introduction to lifecycle testing and to model-based testing.
Unit
6. Domain Testing (2h, TB: Chapter 6: 6.1-6.7; Chapter 9: 9.4-9.5)
Presentation of selected test models and testing strategies:
domain test model.
Unit
7. Test Generation from Finite-State Machines (2h, TB: Chapter 10: 10.1-10.6)
Presentation of selected test models and testing strategies:
state-based test model.
Notion of test adequacy; test coverage criteria and metrics; the
basis-path test model; control flow testing.
Unit
9. Combinational Testing (2h, TB: Chapter 9: 9.6)
Unit
10. System Integration Testing (1h, TB: Chapter 7: 7.1-7.4; Chapter 8: 8.1)
Presentation of selected test models and testing strategies:
test integration.
Unit
11. Software Reliability Engineering (7h, TB: Chapter 15: 15.1-15.7)
Notions of software reliability and availability; comparison
between hardware and software reliability; Software Reliability modeling and
metrics.
Grading
The final grade obtained from the above marking scheme will be
based on the following percentage-to-grade point conversion: