The chapter outlines the course "Software Engineering & Design" from the CST IB / IIG / CS Diploma program, authored by Alan Blackwell. The course emphasizes practical aspects over theoretical ones, focusing on the challenges and complexities of software development.
- **Introduction**: Discusses the Software Crisis, exemplified by the London Ambulance Service (LAS) project, which aimed to automate manual operations in the 1980s but faced significant failures.
- **The Software Crisis**: Explains why software development has lagged behind hardware advancements, emphasizing the need for perfection and the joy of creating useful tools.
- **Decomposition and Modularity**: Focuses on top-down decomposition and stepwise refinement, as well as bottom-up design issues.
- **Modularity**: Discusses the importance of routines and separate source files in C.
- **Comments and Coding Style**: Emphasizes the use of comments to explain code and the importance of consistent coding style.
- **Type Safety and Defensive Programming**: Highlights the need for type refinement and defensive programming techniques.
- **Efficiency**: Stresses the importance of choosing the right algorithms to avoid common mistakes.
- **Formal Methods**: Briefly mentions the historical use of mathematics to prove program correctness.
- **Configuration Management**: Covers version control, change control, variants, and releases.
- **Testing**: Emphasizes the importance of testing and regression testing.
- **Tools**: Discusses the use of tools for tasks that exceed human capabilities.
- **Introduction**: Explains why structured design is necessary and why object-oriented design is preferred.
- **Elements of OO Design**: Describes the components of object-oriented design, including encapsulation, loose coupling, and client-server contracts.
- **Design Exemplars**: Provides examples of complete designs from project experiences.
- **UML/OOD Resources**: Lists additional resources for further study.
- **Control Panels**: Discusses the evolution of user interfaces from early computers to modern designs.
- **Heuristic Evaluation**: Introduces a usability evaluation technique based on general interaction principles.
- **User-Centred Design**: Emphasizes the importance of user needs and tasks in design.
- **Cognitive Models**: Explains models of user cognition and the black box view of users.
- **Keystroke Level Model (KLM)**: Provides a framework for measuring user performance.
- **GOMS**: Extends KLM to provide quantitative performance estimates.
- **User Models**: Discusses the need to understand why users behave the way they do.
- **Empirical Studies**: Highlights the importance of empirical research in usability.
- **Prototyping**: Focuses on the use of prototypes in design.
- **Participatory Design**: Encourages user involvement in the design process.
- **New Trends**: Discusses emerging trends in user interfaces, such as information appliances and ubiquitous computing.
- **Human Error Probabilities**: Discusses the likelihood of human errors and the reliability of skills over knowledgeThe chapter outlines the course "Software Engineering & Design" from the CST IB / IIG / CS Diploma program, authored by Alan Blackwell. The course emphasizes practical aspects over theoretical ones, focusing on the challenges and complexities of software development.
- **Introduction**: Discusses the Software Crisis, exemplified by the London Ambulance Service (LAS) project, which aimed to automate manual operations in the 1980s but faced significant failures.
- **The Software Crisis**: Explains why software development has lagged behind hardware advancements, emphasizing the need for perfection and the joy of creating useful tools.
- **Decomposition and Modularity**: Focuses on top-down decomposition and stepwise refinement, as well as bottom-up design issues.
- **Modularity**: Discusses the importance of routines and separate source files in C.
- **Comments and Coding Style**: Emphasizes the use of comments to explain code and the importance of consistent coding style.
- **Type Safety and Defensive Programming**: Highlights the need for type refinement and defensive programming techniques.
- **Efficiency**: Stresses the importance of choosing the right algorithms to avoid common mistakes.
- **Formal Methods**: Briefly mentions the historical use of mathematics to prove program correctness.
- **Configuration Management**: Covers version control, change control, variants, and releases.
- **Testing**: Emphasizes the importance of testing and regression testing.
- **Tools**: Discusses the use of tools for tasks that exceed human capabilities.
- **Introduction**: Explains why structured design is necessary and why object-oriented design is preferred.
- **Elements of OO Design**: Describes the components of object-oriented design, including encapsulation, loose coupling, and client-server contracts.
- **Design Exemplars**: Provides examples of complete designs from project experiences.
- **UML/OOD Resources**: Lists additional resources for further study.
- **Control Panels**: Discusses the evolution of user interfaces from early computers to modern designs.
- **Heuristic Evaluation**: Introduces a usability evaluation technique based on general interaction principles.
- **User-Centred Design**: Emphasizes the importance of user needs and tasks in design.
- **Cognitive Models**: Explains models of user cognition and the black box view of users.
- **Keystroke Level Model (KLM)**: Provides a framework for measuring user performance.
- **GOMS**: Extends KLM to provide quantitative performance estimates.
- **User Models**: Discusses the need to understand why users behave the way they do.
- **Empirical Studies**: Highlights the importance of empirical research in usability.
- **Prototyping**: Focuses on the use of prototypes in design.
- **Participatory Design**: Encourages user involvement in the design process.
- **New Trends**: Discusses emerging trends in user interfaces, such as information appliances and ubiquitous computing.
- **Human Error Probabilities**: Discusses the likelihood of human errors and the reliability of skills over knowledge