Parasoft-Logo Suche

Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »

Parasoft-Blog

So bewältigen Sie Ihren Rückstand an statischen Analysewarnungen und technischen Schulden

By William McMullin • May 19, 2023 • 8 min gelesen
May 19, 2023 | 8 min gelesen
By William McMullin
Text links: So bewältigen Sie Ihren Rückstand an statischen Analysewarnungen und technischen Schulden. Rechts ist eine Nahaufnahme einer leuchtend orangefarbenen Lupe zu sehen, die auf einen Käfer mit einem X auf der Rückseite gerichtet ist.

Wenn Sie Schwierigkeiten haben, mit Ihrem Rückstand an statischen Analysewarnungen und technischen Schulden umzugehen, lesen Sie diesen Beitrag, um zu erfahren, wie Sie dieses Problem lösen können.

Nachdem statische Analysewerkzeuge in den täglichen Arbeitsablauf des Entwicklungsteams integriert wurden, wird in der nächsten Phase daran gearbeitet, den Rückstand an Warnungen und technischen Schulden in einem Projekt zu verringern.

Bei einem Produkt, das gewartet oder entwickelt wird, ist wahrscheinlich ein erheblicher Rückstand zu bewältigen. Bei einem Greenfield-Projekt gibt es weniger Rückstand. Die Empfehlungen bleiben jedoch für jede Reifestufe gleich.

Der beste Ausgangspunkt für die Bewältigung eines Rückstaus an Warnungen besteht darin, die Ergebnisse entsprechend dem gewünschten Ergebnis zu priorisieren und zu filtern. Am Beispiel der Sicherheit ist es sinnvoll, den Rückstand in Bezug auf Sicherheitswarnungen nach Kritizität zu priorisieren.

Dies ist eine Fortsetzung des Ansatzes, der bei der erstmaligen Einführung der statischen Analyse in einem Projekt verwendet wurde. Der Fokus liegt nun auf den nächsten, überschaubaren Warnungen, die das Team analysieren kann. Parasoft C/C++test geht dabei auf verschiedene Weise vor, wie wir später noch genauer erläutern werden.

Was sind technische Schulden und warum ist sie wichtig?

Technische Schulden sind die Kosten, die durch die Verzögerung wesentlicher Arbeiten oder die Inanspruchnahme von Abkürzungen während der Softwareentwicklung entstehen. Bei dieser Form der Verschuldung fallen, wie bei Finanzschulden, mit der Zeit Zinsen an und die Behebung kann teuer werden, wenn sie nicht gelöst wird.

Beispiele für technische Schulden sind:

  • Code, dessen Wartung oder Erweiterung schwierig ist
  • Veraltete Abhängigkeiten
  • Sicherheitslücken

Leider sind technische Schulden ein häufiges Problem, da Softwareentwicklungsteams häufig der schnellen Bereitstellung von Funktionen Vorrang vor der Erstellung einer robusten Codebasis geben.

Der Abbau technischer Schulden ist aus mehreren Gründen von entscheidender Bedeutung. Es kann:

  • Beeinträchtigen Sie die Fähigkeit von Softwareteams, qualitativ hochwertige Produkte zu liefern.
  • Verringern Sie die Produktivität.
  • Erhöhen Sie die Entwicklungszeit.
  • Geringere Kundenzufriedenheit.
  • Sicherheitsrisiken darstellen.

Die Lösung technischer Schulden ist für die Entwicklung nachhaltiger und wartbarer Softwareprodukte, die sich an sich ändernde Geschäfts- und Kundenanforderungen anpassen können, von entscheidender Bedeutung.

Arten von technischen Schulden

Wenn es um technische Schulden geht, gibt es zwei große Kategorien.

  1. Vorsätzlich
  2. Unbeabsichtigt

Absichtliche technische Schulden entstehen, wenn ein Team bewusst Abstriche macht, um eine Frist einzuhalten oder ein bestimmtes Ziel zu erreichen. Diese Art technischer Schulden entsteht häufig aus geschäftlichen Gründen, beispielsweise aufgrund des Marktdrucks, und wird als notwendiges Übel angesehen. Der Nachteil besteht darin, dass später zusätzliche Arbeiten erforderlich sein können, beispielsweise eine Umgestaltung, die kostspielig sein kann.

