Ist es jemals in Ordnung, eine Funktion nicht zu testen?

12

Gibt es einen Punkt, an dem Sie mit Ihrer Sprache / Datenbank / Ihrem System so vertraut sind, dass Sie keine neue Funktion / Konfiguration / Abfrage / etc. Testen müssen ? durch enthaltene / simulierte Tests vor der Implementierung in Ihr System (insbesondere in Bezug auf eine Funktion, die Daten modifiziert)? Oder ist es immer wichtig, eine neue Abfrage durch Simulation in einer Testumgebung zu testen ?

Um es weiter zu spezifizieren, ist es klar, dass es immer am sichersten ist, es zu testen. Kann man jedoch feststellen, wann das Risiko so gering ist, dass sich das Testen nicht lohnt? Eine andere Art zu formulieren: Wann oder ist es jemals professionelle Praxis, ein gemessenes Risiko einzugehen, um eine Funktion zu implementieren?

Außerdem nehmen wir an , dass alles gesichert, also, Worst-Case - Szenario, die Daten könnten mit einigem Aufwand wieder hergestellt werden.

Kann jemand spezielle, fachmännische Erfahrungen anführen, um dies zu beheben? Bitte geben Sie gegebenenfalls Referenzen an.

ZX9
quelle

Antworten:

10

Zunächst möchte ich sagen, dass alles, was ich tue, SQL Server ist. Dies sind also die Beispiele, die ich gebe. Im Allgemeinen gilt dies jedoch für jede Art von Code, unabhängig vom System.

Beginnen wir damit, dies ein wenig aufzuschlüsseln.

Upgrades

Sie haben ein System und sind dabei, einige oder alle davon zu aktualisieren. Aktualisieren Sie beispielsweise eine Instanz von SQL Server 2012 auf 2014. Zu diesem Zeitpunkt ist das Testen von wesentlicher Bedeutung. Leider wird es wahrscheinlich nicht möglich sein, jeden Teil einer kleinen Anwendung zu testen. Zu diesem Zeitpunkt würde ich einen "funktionierenden" Test durchführen. Funktioniert das Basissystem? Führen Sie die allgemeinen Aufgaben durch, bis sie abgeschlossen sind. Testen Sie nicht jede Option, nur den Hauptpfad.

Bei einem SQL Server-Upgrade sind einige Lesevorgänge erforderlich . Grundsätzlich möchten Sie den Backward CompatibilityEintrag für die neue Version lesen ( hier ist der für 2014 ) und sicherstellen, dass Sie nichts in einer der Listen haben (aktuelle Änderungen, Verhaltensänderungen usw.).

Anwendungscode

Hier sehen wir uns neuen / sich ändernden Anwendungscode an (weil natürlich alles, was existiert, bereits getestet wurde, oder?). In diesem Fall sollte alles getestet werden. Sie sollten Testfälle im Voraus einrichten und mindestens die Mehrzahl der betroffenen Funktionen durchlaufen. An dieser Stelle sollte vorzugsweise auch jemand anderes eine ähnliche Prüfung durchführen. Dieser Code wird wahrscheinlich für längere Zeit existieren und von einer großen Anzahl von Leuten verwendet werden. Sie möchten sicherstellen, dass es funktioniert und gut funktioniert.

Eines der Dinge, die dabei wirklich helfen können, ist die Generierung eines Satzes, der unit testsleicht wiederholbar ist. Steve Jones empfiehlt , tSQLt zum Testen Ihres TSQL-Codes zu verwenden ( leider nur für SQL Server). Auf diese Weise können Sie jedoch schnell eine Reihe festgelegter Tests durchführen, was beim Regressionstest (z. B. vor einem Upgrade) sehr hilfreich ist.

Funktionen / Konfigurationen

Noch mehr als Änderungen des Anwendungscodes möchten Sie neue Funktionen und Konfigurationsänderungen gründlich testen. Wenn Sie sich zum Beispiel dafür entscheiden, mit Columnstore-Indizes zu arbeitenZum ersten Mal müssen Sie jeden Code testen, der die betroffenen Tabellen berührt. Verwenden Sie die von Ihnen generierten Komponententests, um Ihre Anwendung zu testen. Diese Funktionen sind wahrscheinlich neu für Sie (und möglicherweise neu in der Plattform) und werden wahrscheinlich einige Fallstricke haben, die Sie nicht erwartet haben. Bei Konfigurationsänderungen sprechen Sie von etwas, das Ihr gesamtes System möglicherweise erheblich beeinträchtigen kann. Die Faustregel lautet, zu testen und sorgfältig zu testen. Es gibt einige Änderungen, die Sie erst dann wirklich sehen, wenn Sie in ein aktives System (möglicherweise nur Ihr Produktionssystem) eintreten. Dies ist jedoch keine Entschuldigung, sie nicht zuerst in einer Testumgebung auszuprobieren.

