33 Stimmen

Metriken und Berichte zur Softwareentwicklung

Ich habe in letzter Zeit einige interessante Gespräche über Softwareentwicklungsmetriken geführt, insbesondere darüber, wie sie in einer relativ großen Organisation eingesetzt werden können, um die Arbeit der Entwicklungsteams zu verbessern. Ich weiß, dass es auf Stack Overflow Fragen darüber gab, welche Metriken gut zu verwenden sind - wie este aber meine Frage bezieht sich eher darauf, welche Metriken nützlich sind an welche Interessengruppen y auf welcher Aggregationsebene .

Ich bin zum Beispiel der Meinung, dass die Codeabdeckung in den folgenden Punkten (und vielleicht auch in anderen) eine nützliche Kennzahl ist:

  • Für den internen Gebrauch eines Teams in Kombination mit anderen Messungen.
  • Zur Erleichterung/Ermöglichung/Mentoring Teams, wo es lehrreich sein könnte bei einer Betrachtung für jedes einzelne Team . als Trend (z. B. wenn Team A und B diesen Monat eine Deckung von 75 und 50 haben, würde ich mir mehr Sorgen um Team A als B, wenn sie im Vormonat 80 und 40 hatten).
  • Für die Geschäftsleitung wenn als aggregierter Wert dargestellt Statistik über eine Reihe von Teams oder eine ganze Abteilung.

Aber ich nicht Ich denke, dass es für die Geschäftsleitung nützlich ist, dies für jedes einzelne Team zu sehen, da dies zu künstlichen Versuchen ermutigt, die Abdeckung mit Tests zu erhöhen, die den Code lediglich üben, anstatt ihn zu testen.

Ich arbeite in einem Unternehmen mit einer mehrstufigen Managementhierarchie, in dem jedoch die überwiegende Mehrheit der Führungskräfte technisch versiert und fähig ist (wobei sich viele noch die Hände schmutzig machen). Einige der Entwicklungsteams sind führend bei der Einführung agiler Entwicklungspraktiken, aber andere hinken hinterher, und es gibt jetzt ein ernsthaftes Mandat von oben, dass dies die Arbeitsweise der Organisation sein soll. Einige von uns starten ein Programm, um dies zu fördern. Welche Art von Metriken halten Sie in einer solchen Organisation für sinnvoll, für wen, warum und auf welcher Aggregationsebene?

Ich möchte nicht, dass die Mitarbeiter das Gefühl haben, dass ihre Leistung auf der Grundlage einer Kennzahl bewertet wird, die sie künstlich beeinflussen können; gleichzeitig wird die Führungsebene eine Art von Beweis dafür haben wollen, dass Fortschritte gemacht werden. Welche Ratschläge oder Vorbehalte können Sie aufgrund der Erfahrungen in Ihren eigenen Organisationen geben?

EDIT

Wir wollen die Metriken auf jeden Fall als Instrument zur Verbesserung der Organisation nutzen und nicht als Instrument zur Messung der individuellen Leistung.

47voto

Paul Stephenson Punkte 63913

Eine Erzählung aus eigener Erfahrung. Entschuldigung für die Länge.

Vor ein paar Jahren hat unsere Entwicklungsgruppe versucht, "richtige" messbare Ziele für Einzelpersonen und Teamleiter festzulegen. Das Experiment dauerte nur ein Jahr, weil harte Messgrößen für individuelle Ziele nicht wirklich gut funktionierten (siehe meine Frage zu diesem Thema für einige Links und weitere Diskussionen).

Man beachte, dass ich Teamleiter war und zusammen mit meinem technischen Chef und den anderen Teamleitern an der Planung beteiligt war, so dass die Ziele nicht von oben herab von der ahnungslosen Geschäftsleitung diktiert wurden - wir wollten damals wirklich, dass sie funktionieren. Es ist auch erwähnenswert, dass die Bonusstruktur ungewollt den Wettbewerb zwischen den Entwicklern förderte. Hier sind meine Beobachtungen zu den Dingen, die wir ausprobiert haben.

Für den Kunden sichtbare Probleme

