Frage

Ich versuche, ein Repository von wieder verwendbaren Code zu installieren. Ich dachte über jedes wieder verwendbare Code-Modul eine gewisse „Reifegrad“ -Rating haben müssen. Das Rating würde als die Ebene definiert werden, bei dem ein wiederverwendbarer Code innerhalb einer bestimmten Reihe von Anforderungen liegt. Der höchste Reifegrad wird über einen vordefinierten Satz von Anforderungen der höchste Standard sein.

Zum Beispiel:
Niveau; Bedarf; Beschreibung
Stufe 0; Code ist legal zu verwenden; Ist der Code legal in der gewerblichen Industrie nutzen / über mehrere Verträge / etc?
Level 1; Base Kodierzeilen und erfüllt Ebene 0 Anforderungen; Prototypisiert Code, 3rd-Party-Tools, etc
Level 2; Hat Function Interface und Kommentare und erfüllt Ebene 1 Anforderungen; Eine ausreichende Dokumentation für jede Klasse und Funktion; Able Funktionalität von Kommentaren
bestimmen Stufe 3; Haftet auf Coding-Standards und erfüllt Level 2 Anforderungen; Folgt definiert Codierungsstandards und übergibt Code Überprüfung Dienstprogramm Test
Level 4; Inklusive Testfälle und erfüllt Level 3 Anforderungen; Hat genügend Testfälle alle Funktionen von Code zu testen
Level 5; Genehmigt durch Wiederverwendung Ausschuss und erfüllt Ebene 4 Anforderungen; Bewertet von Wiederverwendung Experten und Kollegen und verified erfüllt es alle Ebenen der Reife

Ich frage mich, ob diese Reifegrade sollen eine hierarchische Struktur sein, wo, um Sie auf die nächste Ebene zu bewegen, müssen die Anforderungen aller vorherigen Ebenen gerecht zu werden (wie ich oben gezeigt habe)?

Oder wenn es eine Teilmenge von Anforderungen sollte das nächste Level zu erreichen?

Zum Beispiel haben wir treffen x aus y Anforderungen können wir auf die nächste Ebene bewegen (Anforderungen wäre das gleiche, wie oben erwähnt).

Ebene 0, erfüllt 0 von 6 Anforderungen
Stufe 1 erfüllt 1 von 6 Anforderungen
...

Das Problem, das ich mit dem Subset Ansatz sehen ist einige Anforderungen eine stärkere Gewichtung haben sollten, und in diesem Ansatz, der nicht berücksichtigt werden (es sei denn, ich wie immer bestimmte beginnen, trifft eine aus b und x aus y, usw). Aber dann könnte es beginnen, kompliziert werden.

Hat jemand zuvor getan, und wenn ja, wie haben Sie Ihre Bibliothek Setup? Haben Sie eine Reifegrad überhaupt oder eine andere Struktur? Jeder Eingang würde sehr geschätzt werden.

War es hilfreich?

Lösung

eine Wiederverwendung von Code-Repository einrichten, ist eine schwierige Aufgabe. Die größte Schwierigkeit ist nicht, wie Sie es einrichten, aber in , wie Sie die Existenz der verschiedenen Bibliotheken im Repository kommunizieren. Reuse Bibliotheken nur gut, wenn sie verwendet werden, und sie werden nur dann verwendet, wenn sie bekannt sind, und sie sind nur weit verbreitet, wenn die Qualität des Codes verwendet hoch ist, und wenn sie den Bedürfnissen der Nutzer gerecht wird.

Ich mag die Idee von Reifegrade, aber wie andere geschrieben haben, gibt es wahrscheinlich ziemlich viel setup / bauen Arbeit zu tun. Ich habe gedacht, einen ähnlichen Ansatz zu einer Anwendung baut - ich sie Vertrauen Ebene genannt. Bei der Anwendung-build-Arena, ein geringeres Vertrauen zu bauen ist eine, die nicht Unit-Tests bestanden hat; ein mittleres Vertrauen könnte vorbei Unit-Tests, aber nicht Integrationstests umfasst, und so weiter. Das war ein guter Mechanismus für die Kommunikation mit QA und Benutzer, was zu erwarten. Ein ähnlicher Mechanismus könnte für Bibliotheken geeignet sein.

