Warum müssen Programmierer getestet werden?

Die nächsten Level widmen sich dem Testen auf die Art und Weise, wie Programmierer es brauchen . Aber zunächst wollen wir herausfinden, was Tests sind und warum sie erforderlich sind.

In Bezug auf Software können wir sagen, dass die Aufgabe des Testens darin besteht, zu überprüfen, ob das Programm:

  • tut, was sie tun muss
  • tut nicht, was sie nicht tun sollte

Der zweite Punkt ist übrigens nicht weniger wichtig als der erste, aber dazu später mehr.

Beginnen wir mit dem ersten Punkt. Was bedeutet „das Programm tut, was es tun soll“?

Zuerst muss jemand eine Liste aller Anwendungsfälle für das Programm erstellen. Zweitens müssen sie beschreiben, wie das Programm funktionieren soll, wie sich der Benutzer verhalten soll und welche Ergebnisse erwartet werden. Sie können nicht weitermachen.

Sobald wir geschrieben hatten, „wie sich der Benutzer verhalten sollte“, scheiterte die ganze Idee, eine gute Dokumentation zu schreiben. Menschen sind keine Maschinen, außerdem verhalten sich Menschen mit Software sehr oft so, wie es ihnen gefällt . Niemand beginnt seine Bekanntschaft mit der Technik mit dem Studium der Anleitungen. Es ist eine Tatsache.

Daher erhalten wir eine neue Tatsache: Die Besonderheit der Software besteht darin, dass sie über viele verschiedene Arbeitsszenarien verfügt. Einige davon sind offensichtlich, andere können dokumentiert werden, andere können angenommen werden, andere können erraten werden, und die anderen 50 % werden Ihnen gar nicht in den Sinn kommen.

Aus der Sicht eines Programmierers sind die meisten Fehler überhaupt keine Fehler. Ein Fehler liegt vor, wenn ein Programm nicht so funktioniert, wie es sollte oder wie erwartet. Und es gibt viele Situationen, in denen nicht klar ist, wie das Programm funktionieren soll, oder Szenarien, die sich widersprechen ...

Es gibt unendlich viele Szenarien, und es wird immer Fälle im Produkt geben, in denen sich das Programm nicht wie erwartet verhält (der Programmierer hat den Code nur für ein paar Dutzend Szenarien geschrieben). Daher kann argumentiert werden, dass es in jedem Programm immer Fehler gibt und jedes Produkt endlos verbessert werden kann .

Danach kommt es auf die Zweckmäßigkeit an. Zuerst behebt der Programmierer die größten Fehler, dann die kleineren Fehler und so weiter. Und schließlich kommt der Zeitpunkt, an dem der Eigentümer des Produkts der Meinung ist, dass es wirtschaftlich nicht sinnvoll ist, weiter daran zu arbeiten.

Aber zurück zu den Fehlern, die jeder als Fehler erkennt: Das Programm macht offensichtlich etwas falsch, ist heruntergefallen, hat etwas kaputt gemacht usw. Solche Fehler können bedingt in 3 Kategorien eingeteilt werden: groß, mittel und klein.

Und sehr oft kommt es vor, dass ein Programmierer daran arbeitet, mittlere oder sogar kleine Fehler zu beheben, obwohl es im Projekt noch viele schwerwiegendere Probleme gibt. Er hat sie einfach nicht gefunden , also arbeitet er an den größten, die er kennt.

Daher sollte es in jedem Projekt Tester geben. Diese Menschen lernen gezielt, das Produkt aus verschiedenen Blickwinkeln zu betrachten. So können Sie weitere Szenarien des Programms sehen. Ihre Aufgabe ist es, Fehler zu finden und aufzuschreiben (um den gleichen Fehler nicht mehrmals zu finden).

Testen ist ein Prozess, der darauf abzielt, Fehler zu finden. Diese Fehler sollten gefunden, beschrieben und priorisiert werden. Erst nach der Priorisierung der Fehler können wir von einem effektiven Software-Verbesserungsprozess sprechen.

Denken Sie daran: Der erste Schritt zur Lösung eines Problems besteht darin, anzuerkennen, dass es ein Problem gibt . Sie können einen Fehler, von dem Sie nichts wissen, nicht beheben.

Testautomatisierung

Ich denke, wir waren uns alle einig, dass das Testen wichtig ist. Schauen wir uns also das Testen wie Programmierer an. Wie sehen Programmierer das Testen? Programmierer automatisieren die Arbeit anderer Menschen. Der letzte Beruf, der verschwinden wird, wird der Programmiererberuf sein.

Wir automatisieren alle Prozesse, denen wir begegnen. Daher müssen Tests automatisiert werden. Und wie lässt sich die Fehlersuche automatisieren? Kurze Antwort: Nein. Aber auch hier hilft uns die Tatsache, dass wir Programmierer sind.