Andererseits entstehen unbeabsichtigte technische Schulden, wenn sich ein Team der Auswirkungen der Entscheidungen, die es während der Entwicklung trifft, nicht bewusst ist. Dies kann auf mangelndes Verständnis oder Fachwissen in einem bestimmten Bereich, mangelnde Ressourcen oder Zeit oder einfach auf mangelnde Disziplin oder Genauigkeit zurückzuführen sein.

Diese Art technischer Schulden ist oft heimtückischer, da sie schwer zu erkennen und zu diagnostizieren ist und später unvorhergesehene Folgen haben kann. Unabhängig von der Art der technischen Schulden ist es wichtig, sich ihrer Existenz bewusst zu sein und Maßnahmen zu ihrer effektiven Bewältigung zu ergreifen, um die langfristige Gesundheit und den Erfolg eines Softwareprojekts sicherzustellen.

Beispiele für technische Schulden

Unbeabsichtigte technische Schulden können sich im Laufe der Zeit ansammeln, wenn sie nicht behoben werden, was letztendlich die Wartung und Weiterentwicklung der Software erschwert. Einige Beispiele für unbeabsichtigte technische Schulden sind:

  • Designschulden entsteht, wenn Entwurfsentscheidungen getroffen werden, um kurzfristige Ziele oder Lieferziele zu erreichen, ohne die langfristigen Auswirkungen dieser Entscheidungen zu berücksichtigen.
  • Code-Schulden entstehen durch schlechte Codierungspraktiken und Abkürzungen zur Einhaltung von Fristen, was zu Problemen wie dupliziertem oder übermäßig komplexem Code führt, der schwer zu warten oder zu testen ist.
  • Schulden testen tritt auf, wenn ordnungsgemäße Tests nicht durchgeführt werden oder unzureichend sind, was zu Herausforderungen bei der Erkennung und Behebung von Fehlern und der Möglichkeit der Veröffentlichung von Fehlern in der Produktion führt.

Absichtlich werden technische Schulden mit der Einsicht aufgenommen, dass sie irgendwann in der Zukunft zurückgezahlt werden müssen. Einige Beispiele für absichtliche technische Schulden sind:

  • Geplante technische Schulden sind bewusst. Dabei geht es darum, Abkürzungen zu nehmen und dabei zu wissen, dass sie in Zukunft behoben werden, beispielsweise die Verwendung einer Bibliothek eines Drittanbieters, die durch eine benutzerdefinierte Lösung ersetzt wird.
  • Geschäftsschulden werden vom Entwicklungsteam absichtlich aufgenommen, um einen Geschäftsbedarf zu erfüllen, beispielsweise um ein Produkt mit weniger Funktionen als geplant auf den Markt zu bringen, um der Marktnachfrage gerecht zu werden, mit dem Wissen, dass es später verbessert werden muss.
  • Strategische Schulden entstehen, wenn ein Team die Arbeit an neuen Funktionen oder Systemen absichtlich verschiebt, um anderen Bereichen Priorität einzuräumen, obwohl es weiß, dass dies in Zukunft teurer sein wird.

Die beste Vorgehensweise im Umgang mit technischen Schulden besteht darin, die Codequalität proaktiv zu managen. So können Softwareentwickler das Risiko einer übermäßigen Anhäufung technischer Schulden reduzieren und sicherstellen, dass ihre Software langfristig stabil und nachhaltig bleibt. Dies gelingt durch die Priorisierung hochwertiger Code- und Designpraktiken sowie durch den regelmäßigen Abbau technischer Schulden. Das bedeutet Investitionen in Codequalität, Tests und Dokumentation sowie die Gewährleistung, dass die Software dauerhaft wartbar, skalierbar und sicher bleibt.

Bedeutung der statischen Analyse für die Verwaltung technischer Schulden

Die statische Analyse ist eine automatisierte Methode zur Überprüfung des Quellcodes auf Qualitäts- und Compliance-Probleme. Dies kann nützlich sein, um Sicherheitsprobleme, Sicherheitslücken und Zuverlässigkeitsbedenken zu identifizieren oder Bereiche zu identifizieren, in denen Code in Zukunft möglicherweise schwieriger zu warten oder zu erweitern ist.

Durch die frühzeitige Erkennung technischer Schulden können Teams Maßnahmen ergreifen, um diese zu beheben, bevor sie zu einem größeren Problem werden. Dies kann dazu beitragen, die Codequalität zu verbessern, die Entwicklungszeit zu verkürzen, die Arbeitskosten zu senken und den Gesamtwert von Softwareprodukten zu steigern.

