This course covers software engineering and design, focusing on practical skills and project management. It includes topics such as software construction, object-oriented design, interaction design, and project management. Key texts include "Code Complete," "UML Distilled," and "Interaction Design." The course emphasizes practical application over theoretical discussion, with supervision tailored to group projects and individual dissertations.
The London Ambulance Service project illustrates the challenges of software development, including system failures, poor management, and the need for thorough testing. The project aimed to automate call handling but faced issues such as system instability, errors, and delays. The failure highlighted the importance of proper planning, testing, and user involvement.
The "Software Crisis" refers to the historical challenges in software development, where projects often failed due to complexity and lack of proper methodologies. The term "software engineering" was coined in 1968, emphasizing the need for systematic approaches to project planning, documentation, and testing. Software differs from machinery in its complexity and the need for flexibility, making it challenging to manage and test.
The course emphasizes requirements, analysis, design, construction, and project management. Topics include decomposition and modularity, coding style, testing, and efficiency. It also covers formal methods, configuration management, and testing strategies. The course includes practical examples and case studies, such as the London Ambulance Service project, to illustrate key concepts.
The course also covers object-oriented design, using UML for modeling and design. It discusses interaction design, user-centered approaches, and the importance of usability. Topics include heuristic evaluation, cognitive models, and empirical studies of usability. The course emphasizes iterative design, prototyping, and user feedback to improve software quality.
The course concludes with a focus on design challenges, including human errors, critical systems, and reliability. It discusses modes of automation, critical software, and the importance of safety and security in software systems. The course aims to equip students with the skills and knowledge to develop reliable, user-friendly, and efficient software systems.This course covers software engineering and design, focusing on practical skills and project management. It includes topics such as software construction, object-oriented design, interaction design, and project management. Key texts include "Code Complete," "UML Distilled," and "Interaction Design." The course emphasizes practical application over theoretical discussion, with supervision tailored to group projects and individual dissertations.
The London Ambulance Service project illustrates the challenges of software development, including system failures, poor management, and the need for thorough testing. The project aimed to automate call handling but faced issues such as system instability, errors, and delays. The failure highlighted the importance of proper planning, testing, and user involvement.
The "Software Crisis" refers to the historical challenges in software development, where projects often failed due to complexity and lack of proper methodologies. The term "software engineering" was coined in 1968, emphasizing the need for systematic approaches to project planning, documentation, and testing. Software differs from machinery in its complexity and the need for flexibility, making it challenging to manage and test.
The course emphasizes requirements, analysis, design, construction, and project management. Topics include decomposition and modularity, coding style, testing, and efficiency. It also covers formal methods, configuration management, and testing strategies. The course includes practical examples and case studies, such as the London Ambulance Service project, to illustrate key concepts.
The course also covers object-oriented design, using UML for modeling and design. It discusses interaction design, user-centered approaches, and the importance of usability. Topics include heuristic evaluation, cognitive models, and empirical studies of usability. The course emphasizes iterative design, prototyping, and user feedback to improve software quality.
The course concludes with a focus on design challenges, including human errors, critical systems, and reliability. It discusses modes of automation, critical software, and the importance of safety and security in software systems. The course aims to equip students with the skills and knowledge to develop reliable, user-friendly, and efficient software systems.