1072 Software Engineering
Content
lectures:
Core topics:
- Basic concepts
- What is Software Engineering
- Phases in the development of software
- Software process models (e.g., waterfall, incremental, agile)
- Software engineering tools and environments
- Configuration management and version control
- Automated builds and continuous integration
- Requirements analysis and design modeling tools (CASE tools)
- Requirements engineering
- Requirements elicitation
- Requirements documentation
- Non-functional requirements
- Evaluation and use of requirements specifications
- Modeling
- Classic modeling techniques (e.g., entity-relationship diagrams, data flow diagrams, finite state machines)
- The Unified Modeling Language
- Software design
- Software design principles (abstraction, modularity, separation of concerns, information hiding, coupling and cohesion, reuse)
- Classical design methods (functional decomposition, data flow design)
- Object-oriented analysis and design (Rational Unified Process)
- Design patterns
- Software construction
- Coding practices (defensive coding practices, secure coding practices, use of exception handling mechanisms, refactoring)
- Coding standards
- Integration strategies
- Software testing
- Testing and the software life cycle
- Inspections and walkthroughs
- Unit, integration, validation, and system testing
- Black-box and white-box testing techniques
- Regression testing and test automation
- Test-driven development
- Software maintenance and evolution
- Major causes of maintenance problems
- Characteristics of maintainable software
- Reverse engineering and refactoring
- Software reuse
Elective topics:
- Process improvement models
- CMMI (Capability Maturity Model Integration) for Development
- PSP (Personal Software Process)
- TSP (Team Software Process)
- Agile and lean software development
- Scrum
- Extreme Programming
- Kanban
- Balancing agility and discipline
lab practice:
Team-work on almost real projects. Projects can be proposed by students themselves and approved by instructors or can be defined by teacher in co-operation with real customers. Group sizes are restricted to four and students are given the opportunity to decide who they should work with. Each group is asked to nominate a Project Manager and identify specific roles which they feel will be important in managing the group. Students are encouraged to work on the project outside the officially scheduled hours. There are several progress meetings (milestones) with the tutor before the final presentation takes place.
Objectives and competences
The aim of the course is to provide an overview of activities in the software development life cycle that must be preformed regardless of the process model used. In order to master these activities, the students combine theoretical knowledge with practical work on a quasi-real software project.
The competences the students gain are:
- the ability to define, understand and solve creative professional challenges in computer and information science;
- the ability to apply acquired knowledge in independent work for solving technical and scientific problems in computer and information science; the ability to upgrade acquired knowledge.
- the ability of teamwork within the professional environment; management of a small professional team;
- the ability for administrative management of processes related to research, industry, education and other fields;
- the ability to understand and apply computer and information science knowledge to other technical and relevant fields (economics, organisational science, etc);
- practical knowledge and skills of computer hardware, software and information technology necessary for successful professional work in computer and information science;
- the ability to tackle demanding developmental, engineering, and organisational tasks as well as moderately demanding research tasks in their fields of study.