Dashboards für High-Level-Analysen

Die zentralen Berichts- und Analyse-Dashboards von Parasoft ermöglichen Entwicklern und Managern, den aktuellen Projektstatus aus verschiedenen Perspektiven zu betrachten und bei Bedarf detailliertere Informationen abzurufen, um Warnmeldungen für weitere Untersuchungen zu erstellen. Das folgende Dashboard zeigt beispielsweise die aktuelle Konformität eines Projekts mit dem CERT-C-Sicherheitscodierungsstandard.

Screenshot, der ein Berichts- und Analyse-Dashboard mit einer Zusammenfassung der CERT C-Sicherheitskonformität zeigt.

Ein Beispiel für ein Webportal-Dashboard. In diesem Fall eine Zusammenfassung der CERT C-Konformität.

Mithilfe dieses Webportals können Benutzer tiefer in die Analyse eintauchen, bei Bedarf bis auf Datei- und Codeebene, und Warnungen vollständig im Webportal oder in einer IDE untersuchen. Warnungen können in dieser Phase priorisiert, Entwicklern zugewiesen, unterdrückt oder als falsch positiv markiert werden. Sehen Sie sich das folgende Beispiel aus dem Parasoft-Explorer an.

Ein Screenshot, der den Parasoft-Verletzungs-Explorer zeigt

Der Parasoft-Verletzungs-Explorer

Verwalten von Verstößen gegen Codierungsstandards

In den meisten Fällen werden bei der Analyse des Quellcodes zur Einhaltung von Codierungsstandards Verstöße als statische Analysewarnungen gemeldet. Bei einem großen Projekt wird es zunächst viele Warnungen geben. Ihre schnelle und effiziente Verwaltung ist von entscheidender Bedeutung. Der Verstoß-Explorer von Parasoft ist das wichtigste Tool zum Navigieren, Bewerten, Priorisieren und Zuweisen gemeldeter Fehler zur Behebung.

Erweist sich ein Verstoß gegen die statische Analyseregel als gültig, aber vertretbar, als harmlos oder nicht anwendbar, kann ein Entwickler den Fehler unterdrücken und eine Abweichung dokumentieren. Diese Abweichungen werden auf jeder Ebene des Projekts an das Dashboard und die Compliance-Dokumentation gemeldet.

Um die Einhaltung von Codierungsstandards für bestehende Projekte zu ermöglichen, ist es wichtig, dass sich die Teams zunächst auf die Regeln konzentrieren, die als verbindlich gelten. Compliance basiert häufig auf der Erfüllung der zwingenden Anforderungen bei Verstößen gegen empfohlene Regeln, sofern diese angemessen dokumentiert sind. Standards ermöglichen die Neukategorisierung von Regeln, wenn sie nicht verbindlich sind, und erlauben Verstöße, wenn sie gerechtfertigt und dokumentiert sind. Ohne dies wird der Versuch, jeden Verstoß zu korrigieren, unmöglich.

Parasoft nutzt künstliche Intelligenz (KI) und maschinelles Lernen (ML) für seine Berichts- und Analysefunktionen , um sowohl aus früheren Interaktionen mit der Codebasis als auch aus früheren statischen Analyseergebnissen zu lernen und so die Relevanz der neuen Erkenntnisse vorherzusagen und sie zu priorisieren.

Screenshot, der den Assistenten für maschinelles Lernen mit einem „Gut“-Bericht für ein festes statisches Analyseergebnis zeigt.

Maschinelles Lernen zur Priorisierung statischer Analyseergebnisse.

Entwicklungsmanager und Führungskräfte sparen zudem wertvolle Arbeitsstunden durch eine intuitive Benutzeroberfläche, mit der sie Verstöße untersuchen und bei Bedarf automatisch Berichte für die Zertifizierung erstellen können. Ein Beispiel für einen MISRA- C-Abweichungsbericht ist unten dargestellt.

Screenshot, der den Parasoft MISRA C-Abweichungsbericht zeigt

Ein Beispiel für einen Parasoft MISRA C-Abweichungsbericht

Verwalten des Rückstands von Fehler- und Sicherheitswarnungen

