Methoden zum Testen einer sehr großen Anwendung

10

Ich habe eine PHP-App, die sehr groß ist. Normalerweise arbeiten 2-3 Entwickler Vollzeit daran und wir kommen an den Punkt, an dem wir Änderungen vornehmen und Fehler erstellen (Hustenfunktionen!). Die Software ist per se nicht komplex, es ist nur viel los (35 ~ Controller, ungefähr die gleichen Modelle usw.).

Selbst wenn Sie vorsichtig sind, kann eine Änderung in dieser Ansicht (Ändern einer ID für ein Element) leicht eine Ajax-Abfrage zerstören, die unter bestimmten Bedingungen stattfindet (abgemeldet, während Sie auf einem Fuß stehen).

Unit-Tests sind die ersten Dinge, die mir in den Sinn kommen, aber wir haben sie in einer anderen App ausprobiert, und es ist so einfach, sie zu vergessen / oder mehr Zeit damit zu verbringen, Tests zu schreiben als Tests durchzuführen. Wir haben eine Staging-Umgebung, in der der Code überprüft wird, bevor er live übertragen wird.

Vielleicht brauchen wir eine Teilzeit-Q / A-Person?

Jeder hat irgendwelche Vorschläge / Gedanken.

Wizzard
quelle
"... dann Tests machen" sollte das ein als sein ?
Ajax333221

Antworten:

25

Ja, Sie benötigen Q / A-Mitarbeiter. Einige der vielen Gründe sind

  • Ein dedizierter Tester kostet Geld, aber oft weniger als ein Entwickler. Der Vorteil, Ihre Zeit nicht zu verbrauchen, ist also größer als die zusätzlichen Kosten.
  • Ein engagierter Tester weiß, wie man Dinge testet, insbesondere Dinge, deren Automatisierung nicht offensichtlich ist. Das Fahren automatisierter Tests für die Interaktion mit einem System über einen Browser ist eine etwas haarige, aber gut etablierte Disziplin. Wenn Sie jemanden finden, der bereits weiß, wie es geht, müssen Sie nicht noch mehr Zeit damit verbringen, gute Werkzeuge und Einstellungen zu erlernen.
  • Ein professioneller Tester weiß, wie man tatsächlich Fehler findet. Es ist viel wahrscheinlicher, dass sie denken, wie ein Benutzer der Anwendung denken wird, und daher die Zustände im System ausüben, die tatsächlich in der Produktion auftreten, was bedeutet, dass die Fehler, die sich als gut sichtbar herausstellen, tendenziell früher gefunden werden Dies erspart Ihnen Verlegenheit und Kosten für äußerst dringende Patches.
  • Wenn man das verallgemeinert, denkt ein Tester nicht wie ein Entwickler . Es ist schwer zu vermitteln, wie viel Unterschied dies macht, wenn Sie es nicht erlebt haben. Bewusst oder unbewusst möchte ein Entwickler keine Fehler finden. Sie wissen, wie das System funktioniert, und neigen dazu, die für sie typischen unsinnigen Eingaben oder Daten zu vermeiden, die im wirklichen Leben Probleme verursachen. Wenn etwas auf unerwartete Weise funktioniert, wissen sie, wie man es umgeht, und neigen dazu, dies überhaupt nicht als Fehler zu betrachten. Sie nieIch habe Schwierigkeiten zu verstehen, was Systemantworten bedeuten, weil sie geschrieben wurden, obwohl dies in fast allen realen Systemen eine Hauptursache für Probleme ist. Kurz gesagt: Programmierer sind in der Regel schlecht darin, die typischen Probleme der Benutzer zu haben, da sie hochqualifizierte Spezialisten sind. Ein Tester hat es viel einfacher, die relevantesten Tests durchzuführen.

Nichts geht über die produktive Zusammenarbeit zwischen einem Entwickler und einem Tester, um die Systemqualität durch das Dach zu treiben. Ein Entwickler bemerkt häufig Symptome, dass etwas nicht stimmt, bevor der Tester dies tun würde. Ein Entwickler kann einem Tester häufig empfehlen, ein Problem viel effizienter zu reproduzieren und einen ordnungsgemäßen Problembericht zu erstellen, dh die Details anzugeben, die tatsächlich erforderlich sind, um das Problem herauszufinden. All dies erfordert jedoch mindestens einen Tester, mit dem Sie zusammenarbeiten können.

