Gibt es einen richtigen Weg, um eine kontinuierliche Verbesserung (AKA Software Verhärtung) Prozess zu implementieren?

StackOverflow https://stackoverflow.com/questions/1835622

Frage

Jeder neue Version scheint es, dass unsere Kunden ein paar alten Probleme mit unserer Software. Es macht es aussehen wie jedes Release mehrere Bugs hat, wenn sie in Wirklichkeit unseres neuen Codes im Allgemeinen fest ist.

Wir haben versucht, einige zusätzliche Tests zu implementieren, wo wir Tester mehrere Stunden monatlichen Regressionstests auf einer einzigen App in dem Bemühen, jeden Monat zu tun haben vor kleine Probleme zu bleiben. Wir bezeichnen diesen Prozess als unsere Software Härtungsprozess, aber es scheint nicht, wie wir genug von den Bugs zu kontrollieren und es fühlt sich an wie ein sehr lange Bank Prozess, da es immer neue Code zu schreiben.

Gibt es einen Trick, um diese Art von Tests? Muss ich eine bestimmte Funktion zu einem Zeitpunkt, zielen?

War es hilfreich?

Lösung

Wenn Sie Ihre Testverfahren entwickeln, können Sie diese Art von Tests implementieren möchten:

  • Unit-Tests (invididual Komponenten Ihres Projekts testen ihre Funktionalität zu testen), sind diese Tests wichtig, weil sie ermöglicht es Ihnen, in der Software genau zu bestimmen, wo der Fehler kommen mag. Im Grunde genommen in diesen Tests erhalten Sie eine einzelne Funktionalität testen und Mock-Objekte verwenden, um das Verhalten zu simulieren, Rückgabewert von anderen Objekten / Einheiten.

  • Regressionstests, die Sie erwähnen

  • Charakterisierung Tests, könnte ein Beispiel für automatisch generierte Eingang das Programm automatisch ausgeführt werden (Simulation der Benutzereingabe), um die Ergebnisse zu speichern und die Ergebnisse jeder Version gegen diese Ergebnisse vergleichen.

Am Anfang wird dies sehr schwer sein in Stelle zu setzen, aber mit mehr Releases und mehr Bugs beheben wobei auf die automatisierten Nicht-Regressionstests hinzugefügt, sollten Sie Zeit zu sparen beginnen.

Es ist sehr wichtig, dass Sie nicht von der Gestaltung große Zahl von stummen Tests in der Falle tappen. Die Tests sollten Ihr Leben leichter machen, wenn Sie zu viel Zeit Verständnis verbringen, wo die Tests gebrochen haben, sollten Sie die Tests neu zu gestalten, wie sie Ihnen bessere Nachrichten / Verständnis des Problems, so dass Sie schnell das Problem finden können.

Ihre Umgebung Je können diese Tests in den Entwicklungsprozess eingebunden werden.

In meiner Umgebung verwenden wir SVN für Versionierung, ein Bot führt die Tests gegen jede Revision und gibt die vorgeschriebenen Prüfungen nicht und Nachrichten mit dem Namen der Revision, die sie und die contributor (seine Login) brach.

EDIT:

In meiner Umgebung verwenden wir eine Kombination von C ++ und C # Analytik in den Bereichen Finanzen zu liefern, der Code war C ++ und ist ziemlich alt, während wir versuchen, die Schnittstellen zu C # zu migrieren und den Kern der Analytik in C halten ++ ( vor allem wegen der Geschwindigkeitsanforderungen)

Die meisten der C ++ Tests sind handgeschriebene Unit-Tests und Regressionstests.

Auf der C # Seite wir NUnit für Unit-Tests verwenden. Wir haben ein paar allgemeine Tests.

Wir haben eine 0 Warnungen Politik, wir ausdrücklich verbieten Menschen Code zu begehen, die Warnungen generiert, wenn sie nicht rechtfertigen können, warum es sinnvoll ist, um die Warnung für diesen Teil des Codes zu umgehen. Wir haben auch Konventionen über Ausnahme Sicherheit, die Verwendung von Design Patterns und viele andere Aspekte.

Einstellung explizit Konventionen und Best Practices ist ein weiterer Weg, um die Qualität des Codes zu verbessern.

Andere Tipps

  

Gibt es einen Trick, um diese Art von Tests?

Sie sagten: „Wir haben Tester mehrere Stunden monatlichen Regressionstests auf einer einzigen App tun jeden Monat in einer Bemühung voraus kleine Probleme zu bleiben.“

Ich denke, dass durch „Regressionstest“ Sie „manuell Ausübung alte Funktionen“ bedeuten.

Sie sollten entscheiden, ob Sie für alte Fehler gesuchte, die vor nie gefunden haben (was bedeutet, laufen Tests, die Sie noch nie zuvor habe laufen); oder , ob Sie vorher geführte Tests sind zu wiederholen, um sicherzustellen, dass zuvor getestet Funktionalität unverändert ist. Dies sind zwei entgegengesetzte Dinge.

