In professional software engineering, the development and process steps prior to software implementation are essential. Terms like software analysis and software design, or high-level software design and detailed software design from development processes (for example, the V-Model XT or the industry-specific V-Model Automotive), represent precisely this.
It has now become widely known that the VHIT (from brain to terminal) method is no longer compatible with the current and ever-increasing complexity of embedded and real-time software and systems. The following briefly describes important activities in embedded software analysis, design, and engineering that you will perform during software development.
Requirements engineering is at the start of the project.
As a software requirements analyst, your initial task for software development is to capture the requirements. Within the framework of requirements engineering (requirements development, requirements analysis), you gather the requirements of the stakeholders.
They distinguish between functional and non-functional requirements (including software quality characteristics) and formulate high-quality requirements. As part of requirements management, they manage and maintain these requirements using appropriate requirements management tools.
The software architect defines the software architecture.
In the role of software architect, you possess extensive experience in software development and have a practical understanding of software architecture. Ideally, you develop a non-monolithic software architecture that optimally fulfills the identified software architecture requirements and influencing factors, considering aspects such as reusability, interchangeability, extensibility, and portability.
Software architecture describes the overall structure and the interactive behavior (communication) based upon it. Software components, software layers, software subsystems, interfaces and their functions (operations/methods), and optionally the most important modules/classes represent typical architectural building blocks.
You use architectural guidelines, architectural principles, architectural patterns, and software architecture examples for architecture development. As a software architect, you make important decisions. For example, you determine whether to develop a synchronous architecture, an asynchronous architecture, or a hybrid of both.
You decide whether it is a real-time system or "only" an embedded system. You determine the middleware components used, such as fieldbus and communication stacks, flash file systems, and graphics libraries. These software components are available as free software, open-source software, and commercial software.
For the runtime architecture, you select a suitable real-time/embedded operating system based on selection criteria. For multicore and multiprocessor systems, you distribute the software across different compute nodes and, if necessary, implement virtualization and a hypervisor. The software architect creates the embedded software architecture documentation.

Image: Embedded software architecture example – software layer representation
The software designer refines the software architecture.
As a software designer, you refine the software architecture so that the software developer can later implement it in the specified programming language, C or C++. This involves developing concrete modules/classes with all the necessary data and functions, as well as their connections and relationships. You master your tasks and challenges using proven design patterns for embedded software. In algorithm design, you describe the precise behavior, for example, using state machines. You adapt the software architecture to your specific hardware and its peripherals via drivers.
The software designer creates the embedded software design documentation.
During the following embedded programming, strict adherence to the architectural and design specifications must be continuously monitored.
Software development with UML (Unified Modeling Language)
Regardless of whether you program software procedurally, structurally, object-based, or object-oriented, UML (Unified Modeling Language) is a very helpful notation for analysis, design, and software documentation. UML specifies various diagrams: Use Case Diagram, Package Diagram, Component Diagram, Deployment Diagram, Class Diagram, Object Diagram, Composite Structure Diagram, Activity Diagram, State Machine Diagram, Sequence Diagram, Communication Diagram, Timing Diagram, Interaction Overview Diagram, and Profile Diagram.
Parts of these diagrams are also excellent for requirements analysis and software development. Using UML enables model-driven software development. With the right UML CASE tool support, you can generate program code in C and/or C++ from the UML design models. Depending on the tool, automatic code generation supports the creation of software for simulation on the development host or target, as well as the direct generation of production code.
In medium-sized and smaller companies and businesses, as a software developer you represent all of the above roles or a part of them in one person: requirements analyst, software architect and software designer.
Do you want to bring yourself up to date with the latest technology?
Then find out more here to our training courses and individual coaching sessions on the topic Embedded Software: Analysis, Design and Architecture.