Kilian Foth
quelle
3
+1. Wir sind zu gut ausgebildet, um die Probleme zu erkennen, die normale Benutzer haben
superM
3

Sie benötigen höchstwahrscheinlich mehr oder bessere Regressionstests (keine speziellen Unit- Tests). Welche Art von Tests sollten Sie sein, um sich selbst zu analysieren, aber sie sollten die Fehler erkennen, von denen Sie sprechen. Ich schlage vor, Sie erstellen einen Testplan und priorisieren diese Tests. Wenn Sie dies tun, denken Sie zunächst nicht zu viel über die Testautomatisierung nach.

Fragen Sie sich anschließend, ob Sie einige oder die meisten Tests mit angemessenem Aufwand automatisieren können. Wenn die Antwort ja ist, sollten Sie sie programmieren. Wenn die Antwort "Nein" lautet und Sie der Meinung sind, dass die "Teilzeit-Q / A-Person" billiger ist, sollte es offensichtlich sein, was Sie brauchen. In den meisten Fällen ist es eine gute Idee, beides zu haben - eine Q / A-Person zum manuellen Testen und Erfinden neuer Tests sowie viele automatisierte Regressionstests.

Doc Brown
quelle
+1 für die Erwähnung von Regressionstests und den Hinweis, dass Unit-Tests nicht die einzige wirksame Lösung sind.
Giorgio
Hallo, können Sie die Regressionstests etwas näher erläutern? Ich glaube, dies soll verhindern, dass alte Fehler erneut auftreten - aber schlagen Sie mit Methoden vor, dies zu tun? Unit Tests? Eine 'Checkliste' mit zu überprüfenden Dingen? Danke :)
Wizzard
@Wizzard: Der Begriff Regressionstests ist nur der allgemeine Begriff für alle Arten von Tests für bereits vorhandene funktionierende Funktionen (um zu verhindern, dass Sie diese beim Ändern Ihrer App beschädigen). Dies umfasst Tests aus einer Checkliste, automatisierte Tests über Ihr Frontend (hier wahrscheinlich Ihren Browser) und Unit-Tests. Mein Vorschlag ist, dass Sie zuerst überlegen sollten, was Sie testen möchten, unabhängig davon, wie Sie es testen möchten (wenn Sie beispielsweise "Wir haben Unit-Test versucht" sagen, befinden Sie sich bereits im "Wie" und nicht im "Was"). .
Doc Brown
2

Stellen Sie eine professionelle Qualitätssicherung ein

Dies sollte erfolgen, wenn Sie ein kommerzielles Projekt entwickeln. Ein Produkt ohne eine robuste Teststrategie fertig zu haben, würde Sie mit Fehlerkorrekturen mehr kosten. Darüber hinaus hängt die Gewinnung oder Bindung neuer Kunden davon ab, wie gut Ihre Anwendung getestet wurde.

Im Allgemeinen sollten Unit-Tests auf Ihre Codebasis angewendet werden, Integrationstests und manuelle Tests sollten jedoch nicht verworfen werden.

Yusubov
quelle
1

Unit-Tests sind eine wirklich gute Idee, insbesondere wenn Ihr Projekt wächst. Wenn das Schreiben von Unit-Tests zur Gewohnheit wird, erleichtert dies Ihre Arbeit erheblich. Auf Youtube gibt es ein Video über das Schreiben von sauberem Code, der einfacher zu warten und zu testen ist.

Auch ein QS-Ingenieur ist ein Muss. Ein guter QS-Tester findet nicht nur Fehler in der Funktionalität, sondern testet auch, ob die App benutzerfreundlich ist (was für Sie selbst fast unmöglich zu testen ist). In diesem schönen Artikel erfahren Sie, wie Sie mit dem QA-Team Zeit und Geld sparen und bessere Software bereitstellen können.

superM
quelle
1

15 Controller und Modelle sind nicht sehr groß. Es dauert einige Zeit, bis der Schreibtest zur Gewohnheit wird. Es hilft sehr, sich gegenseitig (zuerst auf freundliche Weise) zu treten.

Es gibt Tools, die die Testabdeckung in gewissem Umfang steuern können. Code Coverage Tools für PHP

thorsten müller
quelle
1
Sorry, 35 Controller und ungefähr die gleiche Anzahl von Modellen. Mmmm scheint eine Form von Unit-Tests eine Hilfe zu sein.
Wizzard