„Regressionstest“ bedeutet für mich, dass Sie sich für Letzteres tun.

Wenn das Problem ist, dass „Kunden ein paar alten Probleme mit unserer Software finden“, dann entweder Ihre Kunden Tests laufen, die Sie nie zuvor (in diesem Fall ausgeführt haben, um diese Probleme zu finden, führen Sie müssen new Tests der alten Software), oder sie Fehler sind zu finden, die Sie wurde vorherigen getestet und, die man aber anscheinend nie behoben, nachdem Sie sie gefunden.

  

Muss ich eine bestimmte Funktion zu einem Zeitpunkt, zielen?

Was sind Sie versuchen zu tun, genau:

  • Finden Sie Bugs, bevor die Kunden sie finden?
  • überzeugen Kunden, dass es wenig falsch mit der neuen Entwicklung?
  • Verbringen Sie so wenig Zeit wie möglich auf das Testen?

Sehr allgemeine Beratung ist, dass Fehler in Familien leben: so, wenn Sie einen Fehler finden, sucht seine Eltern und Geschwister und Cousins, zum Beispiel:

  • Sie können diese exakt die gleichen Fehler in anderen Modulen haben
  • Dieses Modul könnte instabiler als andere Module (geschrieben von somone auf einem freien Tag, vielleicht), so dass für jede andere Art von Fehlern in diesem Modul
  • Vielleicht ist dies einer von einer Klasse von Problemen (Performance-Probleme, oder Low-Memory-Probleme), die einen ganzen Bereich (oder ganze Art von Anforderung) schlägt vor, die eine bessere Testabdeckung
  • braucht

Andere Beratung ist, dass es mit der Verwaltung von Kundenerwartungen zu tun ist: Sie sagen: „Es macht es aussieht wie jedes Release mehr Bugs hat, wenn unser neuer Code in der Realität im Allgemeinen fest ist,“ als ob das eigentliche Problem die falsche Wahrnehmung ist, dass der Fehler wird neu geschrieben.

  

es fühlt sich an wie ein sehr langer Bank Prozess, da es immer neuer Code zu schreiben

Software develoment nicht geschieht im Hintergrund, auf einem Brenner: entweder jemand arbeitet daran, oder sie sind es nicht. Das Management muss entscheiden, ob jemand diese Aufgabe zuweisen (dh sucht bestehende zuvor unfound Bugs oder fix-vorher-gefunden-aber-noch-nicht-gemeldeten Fehler), oder ob sie es vorziehen, auf neue Entwicklung zu konzentrieren und lassen Sie die Kunden tun, um die Fehler-Erfassungs.


Edit: Es lohnt sich, dass das Testen zu erwähnen ist nicht der einzige Weg, um Fehler zu finden. Es gibt auch:

  • Informal Design Bewertungen (35%)
  • Formal Design Kontrollen (55%)
  • Informal Code-Reviews (25%)
  • Formal Code-Inspektionen (60%)
  • Personal Schreibtisch Überprüfung des Codes (40%)
  • Unit-Test (30%)
  • Komponententest (30%)
  • Integrationstest (35%)
  • Regressionstest (25%)
  • Systemtest (40%)
  • Low Volume Beta-Test (<10 Seiten) (35%)
  • High-Volume-Beta-Test (> 1000 Seiten) (70%)

Der Prozentsatz, den ich neben jedem stellen ein Maß für die Defekt-Entfernungsrate für jede Technik ist (ab Seite 243 von McConnel ist genommen Software Estimation Buch). Die beiden effektivsten Techniken scheinen formale Code-Inspektion und hochvolumigen Beta-Tests zu sein.

So könnte es eine gute Idee sein, formalen Code-Reviews einzuführen. Das könnte besser sein, bei Defekten als Black-Box-Tests erfaßt wird,

Sobald Ihre Codierung endet, sollten Sie zunächst für die Unit-Tests gehen. Dort finden Sie einige Fehler erhalten, die behoben werden soll, und Sie sollten eine weitere Runde von Unit-Tests durchführen zu finden, wenn neue Fehler gekommen ist oder nicht. Nachdem Sie Unit-Tests zu beenden, sollten Sie für die Funktionsprüfung gehen.

Sie hier erwähnt, dass Ihre Tester auf monatlicher Basis Regressionstests durchführen und immer noch gibt es alte Fehler herauskommen. So ist es besser, mit dem Tester zu sitzen und die Testfälle zu überprüfen, wie ich das Gefühl, dass sie müssen regelmäßig aktualisiert werden. setzt Stress auch bei der Überprüfung, auf dem Modul oder Funktionalität Bugs kommt, werden. Stress auf diesen Gebieten und mehr Testfälle in diesen Bereichen hinzuzufügen und in Ihrem rgression Testfälle hinzufügen, so dass, sobald neue Build kommt sollten diese Testfälle ausgeführt werden.