Dokumentation Kommentare sind ein Muss, und muss auch so viel Sorgfalt in sie haben, wie Sie in den Code setzen. Die Kommentare sollten kommunizieren, was, warum, wo, wann, wie, was, etc. Ihr Build-Prozess in die Dokumentation zu einem bekannten Ort veröffentlichen soll (wieder, Kommunikation ist der Schlüssel).

Nach dem Vorbild der Kommunikation, es tut nicht weh zum heutigen Zeit zu Zeit genau das, was es ist. Nochmal! Kommunikation.

Also, auf ein Minimum Build jeder Bibliothek sollte:

  • veröffentlicht die Bibliothek (vielleicht Abonnenten benachrichtigen)
  • Veröffentlichen der Dokumentation
  • run Unit-Tests
  • veröffentlichen den Reifegrad

In Bezug auf Reifegrade, ich würde sie mit einem „-Niveau Namen“ definieren und eine Beschreibung dessen, was der Ebene bedeutet. Veröffentlichen Sie die Kriterien für das, was es bedeutet, nach oben oder unten ein Niveau. Eigentlich jetzt, wo ich darüber nachdenke, vielleicht Sie einen Satz orthogonaler Kriterien wollen: eine Ebene für den Code, eine Ebene für die Dokumentation, Gebrauchsrichtlinien (d muss eine Lizenz für XYZ haben) und andere Attribute. Ich empfehle Ihnen diesen Ansatz in kleinen Schritten aber. Am Ende des Tages, Funktionalität liefert an Endverbraucher ist, was zählt.

Sie haben auch eine Mentalität kommunizieren natürlich wieder verwendbare Bits in das Repository schieben. Die Entwickler haben Anreiz haben, dies in der Regel zu tun. Statische Code-Checking-Tools, die nur für die Vervielfältigung und Peer-Reviews schauen so weit gehen. Jemand hat tatsächlich die Arbeit machen von Code in das Repository zu bewegen.

Schließlich empfehle ich, dass Sie so viel Werkzeugunterstützung wie möglich im Setup verwenden, bauen, Wartung und Kommunikation des Repository. Ansonsten wie jeder nicht-Code Artefakt, erhalten Sie eine bestimmte Menge an Entropie gegenüber, die den Wert als der Nicht-Code Artefakt verringert wird datiert.

Andere Tipps

Ich glaube, Sie finden es schwierig, sicherzustellen, dass das gesamte Entwicklungsteam genau genug, um diese Richtlinien folgt. Vor allem, wenn die Richtlinien können eine oder andere Weise interpretiert werden. Darüber hinaus wird es ein großer Schmerz sein, wenn jemand ein Stück Code verbessert durch Tests Hinzufügen und plötzlich hat es in ein anderes Projekt zu bewegen. Wahrscheinlicher als nicht, einen solchen Code in das Projekt bleiben wird, wurde in ursprünglich gelegt, und im Laufe der Zeit werden die Reifegrade bedeutungslos geworden.

Ein Ansatz, den ich in einem großen Unternehmen sah gut funktioniert, ist dies:

  • Alle Bibliotheken von Drittanbietern zu einem speziellen Verzeichnis begangen werden und immer auch eine Versionsnummer.
  • Unsere eigenen gemeinsamen Bibliotheken aufgeteilt, basierend auf den Referenzen sie müssen andere Dinge. Z.B. wenn das Dienstprogramm Code der Infragistics Bibliothek dann dieses Bit von Utility-Code verweist geht in eine InfragisticsUtils Bibliothek.
  • Unsere eigenen gemeinsamen Bibliotheken, die in separate Bibliotheken eindeutig identifizierbar „Einheiten“ gehen bilden. Zum Beispiel kann eine Bibliothek von Code, der mit dem Preis Wertpapieren befaßt, ist ein eigenständiges Projekt.
  • Alle wiederverwendbaren Code, der nicht eine der oben genannten nicht erfüllt geht in eine Catch-All Utilities Projekt.
  • Unsere eigenen Bibliotheken zusammengestellt und an einem gemeinsamen Standort freigegeben, wo Projekte sie verweisen können. Es ist an das Entwicklungsteam die Projekte zu entscheiden, ob sie eine kompilierte binäre verweisen möchten oder fügen Sie einfach das Dienstprogramm Projekt in ihre Lösung.

