Information Systems Audit and Control Association - Serving IT Governance Professionals Code-Konventionen (2)

Ordnungsmerkmale

erschienen in: <kes> 2007#1, Seite 73

Rubrik: ISACA informiert

Zusammenfassung: Bei IT-Revision und -Qualitätssicherung spielt die Analyse von Programmquellen eingesetzter Software eine wichtige Rolle. Code-Konventionen erleichtern diese Arbeit erheblich.

Nachdem der erste Teil dieses Beitrags (<kes> 2006#5, S. 88) grundlegend über die vorteilhafte Verwendung von Code-Konventionen für Java-Sources berichtet hat, soll nunmehr ein geeignetes Werkzeug zur Prüfung dieser Code-Konventionen (Inspection), Analyse von Qualitätsmerkmalen (Measurement) und Dokumentation der Programmlogik und -struktur (Specification) vorgestellt werden. Die Software kann gegen formlose Registrierung per E-Mail kostenlos bezogen werden.

Die genannten Arbeitsschritte Inspection, Specification und Measurement dienen mit unterschiedlichen Aufgabenstellungen verschiedenen Zielgruppen: So dient die Inspection beispielsweise dem Entwickler dazu, einen Java-Quelltext vor der Aushändigung an das Test-Team dahingehend zu untersuchen, ob die Code-Konventionen weitgehend eingehalten wurden. Die Aufgabenstellung der Quality-Assurance-Spezialisten sind hingegen die auszugsweise Analyse der Konformität mit den Code-Konventionen und das Feststellen der häufigsten Regelverletzungen.

Die Kommunikation des Werkzeugs mit dem Bediener erfolgt über eine Windows-Oberfläche zum Erfassen von Parametern und zur Steuerung der Ergebnisse; die eigentliche Funktionalität des Werkzeugs wird im Batch-Modus über eine DOS-Box ausgeführt.

Programm-Analyse

Die Grundfunktion des Werkzeugs besteht in der Funktion als Parser von Java-Sources. Durch diesen Vorgang werden Informationen zum Prüfen, Messen, Verifizieren und Dokumentieren gewonnen. Daneben legt er die Grundlagen für eine Qualitätssicherung durch statische Programmanalyse.

Zur Unterstützung einer (Nach)-Dokumentation und zum Reverse Engineering von Java-Sources wird eine CSV-Datei bereitgestellt, welche die Struktur und den Inhalt der betrachteten Quelltexte in diversen Sichten dokumentiert. Diese CSV-Datei kann in einem Repository weiterverabeitet werden.

Die gewonnenen Informationen werden unter anderem gegen die vorgegebenen Code-Konventionen geprüft und an Metriken mit den Kriterien Größe, Komplexität und Qualität gemessen. Die Struktur, der Kontroll- und Datenfluss der Java-Sources werden extrahiert und in einem Bericht optisch aufbereitet.

Regel-Systematik

Die vorgegebenen Code-Konventionen werden dazu als Regeln in einer extern gespeicherten Tabelle hinterlegt. Es besteht die Option, einzelne Regeln risikoorientiert zu aktivieren oder zu deaktivieren. Java-Quelltexte können so gegen bis zu 72 Regeln geprüft werden. Je nach dem Grad eines Verstoßes gegen die jeweilige Regel wird zwischen Major, Medium und Minor Violations differenziert. Entsprechend diesem Grad dokumentiert anschließend ein so genannter Deficiency Report die Ereignisse als Warnings, Deficiences oder Problems. Zur besseren Zuordnung von Ereignissen zu den Quelltexten wird zudem die einschlägige Zeilennummer mit Nachricht und Java-Statement ausgegeben.

Alle Ereignisse werden anschließend mit differenzierten Faktoren (Warnings = 0.5, Deficiencies = 1.0, Problems = 2.0) gewichtet. Die Summe aller gewichteten Ereignisse dividiert durch die Anzahl aller Statements liefert die so genannte Conformity Rate für die gesamte Java-Source.

Major Rule Violations
02] Constants in procedural statements are forbidden 
{if(Count > 40)}
16] Control Logic exceeds maximum allowed nesting level 
{set by user }
23] Classes should not contain labels 
{label: while(true)}

Medium Rule Violations
30] Java-Source Modul exceeds maximum size limit in lines of code
37] Class exceeds maximum size limit in statement
40] Claas references too many remote methods 

Minor Rule Violations
53] Code Lines should not exceed 80 characters in length
56] End Brackets should be followed by a comment 
} // Comment }
57] Control Command should be on a separate line 
{for (...) next line ...}