In unserem Fall zählten wir die Ausfälle bei den Dienstleistungen, die wir für die Kunden erbrachten. Bei einem eingeschweißten Produkt könnte es die Anzahl der von Kunden gemeldeten Fehler sein.

Vorteile: Dies war die einzige wirkliche Maßnahme, die für das obere Management sichtbar war. Sie war auch die objektivste, da sie außerhalb der Entwicklungsgruppe gemessen wurde.

Benachteiligungen: Es gab nicht viele Ausfälle - nur etwa einen pro Entwickler für das ganze Jahr - was bedeutete, dass das Erreichen oder Übertreffen des Ziels eine Frage der "Schuldzuweisung" für die wenigen Ausfälle war, die in jedem Team auftraten. Dies führte zu einem schlechten Gefühl und einem Verlust an Moral.

Umfang der abgeschlossenen Arbeiten

Vorteile: Dies war die einzige positiv messen. Alles andere war "wir merken, wenn etwas Schlimmes passiert", was demoralisierend war. Die Einbeziehung dieser Maßnahme war auch deshalb notwendig, weil ein Entwickler, der das ganze Jahr über nichts getan hat, alle anderen Ziele übertreffen würde, was eindeutig nicht im Interesse des Unternehmens wäre. Die Messung der abgeschlossenen Arbeit kontrollierte den natürlichen Optimismus der Entwickler bei der Einschätzung des Aufgabenumfangs, was nützlich war.

Benachteiligungen: Das Maß für die "abgeschlossene Arbeit" basierte auf Schätzungen, die von den Entwicklern selbst abgegeben wurden (was normalerweise eine gute Sache ist), aber die Einbeziehung in ihre Zielsetzungen ermutigte dazu, das System zu manipulieren und die Schätzungen aufzublähen. Wir hatten kein anderes brauchbares Maß für die abgeschlossene Arbeit: Meiner Meinung nach ist die einzig sinnvolle Art, die Produktivität zu messen, die "Auswirkung auf das Endergebnis des Unternehmens", aber die meisten Entwickler sind so weit vom direkten Verkauf entfernt, dass dies auf individueller Ebene kaum praktikabel ist.

Fehler im neuen Produktionscode gefunden

Wir haben Defekte gemessen eingeführt im Laufe des Jahres in den neuen Produktionscode einfließen, da man der Meinung war, dass Fehler aus den Vorjahren bei den diesjährigen Zielen nicht gegen eine Person angerechnet werden sollten. Fehler, die von internen Qualitätsteams entdeckt wurden, wurden auch dann gezählt, wenn sie keine Auswirkungen auf die Kunden hatten.

Vorteile: Erstaunlich wenige. Die Zeitspanne zwischen der Einführung eines Fehlers und seiner Entdeckung bedeutete, dass es eigentlich keinen unmittelbaren Feedback-Mechanismus zur Verbesserung der Codequalität gab. Makrotrends auf Teamebene waren nützlicher.

Benachteiligungen: Der Schwerpunkt lag auf dem Negativen, da dieses Ziel nur dann aufgerufen wurde, wenn ein Fehler gefunden wurde und wir jemanden brauchten, dem wir die Schuld dafür geben konnten. Die Entwickler zögerten, selbst gefundene Fehler zu erfassen, und eine einfache Zählung bedeutete, dass kleinere Fehler genauso schlimm waren wie schwere Probleme. Da die Anzahl der Fehler pro Person immer noch recht gering war, glich sich die Anzahl der leichten und schweren Fehler nicht aus, wie es bei einer größeren Stichprobe der Fall gewesen wäre. Alte Fehler wurden nicht berücksichtigt, so dass der Ruf der Gruppe hinsichtlich der Codequalität (basierend auf todo gefundene Wanzen) stimmte nicht immer mit der messbaren Anzahl der in diesem Jahr eingeführten Wanzen überein.

Pünktlichkeit der Projektabwicklung

Wir haben die Pünktlichkeit als den Prozentsatz der Arbeit gemessen, die den internen QA-Teams innerhalb der angegebenen Frist übergeben wurde.

