Sie freigeben. (Gemessen an den Buggy-Haufen von ..., die aus den großen Institutionen stammen)
Orbling
Sie haben sehr aggressive Verkaufs- und Marketingkampagnen, lagern die Entwicklung in andere Länder aus und kommen mit allen möglichen Fehlern davon ... bis sie "unerwartet" einen riesigen Marktanteil verlieren.
Job
Warum ist das für große Unternehmen anders als für kleine?
JohnFx
Antworten:
30
Hier sind einige der Techniken, die Google verwendet.
Stellen Sie gute Entwickler ein, die wahrscheinlich zuverlässigen Code produzieren.
Haben Sie engagierte QA-Abteilungen. Gemeint sind sowohl Personentests als auch automatisierte Programme (z. B. mit Selenium), die Endbenutzer simulieren.
Lassen Sie die Produktion überwachen, um Hinweise auf Fehlverhalten zu erhalten.
Ich habe diese in eine von mir vermutete absteigende Reihenfolge der Wirksamkeit beim Erkennen von Fehlern eingeteilt.
Obwohl dies keine schlechte Antwort ist, verwenden Sie eine Vielzahl von Begriffen wie "QA", "Komponententest" und "Continuous Build", die der Person, die eine solche Frage stellt, wahrscheinlich unbekannt sind. Es wäre besser, wenn Sie eine Verknüpfung zu oder Definitionen geben würden.
Gabe
@gabe: Ich habe der verwendeten Terminologie Zeiger hinzugefügt.
btilly
3
+1 - Tatsächlich ist das eine ziemlich gute Reihenfolge (1-> 6), wann es am BESTEN ist (dh in Bezug auf Zeit und Komplexität am billigsten), auch Fehler zu fangen.
ozz
1
Vielleicht auch Usability-Tests, bevor das Menüband 90% der Wort-Feature-Requests für Features enthielt, die Word bereits hatte, konnten Benutzer sie einfach nicht finden
jk.
@jk: wessen Statistik ist das? Zitat bitte.
JBRWilkinson
19
Größere Unternehmen haben normalerweise ganze Q / A-Abteilungen, die dafür verantwortlich sind, den Code zu testen und sicherzustellen, dass er so funktioniert, wie er soll. Normalerweise ist es so, wie Sie es beschrieben haben - eine Menge Leute, die viele Maschinen testen. Manchmal sind die Tests automatisiert, manchmal nicht. Siehe Qualitätssicherung - Wikipedia
Oft finden die Entwickler selbst während des Entwicklungsprozesses Fehler. Außerdem sind Kunden häufig die Ersten, die einen Fehler finden.
+1: Genau so machen wir es, das Testteam (dem ich angehöre) schreibt die Testpläne und schreibt den gesamten Testcode mit Ausnahme der Trivial Unit Tests (Entwickler schreiben die, von denen einige aber TDD praktizieren) es ist nicht vorgeschrieben). Wir konzentrieren uns auf Akzeptanz, Integration und Regressionen. Wenn Entwickler Fehler finden, werden sie diese protokollieren, beheben, testen und automatisieren.
Steven Evers
18
Ich würde sagen, es geht um die Reife eines Unternehmens und nicht um die Größe :) Es gibt große Unternehmen mit schlechten Entwicklungspraktiken und kleine Unternehmen, die auf dem neuesten Stand sind.
Im Allgemeinen wird ein ausgereiftes Entwicklungsteam die folgenden Aktivitäten ausführen: 1; Minimierung der Einführung neuer Fehler im System und 2; Finden Sie Fehler im vorhandenen System.
Unit-Tests: Dies sind "Mini-Treiber" für einzelne Methoden, um sicherzustellen, dass eine Methode das tut, was sie verspricht. Dies sind immer automatisierte Tests.
Integrationstests: Mit diesen Tests soll überprüft werden, ob eine größere Funktionseinheit im System funktioniert. Dies kann das Testen der Datenbankintegration oder der Integration in Bibliotheken von Drittanbietern umfassen. Dies sind ebenfalls automatisierte Tests.
Abnahmetests: Abnahmetests werden geschrieben, um Benutzeranforderungen zu testen. Diese testen normalerweise nur den „glücklichen Weg“. In meinem Team sollen diese Tests zeigen, dass der Benutzer keine Probleme hat, wenn er die Funktionalität so verwendet, wie sie verwendet werden soll. Kann manuell oder automatisiert sein.
Funktionstests: Diese Tests ähneln Akzeptanztests, testen jedoch auch den "unglücklichen Pfad". Diese Tests sollen die nicht so offensichtlichen Szenarien testen. Kann manuell oder automatisiert sein.
Regressionstests: Mit diesem Begriff führen wir einen vollständigen Test des Systems durch, bevor es für die Kunden freigegeben wird. Manuell oder automatisiert.
Gorillatests: (nur manuell). Dies ist die Art von Tests, wenn sehr kluge Menschen absichtlich versuchen, die Anwendung zu unterbrechen.
Leistungstests Ziel ist es sicherzustellen, dass die Leistung akzeptabel ist und sich nicht im Laufe der Zeit verschlechtert. Normalerweise automatisiert.
Stabilitätstests: Diese Tests sollen sicherstellen, dass das System über die Zeit stabil bleibt. Automatisiert.
Kontinuierliche Integration: Dies ist ein System, das Ihren Code automatisch auscheckt, kompiliert und Ihre automatisierten Tests ausführt. Ihre schnelleren Tests (Unit, Integration) werden jedes Mal ausgeführt, wenn ein Entwickler Code festschreibt. Einige andere werden jede Nacht (Akzeptanz, Funktionsfähigkeit) oder wöchentlich (Leistung, Stabilität) ausgeführt.
Berichte zur Codeabdeckung: Zeigt an, wie viel Code getestet wurde. Es ist wahrscheinlicher, dass Code ohne Testabdeckung beschädigt wird.
Verschiedene Tools, die den Code analysieren: Diese zeigen normalerweise, wo der Code neu faktorisiert werden muss, damit er weniger anfällig für potenzielle Fehler ist.
Paarprogrammierung: Zwei Entwickler arbeiten zusammen, um Funktionalität bereitzustellen. "Ein zusammenhängendes Paar ist besser als die Summe seiner Teile."
Das Wichtigste zum Mitnehmen ist: Automatisierung und kontinuierliche Integration .
Uneinigkeit über die Reife des Unternehmens - es ist durchaus möglich, dass der Leiter der Softwareentwicklung auch in einem kleinen / jungen Unternehmen Wert auf Qualität legt und diese Botschaft von oben nach unten geht. Reife der Ingenieure, ja, das ist möglich.
JBRWilkinson
1
@JBRWilkinson: Ich denke, wir können darüber sprechen, was es für ein Unternehmen bedeutet, "ausgereift" zu sein. Ich wollte nicht vorschlagen, dass es mit dem Alter zu tun hat, eher mit "Weisheit". Ein Startup kann ausgereift sein, obwohl es nur ein oder zwei Jahre alt ist.
c_maker
4
Es kommt auf das Unternehmen und die Produkte an, die es entwickelt.
Erstens erzwingen viele Unternehmen Codierungspraktiken wie Codeüberprüfungen und obligatorisches Flusen (automatisierte Tools zur Fehlererkennung), um die Anzahl der Fehler, die in das Repository gelangen, zu verringern. Viele Unternehmen haben auch Unit-Tests eingeführt. Dies ist der Fall, wenn ich arbeite (Google). Wenn Code eingecheckt wird, werden die Tests für alles ausgeführt, um sicherzustellen, dass keine neuen Fehler eingeführt werden.
Zweitens haben viele Unternehmen Qualitätssicherungsabteilungen, die für die Überprüfung des Verhaltens verantwortlich sind. Dies ist insbesondere in der Finanzbranche üblich (wo Fehler teuer sein können und Validierungsregeln komplex sind), aber auch in Unternehmen, die Produkte an Benutzer verkaufen, bei denen Rückrufe teuer sein können (z. B. Intel, Microsoft usw.).
Drittens führen Unternehmen, wann immer möglich, Dogfooding durch (ihre eigenen Benutzer verwenden das Produkt intern) und veröffentlichen dann begrenzte Betas. In dieser Phase sind viele Fehler aufgetreten. Beispielsweise verwenden Mitarbeiter von Microsoft neuere interne Versionen von Office, Windows und DevStudio als die externen Versionen. Dann können begrenzte Benutzergruppen oder beauftragte Unternehmen es ausprobieren. Ebenso verwenden wir bei Google interne Versionen von GMail und Docs vor der Veröffentlichung. Spielefirmen organisieren offene Betas, um ihre Produkte und die Auslastung der Server usw. Zu testen.
Natürlich lautet die Antwort "It dpends", aber ich werde ein Beispiel aus meinem bislang größten Projekt geben, an dem zu Spitzenzeiten rund 50 Entwickler beteiligt waren.
Das Grundsetup: Eine Backend-Software zur Verarbeitung großer Datenmengen mit BizTalk.
Die erste Verteidigungslinie sind die Unit-Tests. In unserem Fall wurden diese täglich für alles ausgeführt, was in die Quellcodeverwaltung eingecheckt wurde, und in der Regel wurden einige von ihnen vom Entwickler vor dem Einchecken manuell ausgeführt. Die Unit-Tests wurden hauptsächlich von den Entwicklern geschrieben, aber manchmal durch zusätzliche Tests der Tester ergänzt.
Der nächste Schritt war ein wöchentlicher Virtual PC-Build, bei dem die Tester eine Reihe von hauptsächlich automatisierten End-to-End-Tests des Datenflusses basierend auf den Spezifikationsdokumenten für jede Komponente durchführten.
Danach wurde derselbe Virtual PC mit einigen Geschäftsdaten angereichert, die der Realität sehr nahe kamen, und mit einigen spezifischen Anwendungsfällen erneut getestet.
Anschließend wurde der Virtual PC mit anderen (meist auch virtuellen) Systemkomponenten aus anderen Abteilungen zu einem Integrationstestzyklus zusammengefügt, der auf End-to-End-Tests vom Benutzer, der die Daten eingibt, bis zum Ende des Datenflusses basierte.
Auf einer anderen Spur wurden die Installationspakete vom Systemanbieter getestet, um festzustellen, ob sie in einer produktionsähnlichen Umgebung ordnungsgemäß installiert wurden und ob sie zurückgesetzt werden konnten, wenn ein Fehler auftrat.
Nach der Installation in der produktionsähnlichen Umgebung haben wir dort Last- und Stresstests durchgeführt, um die Gesamtstabilität zu testen. Dies ist jedoch nicht unbedeutend, wenn Sie auf 10 BizTalk-Servern, 8 SQL-Servern und einer Reihe anderer spezialisierter Hardware wie einem XML-Beschleuniger arbeiten und ein dediziertes Archiv (natürlich alle gruppiert).
Als wir mit allen Tests zufrieden waren, wurde der Code in die Produktion gebracht. Sie haben eine ziemlich große Latenzzeit, um Fehler im Code zu beheben (wie 4-6 Wochen für den gesamten Testzyklus), und es ist teuer, all diese Tests durchzuführen, aber die allgemeine Stabilität war ziemlich gut. In der Tat das Beste, was ich bisher gesehen habe. Auch das ist auf einem System, das jeden Tag mehrere Millionen Dollar verarbeitet, sehr wichtig. Ihre Anforderungen können variieren, aber so haben wir es gemacht und es hat funktioniert.
Die ursprüngliche Frage scheint konzeptioneller zu sein als die meisten der detaillierten Antworten, die zur Verfügung gestellt wurden.
Schauen wir es uns von einer höheren Ebene an (weniger detailliert). Software wurde entwickelt, um auf die spezifischen Bedürfnisse von Personen (Personen, Unternehmen usw.) einzugehen.
Diese Anforderungen müssen in die einzelnen Storys / Anforderungen abgebildet werden, die in letzter Zeit (in einer Bauphase) im Quellcode implementiert werden.
Das Quality Assurance (QA) -Team (die eigentlichen Softwaretester) muss die Storys / Anforderungen genau definiert haben, damit der endgültige Code bei der Ausführung den Anforderungen dieser Storys und Anforderungen entspricht. Zu diesem Zweck erstellt das QA-Team "Testfälle", um diese Validierung durchzuführen.
Sobald der Code dem QA-Team zur Verfügung gestellt wurde, wird er getestet und es werden Fehler identifiziert. Bugs unterschiedlicher Typen und Schweregrade. Diese Fehler werden nachverfolgt und den Entwicklern zugewiesen, um sie endgültig zu beheben.
Die Verwendung von virtuellen Maschinen ermöglicht heutzutage, dass ein Tester verschiedene Umgebungen in derselben realen Hardware ausführt. Manchmal benötigen Sie jedoch Computer, die für die QA-Phase vorgesehen sind.
Ich hoffe, das hilft Ihnen, den gesamten Prozess (grob) zu verstehen.
Nun, ich hasse es, zynisch zu sein, aber mit der Anzahl offener Bugs in einem bestimmten "Geräte" -Betriebssystem scheint es, dass je größer und reicher das Unternehmen ist, desto mehr Bugs können sie erstellen und an den Endbenutzer liefern. Wenn die Software irgendwie funktioniert und cool aussieht, geben sie sie trotzdem frei. Wenn die Manager denken, dass es fertig ist, dann ist es fertig. Das ist, wenn die wirklich bösen Käfer aus dem Holzwerk kommen und die Endbenutzer zu Meerschweinchen werden. Zehn oder mehr Jahre später werden die meisten Fehler behoben sein (und ein paar wurden hinzugefügt), und das Unternehmen wird bereit sein, mit der nächsten großen Idee fortzufahren.
Antworten:
Hier sind einige der Techniken, die Google verwendet.
Ich habe diese in eine von mir vermutete absteigende Reihenfolge der Wirksamkeit beim Erkennen von Fehlern eingeteilt.
quelle
Größere Unternehmen haben normalerweise ganze Q / A-Abteilungen, die dafür verantwortlich sind, den Code zu testen und sicherzustellen, dass er so funktioniert, wie er soll. Normalerweise ist es so, wie Sie es beschrieben haben - eine Menge Leute, die viele Maschinen testen. Manchmal sind die Tests automatisiert, manchmal nicht. Siehe Qualitätssicherung - Wikipedia
Oft finden die Entwickler selbst während des Entwicklungsprozesses Fehler. Außerdem sind Kunden häufig die Ersten, die einen Fehler finden.
Kleinere Unternehmen, für die ich derzeit arbeite, wenden die Agile Testing-Methode an
quelle
Ich würde sagen, es geht um die Reife eines Unternehmens und nicht um die Größe :) Es gibt große Unternehmen mit schlechten Entwicklungspraktiken und kleine Unternehmen, die auf dem neuesten Stand sind.
Im Allgemeinen wird ein ausgereiftes Entwicklungsteam die folgenden Aktivitäten ausführen: 1; Minimierung der Einführung neuer Fehler im System und 2; Finden Sie Fehler im vorhandenen System.
Unit-Tests: Dies sind "Mini-Treiber" für einzelne Methoden, um sicherzustellen, dass eine Methode das tut, was sie verspricht. Dies sind immer automatisierte Tests.
Integrationstests: Mit diesen Tests soll überprüft werden, ob eine größere Funktionseinheit im System funktioniert. Dies kann das Testen der Datenbankintegration oder der Integration in Bibliotheken von Drittanbietern umfassen. Dies sind ebenfalls automatisierte Tests.
Abnahmetests: Abnahmetests werden geschrieben, um Benutzeranforderungen zu testen. Diese testen normalerweise nur den „glücklichen Weg“. In meinem Team sollen diese Tests zeigen, dass der Benutzer keine Probleme hat, wenn er die Funktionalität so verwendet, wie sie verwendet werden soll. Kann manuell oder automatisiert sein.
Funktionstests: Diese Tests ähneln Akzeptanztests, testen jedoch auch den "unglücklichen Pfad". Diese Tests sollen die nicht so offensichtlichen Szenarien testen. Kann manuell oder automatisiert sein.
Regressionstests: Mit diesem Begriff führen wir einen vollständigen Test des Systems durch, bevor es für die Kunden freigegeben wird. Manuell oder automatisiert.
Gorillatests: (nur manuell). Dies ist die Art von Tests, wenn sehr kluge Menschen absichtlich versuchen, die Anwendung zu unterbrechen.
Leistungstests Ziel ist es sicherzustellen, dass die Leistung akzeptabel ist und sich nicht im Laufe der Zeit verschlechtert. Normalerweise automatisiert.
Stabilitätstests: Diese Tests sollen sicherstellen, dass das System über die Zeit stabil bleibt. Automatisiert.
Kontinuierliche Integration: Dies ist ein System, das Ihren Code automatisch auscheckt, kompiliert und Ihre automatisierten Tests ausführt. Ihre schnelleren Tests (Unit, Integration) werden jedes Mal ausgeführt, wenn ein Entwickler Code festschreibt. Einige andere werden jede Nacht (Akzeptanz, Funktionsfähigkeit) oder wöchentlich (Leistung, Stabilität) ausgeführt.
Berichte zur Codeabdeckung: Zeigt an, wie viel Code getestet wurde. Es ist wahrscheinlicher, dass Code ohne Testabdeckung beschädigt wird.
Verschiedene Tools, die den Code analysieren: Diese zeigen normalerweise, wo der Code neu faktorisiert werden muss, damit er weniger anfällig für potenzielle Fehler ist.
Paarprogrammierung: Zwei Entwickler arbeiten zusammen, um Funktionalität bereitzustellen. "Ein zusammenhängendes Paar ist besser als die Summe seiner Teile."
Das Wichtigste zum Mitnehmen ist: Automatisierung und kontinuierliche Integration .
quelle
Es kommt auf das Unternehmen und die Produkte an, die es entwickelt.
Erstens erzwingen viele Unternehmen Codierungspraktiken wie Codeüberprüfungen und obligatorisches Flusen (automatisierte Tools zur Fehlererkennung), um die Anzahl der Fehler, die in das Repository gelangen, zu verringern. Viele Unternehmen haben auch Unit-Tests eingeführt. Dies ist der Fall, wenn ich arbeite (Google). Wenn Code eingecheckt wird, werden die Tests für alles ausgeführt, um sicherzustellen, dass keine neuen Fehler eingeführt werden.
Zweitens haben viele Unternehmen Qualitätssicherungsabteilungen, die für die Überprüfung des Verhaltens verantwortlich sind. Dies ist insbesondere in der Finanzbranche üblich (wo Fehler teuer sein können und Validierungsregeln komplex sind), aber auch in Unternehmen, die Produkte an Benutzer verkaufen, bei denen Rückrufe teuer sein können (z. B. Intel, Microsoft usw.).
Drittens führen Unternehmen, wann immer möglich, Dogfooding durch (ihre eigenen Benutzer verwenden das Produkt intern) und veröffentlichen dann begrenzte Betas. In dieser Phase sind viele Fehler aufgetreten. Beispielsweise verwenden Mitarbeiter von Microsoft neuere interne Versionen von Office, Windows und DevStudio als die externen Versionen. Dann können begrenzte Benutzergruppen oder beauftragte Unternehmen es ausprobieren. Ebenso verwenden wir bei Google interne Versionen von GMail und Docs vor der Veröffentlichung. Spielefirmen organisieren offene Betas, um ihre Produkte und die Auslastung der Server usw. Zu testen.
quelle
Natürlich lautet die Antwort "It dpends", aber ich werde ein Beispiel aus meinem bislang größten Projekt geben, an dem zu Spitzenzeiten rund 50 Entwickler beteiligt waren.
Das Grundsetup: Eine Backend-Software zur Verarbeitung großer Datenmengen mit BizTalk.
Die erste Verteidigungslinie sind die Unit-Tests. In unserem Fall wurden diese täglich für alles ausgeführt, was in die Quellcodeverwaltung eingecheckt wurde, und in der Regel wurden einige von ihnen vom Entwickler vor dem Einchecken manuell ausgeführt. Die Unit-Tests wurden hauptsächlich von den Entwicklern geschrieben, aber manchmal durch zusätzliche Tests der Tester ergänzt.
Der nächste Schritt war ein wöchentlicher Virtual PC-Build, bei dem die Tester eine Reihe von hauptsächlich automatisierten End-to-End-Tests des Datenflusses basierend auf den Spezifikationsdokumenten für jede Komponente durchführten.
Danach wurde derselbe Virtual PC mit einigen Geschäftsdaten angereichert, die der Realität sehr nahe kamen, und mit einigen spezifischen Anwendungsfällen erneut getestet.
Anschließend wurde der Virtual PC mit anderen (meist auch virtuellen) Systemkomponenten aus anderen Abteilungen zu einem Integrationstestzyklus zusammengefügt, der auf End-to-End-Tests vom Benutzer, der die Daten eingibt, bis zum Ende des Datenflusses basierte.
Auf einer anderen Spur wurden die Installationspakete vom Systemanbieter getestet, um festzustellen, ob sie in einer produktionsähnlichen Umgebung ordnungsgemäß installiert wurden und ob sie zurückgesetzt werden konnten, wenn ein Fehler auftrat.
Nach der Installation in der produktionsähnlichen Umgebung haben wir dort Last- und Stresstests durchgeführt, um die Gesamtstabilität zu testen. Dies ist jedoch nicht unbedeutend, wenn Sie auf 10 BizTalk-Servern, 8 SQL-Servern und einer Reihe anderer spezialisierter Hardware wie einem XML-Beschleuniger arbeiten und ein dediziertes Archiv (natürlich alle gruppiert).
Als wir mit allen Tests zufrieden waren, wurde der Code in die Produktion gebracht. Sie haben eine ziemlich große Latenzzeit, um Fehler im Code zu beheben (wie 4-6 Wochen für den gesamten Testzyklus), und es ist teuer, all diese Tests durchzuführen, aber die allgemeine Stabilität war ziemlich gut. In der Tat das Beste, was ich bisher gesehen habe. Auch das ist auf einem System, das jeden Tag mehrere Millionen Dollar verarbeitet, sehr wichtig. Ihre Anforderungen können variieren, aber so haben wir es gemacht und es hat funktioniert.
quelle
Die ursprüngliche Frage scheint konzeptioneller zu sein als die meisten der detaillierten Antworten, die zur Verfügung gestellt wurden.
Schauen wir es uns von einer höheren Ebene an (weniger detailliert). Software wurde entwickelt, um auf die spezifischen Bedürfnisse von Personen (Personen, Unternehmen usw.) einzugehen.
Diese Anforderungen müssen in die einzelnen Storys / Anforderungen abgebildet werden, die in letzter Zeit (in einer Bauphase) im Quellcode implementiert werden.
Das Quality Assurance (QA) -Team (die eigentlichen Softwaretester) muss die Storys / Anforderungen genau definiert haben, damit der endgültige Code bei der Ausführung den Anforderungen dieser Storys und Anforderungen entspricht. Zu diesem Zweck erstellt das QA-Team "Testfälle", um diese Validierung durchzuführen.
Sobald der Code dem QA-Team zur Verfügung gestellt wurde, wird er getestet und es werden Fehler identifiziert. Bugs unterschiedlicher Typen und Schweregrade. Diese Fehler werden nachverfolgt und den Entwicklern zugewiesen, um sie endgültig zu beheben.
Die Verwendung von virtuellen Maschinen ermöglicht heutzutage, dass ein Tester verschiedene Umgebungen in derselben realen Hardware ausführt. Manchmal benötigen Sie jedoch Computer, die für die QA-Phase vorgesehen sind.
Ich hoffe, das hilft Ihnen, den gesamten Prozess (grob) zu verstehen.
quelle
Nun, ich hasse es, zynisch zu sein, aber mit der Anzahl offener Bugs in einem bestimmten "Geräte" -Betriebssystem scheint es, dass je größer und reicher das Unternehmen ist, desto mehr Bugs können sie erstellen und an den Endbenutzer liefern. Wenn die Software irgendwie funktioniert und cool aussieht, geben sie sie trotzdem frei. Wenn die Manager denken, dass es fertig ist, dann ist es fertig. Das ist, wenn die wirklich bösen Käfer aus dem Holzwerk kommen und die Endbenutzer zu Meerschweinchen werden. Zehn oder mehr Jahre später werden die meisten Fehler behoben sein (und ein paar wurden hinzugefügt), und das Unternehmen wird bereit sein, mit der nächsten großen Idee fortzufahren.
quelle