Es gibt verschiedene Arten von Qualität, die an Softwareprodukten gemessen werden können, z. B. Gebrauchstauglichkeit (z. B. Endverwendung), Wartbarkeit und Effizienz. Einige davon sind subjektiv oder domänenspezifisch (z. B. können sich die Prinzipien für ein gutes GUI-Design in den verschiedenen Kulturen unterscheiden oder vom Verwendungskontext abhängen, denken Sie an die militärische oder die Verbrauchernutzung).
Was mich interessiert, ist eine tiefere Form der Qualität in Bezug auf das Netzwerk (oder den Graphen) der Typen und ihre Wechselbeziehung, dh auf welche Typen bezieht sich jeder Typ? Gibt es klar identifizierbare Cluster von Interkonnektivität in Bezug auf eine ordnungsgemäße mehrstufige Architektur, oder umgekehrt gibt es eine große "Kugel" von Typreferenzen ("monolithischer" Code). Außerdem sollte die Größe jedes Typs und / oder jeder Methode (z. B. gemessen in der Menge des Java-Byte-Codes oder .Net IL) einen Hinweis darauf geben, wo große komplexe Algorithmen als monolithische Codeblöcke implementiert wurden, anstatt in besser verwaltbare / wartbare zerlegt zu werden Stücke.
Eine Analyse, die auf solchen Ideen basiert, kann möglicherweise Metriken berechnen, die mindestens ein Stellvertreter für die Qualität sind. Die genauen Schwellen- / Entscheidungspunkte zwischen hoher und niedriger Qualität sind meines Erachtens subjektiv, da unter Wartbarkeit die Wartbarkeit durch menschliche Programmierer zu verstehen ist und die funktionale Zerlegung daher mit der Funktionsweise des menschlichen Geistes vereinbar sein muss. Als solches frage ich mich, ob es jemals eine mathematisch reine Definition von Softwarequalität geben kann, die alle möglichen Software in allen möglichen Szenarien übersteigt.
Ich frage mich auch, ob dies eine gefährliche Idee ist, dass wenn objektive Proxys für Qualität populär werden, der Geschäftsdruck Entwickler dazu veranlasst, diese Metriken auf Kosten der Gesamtqualität zu verfolgen (jene Aspekte der Qualität, die nicht von den Proxys gemessen werden).
Eine andere Art, über Qualität zu denken, ist unter dem Gesichtspunkt der Entropie. Entropie ist die Tendenz von Systemen, von geordneten zu ungeordneten Zuständen zurückzukehren. Jeder, der jemals an einem realen, mittelgroßen bis großen Softwareprojekt gearbeitet hat, wird es zu schätzen wissen, inwieweit sich die Qualität der Codebasis im Laufe der Zeit verschlechtert. Der Geschäftsdruck führt in der Regel zu Änderungen, die sich auf neue Funktionen konzentrieren (außer wenn Qualität selbst das Hauptverkaufsargument ist, z. B. bei Avionik-Software), und zu Qualitätsverlusten durch Regressionsprobleme und Fehlfunktionen eine Qualitäts- und Wartungsperspektive. Können wir also die Entropie von Software messen? Und wenn ja, wie?