Für Teams, die statische Analysen einsetzen, ist es wichtig zu verstehen, dass nicht alle Warnungen behoben oder analysiert werden müssen. Da nicht alle Warnungen gleichwertig sind, ist der Schweregrad der beste Indikator dafür, wie viel Aufwand in die Untersuchung und Behebung einer Warnung investiert werden sollte. Bei der Abarbeitung des Warnungs-Backlogs verschieben Teams die Prioritäten für die Behebung von Warnungen mit jedem Schritt ein Stück weiter.

Parasofts Jtest und C/C++test ermöglichen es Benutzern, Warnungen innerhalb der IDE mithilfe von Konfigurationen zu priorisieren und zu filtern. Beispielsweise können sie Schweregrad und Kategorie verwenden, um eine für die Analyse geeignete Gruppe von Warnungen zu erstellen. Ein Beispiel für eine neue Benutzerkonfiguration ist unten dargestellt.

Ein Screenshot, der benutzerdefinierte Testkonfigurationseinstellungen in der IDE zeigt.

Benutzerdefinierte Testkonfigurationseinstellungen innerhalb der IDE

Mit dieser Konfiguration können die Warnungen in der IDE gefiltert werden.

Screenshot mit DTP-Ergebnis, aufgelistet nach Beschreibung, Schweregrad, Risiko/Auswirkung, Priorität und Fälligkeitsdatum.

Konfigurationen können in der Ansicht DTP-Ergebnisse in der IDE ausgewählt werden.

Der beste Ansatz, um einen großen Rückstand an Warnungen zu bewältigen, besteht darin, die Priorität schrittweise zu verschieben und die nächsthöhere Priorität und Kategorie anzugehen. Softwareteams erreichen irgendwann aufgrund von Zeit und Budget einen Grenzwert. Sie sollten jedoch das Gefühl haben, trotz des verbleibenden Rückstands an Warnungen deutliche Verbesserungen bei Qualität und Sicherheit erzielt zu haben.

Best Practices zur Vermeidung technischer Schulden

Um technische Schulden zu vermeiden, ist ein proaktiver Ansatz erforderlich , der das gesamte Softwareentwicklungsteam einbezieht. Hier sind einige bewährte Methoden, die dabei helfen können.

  • Priorisieren und planen. Entwickeln Sie einen klaren Plan und priorisieren Sie Aufgaben basierend auf Geschäftswert und Risiko. Dies kann dazu beitragen, Abkürzungen zu vermeiden, um unrealistische Fristen einzuhalten.
  • Codeüberprüfungen. Führen Sie Codeüberprüfungen durch, um die Codequalität sicherzustellen und potenzielle Probleme frühzeitig im Entwicklungsprozess zu erkennen.
  • Automatisieren Sie Tests. Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, automatisierte Tests um Probleme frühzeitig zu erkennen und das Risiko der Entstehung neuer Probleme zu verringern.
  • Kontinuierliche Integration und Bereitstellung. Implementieren Sie kontinuierliche Integration und Bereitstellung, um sicherzustellen, dass Codeänderungen regelmäßig integriert und getestet werden, wodurch das Risiko von Integrationsproblemen verringert wird.
  • Verfolgen Sie technische Schulden. Verfolgen Sie technische Schulden und priorisieren Sie deren Tilgung im Rahmen regelmäßiger Entwicklungszyklen.
  • Wissen teilen. Fördern Sie eine Kultur des Wissensaustauschs, um sicherzustellen, dass das Team über die neuesten Updates und Best Practices auf dem Laufenden ist.

Durch die Befolgung dieser Best Practices können Softwareentwicklungsteams dazu beitragen, technische Schulden zu vermeiden und sicherzustellen, dass sie sichere, zuverlässige und wartbare Softwareprodukte entwickeln.

Zusammenfassung

In einem großen Projekt gibt es anfangs viele Warnungen. Deren schnelle und effiziente Bearbeitung ist entscheidend. Teams, die statische Analysen einsetzen, müssen verstehen, dass es unnötig ist, alle Warnungen zu beheben oder zu analysieren. Wählen Sie stattdessen ein Tool, mit dem Sie gemeldete Fehler navigieren, bewerten, priorisieren und zur Behebung zuweisen können. Die schrittweise Verschiebung der „Grenze“ zur nächsthöheren Priorität und Kategorie ist der beste Ansatz, um einen großen Rückstand an Warnungen zu bewältigen.

So wählen Sie ein modernes statisches Analysewerkzeug aus
Jetzt das Whitepaper herunterladen

„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.