Vorteile: Im Gegensatz zum Zählen von Fehlern war dies eine Maßnahme, die unter der unmittelbaren, direkten Kontrolle der Entwickler stand, da sie tatsächlich entschieden, wann die Arbeit abgeschlossen war. Das Vorhandensein des Ziels lenkte den Blick auf die Erledigung der Aufgaben. Dies half dem Team, sich zu realistischen Arbeitsmengen zu verpflichten, und verbesserte die Wahrnehmung der Fähigkeit der Entwicklungsgruppe, Versprechen einzuhalten, durch interne Kunden.

Benachteiligungen: Als einziges Ziel, das direkt unter der Kontrolle der Entwickler stand, wurde es auf Kosten der Codequalität maximiert: Am Tag des Abgabetermins würde der Entwickler, wenn er die Wahl hätte, eine Aufgabe für abgeschlossen zu erklären oder weitere Tests durchzuführen, um das Vertrauen in die Qualität der Aufgabe zu verbessern, sich dafür entscheiden, sie als abgeschlossen zu markieren und zu hoffen, dass die daraus resultierenden Fehler niemals an die Oberfläche kommen.

Reklamationen von internen Kunden

Um zu beurteilen, wie gut die Entwickler während der Entwicklung und des anschließenden Supports ihrer Software mit den internen Kunden kommunizierten, beschlossen wir, die Anzahl der über jede Person eingegangenen Beschwerden zu erfassen. Die Beschwerden sollten von der Führungskraft bestätigt werden, um mögliche Rachegelüste zu vermeiden.

Vorteile: Ich kann mich wirklich an nichts erinnern. Auf einer ausreichend großen Gruppenebene gemessen, ergibt sich ein nützlicherer Wert für die "Kundenzufriedenheit".

Benachteiligungen: Dies ist nicht nur äußerst negativ, sondern auch eine subjektive Maßnahme. Wie bei anderen Zielen lagen die Zahlen für jeden Einzelnen um die Nullmarke herum, was bedeutete, dass eine einzige Bemerkung über jemanden den Unterschied zwischen "unendlich übertroffen" und "nicht erfüllt" bedeuten konnte.

Allgemeine Bemerkungen

Die Bürokratie: Auch wenn unsere Aufgabenmanagement-Tools einen Großteil der Daten für diese Kennzahlen enthielten, war die Zusammenstellung der Daten immer noch mit einem erheblichen manuellen Aufwand verbunden. Die Zeit, die wir mit dem Zusammentragen all dieser Zahlen verbrachten, war nicht angenehm, konzentrierte sich im Allgemeinen auf negative Aspekte unserer Arbeit und wurde möglicherweise nicht einmal durch eine Produktivitätssteigerung wiedergewonnen.

Moral: Bei den Maßnahmen, bei denen Einzelpersonen für Probleme verantwortlich gemacht wurden, fühlten sich nicht nur die "schlechten" Teilnehmer demotiviert, sondern auch die "guten" Teilnehmer, da sie den Verlust der Team-Moral nicht gut fanden und manchmal das Gefühl hatten, dass sie nicht deshalb höher eingestuft wurden, weil sie besser waren, sondern weil sie mehr Glück hatten.

Zusammenfassung