Sie können versuchen, eine weitere Sache, wenn Ihr Projekt ein langfristiges ist, dann sollten Sie mit dem Tester sprechen die Regressionstestfälle zu automatisieren. Es werden Ihnen helfen, die Testfälle bei Ausschaltzeit wie Nacht und am nächsten Tag laufen, um die Ergebnisse zu erhalten. Auch sollten die Regressionstestfälle aktualisiert werden, da das große Problem kommt, wenn Regressionstestfälle werden nicht regelmäßig aktualisiert und durch alte Regressionstestfälle laufen und neue Progression Testfälle Sie einige Module fehlen, die nicht getestet werden.

Es gibt viel Gerede hier über Unit-Tests und ich kann nicht mehr zustimmen. Ich hoffe, dass Josh versteht, dass Unit-Tests ein mechanisierter Prozess. Ich bin nicht einverstanden mit PJ, dass Unit-Tests sollten vor der Codierung der App und nicht nach geschrieben werden. Dies wird TDD oder Test Driven Development genannt.

Einige Leute schreiben Unit-Tests, die die mittlere Ebene Code aber vernachlässigen die Prüfung der GUI-Code auszuüben. Das ist unklug. Sie sollten Unit-Tests für alle Ebenen in der Anwendung schreiben.

Da Unit-Tests auch Code sind, gibt es die Frage der QA für Ihren Test-Suite. Ist der Code-Abdeckung gut? Gibt es Fehlalarme / Negative Fehler in den Unit-Tests? Testen Sie die richtigen Dinge? Wie beurteilen Sie die Qualität Ihrer Qualitätssicherung gewährleisten? Grundsätzlich ist die Antwort auf diese Frage kommt zu Peer-Review und kulturelle Werte nach unten. Jeder im Team hat guten Test Hygiene verpflichtet werden.

Je früher ein Fehler in das System eingeführt wird, desto länger bleibt im System, desto schwieriger und teurer ist es, sich zu entfernen. Deshalb sollten Sie schauen in sollte, was als kontinuierliche Integration bekannt ist. Wenn richtig eingerichtet ist, bedeutet die kontinuierliche Integration, dass das Projekt mit der vollständigen Suite von Unit-Tests und läuft kurz zusammengestellt wird, nachdem Sie für den Tag in Ihren Änderungen überprüfen.

Wenn die Build-oder Unit-Tests fehlschlagen, dann wird die säumigen Coder und der Build-Master erhalten eine Benachrichtigung. Sie arbeiten mit dem Team zu führen, um zu bestimmen, was die am besten geeignete Kurskorrektur sein sollte. Manchmal ist es so einfach wie das Problem zu beheben und prüfen Sie das Update in. Ein Build-Master und Teamleiter muss sich engagieren keine übergeordnete Muster zu identifizieren, die zusätzliche Eingriffe erfordern. Zum Beispiel kann eine Familie Krise ein Entwickler-Codierung Qualität nach unten führen wird. Ohne CI und einige Führungsaufsicht, könnte es sechs Monate Wanzen, bevor Sie erkennen, was los ist, und Korrekturmaßnahmen ergreifen.

Du hast nicht erwähnt, was die Entwicklungsumgebung ist. Wenn Ihr ein J2EE-Shop wäre, dann würde ich vorschlagen, dass Sie die folgenden zu suchen.

  • CruiseControl- für kontinuierliche Integration
  • Subversion für die Quellcodeversionskontrolle, weil es integriert sich gut mit CruiseControl-
  • Frühling weil DI macht es einfacher, die Unit-Tests für kontinuierliche Integration Zwecke mechanisieren
  • JUnit für Einheit der mittleren Ebene zu testen
  • Httpunit für Einheit Testen der GUI
  • Apache JMeter für Stresstests

Gehen wir zurück und eine Teststrategie für (alle) vorhandenen Sachen Umsetzung ist ein Schmerz. Es ist lang, es ist schwierig, und niemand wird es tun will. Ich dringend empfehlen jedoch, dass ein neuer Fehler kommt, wird ein Test um diesen Fehler entwickelt werden. Wenn Sie nicht über einen Fehlerbericht darauf bekommen, dann ist entweder (a) arbeitet oder (b) der Benutzer kümmert sich nicht darum, dass es nicht funktioniert. So oder so, ein Test ist eine Verschwendung von Zeit.

Sobald seine identifiziert, schreiben einen Test, rot geht. Jetzt sofort. Dann, den Fehler beheben. Bestätigen Sie, dass es fest ist. Bestätigen Sie, dass der Test ist jetzt grün . Wiederholen Sie als neuen Bugs kommen in.

Es tut uns Leid, das zu sagen, aber vielleicht sind Sie einfach nicht genug testen, oder zu spät, oder beides.

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