IntroductionThis course is partitioned in two parts, also see the course syllabus. Part one is based on the course book and 8 lectures. Part two is a software development project with 8 project meetings/seminars. In the project the students are partitioned in project groups with if possible 4 members (min 3 max 5). Students from different education programs should be mixed and spread in the groups as even as possible.
MotivationSoftware is embedded in many of the every day products that influence our life. To develop industrial quality products puts high demands on the included software since it often adds intelligence to and controls the behaviour the products. To develop a large software system is not the same thing as to develop a small program.
A large software system is usually developed by more than one programmer and successful products are maintained and evolved during a long product life time. The software is sometimes assembled from several "off-the-shelf" parts glued together to a solution with help of application specific code. To create parts reusable by others and in families of products is a strategy to speed development and reduce costs.
GoalThe course is intended to provide knowledge and experience of methods and tools that are used in the industry for specification, verification and design of software. The focus in the course is on deepened understanding of the various factors that affect development of software systems, where the size of a software system is so large that it is developed in groups with several persons involved.
Course OrganizationThe course is divided in the following parts:
- Lectures - Development models/processes in software development contexts with the various advantages and disadvantages, for example, the waterfall and the spiral model. Methods and tools for modeling, incl. practical use of a modeling tool. Selection of architecture, module partitioning and design styles.
- Project follow up, exercise and book discussion seminars
- Project work and reporting - in groups - conducted using a selected development model/process encompassing the entire development cycle for a software system.
The project work is supposed to follow a predefined organization and time plan divided in four phases:
- Phase 1, requirements gathering and analysis
- Phase 2, architecture and design
- Phase 3, program implementation
- Phase 4, test and evaluation
Project DescriptionThe project area that all groups are supposed to work with is called "Smart Commuting". The idea is that each project group should create a system that helps interested persons to reduce their cost for and the environmental load related to their transport needs for commuting and other travels. This by organization of coordinated transports and sharing of cars or similar transport vehicles by advertisement of resources such as cars and planned travels and traveling needs via a client part providing a simple web interface and then handle this in a server with a database that can be used to coordinate resources and travel needs. The user interface should be made very simple so that it also can be accessed from and handled in a mobile phone if desired.
Each group should analyze the problem area and create an interpretation of the problem of their own, including a good architecture and implementation that finally also is tested and evaluated. Considering the short project time the solution can only be a prototype implementation but it should run and show the feasibility and enable discussion of interesting properties of the design.
The design should be partitioned in at least as many components as project members in the group such that each member typically is responsible for one component, or at most two, each component can be divided in subparts if needed. This to enforce that the design can be developed in parallel and that the different parts have well defined task responsibilities and interfaces that simplifies the integration to a complete system that also can be tested first as components and then as a complete system.
The result of each phase must be documented and reported as a partial resul at the end of each phase. These temporary results shall then be refined and aggregated in a final report.
Course BookColling Jim, "Software Engineering for Real-Time Systems", Addison Wesley 2003.
ExaminationThe teaching consists of lectures, exercises and project work meetings/seminars. An exam is given for the course’s lecture part. The students also get credit for the quality of their project work. Grades for the entire course are assigned on the scale 3, 4, 5 or Failed.