Regelkreis für Code- Quality- bei der Raiffeisen Bausparkasse GmbH Wien Andreas Madjari, Raiffeisen Bausparkasse Gesellschaft m.b.h. Dr. Daniel Simon, CC Application Intelligence, SQS AG Dr. Frank Simon, SQS Research & Innovation, SQS AG Bad Honnef / WSR, SQS Software Quality Systems AG Agenda. Einleitung SQS AG Application Intelligence / Research & Innovation Raiffeisen Bausparkasse Ges.m.b.H. Wien Regelkreis -Sensibilisierung Kriterienset abstimmen Umsetzung der Kriterien Feinjustage der Kriterien Visualisierung / Reporting Erfahrungen / Ergebnisse Bisher erreichtes Ausblick (c) SQS AG, Raiffeisen Bausparkasse Seite 2 1
Structure of SQS Research & Innovation Topic-related SQS-network brings experts together Innovation Groups Innovation Groups represent a virtual European organisation responsible for specific topics and their quality Service Innovation Groups (SIG) working on specific SQS services. functional testing, performance testing, application intelligence, test management, test automation, etc. 16 group-wide SIGs (March 2008) Technical Innovation Groups (TIG) Working on specific techniques that supplement service operation or are used in projects. SOAs, WEB 2.0, MDA/MDD, KPIs, SAP, etc. 8 group-wide TIGs (March 2008) Business Innovation Groups (BIG) Working on domain-specific knowledge (nomenclature, laws, norms, systems, requirements, market, competitors, etc.) Embedded systems, logistics, insurance, banking, telecommunications, etc. 11 group-wide BIGs (March 2008) SQS Research & Innovation manages Innovation Groups and supports them! (c) SQS AG, Raiffeisen Bausparkasse Seite 3 How-to of SQS Research & Innovation Research & Innovation provides infrastructure, gives sponsorship for innovative projects and maintain communication Research & Innovation has many possibilities to support Innovation Groups: Provide a group-wide platform as knowledge repository and for information exchange. Implemented in MS-SharePoint 2007. Separate budget for sponsoring activities and projects. Support work for publishing, conferences, research activities. Co operations with universities, preparing official fed research projects. Internal workshops, discussions, tutorials Recent event: SQS Champions Conference (heads of Innovation groups) (c) SQS AG, Raiffeisen Bausparkasse Seite 4 2
Application Intelligence Qualitätsmanagement Projektsteuerung auf der Basis messbarer Fakten in Applikationen Code-Quality- Licence- Compliance- Testgenerierung & Traceability Warehouse Wie wartbar zukunftsfähig ist mein Code? Wie kann ich sicherstellen, dass ich in meiner Software nicht die Rechte anderer verletze? Wie kann ich den Aufwand für Testen reduzieren, die Testabdeckung erhöhen Traceability schaffen? Architekturevaluierung & -verifikation Architekturarchäologie Kosten- Leistungs- Σ Analyse Vista- fähigkeits- Analyse Wie kann ich die Architektur meiner Software prüfen lassen Konformität sicherstellen? Welche Systemabhängigkeiten existieren welche Systeme werden nicht mehr benötigt? Wie teuer ist statistisch die Entwicklung meiner Software? Ist meine Anwendung Vista-fähig wo liegen ggfs. meine größten Hürden? (c) SQS AG, Raiffeisen Bausparkasse Seite 5 Einleitung Die Raiffeisen Bausparkasse ist das Spezialinstitut der Raiffeisen Bankengruppe in Österreich für Bausparen Marktführer in wesentlichen Geschäftsbereichen 300 Mitarbeiter hat eine eigene IT-Abteilung mit 45 Mitarbeitern entwickelt ihre Bankenanwendung IT++ selbst setzt als Serverplattform Sun Solaris 8 ein die Entwicklung erfolgt mit Sun Forte C++ unter Einsatz von Templates für den Datenbankzugriff als Utility-Sammlung kommt Rogue Wave Source Pro zum Einsatz Der C++-Code umfasst 1.284.000 Lines of Code (LOC) (c) SQS AG, Raiffeisen Bausparkasse Seite 6 3
Ein Regelkreis für Code Quality -Unterstützung Promotoren schaffen eine Basis zur nachhaltigen Verbesserung. engagierte anpassbare leistungsfähige Werkzeuge Vermessungsbasis (c) SQS AG, Raiffeisen Bausparkasse Seite 7 Ein Regelkreis für Code Quality -Sensibilisierung Erster Schritt ist der Nachweis des Nutzens von konstruktiver QS beim. - Gegebenenfalls ROI-Modelle Darlegung des wirtschaftlichen Nutzens konstruktiver Qualtitätssicherungsmaßnahmen Hausübungen: Was will man mit der QS erreichen? Im Rückblick: ca. 70% der Durchlaufzeit Die prinzipielle Bereitschaft in Qualität zu investieren muss kommuniziert werden. engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 8 4
Ein Regelkreis für Code Quality Die Einbindung der operativen Ebene in die Auswahl r Werkzeuge Verfahren erfolgt von Beginn an. Technische Anforderungen an Werkzeuge durch Entwicklung berücksichtigen Im Experiment nachgewiesene Detailtiefe am lebenden Objekt Durchstich am Code der RBSK Mit Bauhaus: Eignung zur Analyse von C++-Templates Herausforderung: SmartPointer-Template-Konzept Integration der Werkzeuge in bestehende Umgebung Entwicklungsprozess (Analyseabbrüche aufgr fragwürdiger C++- Konstrukte wurden als erste Q-Maßnahme vor Rollout umgesetzt) Einbindung Build-Mechanismus engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 9 Ein Regelkreis für Code Quality Das Kriterienset auf die Bedarfe der Entwicklung abstimmen. Aktuell werden folgende erhoben Problematische Konstrukte Deklaration von Native Pointern Direktverwendung der Speicherverwaltungsbefehle Direktzugriffe auf die Datenbank ohne Zugriffschicht Performance Cache-Syncs auf die Datenbank Defaultkonstruktoren der Datumsklasse engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 10 5
Ein Regelkreis für Code Quality Das Kriterienset auf die Bedarfe der Entwicklung abstimmen. Aktuell werden folgende erhoben Lesbarkeit Fehlende Source-Control-Header Statisch erkennbarer unerreichbarer Code Richtlinien Doppelte Tracing-Labels Service-Namenskonventionen engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 11 Ein Regelkreis für Code Quality Das Kriterienset mit dem gewählten Werkzeug umsetzen. Umsetzung erfolgt durch RBSK (Grobgranulare Metriken) RFG-Level-Metriken, d.h. Beziehungen zwischen globalen Entitäten der Software Klassen- Methodenverwendung Aufbau einer Cross-Reference SQS (Feingranulare Metriken) IML-Level-Metriken, d.h. zusätzliche Beziehungen zwischen lokalen Entitäten Kontroll- Datenfluss Feingranulare Modellierung der Typen engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 12 6
Analyseablauf Ressourcen-Bedarf cpp IML RFG RFG cpp IML RFG RFG cpp IML RFG RFG RFG 1 cpp IML RFG RFG 3200 3200 3200 350 CQM DB (c) SQS AG, Raiffeisen Bausparkasse Seite 13 Ressourcen-Anforderungen Analyse Zwei Hauptreleases pro Jahr, davor 8 bis 10 Iterationen, die vermessen werden Vermessung mit Bauhaus auf der Labormaschine Automatisierung des Durchlaufes über Shell-Script von 10 CPUs parallel Ergebnisse werden in eine Informix-DB geschrieben Der 24-stündige Analyselauf erzeugt 51 GB feingranulare IML 4,5 GB grobgranulare verdichtete RFG auf Modulebene. Das Gesamtmodell-RFG weist eine Größe von 210 MB auf (c) SQS AG, Raiffeisen Bausparkasse Seite 14 7
Ein Regelkreis für Code Quality Die Kriterien feinjustieren. Feinjustage in Bezug auf Nicht-Produktiv-Code Bibliotheken bewusst ausblenden Bewusste Definition von Ausnahmen bei technischen Constraints (z.b. Zulassung bestimmter new/delete-operatoren) Präzisierung von Indikatoren in der Zieltechnologie Was wird als Klasse gezählt? (-> Template-Instanzen, Umgang mit Präprozessor-Konstrukten) Festlegung von Teilbereichen der Software bezüglich ihrer Lebenszyklusphase engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 15 Ein Regelkreis für Code Quality Visualisierung Berichtswesen bezüglich der erlaubt Transparenz für die Entwicklung. engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 16 8
Ein Regelkreis für Code Quality Visualisierung Berichtswesen bezüglich der erlaubt Transparenz für die Entwicklung. engagierte (c) SQS AG, Raiffeisen Bausparkasse Seite 17 CQM als etablierter Teil der Entwicklung Bisherige Erfahrungen Erfolge. Beseitigung von fragwürdigen Konstrukten in C++ Identifikation von Fehlern Im POC konnten nicht alle C++-Sourcen mittels Bauhaus analysiert werden Ursache: Mehrdeutigkeiten im C++-Code, durchweg fragwürdiger Code Sun Forte C++ trifft implizite Annahmen bei der Auflösung Volle Integration von Bauhaus in den Build-Mechanismus Analysierbarkeit mit Bauhaus ist Mindest-Forderung (2nd opion über Code) Analyselauf ist in den produktiv -Build (in Form von Makefiles) eingebaut kann uniform ausgeführt werden (c) SQS AG, Raiffeisen Bausparkasse Seite 18 9
CQM als etablierter Teil der Entwicklung Bisherige Erfahrungen Erfolge. Akzeptanz der bei der Entwicklung Aus der Entwicklung getriebene haben unmittelbaren Nutzen Automatisierbare Erhebung lässt Trend-Betrachtung zu Resultate werden via Dashboard zugänglich gemacht Performance-Steigerungen Statische Identifikation von Performance-Fressern anschließende Beseitigung Beschleunigung auf ca. 70% der ursprünglichen Aufwände (c) SQS AG, Raiffeisen Bausparkasse Seite 19 CQM als etablierter Teil der Entwicklung Bisherige Erfahrungen Erfolge. Reduktion von Produktionsausfallzeiten Beurteilung der technischen Auswirkungen von Ausfällen Halbierung der Produktionsausfallzeiten Entflechtung der Abhängigkeiten beim Build 10% des Codes auf 10 Executables (von 230) eingeschränkt Reduktion der Build- Compilezeiten geschätzte Einsparung mit Tooling 80% Einsparung beim Behebungsaufwand absolut ca. 160 Personensten 10% geringerer Memory-Footprint nach erstem Entflechtungsschritt (c) SQS AG, Raiffeisen Bausparkasse Seite 20 10
CQM als etablierter Teil der Entwicklung Ausblick Nächste Schritte Erweiterung der Metriken der Vermessung zur direkten Architekturprüfung Weitere Verbesserung der Reportingapplikation Evaluierung: Ersetzen durch Bauhaus Dashboard (Verprobung im Sommer) Ziele der RBSK 2008 Verbesserung von zwei Metriken auf Sollstand der Vermessung zur schrittweisen Heranführung der Anwendung an die Sollarchitektur (c) SQS AG, Raiffeisen Bausparkasse Seite 21 Stollwerckstraße 11 51149 Köln, Deutschland Tel.: +49 22 03 91 54-0 Fax: +49 22 03 91 54-15 E-Mail: daniel.simon@sqs.de Internet: www.sqs.de Internet: www.sqs-group.com Vielen Dank für Ihre Aufmerksamkeit 11
Beispiel für einen Dependency-Graphen (c) SQS AG, Raiffeisen Bausparkasse Seite 25 Ausschnitt aus einem Shellscript [...] # --------------------------------------------------------- # Pythonscript für Shellmetriken starten # --------------------------------------------------------- rfgscript $PYDEVDIR/MetrikenShell.py $TRACERFILE $CQMOUTFILE $SVCFILE $SCLABELFILE $LOADFILE $NEUSATZNR $NEUVMBNR # --------------------------------------------------------- # Load durchführen # --------------------------------------------------------- dbaccess cqmdb@rsuned <<EOF 2>/dev/null >/dev/null BEGIN; LOCK TABLE cqm_auftreten IN EXCLUSIVE MODE; LOAD FROM $LOADFILE INSERT INTO cqm_auftreten; COMMIT; EOF [...] (c) SQS AG, Raiffeisen Bausparkasse Seite 26 12
Ausschnitt aus einem Python-Script if isinstance(rwdatedefkonstrnode, rfg.node): # en müssten alle Knoten sein, die diesen als Target haben # also die incoming Call-Edges nehmen def callmatcher(edge): if edge.is_of_subtype(etcall): return True zielsetkanten = rwdatedefkonstrnode.incomings(baseview,callmatcher) # Jetzt alle Knoten im Zielset verarbeiten aktsatznr = startsatz for curedge in zielsetkanten: curnode = curedge.source(the_rfg) filename = curedge.get_value(easourcefile) posline = curedge.get_value(easourceline) poscolumn = curedge.get_value(easourcecolumn) if curnode.has_value(nasourcename): satzstring = raibaurfg.datensatzvorkommen(aktsatznr, filename, posline, poscolumn, raibaurfg.qualifiziertermethodenname(the_rfg, curnode), 1,basisId, 1) outputfile.write(satzstring) aktsatznr += 1 (c) SQS AG, Raiffeisen Bausparkasse Seite 27 13