Roadmap to Open Code Quality Management
13 Aug
Gibt’s dann hier:
Okok, es fehlt noch eine anständige Doku, ein Error-Handling, ein kleines xquery zu Aggregierung pro Verzeichnis, ein vernünftiges default Attribut-Set, so das eigentlich nur <xsdmetrix/> reichen sollte uvm. Aber wie schon gesagt: Das ist ja erst der Anfang ![]()
8 Jul
Ein Opensource-Metrik-Tool für XML-Derivate zu finden ist garnicht mal so einfach. Die normalen LOC-Tools sind hier ziemlich obsolet, die Syntax ist durch DTD und XSD jedoch ziemlich klar. Besser als bei fast allen Sprachen, gibt es absolut eindeutige Delimeter für Elemente und Attribute, die auch geschachtelt und verwinkelt sein dürfen. Eine DTD an sich jedoch ist eher veraltet, a) weil zu wenig Leistungsfähig und b) weil selbst nicht in XML formulierbar. Bleibt also als Datenmodell für XML-Instanzen die XML-Schema-Definition, also kurz XSD. RelaxNG lasse ich hier der Einfachheit mal aussen vor, James Clark mag es mir verzeihen.
Leider gibt es ein “Just A Simple Tag Counter” oder ähnliches nicht als Opensource, oder zumindestens habe ich keines gefunden. Und auch die Universitäre-Forschung versucht eher den McCabe-Ansatz den XML-Modeldefinitionen über zu stülpen. Für statitische Model-Definitionen ist ein McCabe-Komplexität einfach fehl am Platz, weil der gute McCabe die Verzweigungspfade in Entscheidungslogiken messen will, und nicht die Vererbungstiefe und -breite von Metamodellen. Tja, wenn die OpenSource nix hat, die Professoren noch im falschen Film sind, bleibt wohl nichts anderes übrig als selber in die Tasten zu greifen. Gesagt getan.
Ziele:
1) Zähle einfach mal alles, was es so an einer Schema-Datei so zu zählen gibt, vergiss LOC.
2) Zähle alle globalen Elemente, Complex-Types, Attributes etc.
3) Zähle alle Annotations, vor allem die, die global sind.
4) Bring das Gezählte schonmal in Relation zu einander.
Global heißt hier alles, was direkt unterhalb von <xsd:schema> liegen
Hmm, und wie zählt man eine XML-Datei am besten? Genau mit einem count(xpath(irgendwas)), mittels einer XSL Transformation. Genaus das haben wir gemacht. Wen das erste Ergebnis interessiert, melde sich per Email, SMS, Skype und/oder verfolge diesen Blog weiter, z.B. per RSS-Feed.
11 Jun
Der Artikel von der Berufsakademie Stuttgart - Außenstelle Horb, Fachrichtung Informationstechnik beschäftigt sich mit “Code-Review in Java - Möglichkeiten, Tools und Anwendung”. Aus meiner Sicht ein guter und kompakter Einstieg in das Thema, nicht nur für ein Code-Review.
3 Jun
In den letzten Tagen bin ich kaum zum bloggen gekommen. Schuld war UMLGraph, dazu später mehr, und das 910 Seiten-Teil hier:
Dabei ist das Cover erschreckend langweilig. Und doch habe ich selten ein Buch über eine Tool-Sammlung gefunden die so gut zu dem passt, was mich gerade umtreibt: Qualitätstests sowie Systembau und -check automatisieren. Dabei beginnt das Buch bei den Grundlagen, hier Ant und Maven und den beiden wichtigsten frei verfügbaren Versions-Kontrollsystemen: Subversion und CVS.
28 Mai
To read your Code you have to start your Integrated Development Enviroment, load your project, navigate through your packages, classes and methods. What if, you just want jump in to shortly check something, without writing? Or when you want implement direct links inside your code, for eg. direct from this Article to line 535 in com.java2html.firstparse.SimpleNode? Or you have a nifty code analyzer with HTML-Reporting, and you want jump just from that report direkt to the line of truth? A Solution for this Usecases could be for e.g. java2HTML. Easy to setup, mighty to configure, with Crosslinkings, Codecoloring and Line-Numbers as <a name="..."> Tags. Here is an Example, how a java2html-conversion is rendered. It’s java2html itself. Looks little bit like JavaDoc, but it isn’t. Do you know other HTML-transformators for other programming languages?
++ -+- ++
Um Code zu lesen, startest du normalerweise deine bevorzugte integrierte Entwicklungsumgebung, lädst dein Projekt, navigierst durch dein Packages, Klassen oder Methoden, bis du endlich die eine Zeile gefunden hast, in der du lediglich die Schreibweise von einem Parameter nachschauen wolltest. Wäre doch Cool, wenn Du deinen Code mit einem der feinen Web 2.0igen Bookmark-Lösungen verwalten könntest. Oder was ist, wenn Du von außerhalb, z.B. diesem Artikel genau an eine Code-Zeile, sagen wir mal Zeile 535 in com.java2html.firstparse.SimpleNode springen möchtest? Oder Du generell aus dem Report eines Anti-Pattern Tool genau zu einem Finding navigieren möchtest. Vermutlich gibt es noch dutzende weitere Anwendungsfälle.
(more…)
26 Mai
At the beginning there was a pure Structured Query Language, so called SQL(1), then some multidimensionalists thought about it and invented a multidimensional Expression Language, aka MDX(2). With the success of XML we found not long ago XQuery(3) as an enhancement to XSLT for querying XML-Like structures. But what about objects?
Here comes Prof. and CEO Oege de Moor(4) into the game. His vision of »easy, yet efficient queries over complex data « could be a silver bullet in the field of multi-language code quality management. In the goggle-techtak(5) »Drill down into your Code - Software Quality via Code Queries in SemmleCode« he explains his vision, mission and strategy to master static code analysis language independent, with a realitive »sexy« approach, called .QL pa dotQL(6). A Query-Language which combines the power of SQL with the advantages of OO-Syntax, enriched by an elegant potion of recursion and a dip of hierarchical polls. So you can build brand new complex queries against your code in minutes rather than hours or days. So please dear PMD, Sissy, Findbugs, Checkstyle-Rule and Anti-Pattern-Contributors, can you add your rule in future also as a dotQL-Script? Today there are over 114 acid-proofed queries with 42 metrics ready for exploration on your code with SemmleCode(7).
Great Stuff!
20 Mai
… a guide to Systematic Debugging. So der verheissungsvolle Titel des Buches, welches ich letzte Woche mal wieder aus einem der oberen Regale gefischt habe. Indirekt bin ich über den Termin-Tipp
vom Andreas, am 17.6. bzw. 26.6., siehe IT-Kalender(1), wieder auf Andreas Zeller gekommen. Jaja, die Andrease umzingeln mich *g*.