Auszug der Regel-Systematik

Metriken

Die Qualität einer Java-Source kann auf der Basis von Metriken gemessen werden. Das Ergebnis der Messung dient als Indikator für den aktuellen Status beziehungsweise Schwächen des betrachteten Quelltextes. Die im Werkzeug parametrisierbar hinterlegte Tabelle von Metriken besteht aus acht Complexity- und acht Quality-Metriken, unter anderem aus Control Flow Complexity (McCabe Metric), Language Complexity (Halstead Metric) und Data Complexity (Chapin Metric).

Complexity-Metriken werden auf der Basis entsprechender Formeln in einer Skala von 0 bis 1 ausgedrückt, wie sie der ISO-Standard 9126 zur Softwarequalität empfiehlt; der Median wird durch den Wert 0,5 repräsentiert. Je geringer die Complexity desto besser, je höher der Wert desto schlechter.

Weitere Informationen

ISACA German Chapter e. V.
Eichenstraße 7
46535 Dinslaken
[externer Link] www.isaca.de

Karin Thelemann (CISA, CISM)
ISACA-Vorsitzende
Tel.: +49 69 15208-26488
E-Mail: karin.thelemann@de.ey.com

Bernd Wojtyna (CISA)
Vizepräsident ISACA Germany Chapter
Tel.: +49 251 288-4253
E-Mail: Bernd.Wojtyna@extern.Sparkassen-Informatik.de

Quality-Metriken haben eine ähnliche Bedeutung: je höher der Wert, desto geringer die zu erwartenden Kosten für Wartung und Test. Diese Metriken werden durch die Eigenschaften Modularity, Portability, Flexibility, Testability, Readability, Reuseability, Conformity und Maintainability ausgedrückt.

Darüber hinaus werden 54 nicht-veränderbare Quantity-Metriken gemessen: Diese gruppieren sich in Code-, Structural-, Data- und Procedural-Quantities und enthalten absolute Informationen zur Anzahl von Programmelementen, wie Lines of Code, Statements, Data Declarations und so weiter. Das Ergebnis wird in einem Quantity-Report ausgegeben. Eine Parametertabelle enthält Grenzwerte, welche die betrachtete Java-Source nicht überschreiten darf, ohne einen negativen Eintrag zu bewirken.

Als Ergebnis des Batch-Modus erzeugt das Tool drei Arten von Listen: Abweichungen, Metriken und Strukturen. Abweichungen werden dabei in einem so genannten Program Conformance Report dokumentiert und umfassen Angaben zu Program Rule Violations und Code Deficiency.

| LINE  |  PROGRAM RULE VIOLATION / CODE DEFICIENCY                    |
+ – – – + – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –+
| PROB: | Literals in procedural statements are forbidden !!!          |
|    42 |                         System.out.println (" Prozent von "  |
|    42 | + b);                                                        |
|       |                                                              |
| WARN: | { Open Block Bracket should be on a separate line            |
| WARN: | End Bracket is not followed by a comment //                  |
| PROB: | Last Method should have had at least one Assertion           |
|    44 |                 } catch (Exception e) {                      |
|       |                                                              |
| PROB: | Literals in procedural statements are forbidden !!!          |
|    46 |                         System.out.println ("Oops!");        |
|       |                                                              |
| WARN: | End Bracket is not followed by a comment //                  |
|    47 |                 }                                            |
|       |                                                              |
| WARN: | End Bracket is not followed by a comment //                  |
|    48 |         }                                                    |
|       |                                                              |
| WARN: | End Bracket is not followed by a comment //                  |
|    49 | }                                                            |
|       |                                                              |
| WARN: | @Link to CMF Concept is missing in source                    |
|    51 | PROZEN~1                                                     |
|       |                                                              |
| WARN: | @Link to CMF Function is missing in method                   |
|    51 | PROZEN~1                                                     |
|       |                                                              |
| WARN: | Package name should be given in source file                  |
|    51 | PROZEN~1                                                     |
|       |                                                              |
+ – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –+
|                                                                      |
|   Number of major Rule Violations =     16                           |
|   Number of media Rule Violations =      0                           |
|   Number of minor Rule Violations =     12                           |
|   Total Number of Rule Violations =     28                           |
|   Number of Program Statements    =     20                           |
|                                                                      |
|   Rate of Rule Conformity         =  0.001                           |
|                                                                      |
+ – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –+

Beispielausgabe eines Program Conformance Reports