Below you will find pages that utilize the taxonomy term “Software Quality”
Below you will find pages that utilize the taxonomy term “Software Quality”
In embedded systems, the quality of code is crucial for long term reliability and efficiency. The Clean Code principles, as outlined in Robert C. Martin’s influential book Clean Code, are widely used in general software development and can significantly enhance embedded C development. This article explores how these principles can be applied to embedded C, drawing on extensive experience to improve code readability, reduce technical debt, and lower costs over the system’s lifetime. Whether you’re a developer or a manager, this guide offers practical insights into integrating Clean Code into your embedded systems projects.
Manchmal erreicht ein Software-Projekt einen Punkt, an dem die Weiterentwicklung fast zum Stillstand kommt. Features werden nur noch mühsam implementiert, und die Kosten für Änderungen explodieren. Genau an diesem Punkt stand unser Kunde, als er uns, Urs Fässler von iQiliO und Peter Gfader von Beyond Agility, mit einem Architektur-Review beauftragte. Ziel war es, den Zustand der Software objektiv zu bewerten und eine Empfehlung abzugeben: Soll die bestehende Software weiterentwickelt oder komplett neu geschrieben werden?
As software touches every part of life, people expect higher standards for quality, security, and reliability. The Cyber Resilience Act (CRA) reflects this shift - a necessary response to past industry mistakes. Rather than resisting, we can use this regulation to improve our practices. Here’s why regulation is necessary, how we reached this point, and how we can use it to create better software.
The CRA mandates stringent cybersecurity requirements for digital products, ranging from vulnerability management and regular updates to security-by-design principles. Manufacturers are tasked with ensuring that their products remain secure throughout their lifecycle, providing ongoing updates, and managing vulnerabilities proactively. The agile development approach, characterized by iterative cycles, cross-functional collaboration, and continuous integration, is ideally suited to meet these requirements. Agile practices enable teams to quickly adapt to new regulatory demands, implement security measures efficiently, and deliver high-quality, secure software. This article outlines the key aspects of agile development that align with CRA compliance and demonstrates how organizations can leverage agility to meet their obligations under the CRA. For more information on how to transition your team to agile practices and ensure compliance with the CRA, feel free to reach out to me at urs.fassler@iqilio.ch.
In diesem Artikel teile ich die Erfahrungen bei der Implementierung einer CI/Build-Pipeline für mehrere C++-Applikationen und Yocto Linux Projekte. Die Firma stand vor Herausforderungen wie manuelle, nicht reproduzierbare Prozesse und ungleich verteiltes Wissen, was zu verspäteten oder fehlerhaften Auslieferungen führte. Durch einen iterativen und inkrementellen Ansatz und gezielte Unterstützung der Entwickler konnten die Prozesse nachhaltig verbessert und der Stress reduziert werden.
In the ever-evolving landscape of software development, maintaining high-quality and reliable software is paramount. To achieve this, rigorous testing practices and robust development methodologies are essential. This article delves into various testing strategies and tools specific to C++, emphasizing the importance of automated regression tests, test coverage, compiler warnings, code formatting, static code analysis, sanitizers, and continuous integration (CI). By adopting these practices, teams can ensure their software remains reliable, maintainable, and bug-free. We offer comprehensive support to help teams implement these tools and practices effectively, enabling them to achieve optimal results.
Embedded Software Meetup Zürich ist zurück!
Nach längerer Pause des "Embedded GNU/Linux Developer Meetup" führen wir es als "Embedded Software Meetup" wieder durch. Es geht um:
Embedded Software Entwicklung
Embedded Linux
Zephyr
Qualität
Software Craftsmanship
und vieles mehr. Im Fokus steht der Austausch zwischen Entwicklern und anderen gleichgesinnten.
Den Anfang macht Urs Fässler mit seinem Erfahrungsbericht zu moderner Applikationsentwicklung für Embedded Linux.
Clean Code und Software Craftsmanship helfen, Embedded Systeme sicher zu machen (safety und security). Diese Botschaft hat uns Simon Künzli im aktuellen Kurs Security in Embedded Systems an der ZHAW School of Engineering vermittelt, und ich stimme absolut zu.
Es sind Methoden, Prinzipen und Praktiken welche ich seit bereits 10 Jahren anwende und sehr zu schätzen gelernt habe. Vielleicht tönt TDD, BDD, CI/CD, Review und was es alles gibt abschreckend. Persönlich gebe ich es nicht mehr her. Es gibt so viel Sicherheit das man das richtige entwickelt und die Qualität stimmt. Auch reduziert es die Bugs - dadurch ist der initial etwas höhere Aufwand nach kurzer Zeit amortisiert.
Very happy to announce that I founded my own company:
The go to place when you need - Quality Software - Embedded Linux Software and Systems - Open Source Specialists - Software Architecture - Shorter delivery and feedback cycles and any combination of it.
Um in der heutigen schnelllebigen Technologiewelt Embedded Systeme Nachhaltig zu gestalten ist es unerlässlich, dass Software fortlaufend aktualisiert wird. Es ist nicht mehr zeitgemäss, Embedded Software einmalig zu entwickeln und dann über Jahre unverändert zu lassen. Verschiedene Faktoren treiben diese Notwendigkeit an:
Neue Kundenanforderungen und Geschäftsstrategien: Unternehmen müssen flexibel auf Marktveränderungen reagieren können.
Sicherheitsupdates: Um die Sicherheit zu gewährleisten, sind regelmässige Updates unverzichtbar.
Regulatorische Anforderungen: Gesetze und Vorschriften wie der Cyber Resilience Act (CRA) oder die Radio Equipment Directive (RED) erfordern Anpassungen.
Hardware-Änderungen: Die Verfügbarkeit von Bauteilen kann sich ändern, was Softwareanpassungen erforderlich macht.
Änderungen an externen Diensten: Updates sind nötig, wenn sich Schnittstellen oder die Verfügbarkeit von Diensten ändert.
Heute starte ich in die Selbstständigkeit. Mein Angebot umfasst:
Agile Praktiken für Entwickler: Coaching und Mitarbeit zur Implementierung effektiver agiler Methoden (Extreme programming) in Entwicklungsprojekten, um die Produktivität und Qualität zu steigern.
Individuelle Softwareentwicklung: Entwicklung massgeschneiderter Qualitäts-Software für nachhaltig erfolgreiche Produkte.
Architekturberatung: Beratungsdienste zur Gestaltung und Optimierung von Softwarearchitekturen, um eine langfristige Skalierbarkeit, Flexibilität und Wartbarkeit sicherzustellen.
Embedded GNU/Linux-Anwendungs- und Systementwicklung: Expertise in der Entwicklung von eingebetteten Systemen und Anwendungen unter Verwendung von GNU/Linux.
Unterstützung bei der Einhaltung des Cyber Resilience Acts: Massgeschneiderte Beratung und Lösungen, um Kunden bei der Einhaltung des CRA zu unterstützen.
Es ist Zeit für ein neues Kapitel: Heute starte ich in die Selbstständigkeit.
Meine Karriere begann mit einer Elektronikerlehre, gefolgt von Jahren in der Berufswelt, die mich zur Software-Entwicklung führten. Ich studierte Systeminformatik an der ZHAW, erwarb meinen Master in Computer Science an der ETH, absolvierte ein Praktikum am CERN und verfasste meine Masterarbeit an der University of California in Irvine. Währenddessen entdeckte ich Freie Software/Open Source mit den Werten, welche ich bis heute teile.
Not adding a default label to the switch-case statement improves the C++ code quality. The normal use case for a switch-case is over an enum like in the example below.
enum class Op {
Addition,
Subtraction,
};
double execute(Op op, double left, double right) {
switch (op) {
case Op::Addition:
return left + right;
case Op::Subtraction:
return left - right;
}
return {};
}
All the enum options have to be considered in the switch-case (if this is not the case then probably something else is a bit smelly in the code).
The compiler is telling us whenever we missed an enum options.
In gcc it is the -Wswitch flag, this comes for free with -Wall.
The benefits are:
Aufgrund mangelnder Zeit im Projekt benötigten wir wesentlich mehr Zeit für die Implementierung der Features.
Dieses paradoxe Phänomen tritt häufig in der Softwareentwicklung auf. Entwickler stehen unter Zeitdruck und sehen sich gezwungen, schnelle Lösungen zu implementieren, anstatt sich Zeit zu nehmen, diese zu planen und so zu implementieren, dass die Software nachhaltig erweiterbar ist. Dies führt zu schlechter Codequalität und unzureichender Testabdeckung, die später mehr Zeit und Ressourcen erfordern, um sie zu beheben. Der Versuch, Zeit zu sparen, indem man an der Qualität spart, endet in einem viel längeren Entwicklungszyklus.
Cucumber-cpp bietet die Infrastruktur um Behaviour Driven Development (BDD) mit C++ oder C zu machen. In diesem Beitrag zeige ich wie du deinen Akzeptanztest mit cucumber-cpp implementierst.
Umsetzen wollen wir ein Lauflicht. Einerseits ist es eine genug kleine Aufgabe, anderseits sind Lauflichter einfach cool. So ein Lauflicht hat zwar nicht wirklich viel Verhalten (Behaviour), aber es geht hauptsächlich um die Infrastruktur. Natürlich kann man so ein Lauflicht auch noch beliebig kompliziert machen.