Software Engineering
VIMIAB04 | Computer Engineering BSc | Semester: 3 | Credit: 5
Objectives, learning outcomes and obtained knowledge
The objective of the course is to introduce the students to the design, development, and maintenance of large-scale software systems. The course presents the techniques and methods to produce the software as a product. In addition to the presentation of the technical aspects, people and project management techniques and methods are also introduced.
Students satisfying the course requirements will be able to understand and manage the problems related to the development of large-scale software systems and they will be able to participate in such development processes. The knowledge acquired in this course will be the background for the Software Laboratory course.
After successful completion, students will be able to:
- (K2) explain the typical steps and methodologies of software development,
- (K3) use version control and software development tools on a basic level,
- (K3) design simpler tests based on requirements or code structure,
- (K3) create simpler structural and behavioral UML models.

Zoltán Micskei
habilitated associate professor
Course coordinator
Lecturers

Nada Akel
PhD student

Gábor Huszerl
senior lecturer

Damaris Jepkurui Kangogo
PhD student

Zoltán Micskei
habilitated associate professor

Richárd Szabó
PhD student
Synopsis
1. Introduction: About software and software development. Does software engineering differ from other engineering fields? What is in software engineering other than programming? Case studies of complex software systems and software projects. What is needed for successful software development?
Software development practices
2. Fundamentals of version control. Centralized and decentralized version control. Typical workflows and patterns (GitHub Flow, Mainline...).
3. Requirement management: Importance of requirements. Eliciting, analyzing, prioritizing requirements. Types of requirements. Traceability. Handling changes in requirements.
4. Design and architecture: Fundamental concepts (abstraction, modularization). Elements of software architecture. Design patterns. Documenting designs.
5. Managing source code: properties of good source code. Coding guidelines and standards. Code review. Using static analysis tools.
6. Testing I.: concepts and goals of testing. Testing process. Testing levels. Risk-based testing.
7. Testing II.: test design techniques (specification and structure-based techniques).
Software modeling and UML
8. Modeling software: Why model? What can we model? The Unified Modeling Language (UML) modeling language family. Modeling structure: class diagram, modeling instances, package diagram, component diagram.
9. UML behavioral modeling I.: use case, activity diagram, sequence diagram.
10. UML behavioral modeling II.: state machine diagram, connecting different viewpoints.
Software development processes
5. Steps and artefacts of the software lifecycle. Popular lifecycle models (waterfall, V-model, incremental)
6. Classic and agile software development. Agile and Lean practices. Examples: Scrum, XP.
Project and people management
13. Managing software projects. Estimation, project planning and tracking. Agile project management practices and tools.
14. Measurement and analysis in software development. Process definitions and metrics.
Laboratory exercises:
1. Software development workflows, handling complex software
2. Version control systems (git), basic workflows (GitHub Flow). Build systems. Continuous integration.
3. Checking code style. Code review. Using static analysis tools
4. Test design and implementation. Measuring code coverage.
5. Using a UML modelling tool with basic diagrams
6. Practicing UML-based object-oriented design