Was haben wir also aus dieser Folge gelernt? In späteren Jahren versuchten wir, einige der Ideen wiederzuverwenden, allerdings auf eine "weichere" Art und Weise, bei der weniger die individuelle Schuld und mehr die Verbesserung des Teams im Vordergrund stand.

  • Es ist unmöglich, für einzelne Entwickler Ziele zu definieren, die objektiv messbar sind, einen Mehrwert für das Unternehmen darstellen und nicht manipuliert werden können, also versuchen Sie es erst gar nicht.
  • Kundenprobleme und Mängel können auf einer breiteren Teamebene gezählt werden, si Der Ort des Defekts liegt eindeutig in der Verantwortung dieses Teams, d. h., Sie müssen niemals die "Schuldfrage" stellen.
  • Wenn Sie Fehler nur auf der Ebene der Verantwortung für ein Codemodul messen, können (und sollten) Sie sowohl alte als auch neue Fehler messen, da es im Interesse dieser Gruppe liegt, alle Fehler zu beseitigen.
  • Die Messung der Fehlerzahlen auf Gruppenebene erhöht den Stichprobenumfang pro Gruppe, so dass Anomalien zwischen leichten und schweren Fehlern geglättet werden und ein einfaches Maß für die "Anzahl der Fehler" aussagekräftig ist, z. B. um zu sehen, ob Sie sich von Monat zu Monat verbessern.
  • Fügen Sie etwas hinzu, das der oberen Führungsebene wichtig ist, denn sie bei Laune zu halten, ist Ihr Hauptziel als Entwicklungsgruppe. In unserem Fall waren es die für den Kunden sichtbaren Ausfälle. Auch wenn die Maßnahme manchmal willkürlich oder scheinbar unfair ist, wenn die Chefs sie messen, müssen Sie sie auch zur Kenntnis nehmen.
  • Die obere Führungsebene braucht keine Kennzahlen zu sehen, die sie nicht in ihren eigenen Zielen hat. Auf diese Weise wird die Versuchung vermieden, einzelne Personen für Fehler verantwortlich zu machen.
  • Messung der Pünktlichkeit der Projektabwicklung hat das Verhalten der Entwickler zu ändern und den Schwerpunkt auf die Erledigung von Aufgaben zu legen. Dies verbesserte die Schätzung und ermöglichte es der Gruppe, realistische Versprechungen zu machen. Wenn es einfach wäre, die Informationen über die Aktualität zu sammeln, würde ich in Erwägung ziehen, es auf Teamebene erneut einzusetzen, um Verbesserungen im Laufe der Zeit zu messen.

All dies ist nicht hilfreich, wenn es darum geht, messbare Ziele für einzelne Entwickler festzulegen, aber hoffentlich sind die Ideen für die Verbesserung des Teams nützlicher.

19voto

mopoke Punkte 10307

Das Wichtigste bei Kennzahlen ist, dass man weiß, wofür man sie verwendet. Verwenden Sie sie als Mittel zur Verbesserung, zur Belohnung, zur Bestrafung usw. Es hört sich so an, als ob Sie sie als Instrument zur Verbesserung einsetzen wollen.

Oberstes Prinzip bei der Festlegung von Kennzahlen ist es, die Informationen so relevant zu halten, dass die Person, die sie erhält, sie zur Entscheidungsfindung nutzen kann. Höchstwahrscheinlich kann ein leitender Angestellter auf der Mikroebene nicht vorschreiben, ob Sie mehr Tests, weniger Komplexität usw. brauchen. Aber ein Teamleiter kann dies tun.

Daher glaube ich nicht, dass eine Messung der Codeabdeckung für das Management über das einzelne Team hinaus von Nutzen ist. Auf der Makroebene ist die Organisation wahrscheinlich daran interessiert:

  • Kosten der Lieferung
  • Rechtzeitigkeit der Lieferung
  • Umfang der Lieferung & externe Qualität

Interne Qualität steht nicht ganz oben auf der Liste der Dinge, die sie abdecken wollen. Es ist die Aufgabe eines Entwicklungsteams, deutlich zu machen, dass die interne Qualität (Wartbarkeit, Testabdeckung, Selbstdokumentation des Codes usw.) ein Schlüsselfaktor für das Erreichen der anderen drei Punkte ist.

Daher sollten Sie sich an höhere Führungskräfte wenden, die diese drei Bereiche abdecken, z. B:

  • Gesamtgeschwindigkeit (beachten Sie, dass der Vergleich von Geschwindigkeiten zwischen Teams oft künstlich ist)
  • Erwarteter vs. tatsächlicher Umfang innerhalb des vereinbarten Zeitrahmens
  • Anzahl der Produktionsfehler (möglicherweise pro Kopf)

Und messen Sie Dinge wie Codeabdeckung, Codekomplexität, Cut 'n' Paste Score (Codewiederholungen mit Flay oder ähnlichem), Methodenlänge usw. auf Teamebene, wo die Empfänger der Informationen wirklich etwas bewirken können.

4voto

Dave Kirby Punkte 24272

