Automated Software Engineering
A tantárgy neve magyarul / Name of the subject in Hungarian: Automatizált szoftverfejlesztés
Last updated: 2024. január 11.
Before taking the course, the students should be able to
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ó.
This course introduces to the language engineering process and the automation features of intelligent development environments. This includes the design of context-free grammars, the process of parsing, the implementation of automated continuous integration processes, and the implementation and statistic analysis, testing and performance measurement techniques. The aim of the course is to familiarise students with state-of-the-art technologies available in the field and to give them experience in automating language design and development.
1. Introduction. Automation in software development. What software artifacts are involved in the different phases of software development, what are the development steps in each phase, how can they be automated?
2. Continuous integration and automation options. Automated compilation, transformation and testing.
Exercise: build automation (Gradle) and continuous integration (GitHub Actions).
3. Language engineering, Domain-Specific Languages. Modelling, metamodeling, graph-based models in theory and practice.
Exercise: Ecore, example EMF languages.
4. Context-free grammars. Concepts of grammars, language design, grammar analysis.
Exercise: language design with Xtext technology.
5. Editor functions, modern development tools. What are the features of a modern development tool? How can they be extended and customised?
Exercise: Eclipse plugin, Language Server Protocol and CodeMirror.
6. Code generation and model transformations. Code generators and compilers. Code generation technologies. Graph and model transformations.
Exercise: Code generation.
7. Simulation and debugging. Model interpretation, model semantics. Observability and controllability.
Exercise: Running models in simulators.
8. Representing program code with models. Concepts of control flow and data flow.
Exercise: Abstract syntax tree and code analysis.
9. Checking source code with static analysis techniques. Application and extension of pattern-based static verification techniques.
Exercise: Creating a new rule for a static analysis tool (SonarLint).
10. Testing techniques, coverage metrics. Test design and generation methods, automated testing.
Exercise: measuring different coverage metrics (JaCoCo).
11. Maintainable and efficient unit testing. Test patterns and what to avoid (test smell). Implementation of isolation using test doubles (stub, mock).
Exercise: refactoring unit tests, isolation (Mockito).
12. Performance measurement and metrics. Design and execution of performance tests, evaluation of measurement data.
Exercise: measuring performance metrics using Java Microbenchmark Harness (JMH) and VisualVM.
13. Statistical analysis of test and measurement results. Visualisation of measurement data, data analysis. Analysis of quality indicators.
Exercise: analysis of software testing and performance measurement data using Jupyter Notebook.
14. Industry case study, invited speaker.
Lecture and laboratory exercises.
The home assignment can be handed in late in the week after the deadline.
Dr. Semeráth Oszkár assistant professor, BME MIT
Dr. Micskei Zoltán associate professor, BME MIT