TU Wien:Advanced Software Engineering VO (Bernhart Strobl Mordinyi)/Prüfung 2021-03-10
Exam: see Prüfung 2021-03-10.pdf
Describe the main ideas behind the DevOps movement![Bearbeiten | Quelltext bearbeiten]
DevOps is meant to merge development and operations of software companies. It is used to improve the collaboration between these roles and raise awareness for the other side, instead of just handing the completed software over to the operations department.
What is meant by Technical Debts? Name three examples of technical debts and their possible causes![Bearbeiten | Quelltext bearbeiten]
Technical debts are created when a developer opts for a faster solution instead of a more sustainable, readable, maintainable one.
- no documentation of the architecture
- possible cause: the customer didn't want to pay for it, so no documentation has been created
- bad modularisation or architecture
- possible cause: the development team didn't have enough skills or experience when they created the software
- a lot of TODOs in the code base
- possible cause: the developers were under time pressure and decided to implement a "quick & dirty" solution and refactor it later
Explain the n+1 queries problem! How can it be avoided?[Bearbeiten | Quelltext bearbeiten]
The n+1 problem occurs when an ORM loads lists of entities with lazy loading. When an association needs to be loaded for each entity, this creates a lot of database queries (n+1). It can be avoided by pre-loading the required association for all entities of the list (eager loading). ORMs provide this as a built-in feature.
What are the differences between localization and internationalization? Explain typical focus points![Bearbeiten | Quelltext bearbeiten]
Internationalization (i18n) are activites which prepare for launching the software in different locales in the future. This includes
- database collations for correct sorting
- a translation system for texts
Localization (l10n) describes the process of preparing for an additional locale. This contains translating texts in the new language, configuring default language, time zone etc.
Compare and contrast components and services after Fowler[Bearbeiten | Quelltext bearbeiten]
A component is a part of a software which is out of control of the current developer. A service is a component which is located and accessed remotely, e.g. through remote procedure calls (RPC) or a REST API. In contrast to that, a component can be located on the same location as the rest of the software (locally).
What are Software Product Lines? Name their characteristics![Bearbeiten | Quelltext bearbeiten]
Software product lines are a set of systems which share specific features but are tailored for specific market segments. It can be different products which are created from the same base code / features.
What is the key concept of microservices? Name and explain two typical challenges when developing microservices.[Bearbeiten | Quelltext bearbeiten]
Microservices are an architecture pattern where the software is split into small, individually developed and deployable services. The services should be structured along the business function and can communicate with each other, e.g. over a message bus.
- using many different technologies ("best tool for the job" philosophy) can be hard to maintain for a company.
- auto-discovery of services during run time, to communicate with them
When to use which form of transaction management?[Bearbeiten | Quelltext bearbeiten]
- Local transaction models are used on a database level (auto-commit)
- Programmatic transaction models should be used when the developer wants to specify the start and end of a transaction (no auto-commit)
- Container managed transactions (CMT) are used when the application container takes care of transactions
Compare and contrast logging and auditing. Explain two characteristics of good logging output.[Bearbeiten | Quelltext bearbeiten]
Logging refers to technical log output which is stored for weeks or months and used for monitoring or to help finding bugs or performance bottlenecks.
Auditing on the other hand is used when there are legal requirements to store data, often for 10 or more years. Auditing can be e.g. necessary in the banking sector where money is handled, since there is strict regulation.
Good logging output should
- contain the right amount of data to be useful
- use consistent log levels (info/debug/warning/error) in order to filter for important and less important entries
Explain the idea behind Continuous Integration! What’s the difference between Continuous Integration, Continuous Delivery and Continuous Deployment?[Bearbeiten | Quelltext bearbeiten]
- Continuous Integration (CI) is the process of automating the build process and run tests whenever there is a new commit made to the codebase. It should ensure that bugs are recognized early and not just when releasing the software to customers.
- Continuous Delivery additionally deploys each commit to the baseline of the repository to the staging server and runs acceptance tests there
- Continuous Deployment goes even further and deploys commits to the code baseline to the production server + run smoke tests there
What are cross cutting concerns? Why should cross cutting concerns be separated from business logic?[Bearbeiten | Quelltext bearbeiten]
Cross-cutting concerns are code parts which are reused a lot within the software (e.g. logging, transactions). They should be separated from business logic (e.g. using aspect-oriented programming) in order to prevent code duplication and to keep the business code shorter and more readable.
Discuss the difference between simple and easy. Discuss also the difference between complex and complicated. Give for each quadrant two examples of systems that matches the respective criteria![Bearbeiten | Quelltext bearbeiten]
"simple" is an objective description by referring to cause-and-effect relationships and low complexity, whereas "easy" is rather subjective and means that it it easy to understand and oversee for most humans.
"complex" is the opposite of "simple", meaning high objective complexity. "complicated" is the opposite of "easy", meaning it is hard to understand, e.g. because it is a problem with many choice options.
Explain the differences between Build Time Modularization and Runtime Modularization and name one popular Java technology for one of them![Bearbeiten | Quelltext bearbeiten]
Build time modularization contains of a single bundle which runs on a single runtime (e.g. classes in a Java project), compiled to 1 .jar file)
Runtime modularization: multiple bundles which can even run on different runtimes (JVMs). Example: two separate Java applications communicating via RPCs.
State and explain three major benefits of Collective Intelligence Systems in software engineering projects from an internal perspective![Bearbeiten | Quelltext bearbeiten]
Internal benefits of CIS:
- coordinating the development, e.g. through code review tools
- awareness about the status, e.g. JIRA as a project management software, where everyone can see the status of tasks
- awareness about changes, e.g. using GitHub or GitLab to track code changes and their test runs (CI/CD)
What is SCRUM Poker, how does it work and what are possible outcomes of a round.[Bearbeiten | Quelltext bearbeiten]
Scrum planning poker is a way to estimate user stories in a team. A user story is presented, then open questions are clarified and then the team uses "poker cards" for estimating complexity. For this, often fibonacci numbers are used to take the uncertainty of more complex features into account.
- An estimation in story points when the team agreed on a number
- A tie, when the estimations differ a lot. In this case, reasons for the different estimations should be discussed before doing a second round
- The user story is too large and should be split into multiple stories or subtasks because it cannot be estimated well, due to its complexity or scope
What is Dependency Management? What problems can be solved with Dependency Management? Name two Dependency Management Tools![Bearbeiten | Quelltext bearbeiten]
Dependency management is used to manage external components and libraries which are used in the software. It solves the problem that the required dependencies can automatically be installed with the current version, so everyone has a consistens installation state. Also, by using a dependency management tool, it is not necessary to commit external libraries into the code repository, so it doesn't get bloated. Examples for tools are Maven and Gradle.
Name two constituents and two concerns of Hyperscale Computing![Bearbeiten | Quelltext bearbeiten]
Constituents of hyperscale computing:
- computing power which scales to the required performance, e.g. CPU cores added dynamically
- networking: allocating enough networking resources (bandwidth, load balancers)
- compliance: where is the data stored, who has access to it, is there a service level agreement etc.
- vendor lock-in: are you "locked" attthe cloud provider because of specific technologies or can you easily change to another provider?