Der Softwareentwicklungsprozess besteht aus ständigen Änderungen. Gerade weil Programmierer ständig Änderungen vornehmen, machen sie sehr oft etwas kaputt, das bis vor Kurzem noch gut funktioniert hat.

Und anstatt nach neuen Fehlern zu suchen, sind Tester gezwungen, ständig zu prüfen, ob wir etwas kaputt gemacht haben, das schon lange gut funktioniert. Der sogenannte Regressionstest. Es ist diese Art von Tests, die automatisiert werden können und sollten.

Hier lässt sich die gesamte Software in zwei Teile unterteilen:

  • Das Programm interagiert mit der Person
  • Programm interagiert mit einem anderen Programm

Die erste Option ist schwieriger zu automatisieren, sie erfordert spezielle Automatisierungstester, sie werden auch QA Automation oder Software Test Engineer genannt.

Aber die zweite Option kann und sollte unabhängig automatisiert werden. Wenn Sie eine Software haben, die:

  • funktioniert gut
  • bereits getestet
  • als separates Modul oder logischen Block implementiert
  • Ich habe nicht vor, mich zu ändern
  • andere Module oder Programme hängen davon ab
  • Funktionsausfall ist kostspielig

Ich empfehle, sich die Zeit zu nehmen, Tests dafür zu schreiben, die wichtige Aspekte seiner aktuellen Funktionalität erfassen. Es wäre sinnvoll, dafür 5 % Ihrer Arbeitszeit oder 1 Tag pro Monat aufzuwenden.

Es besteht keine Notwendigkeit, Tests um der Tests willen zu schreiben.

Niemand wird Ihre Tests unterstützen. Nicht andere Programmierer, nicht Sie selbst. Niemand macht das. 99 % aller schriftlichen Prüfungen werden abgebrochen und/oder ungültig. Wenn Sie keine Tests schreiben können, schreiben Sie nicht. Schreiben Sie nur, wenn Sie absolut nicht darauf verzichten können.

Arten von Tests

Jeder Programmierer kann, wenn er keine spezielle Ausbildung absolviert hat, mit seinen eigenen Worten sagen, was Testen ist: Überprüfen, ob das Programm tut, was es soll. Fachleute auf diesem Gebiet unterscheiden jedoch ganze Testbereiche (Arten).

Bei allen Tests geht es eigentlich um die Zuverlässigkeit und Verfügbarkeit von Software, aber um die Testrichtung besser zu verstehen, schauen wir uns ein paar Beispiele an.

Nehmen wir an, Sie testen einen typischen Online-Shop. Dann lassen sich die Testbereiche in folgende Typen unterteilen: Leistungstests, Funktionstests, Integrationstests und Unit-Tests.

Wenn der Websitebesitzer beschließt, eine ernsthafte Werbekampagne zu starten, werden viele Benutzer gleichzeitig auf die Website gelangen. Es kann durchaus sein, dass die Website nicht herunterfällt, aber einige ihrer Abschnitte sind möglicherweise langsam oder funktionieren sogar nicht mehr.

Um dies zu verhindern, müssen Sie solche Probleme im Voraus erkennen und Maßnahmen zu ihrer Beseitigung ergreifen. Dies erfolgt mittels Lasttests , auch Performancetests genannt.

Möglicherweise möchten Sie auch testen, wie Ihre Backend-API funktioniert, und alle Funktionen davon testen: Registrierung, Anmeldung, Hinzufügen zum Warenkorb, Zahlungsabwicklung, Datenbankschreibvorgänge usw. Alles sollte gemäß TOR funktionieren. In diesem Fall müssen Sie einen Funktionstest durchführen .

Ihr Online-Shop ist höchstwahrscheinlich in Dienste von Drittanbietern integriert: Versenden von Briefen und SMS, Zahlungssysteme, Online-Support-Chats, Sammeln von Feedback von Benutzern, Werbesysteme usw. Um sicherzustellen, dass all dies wie beabsichtigt funktioniert, müssen Sie Integrationstests durchführen .

Schließlich werden komplexe Produkte häufig in unabhängige Module zerlegt. Aus solchen Modulen können Sie wie aus einem Konstrukteur das Endprodukt zusammenstellen. Wenn Sie ein solches Modul entwickeln oder mit solchen Modulen interagieren, müssen Sie Unit-Tests durchführen .

Zusammenfassend können wir sagen, dass Funktionstests erforderlich sind, um jede einzelne Funktion der Website zu testen. Integration – zum Testen des Zusammenspiels großer Module und Systeme Ihres Produkts. Modular – um ein separates Modul zu testen, also Leistungstests – um den Betrieb Ihrer Site unter Last zu überprüfen.

Es kann noch mehr Arten von Tests geben: Je komplexer das Produkt, desto mehr Aspekte seiner Entwicklung müssen kontrolliert werden.