Software Engineering

A tantárgy neve magyarul / Name of the subject in Hungarian: Szoftvertechnológia

Last updated: 2023. június 23.

Budapest University of Technology and Economics
Faculty of Electrical Engineering and Informatics
Course ID Semester Assessment Credit Tantárgyfélév
VIMIAB04 3 3/0/1/v 5  
3. Course coordinator and department Dr. Micskei Zoltán Imre,
4. Instructors

Dr. Zoltán Micskei, associate professor, MIT

Dr. László Gönczy, associate professor, MIT
5. Required knowledge

Before taking the course, the students should be able to

- (K2) explain the basic mechanism of imperative programming languages,

- (K3) develop a non-trivial program based on a high-level specification,

- (K3) solve modeling problems using simple modeling languages (e.g. final state machines). 

6. Pre-requisites
[ HA
EgyenCsoportTagja("INFO - 2022 - MINTATANTERV HALLGATÓI")


( TárgyTeljesítve("BMEVIIIAA03") ÉS
(TárgyTeljesítve_Képzésen("BMEVIIIAB00") VAGY
TargyFelvetelekSzama("BMEVIIIAB00") >= 1 ))


TárgyTeljesítve("BMEVIIIAA03") ]


NEM ( TárgyTeljesítve("BMEVIIIAB01") ) ÉS

(Kepzes("5N-A8") VAGY

A fenti forma a Neptun sajátja, ezen technikai okokból nem változtattunk.

A kötelező előtanulmányi rend az adott szak honlapján és képzési programjában található.

7. 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.

8. 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 modeling and UML
2. 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.
3. UML behavioral modeling I.: use case, activity diagram, sequence diagram.
4. 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.
7. Fundamentals of version control. Centralized and decentralized version control. Typical workflows and patterns (GitHub Flow, Mainline...).

Software development practices
8. Requirement management: Importance of requirements. Eliciting, analyzing, prioritizing requirements. Types of requirements. Traceability. Handling changes in requirements.
9. Design and architecture: Fundamental concepts (abstraction, modularization). Elements of software architecture. Design patterns. Documenting designs.
10. Managing source code: properties of good source code. Coding guidelines and standards. Code review. Using static analysis tools.
11. Testing I.: concepts and goals of testing. Testing process. Testing levels. Risk-based testing.
12. Testing II.: test design techniques (specification and structure-based techniques).

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. Using a UML modelling tool with basic diagrams
2. Practicing UML-based object-oriented design
3. Version control systesm (git), basic workflows (GitHub Flow)
4. Build systems. Continuous integration.
5. Checking code style. Code review. Using static analysis tools
6. Test design and implementation. Measuring code coverage.


9. Method of instruction Lecture and laboratory exercise
10. Assessment
  • Laboratory practices have to be attended in accordance with the Code of Studies. Laboratory practices use diagnostic assessments. To obtain signature, 2/3 of assessments have to be passed.
  • Moreover, to obtain the signature the students must successfully complete a home assignment.
  • Written exam. The exam has two parts. Both parts have to be completed successfully (minimum 40%) to pass the exam.
11. Recaps

The laboratory practices cannot be repeated, retaken or completed delayed.

The home assignment can be handed in late in the week after the deadline.

12. Consultations Pre-arranged with the instructor.
13. References, textbooks and resources
  • Slides and materials on the course website
  • Ian Sommerville: Software Engineering, 10th edition, Pearson, 2015
  • Martin Fowler: UML Distilled, Addison-Wesley, 2003
  • Robert C. Martin: Clean Code: A Handbook of Agile Software Craftsmanship, Pearson, 2008
  • Dorothy Graham et al.: Foundations of Software Testing, Cengage, 2019
  • Titus Winters et al.: Software Engineering at Google, O'Reilly, 2020
14. Required learning hours and assignment
Contact hours56
Study during the semester10+12
Preparation for midterm exams 0
Preparation of homework32
Study of written material0
Preparation for exam40
15. Syllabus prepared by

Dr. Balla Katalin, associate professor, IIT

Dr. Goldschmidt Balázs, associate professor, IIT

Dr. Micskei Zoltán, associate professor, MIT

Dr. Simon Balázs, associate professor, IIT