Ad-hoc-Anfragen, die auf Benutzerdaten verweisen / diese beeinflussen

Wenn Sie Code haben, der sich auf Ihre Benutzerdaten auswirkt, müssen Sie ihn im Allgemeinen testen, auch und vielleicht gerade, weil er ist Ad Hoc. Nun, wenn Sie immer und immer wieder denselben Code mit unterschiedlichen Parametern ausführen, müssen Sie sich wahrscheinlich nicht jedes Mal Gedanken über das Testen machen.

Beispielsweise müssen Sie vierteljährlich eine oder mehrere Anzeigen aus der AdList-Tabelle löschen.

DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')

Zu diesem Zeitpunkt haben Sie den Code bereits getestet (Sie ändern nur feste Zeichenfolgen) und sind wahrscheinlich ziemlich sicher, wenn Sie nur den Code ausführen (vorausgesetzt, Sie haben gute Sicherungen für alle Fälle).

Eine einfache Möglichkeit , ein zu testen DELETE, UPDATEoder INSERTist sie zu einem SELECT zu ändern , und führen sie dann bestätigen , dass die Anzahl und die Art der Zeilen , die Sie erwarten , werden zurückgegeben.

Sie könnten denken, dass Sie SELECTs nicht testen müssen, da sie tatsächlich keine Daten ändern. Wie auch immer, Sie führen den Code aus einem bestimmten Grund aus, oder? Angenommen, Sie recherchieren für Ihren Manager, der diese Daten wiederum an seinen Manager weitergibt, und so weiter. Sie testen, um sicherzustellen, dass Sie nicht die falschen Daten erhalten (oder andere daran hindern, ihre Daten zu sammeln).

Ad-hoc-Abfragen, die Systemdaten referenzieren / beeinflussen

Dies ist möglicherweise die einzige Ausnahme von der Regel "Alles testen". Sie führen Informationsabfragen zu Systemdaten aus. Das Wichtigste dabei ist, die erwarteten Daten zurückzugewinnen. Wenn die Abfrage etwas Einfaches ist (Abfragen einer Systemansicht), sind Sie wahrscheinlich in Ordnung, solange Sie überprüft haben, was die Ansicht / Spalten wirklich bedeuten. Wenn die Abfrage komplex ist (z. B. 3 oder 4 Systemansichten mit Berechnungen für die zurückgegebenen Spalten), möchten Sie möglicherweise einige Tests ausführen, um sicherzustellen, dass Sie die erwarteten Daten zurückerhalten.

Zusammenfassung

Zusammenfassend möchte man ja alles testen. Wenn es wichtig genug ist, dass Sie es schreiben und ausführen, ist es wichtig genug, dass Sie es testen. Das bedeutet jedoch nicht, dass Sie enorm viel Zeit damit verbringen müssen, jeden Zweig jeder Codezeile zu testen. Es müssen jedoch noch einige Tests durchgeführt werden.

Automated Unit Testing ist hier Ihr Freund. Mit dem Aufkommen von DevOpsund werden Continuous IntegrationSie immer mehr Anwendungen und Methoden zum schnellen und einfachen Testen Ihres Codes sehen. Das setzt natürlich eine gute Testumgebung und Daten voraus, aber das ist eine ganz andere Diskussion.

Kenneth Fisher
quelle
4

Ich weiß, wie Sie sich fühlen, ich arbeite seit 3 ​​Jahren mit MySQL und in meinem Fall teste ich immer die DML- Abfragen, die Informationen zu jeder Tabelle / Datenbank / Slave-Replikation ändern oder beschädigen können.

Dies ist immer die sicherste Methode, um Ihre Abfrage zu testen, bevor Sie sie ausführen.

Es gibt keine Möglichkeit zu wissen, ob Ihre Abfrage Ihre Dateninformationen gefährden kann. Die einzige Möglichkeit besteht darin, Ihre Datenbankstruktur und -konfiguration zu kennen, sodass Sie leicht erkennen können, wann eine Abfrage Ihre vertraulichen Daten gefährden könnte oder nicht.

Auf DELETE, UPDATE, INSERTsollen Sie immer versuchen , verwenden SELECTzuerst , wenn Sie nicht sicher sind , welche Informationen , die Sie ändern werden. Versuchen Sie bei Auswahl immer, für die Bedingungen den gleichen Datentyp zu verwenden wie für den Spaltendatentyp. In einigen Fällen wird dieser EXPLAINzur Optimierung verwendet.

oNare
quelle