Eine Kennzahl ist eine Möglichkeit, eine Frage zu einem Projekt, einem Team oder einem Unternehmen zu beantworten. Bevor Sie sich auf die Suche nach den Antworten machen, müssen Sie entscheiden, welche Fragen Sie stellen wollen.

Typische Fragen sind:

  • wie hoch ist die Qualität unseres Codes?

  • Verbessert oder verschlechtert sich die Qualität im Laufe der Zeit?

  • Wie produktiv ist das Team? Verbessert es sich oder verschlechtert es sich?

  • Wie wirksam sind unsere Tests?

  • ...und so weiter.

Für die Beantwortung jeder Frage ist ein anderer Satz von Metriken erforderlich. Das Sammeln von Kennzahlen, ohne zu wissen, welche Fragen Sie beantwortet haben wollen, ist im besten Fall Zeitverschwendung und im schlimmsten Fall kontraproduktiv.

Sie müssen sich auch darüber im Klaren sein, dass ein "Unschärfeprinzip" am Werk ist - wenn Sie nicht sehr vorsichtig sind, wird die Erhebung von Kennzahlen das Verhalten der Menschen verändern, oft auf unerwartete und manchmal nachteilige Weise. Dies gilt insbesondere dann, wenn die Mitarbeiter glauben, dass sie anhand der Kennzahlen bewertet werden, oder noch schlimmer, wenn die Kennzahlen mit einem Belohnungs- oder Bestrafungsschema verbunden sind.

Ich empfehle die Lektüre von Gerald Weinbergs Qualitätssoftwaremanagement Band 2: Messung erster Ordnung . Er geht sehr detailliert auf Software-Metriken ein, sagt aber, dass die wichtigsten oft das sind, was er "Zero Order Measurement" nennt - die Leute nach ihrer Meinung zu fragen, wie ein Projekt läuft. Alle vier Bände der Reihe sind teuer und schwer zu bekommen, aber es lohnt sich.

4voto

martinr Punkte 3664

Software schreiben

  • Was muss optimiert werden?

CPU(s)-Nutzung, Arbeitsspeicher-Nutzung, Speicher-Cache(s)-Nutzung, Benutzerzeit-Nutzung, Codegröße zur Laufzeit, Datengröße zur Laufzeit, Grafikleistung, Dateizugriffsleistung, Netzzugriffsleistung, Bandbreitennutzung, Codepräzision und -lesbarkeit, Stromverbrauch, (Anzahl) verschiedener verwendeter API-Aufrufe, (Anzahl) verschiedener verwendeter Methoden und Algorithmen und vielleicht noch mehr.

  • Wie stark muss sie optimiert werden?

Sie muss so weit optimiert werden, wie es für das Bestehen von Abnahmeprüfungen, die Erleichterung der Wartung, die Erleichterung von Audits und die Erfüllung der Benutzeranforderungen erforderlich ist (außer in Bereichen, in denen ein Übertreffen der Abnahmekriterien wünschenswert ist).

("... für legale/illegale Eingabetestdaten und legale/illegale Testereignisse in allen Testzuständen bei allen erforderlichen Testdatenvolumen und Testanforderungsvolumen für alle aktuellen und zukünftigen Testintegrationsszenarien.")

  • Warum der angemessene Mindestbetrag?

Denn optimierter Code ist schwieriger zu schreiben und kostet daher mehr.

  • Welche Führung ist erforderlich?

Kodierungsstandards, Grundstruktur, Akzeptanzkriterien und Hinweise zum erforderlichen Optimierungsgrad.

Wie kann der Erfolg beim Schreiben von Software gemessen werden?

  • Kosten
  • Zeit
  • Abnahmetest bestanden
  • Ausmaß, in dem die Akzeptanztests, die übertroffen werden sollen, übertroffen werden
  • Genehmigung durch den Benutzer
  • Einfache Wartung
  • Leichtigkeit der Prüfung
  • Grad der Abwesenheit von Über-Optimierung

