Course Information:
- Course Name: TDA/DIT 594 - Software Engineering Principles for Complex Systems
- Semester: Fall 2020 (Study Period 2)
- Course Examiner: Greg Gay
- Lecture Hours: Tuesday and Thursday, 13:15 - 15:00
Course Purpose
Real-world software systems are becoming increasingly complex and pervasive. Consider application domains such as enterprise computing (e.g., data-processing/AI systems), business information systems (e.g., web portals), cyber-physical systems (e.g., automotive software, home automation), systems software (e.g., operating system kernels), or mobile software and software ecosystems (e.g., Android apps). All of these domains boast software systems of unprecedented complexity, many of which are long-living and exist in many different variants. Dedicated planning, modeling, design, realization, and advanced analysis are needed to deliver these systems in a safe, robust, and secure manner.
The goal of this course is to present advanced techniques aimed at creating complex systems with many interacting features and variable configurations. We will examine the design, implementation, and verification of complex systems, focusing on managing complexity at different stages of the system development life cycle. We will also examine how the development process must be organized to deliver such systems. This class is particularly focused on how to create systems that can change and evolve over time - systems that can be customized for new customers or new market environments.
Much of this course will focus on software product lines (SPLs) - highly configurable families of systems built around a set of common, modularized features. SPLs are developed from a common set of core assets in a planned way, integrating assets into a shared architecture. By developing large software systems in this way, companies can produce a set of products more economically, since the development effort put into the shared assets does not need to be duplicated. SPLs can also help companies to better address product customization tasks to meet specific needs of individual customers. This allows sustaining a high rate of product innovation, while keeping guaranteed levels of overall system performance and quality.
SPLs are seen in many domains, and are highly challenging to develop as they have technical, process, organization, and business-related aspects. We focus on them, as they are designed to be highly evolvable - designed both to reuse components and for components to be reused. Almost all modern systems are designed for one of these two goals - a web app with a REST API is designed to be reused, while a complex web app constructed using third-party libraries is designed to reuse assets. SPLs are designed to deliver reusable components and to reuse those components. Design, implementation, and verification techniques for SPLs are applicable to all evolvable, reuse-driven systems. We will also examine other forms of complex systems and provide insight into how they are delivered.
Learning Objectives
Knowledge and understanding
- Explain the challenges of engineering complex software systems
- Explain industrial practice and examples of complex software systems engineering
- Explain processes and concepts for engineering complex and variant-rich software systems
- Explain business-, architecture-, process-, and organization-related aspects of engineering complex software systems
Competence and skills
- Model a software system from different perspectives (e.g., using feature models, UML diagrams, architecture description languages)
- Engineer a variant-rich software system (e.g., variant-rich software system, software product line, software ecosystem)
- Analyze and re-engineer a complex software system
- Use and reason about modularization techniques
- Use modern component or service frameworks
Judgement and approach
- Analyze existing software systems and discuss potentials for improvement or re-engineering
- Reason about characteristics software modularity concepts
- Recognize in which situations which principles for handling of complex software systems are appropriate
- Read and analyze scientific literature
|
|
This content is made available in the interest of sharing educational material with any who might find it useful. This page is updated periodically, and may not be in synch with the course itself. For current course students, the latest content, assignment submission, and discussion forums are available on Canvas.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Note: All documents were originally written in Google Docs and converted to PDF and PPTX/DOCX. The PPTX/DOCX versions may be accessed by replacing the end of the link (.pdf -> .pptx, .docx). There may be some formatting errors in slides that did not exist in the original document. Access to the original Google Docs version is available on request (greg@greggay.com).
Documents
Lectures
- Lecture 01 - Complexity and Software Product Lines (video)
Some slides provided by Thorsten Berger
Additional Reading: Feature-Oriented Product Lines - Ch 1; Variability mechanisms in software ecosystems
- Lecture 02a - Domain and Application Engineering (video)
Additional Reading: Feature-Oriented Product Lines - Ch 2; Software Product Lines in Action - Ch 1
- Lecture 02b - RoboCode Introduction (See video for Lecture 02a)
Slides and presentation by Mazen Mohamad
- Lecture 03 - Domain Engineering: Feature Modelling (video)
Slides and presentation by Sam Jobara
- Lecture 04 - Models for Automotive Embedded Systems Development (Video)
Slides and presentation by Henrik Lönn (Volvo AB)
- Lecture 5 - Feature Model Analysis (Video)
Model Analysis Activity
Additional Reading: Feature-Oriented Product Lines - Ch 2, 10; SAT and MAX-SAT for the Lay-Researcher; Automated analysis of feature models 20 years later: A literature review (Section 5); Feature Models, Grammars, and Propositional Formulas
- Lecture 6a - Feature Model and Code Analysis, Lecture 6b - Variability Implementation (Video)
Additional Reading (Lecture 6a): See Lecture 5
Additional Reading (Lecture 6b): Feature-Oriented Product Lines - Ch 3-5; Mastering Software Variability with FeatureIDE - Ch 9
- Lecture 7 - Design Patterns for Variable and Evolving Systems (Video)
Additional Reading: Head-First Design Patterns - Ch 1, 3 - 4, 7 - 8; Feature-Oriented Product Lines - Ch 4.2
- Lecture 8 - Modularity (Video)
Slides and presentation by Sam Jobara
Additional Reading: Feature-Oriented Product Lines - Ch 3, 4; More references cited in slides
- Lecture 9 - Modularity 2 (Video)
Slides and presentation by Sam Jobara
Additional Reading: Feature-Oriented Product Lines - Ch 6; More references cited in slides
- Lecture 10 - Product Line Engineering: Agile Practices and Industry Automation (Video)
Slides and presentation by Sam Jobara
Additional Reading: References cited in slides
- Lecture 11 - System-Level Testing (Video)
Testing Activity
Additional Reading: Software Testing & Analysis - Ch 10, 11, 21, 22
- Lecture 12 - Testing of Feature Interactions (Video)
Category-Partition Method Activity
Combinatorial Interaction Testing Activity
Additional Reading: Software Testing & Analysis - Ch 10, 11, 21, 22; Feature-Oriented Product Lines - Ch 9
- Lecture 13 - Automated Test Case Generation (Video)
Additional Reading: Phil McMinn. Search-based Software Test Data Generation: a Survey; Alireza Salahirad, Hussein Almulla, and Gregory Gay. Choosing the Fitness Function for the Job: Automated Generation of Test Suites that Detect Real Faults
- Lecture 14 - Course Summary and Review (Video)
Parts of slides and presentation by Sam Jobara
Assignments
|