Offensichtlich ist die Qualität des Codes Sie in der catch-all Utilities Bibliothek finden kann erheblich variieren. Um dies zu lindern wir dafür gesorgt, dass nur zwei Menschen aus verschiedenen Entwicklungsteams alle checkins prüft Utilities. Dieses Unkraut eine Menge Sachen aus, die keinen Platz dort hat!

ich denke, ein großer Code-Repository würde ein CM-Tool und ein Wiki-Tool enthalten. Das CM-Tool sollte das Niveau Idee strukturiert werden (wie Sie vorgeschlagen), da sie Strukturen den Code durch Qualität. Das Wiki soll als „Anzeige“ von handeln, was die Software tun kann und wie es Ihnen helfen. Dieses Wiki könnte auch Informationen halten wie, welche Projekte den Code verwenden, Bewertung, wie brauchbar ist, und Beispiele dafür, wie es zu benutzen. Wenn jemand besorgt über das Entwicklungsteam im Anschluss an der Ebene Leitlinien ist, sollte darauf hingewiesen werden, wie Selbstpolizeiarbeit funktioniert und gibt das Beispiel dafür, wie gut es funktioniert mit Wikis.

Nun ist die Strukturierung des CM-Tool wichtig. Es wurde entwickelt, um die Qualität des Codes zu vermitteln, so dass Sie wissen, was Sie in erhalten, wenn Sie es verwenden. Zum Beispiel, wenn Sie eine einfache Klasse mit kaum Kommentare schreiben und sie nicht wirklich wahren Standards Codierung (vielleicht ein Prototyp), dann wäre es in \ sw_repository \ level0 \ ExamplePrototype eingegeben werden.

Vielleicht hat jemand nimmt dann das Stück Code und Kommentare hinzugefügt und bringt es auf Standard. Dann würde diese Person legen Sie es in \ sw_repository \ ebenen1 \ ExamplePrototype.

Dann die gleiche Person, eine Weile später, schafft Unit-Tests für die ExamplePrototype. Dies würde dann zu Level2 gehen und so weiter.

die Ebenen definieren sollten einige Gedanken nehmen. Sie sollen wirklich etwas sequentiell sein und auch wenn Sie zum Beispiel Unit-Tests für den Prototyp Code geschrieben hatte, aber es genügt nicht, die Kommentare und Codierungsstandard dann ist es sowieso in level0 platziert. Aber es wäre leicht zu Level2 gehen, wenn diese Kommentare und Standards erfüllt wurden.

Für meine Bibliothek, ich habe gerade in Code zu setzen, die ich schrieb, dass kann über mehrere Anwendungen verwendet werden. Wenn Code spezifisch für eine bestimmte Anwendung ist dann geht es nicht in die Bibliothek. Da immer mehr Anwendungen es verwenden, erhalten die Bugs ausgearbeitet, so dass ich nie erwartet, dass es fehlerfrei sofort sein. Bugs werden ständig gefunden und fixiert, wie Ihre Bibliothek reift und wird mit verschiedenen Anwendungen betont. Es wird nie fehlerfrei sein, aber im Laufe der Zeit die Zuverlässigkeit nähern. Auch wenn ich merke, dass API für einige Sachen falsch ist, ich weiß nicht darum kümmern und die API so schnell wie möglich Refactoring.

Hier ist meine Bibliothek in C ++
http://code.google.com/p/kgui/