Welche Kosten/Zeit sollten bei der Bewertung der Gesamtleistung von Unternehmen ignoriert werden? Programmierer ?

  • Verschwendete Kosten/Zeit aufgrund von Änderungen der Anforderungen (inkl. Architektur)
  • Zusätzliche Kosten/Zeit aufgrund von Mängeln der Plattformen/Werkzeuge

Diese Kosten/Zeit sollten jedoch in die Bewertung der Gesamtleistung von Teams (einschließlich Architekten, Manager).

Wie kann der Erfolg von Architekten gemessen werden?

Andere Maßnahmen plus:

  • Fälle, in denen das "frühzeitige Vermeiden" durch Unzulänglichkeiten der Plattformen/Werkzeuge beeinträchtigt wird
  • Grad der Abwesenheit von Veränderungen in der Architektur

2voto

VonC Punkte 1117238

Wie ich bereits in Was ist die Faszination der Code-Metriken? Die Metriken umfassen:

  • verschiedene Populationen Das bedeutet, dass der Umfang des Interesses für Entwickler und Manager nicht derselbe ist.
  • Trends Das bedeutet, dass jede Messgröße an sich ohne den zugehörigen Trend bedeutungslos ist, um die Entscheidung zu treffen, danach zu handeln oder sie zu ignorieren.

Wir verwenden ein Tool, das dies ermöglicht:

  • eine Menge Metriken auf Mikroebene (interessant für Entwickler), mit Trends.
  • eine Vielzahl von Regeln mit mehrstufigen (UI, Daten, Code) statischen Analysemöglichkeiten
  • eine Menge Aggregationsregeln (d. h. diese große Anzahl von Metriken wird in mehreren Domänen von Interessen, angemessen für höhere Bevölkerungsgruppen)

Das Ergebnis ist eine Analyse, die von der Aggregation auf hoher Ebene bis hin zum Drilldown reichen kann Domänen (Sicherheit, Architektur, Praktiken, Dokumentation, ...) bis hin zu einigen Codezeilen.

Das aktuelle Feedback ist:

  • Projektleiter können sehr schnell in die Defensive geraten, wenn einige Regeln nicht eingehalten werden, und ihre Gesamtnote deutlich senken.
    Jede Studie muss neu zugeschnitten werden, um die Besonderheiten jedes Projekts zu berücksichtigen.
    Der Vorteil ist die Definition eines Vertrags, in dem Ausnahmen anerkannt, aber einzuhaltende Regeln festgelegt werden.
  • Die übergeordneten Ebenen (IT-Abteilung, Interessenvertreter) verwenden die globalen Notizen nur als ein Element ihrer Bewertung der erzielten Fortschritte.
    Sie werden andere Elemente auf der Grundlage von Lieferzyklen genauer unter die Lupe nehmen: Wie oft sind wir in der Lage, eine Anwendung zu iterieren und in Produktion zu bringen, wie viele Fehler mussten wir vor der Veröffentlichung beheben? (im Sinne von Zusammenführungen oder im Sinne von nicht korrekt eingerichteten Vorproduktionsumgebungen), welche unmittelbaren Rückmeldungen werden durch eine neue Version einer Anwendung erzeugt?

Also:

welche Metriken für welche Interessengruppen nützlich sind und auf welcher Aggregationsebene

Auf hohem Niveau:

  • die (statischen Analyse-)Metriken sind das Ergebnis von Metrik-Aggregationen auf niedriger Ebene und nach Bereichen geordnet.
  • Andere Metriken (mehr " betriebsorientiert ", basierend auf dem Veröffentlichungszyklus der Anwendung, und nicht nur bei der statischen Analyse des Codes) berücksichtigt werden
  • Der tatsächliche ROI wird durch andere Maßnahmen erreicht (wie six-sigma Studien)

Auf der unteren Ebene:

  • die statische Analyse reicht aus (muss aber Anwendungen auf mehreren Ebenen umfassen, die manchmal in mehreren Sprachen entwickelt werden)
  • die Aktionen werden von den Trends und der Bedeutung gesteuert
  • die Studie muss von allen Hierarchieebenen gebilligt/unterstützt werden, damit sie akzeptiert/umgesetzt werden kann (insbesondere muss das Budget für die anschließende Überarbeitung validiert werden)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X