(more…)
11 Mai
Irgendwie spuckt jDepend interessante Werte aus, aber was so richtig damit anfangen? Nur eine Zahl um so etwas wie Paket-Instabilität auszudrücken? Wieso soll ich mich überhaupt um zyklische Abhängigkeiten kümmern, wenn mein System doch prima läuft? Und was um alles in der Welt ist ein dot in der Graphenvisualisierung?
Ok, fangen wir mal ganz einfach an. Als erstes zählt jDepend(1) ein paar ganz einfache Dinge, wie z.B. alle Klassen (NoC). Dabei wird zwischen der Anzahl abstrakter (NoAC) und konkreter Klassen (NoCC) unterschieden. Allein daraus kann der Wert für Abstractness (A = NoAC/NoC) ermittelt werden. Ja und, was sagt mir das? Erstmal noch nicht viel. Verdächtig sind eventuell Systeme die kaum Abstraktion verwenden, nicht nur weil Abstraktion das geeignete Mittel der Wahl ist wartungsunfreundliche Labyrinthmethoden(2) oder komplizierte If-Then Konstrukte(3) zu lösen, um auf diese Weise die zyklomatische Komplexität(4) zu verringern oder eben den richtigen Schnitt bei den Verantwortlichkeiten der Klassen und Pakete zu finden.
8 Mai
Im Java Umfeld gibt es natürlich auch Anbindungen (JDBC) an diverse Datenbanken. Die Performance einer Anwendung ist in der Regel massiv von der Datenbank bzw. dem Datenmodell (1) geprägt. Leider kann man aus dem Sourcecode nicht wirklich die Qualität der Datenanbindung und noch weniger direkt das Datenmodell beurteilen.