Die meisten Werkzeuge zur Softwareanalyse basieren auf der rein statischen Analyse des Quellcodes und einiger zusätzlicher Datenquellen. Sie bedienen sich dabei der Standards, die durch die Spezifikation der einzelnen Programmiersprachen und Softwareökosysteme vorgegeben sind.
Dabei bleiben in der Regel eine ganze Reihe weiterer Eigenschaften der Anwendungen unberücksichtigt, wie z.B.
-
- Architektur
- individuelle Programmiertechniken
- Konventionen
- versteckte Logiken, resultierend aus dem Zusammenspiel von Programmen und Daten
Oft ergeben sich daher bereits in der rein technischen Analyse des Quellcodes erhebliche Lücken in Bezug auf die Beziehungen zwischen Programmen, Prozeduren und Datenquellen. Ein weiterer Aspekt, der durch eine reine Codeanalyse nicht zu erfassen ist, ist die Verbindung bestimmter fachlicher Anforderungen und Prozesse zur konkreten Implementierung im Quellcode der Anwendung. Gerade dieser Punkt ist jedoch bei der Anpassung des Quellcodes aufgrund geänderter oder neuer fachlicher Anforderungen von besonderem Interesse. Sind in diesem Falle die fachkundigen Entwickler nicht (mehr) verfügbar und liegt – wie in der Praxis nicht ungewöhnlich – keine geeignete und vollständige Dokumentation der Anwendung vor, führt dies sehr schnell zu großen Herausforderungen bei der Implementierung von Change Requests oder der generellen Modernisierung der Anwendung.
Beispiel:
Ein Entwickler bekommt die Aufgabe, einen speziellen Geschäftsvorfall fachlich anzupassen, so dass zusätzliche Informationen in einem bestehenden komplexen Rechenprozess berücksichtigt werden müssen. Hier benötigt er zuerst einen Überblick über den Gesamtablauf für diesen konkreten Geschäftsvorfall, die beteiligten Komponenten (Programme, Klassen, Methoden, Prozeduren) und in vielen Fällen auch die Abfolge der Aufrufe. Anhand dieser können die Stellen der Anwendung identifiziert werden, welche für die Implementierung des Change Requests relevant sind. Diese Informationen sind in der Regel durch die Nutzung von Standard-Analysewerkzeugen nur schwer und mit erhöhtem Aufwand zu beschaffen.
Ein Ansatz, die beschriebenen Herausforderungen anzugehen, ist die individualisierte Softwareanalyse. Hierbei sehen wir zwei grundlegende Ansätze zur Verbesserung des Anwendungsverständnisses, welche die herkömmliche statische Anwendungsanalyse sinnvoll ergänzen.
Statische Zusatzanalyse
Bei dieser Form der Analyse werden die individuellen Eigenschaften der Anwendung in Bezug auf Architektur, Konventionen, spezielle Programmiertechniken und Logiken aufgenommen und wo immer möglich abstrahiert. Auf dieser Grundlage werden spezifische Regeln zur Analyse des Quellcodes definiert, welche eine Reihe neuer Informationen und Verbindungen zwischen Artefakten (Programmen, Prozeduren, Daten, Schnittstellen, …) generieren und damit zur Vervollständigung des Gesamtbildes der Anwendung beitragen. Beispielhaft seien hier Programmaufrufe genannt, die auf der Basis der vorliegenden Daten über spezielle Logiken dynamisch zur Laufzeit das aufzurufende Zielprogramm oder die aufzurufende Prozedur bestimmen.
Dynamische Anwendungsanalyse
Die dynamische Anwendungsanalyse adressiert vor allem die Herstellung der Verbindung zwischen einem fachlichen Prozess und der konkreten Implementierung dieses Prozesses in der Anwendung. Die Grundidee besteht darin, die Anwendung bei der Abarbeitung bestimmter fachlicher Szenarien zu beobachten. Basierend auf den dabei ermittelten Informationen können beispielsweise die Implementierung von Change Requests oder Modernisierungsvorhaben deutlich gezielter und effizienter vorbereitet werden. Ein weiterer Aspekt, resultierend aus der Herstellung der Verbindung zwischen fachlichen Anforderungen und konkreter Implementierung, ist die Vereinfachung der Kommunikation zwischen Fachabteilung und Entwicklung durch die Schaffung einer gemeinsamen Sicht auf die Anwendung.
Zusammenführung der Informationen
Ein besonderer Mehrwert der individualisierten Analysen ergibt sich dann, wenn deren Ergebnisse mit den Ergebnissen der statischen Codeanalyse zusammengeführt und ausgewertet werden können. Einige Standard-Analysewerkzeuge für die statische Codeanalyse verfügen bereits über Schnittstellen, welche die Anreicherung des Repositorys mit zusätzlichen Daten ermöglichen, und entsprechende Auswertungsmöglichkeiten bieten. Auf Basis der qualitativ verbesserten und erweiterten Datenbasis werden auch Modernisierungsvorhaben wie Überführung von Anwendungen in ein Domain Driven Design oder die Extraktion von Services oder Microservices deutlich vereinfacht.
Praktische Umsetzung
Die Implementierung von individualisierten Softwareanalyselösungen findet in Projektform statt. Hierbei werden zunächst die Anforderungen sowie die Anwendungsspezifika aufgenommen und anschließend in ein Lösungsdesign sowie entsprechende Regelwerke umgesetzt. In einer weiteren Projektphase erfolgt die Einrichtung der entsprechenden Software-Infrastruktur, der Prozessautomatisierung sowie spezieller Testumgebungen. Nach Abschluss der Implementierung können die Analysen jederzeit auch auf einer fortentwickelten Codebasis angewandt werden und dauerhaft ihren praktischen Nutzen entfalten.
EasiRun unterstützt Sie bei der Erstellung Ihrer individualisierten Softwareanalyselösung mit Know-how und Werkzeugen wirkungsvoll, bedarfsgerecht sowie zeit- und ressourcenschonend. Mehr Informationen finden Sie hier: EasiRun/SMART