Seit Jahren hat Microsoft ein großer Verfechter gewesen für das, was bekannt ist als Software Factories , ein großer Teil davon widmet sich die Probleme der Wiederverwendung zu lösen.

Was sind die Probleme der Wiederverwendung? Zunächst einmal ist es schwer. Es ist sehr schwer zu kommen mit einer Bibliothek und API, die über die unmittelbaren Bedürfnisse des Projektes zur Hand dienen. Wie vorhersagen Sie die Zukunft? das Problem eines zentralen Repository auch, die sowohl als Wissensbasis und eine lebendige Gemeinschaft der Praxis dient, ist sehr anspruchsvoll. Wie machen Sie etwas, das beide sehr flexibel und dennoch einfach zu bedienen ist? Viele haben versucht und sind gescheitert. Beide Software Fabriken und Software-Produktlinien Versuch diese Probleme zu lösen.

Viel Glück!

Kit erwähnt das wichtigste Problem: die Wiederverwendung . der Rest der Idee ist nett, aber es ist nicht mehr als ein Detail.

Ich meine, ich selbst Schwierigkeiten haben, meine eigene Bibliothek wieder verwendbaren Komponenten beibehalten wird. manchmal muss ich eine Implementierung, die sehr projektspezifisch ist, oder ich tun, um die n-te Prototyp für eine Vorstellung, und keiner von denen bekommt jemals in meiner Bibliothek.

Wenn Sie wirklich erfolgreich in einer Wiederverwendung von Code-Bibliothek mit, wird diese verwendet und gepflegt von vielen Entwicklern, in einer disziplinierten Art und Weise, als dass der Sieg ist. Sie benötigen ein Versionskontrollsystem und einen Bug-Tracker, wobei die letztere von beiden Bauherren und Nutzern genutzt. Sie müssen die Kommunikation und die Mittel des Beitrags. ein Projekt mit dramatisch verbessert seine Qualität eine Handvoll Devs haben. Implementierung wird besser. Dokumentation erstellt. API und Feature-Design sind auf einem viel höheren Niveau. ein Komitee ist eine schöne Sache, aber es kann sich nicht entscheiden, wie gut Code gegeben ist, ohne es tatsächlich verwendet wird. es kann entscheiden, ob der Code bestimmte Standards erfüllt werden, aber Standards erfüllt ist für gute Bibliotheken nicht ausreichend.

Sie müssen Ihr Bestes tun, um sicherzustellen, Sie haben nicht Tonnen von Code-Schnipsel im Umlauf, die alle mehr oder weniger etwas tun kann. ok, jede Design-Entscheidung hat Vor- und Nachteile, aber ich denke, es macht mehr Sinn, mit einem Projekt für eine bestimmte Aufgabe zu starten, und verzweigen es, wenn es wirklich notwendig, aber am Leben Kommunikation zwischen Projektteams halten und betrachtet (teilweise) verschmelzenden zurück.

keine Sorge zu viel über die Qualität verschiedenen Projekte zu kategorisieren. wenn ein Projekt schlecht ist, dann Benutzer / Devs wird es zu einem besseren Niveau drücken. die meisten Menschen sind klug genug, um zu sehen, wenn eine Bibliothek gut ist, und wenn es nicht ist. Sie wirklich brauchen, um Ihre Energie in diesen symbiotischen Effekte zu setzen, anstatt mit strengen Regeln zu belasten Teilnehmer versuchen.

nur meine 2 Cent ...;)

Schauen Sie sich Will Tracz die "Bekenntnisse eines Gebraucht Programm Salesman" und Sachen von HP Wiederverwendung Rabbi, Martin Griss.

Ich glaube, Sie in einem nicht Problem zu viel denken.

Wie haben Sie Setup meiner Bibliothek? Einfach, wenn Sie die gleiche (oder fast gleich) Verfahren in zwei oder mehreren Projekten zu verwenden, verschieben Sie sie in die Bibliothek.

Es ist guter Ansatz betrachtet die eigene Bibliothek zu haben, aber eine tausend Zeilen sind eine Ruine!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top