Inhalt
Mnemonik ist ein Wort oder eine Phrase, die uns hilft, uns an etwas zu erinnern. Die bekannteste Mnemonik lautet: "Jeder Jäger möchte wissen, wo der Fasan sitzt." Wer auch immer Sie fragen, jeder kennt sie.
Aber im professionellen Bereich ist alles etwas trauriger. Fragen Sie Ihre Kameraden, ob sie wissen, was SPDFOT oder RCRCRC ist. Weit davon entfernt, eine Tatsache zu sein ... Aber die Mnemonik hilft uns, die Tests durchzuführen, nicht zu vergessen, die wichtigsten zu überprüfen. Checkliste in einem Satz zusammengebrochen!
Englisch sprechende Testkollegen verwenden Mnemonik aktiv. Ein Freund, der ausländische Blogs liest, sagt, dass die Amerikaner sie für fast jedes Niesen einfallen lassen.
Und ich finde das großartig. Ausländische Mnemonik ist möglicherweise nicht speziell für Ihr System oder Ihre Prozesse geeignet. Und seine Liebe wird Sie daran erinnern, „nicht zu warten, um dies und das zu überprüfen“ und die Anzahl der Fehler in der Produktion zu begrenzen.
Heute möchte ich Ihnen meine BMW Mnemonik zur Untersuchung von Grenzwerten vorstellen. Es kann sein:
- Geben Sie Junior für die allgemeine Entwicklung im Testdesign;
- Verwendung beim Interview - Der Kandidat löst normalerweise die Aufgabe „Grenze in Nummer finden“. Wird er die Grenze in der Zeile finden oder die Datei herunterladen?
BMW Mnemonics
B - groß
M - klein
B - genau richtig

Es ist leicht zu merken. Denken Sie an dieses coole Auto und sofort ist die Entschlüsselung fertig! Aber was bedeutet das und wie hilft es bei Interviews?
Genau richtig

Im Prinzip "genau richtig" testen Sie ohne Mnemonik. Wir beginnen immer mit positiven Tests, um sicherzustellen, dass das System im Prinzip funktioniert.
Wenn das Feld numerisch ist, geben Sie den allgemeinen Wert ein. Nehmen wir an, wir haben einen Online-Shop für den Einzelhandel. In der Warenmenge können wir 1 oder 2 prüfen.
Ein positiver Test - das ist "genau richtig". Ich habe Mnemonik in Form einer Maus gezeigt. Hier ist es eine Standardgröße.
Groß
Dann sagen wir, dass die Maus auf eine unglaubliche Größe aufgepumpt werden muss, damit sie nicht direkt ins Bild passt. Und sehen Sie, wie das System damit funktioniert.

In diesem Fall gehen wir einfach „weit voran“. SEHR WEIT! Die große Maus repräsentiert die Suche nach einer technologischen Grenze irgendwo da draußen außerhalb einer willkürlichen.
Um die Warenmenge einzugeben, lautet dies "99999999999999999999999999999999999999999999999999999999999 ...". Nicht nur ein großartiger Wert (9999), sondern auch SEHR groß. Denken Sie an die Maus - sie war so in die Luft gesprengt, dass sie nicht einmal in das Bild passte.
Der Unterschied ist wichtig, große Bedeutung wird dazu beitragen, eine willkürliche Grenze zu finden, und eine große wird dazu beitragen, eine technologische Grenze zu finden. Der Test für "groß" wird oft durchgeführt, für "groß" - nein. Mnemonics erinnert sich genau an ihn.
Klein
Wir stechen in die Maus und sie wird auf eine mikroskopische Größe abgeblasen.

Die kleine Maus ist eine Suche nach Werten nahe Null. Der kleinste positive Wert.
Was ist mit dem Test für "0.00000001"? Auf Null geprüft, aber nicht vergessen, nebeneinander zu graben.
Und was ist da?
Es scheint offensichtliche Dinge zu sagen. Es scheint, dass jeder das bereits weiß. Geben Sie einfach ein Interview über eine Zahlenaufgabe, dasselbe Dreieck (eine
Aufgabe von Myers ), und Sie verstehen, dass dies nicht der Fall ist ... Nur sehr wenige Menschen werden nach einer technologischen Grenze suchen oder versuchen, einen Bruchwert nahe Null einzugeben. Maximal Null und bietet an zu prüfen.
Und wenn Sie vorschlagen, KEINE Zahl zu testen, ist dies eine noch größere Dummheit. Mit der Nummer, okay, haben wir Null und die Grenze gemäß TK überprüft, es ist schon nicht schlecht. Und in der Zeile was zu testen? Und in der Akte?
Ich möchte darüber im Artikel sprechen. Wie können Sie Mnemonics im wirklichen Leben einsetzen und gleichzeitig Fehler abfangen? Beginnen wir mit allgemeinen Beispielen, die in jedem Projekt zu finden sind. Und das kann beim Interview in Form einer kleinen Aufgabe gegeben werden.
Und dann werde ich Beispiele aus meiner Arbeit erzählen. Ja, sie sind spezifisch. Ja, es geht um bestimmte Technologien. Na und? Sie zeigen jedoch, wie Sie Mnemonik an komplexeren Stellen anwenden können.
Die Bedeutung ist dieselbe: Grenzen sind fast überall. Finden Sie einfach die Nummer und experimentieren Sie damit. Und vergessen Sie nicht die BMW Mnemonik, denn bei B und M treten häufig Fehler auf.
Allgemeine Beispiele
Beispiele in jedem Projekt: ein numerisches Feld, eine Zeichenfolge, ein Datum ... Wir werden in dieser Reihenfolge betrachten:
Nummer
- 10
- 0,00000001
- 999999999999999999999999 ....
Sagen Sie eine Schachtel mit der Anzahl der Bücher, Kleider oder Saftpakete. Als positiven Test wählen wir eine angemessene Menge: 3, 5, 10.
Wählen Sie als kleinen Wert so nahe wie möglich bei Null. Denken Sie daran, dass die Maus sehr klein sein sollte. Dies ist nicht nur eine Einheit, sondern die N-te Dezimalstelle. Plötzlich wird es auf Null runden und irgendwo in den Formeln wird abstürzen? Außerdem wird bei der Nummer „1“ alles gut funktionieren.
Nun, das Maximum wird durch Eingabe von 10 Millionen Neunen erreicht. Generieren Sie eine solche Zeichenfolge mit Tools wie Perlclip und testen Sie SEHR viel!
Siehe auch:Äquivalenzklassen für eine Zeichenfolge, die eine Zahl bezeichnet - noch mehr Ideen für numerische Zeichenfolgentests
So generieren Sie eine große Zeichenfolge, Tools - Assistenten bei der Generierung von großem Wert
Datum
- 26.05.2017
- 01.01.1900
- 21.12.003
Ein positives Datum ist entweder "heute", wenn wir den Bericht an einem bestimmten Datum versenden. Oder Ihr eigenes Geburtsdatum, wenn es sich um DR handelt, oder ein anderes, das zu Ihrem Geschäftsprozess passt.
Als kleines Datum nehmen wir das magische Datum "01/01/1900", an dem Anwendungen häufig auseinanderfallen. Ab diesem Datum beginnt die Uhrzeit in Excel. Es schleicht sich auch in Anwendungen ein. Sie legen diese magische Zahl offen - und der Bericht fällt auseinander, auch wenn Null gegen den Narren geschützt ist. Daher empfehle ich es zur Überprüfung.
Wenn es sich um eine sehr kleine Maus handelt, können Sie immer noch "00.00.0000" überprüfen. Dies ist eine Nullprüfung, was ebenfalls wichtig ist. Entwickler sind jedoch häufiger vor einem solchen Narren geschützt als ab dem 01.01.1900.
Weit voraus kann auch anders sein. Sie können in ein Negativ gehen und ein Datum oder einen Monat überprüfen, das wirklich nicht existiert: 05/40/2018. Oder suchen Sie die technologische Grenze mit dem Datum 99.99.9999. Und Sie können einen etwas realeren Wert annehmen, der einfach nicht in Kürze verfügbar sein wird: 2400 oder 3000.
Siehe auch:Äquivalenzklassen für eine Zeichenfolge, die ein Datum angibt - noch mehr Ideen zum Testen eines Datums

String
- Vasya
- (ein Leerzeichen)
- (Es gab viel Text)
Angenommen, bei der Registrierung gibt es ein Feld mit einem Namen. Ein positiver Test ist ein gebräuchlicher Name: Olga, Vasya, Peter ...
Bei der Suche nach einer kleinen Maus nehmen wir eine leere Zeile oder einen Life-Hack: ein oder zwei Leerzeichen. In diesem Fall bleibt die Zeile leer (es sind keine Zeichen vorhanden), aber sie scheint gefüllt zu sein.
Was ist der Fokus bei der Suche nach einer großen Maus? Wenn wir einen großen String testen, müssen wir den BIG-String testen! Denken Sie daran, dass die Maus GROSS sein sollte. Weil ich den Schülern normalerweise erkläre, wie das alles funktioniert, wie man nach einer technologischen Grenze sucht usw. Und dann geben sie mir DZ und schreiben: "Ich habe 1000 Zeichen überprüft - es gibt keine technologische Grenze."
21 Jahrhundert im Hof, na ja, was sind 1000 Zeichen? Wir nehmen jedes Werkzeug, mit dem wir 10 Millionen generieren und 10 Millionen einfügen können. Dies wird nun die Suche nach einer technologischen Grenze sein. Und es gibt bereits Fehler, bei denen das System möglicherweise abbricht. Aber 1000 Zeichen? Nein.
Siehe auch:So generieren Sie eine große Zeichenfolge, Tools - Assistenten bei der Generierung von großem Wert
Aber auch hier ist alles klar. Und was passiert, wenn wir die Datei testen?
Datei
Wo finde ich eine Nummer in einer Datei?
Erstens hat die Datei ihre Größe:
Wenn sie eine große Datei testen, versuchen sie normalerweise etwa 30 MB und beruhigen sich dabei. Und dann laden Sie 1 GB - und das war's, der Server friert ein.
Wenn Sie ein Anfänger sind und eine echte Site auf Erfahrung testen, sollten Sie sie natürlich nicht ohne das Wissen des Eigentümers laden. Aber wenn Sie bei der Arbeit testen, achten Sie darauf, die große Maus zu überprüfen.
Zweitens hat die Datei einen Namen → und dies ist die Länge der Zeile, die wir gerade besprochen haben.
Die Datei hat aber auch ihren Inhalt! Es gibt eine Reihe von Spalten (Spalten) und Zeilen. Linientests:
- 5 Zeilen
- 1 Reihe
- 1.000.000.000 Zeilen
Und hier beginnt der Spaß. Denn selbst in demselben Excel in verschiedenen Versionen gibt es unterschiedliche Einschränkungen für die Anzahl der unterstützten Zeilen:
- Excel unter 97 - 16 384
- Excel 97-2003 - 65 536
- Excel 2007 - 1.048.576
Trotzdem sind die Zahlen ziemlich groß, es ist nicht interessant. Aber das alte Exel hat nicht mehr als 256 in den Spalten geöffnet, und dies ist eine ernsthafte Einschränkung:
- Excel 2003 - 256
- Excel 2007 - 16.385
Sein freier Bruder LibreOffice kann nicht mehr als 1024 Spalten öffnen.

Lebensgeschichte
Wir schreiben einige Autotests im CSV-Format. Am Eingang zum Tisch, am Ausgang des Tisches. Öffnen und bearbeiten Sie in LibreOffice, um zu sehen, wo sich welche Spalte befindet. Alles ist großartig, alles funktioniert. Während die Anzahl der Spalten für 1024 nicht herauskommt.
Hier beginnt der # Lebensschmerz. Der LibreOffice-Test wird nicht mehr geöffnet. Im CSV-Format ist dies unpraktisch, da schwer zu verstehen ist, wo sich die 555-Spalte befindet. Sie öffnen den Test in Excel, bearbeiten, speichern, führen den Test aus ... Er fällt an 10 neue Stellen: Die TIN ist fehlerhaft. Es ist zum Beispiel 7710152113 lang. Excel übersetzt es gerne in das 1.2E + 5-Format.
Andere lange Nummern gehen ebenfalls verloren.
Wenn sich der Wert in Anführungszeichen befand, wird er in zusätzliche Anführungszeichen gesetzt, die der Test nicht erwartet.
Und Sie korrigieren diese kleinen Dinge bereits im CSV-Format, indem Sie Excel mental für sich selbst schelten ... Es gibt also eine Einschränkung, an die Sie sich erinnern sollten! Obwohl es nicht auf dem System selbst angezeigt wird, kann es die Lebensdauer des Testers einfach verkomplizieren.
Tabelle in Oracle (Datenbank)
Und da es sich um 1024 Spalten handelt, werden wir uns an Oracle (eine beliebte Datenbank) erinnern. Es gibt die gleiche Einschränkung: In einer Tabelle können maximal 1024 Spalten vorhanden sein.
Es ist besser, sich vorher daran zu erinnern! Wir hatten einen Tisch mit ungefähr 1000 Spalten, aber die Hälfte war für die Zukunft reserviert: "Eines Tages wird es sich als nützlich erweisen, das wird uns für eine lange Zeit ausreichen." Genug, aber nicht lange ...
Nirgendwo, um die Tabelle zu erweitern - stieß auf eine Einschränkung. Teilen Sie die Tabelle also entweder in zwei Teile oder packen Sie den Inhalt in ein BLOB: Dies ist etwas, das ein Zip-Archiv mit Daten eine Spalte belegt, aber darin so viele enthält, wie Sie möchten.
In jedem Fall handelt es sich jedoch um eine Datenmigration. Und Datenmigration ist immer ein Schmerz. An einer großen Basis dauert es lange, bringt neue Probleme mit sich, die nur in sechs Monaten gelöst werden können ... Brrr! Wenn Sie auf Migration verzichten können, ist dies besser.
Wenn Sie eine Tabelle mit vielen Daten haben, denken Sie an die Zukunft. Passen Sie immer in 1024 Spalten? Müssen Sie später migrieren? Denn je länger das System lebt, desto schwieriger wird die Übertragung. Und „genug für 5 Jahre“ bedeutet, dass ein Fünfjahresvolumen migriert werden muss.
Wie teste ich es? Ja, bewerten Sie Ihre Datentabellen anhand des Codes und sehen Sie sich an, wo sie sich befinden. Achten Sie auf die große Maus: die Tabellen, die bereits viele Spalten enthalten. Wird es in Zukunft Probleme mit ihnen geben?
Bericht im System
Aber warum laden wir Dateien auf das System hoch oder pumpen Daten von Oracle? Höchstwahrscheinlich, um eine Art Bericht zu erstellen. Und hier können Sie diese Mnemonik auch anwenden.
Daten können sowohl am Eingang (viel, wenig, genau richtig) als auch am Ausgang sein! Dies ist auch wichtig, da es sich um unterschiedliche Äquivalenzklassen handelt.
Als Ergebnis testen wir die Menge:
- Berichtsspalten
- Linien
- Eingabedaten;
- Ausgabedaten (im Bericht selbst).
Struktur (Spalten und Zeilen)Können wir die Anzahl der Zeilen oder Spalten beeinflussen? Manchmal ja, wir können. Bei der zweiten Arbeit habe ich den Berichtsdesigner getestet: Links haben Sie Cubes mit den Namen der Parameter, die Sie horizontal oder vertikal in den Bericht selbst werfen können. Das heißt, Sie entscheiden, wie viele Zeilen und wie viele Spalten vorhanden sein sollen.
Wenden Sie Mnemonics an. Nach einem Standardbericht (positiver Test, "genau richtige" Maus) versuchen wir ein wenig zu tun:
- 1 Spalte, 0 Zeilen;
- 0 Spalten, 1 Zeile;
- 1 Spalte, 1 Zeile.
Dann viel:
- maximale Spalten, 1 Zeile (alle Würfel werden in Spalten geworfen);
- maximale Zeilen, 1 Spalte;
- Wenn die Würfel dupliziert werden können, dann hier und da bis zum Maximum, aber das ist zweifelhaft;
- Maximum der verschachtelten Ebenen (dies ist, wenn sich zwei andere in einer Aggregatorspalte befinden).
Als nächstes testen wir die Eingabe- und Ausgabedaten. Wir können sie in jedem Bericht beeinflussen, auch wenn es keinen Konstruktor gibt und die Anzahl der Zeilen und Spalten immer gleich ist.
Daten eingebenWir finden heraus, wie der Bericht erstellt wird. Angenommen, jeden Tag werden einige Daten eingegeben, beispielsweise die Anzahl der verkauften Kleider, Sommerkleider und T-Shirts. Und im Bericht sehen wir eine Gruppierung von Daten nach Kategorien, Farben, Größen. Wie viel wird pro Tag / Monat / Stunde verkauft?
Wir erstellen einen Bericht und beeinflussen selbst die Eingabedaten:
- Die übliche Anzahl (5 Kleider pro Tag, obwohl diese Anzahl an großen Veranstaltungsorten 2000 oder mehr betragen kann, müssen Sie klären, was für Ihr System positiver ist).
- Leer, nicht verkauft / verkauft 1 Artikel pro Monat.
- Das Volumen ist unrealistisch groß, mit einem Maximum von jedem Produkt, jeder Farbe, jeder Größe. Wir setzen das Maximum „Lügen im Lager“ und verkaufen alles: innerhalb eines Monats oder sogar eines Tages. Was wird die Berichterstattung sagen?
Daten ausgebenTheoretisch korrelieren die Ausgabedaten mit den Eingabedaten. Am Eingang ein wenig → am Ausgang wird es ein wenig sein. Am Eingang gibt es viele - am Ausgang gibt es viele.
Das funktioniert aber nicht immer. Manchmal können die Eingabedaten eliminiert oder umgekehrt multipliziert werden. Und dann können wir irgendwie damit spielen.
Zum Beispiel das
Dadat- System. Sie laden eine Datei mit einer Spalte mit vollständigem Namen hoch. Bei der Ausgabe erhalten Sie mehrere gleichzeitig:
- Ursprünglicher Name, was in der Datei war;
- Zerlegter Name (wenn Sie erkennen könnten);
- Rod Fall;
- Dat Fall;
- Erstellen. Fall;
- Nachname
- Vorname;
- Zweiter Vorname;
- Analysestatus - sichere Erkennung durch einen Mechanismus oder Überprüfung durch eine Person;

Wir haben 9. Aus einer Zelle. Und dies ist nur mit Namen, und das System kann auch Adressen analysieren. Dort werden fast 50 aus einer Zelle gewonnen: Zusätzlich zu den granularen Komponenten gibt es alle Arten von Codes KLADR, FIAS, OKATO ...
Und hier ist es interessant. Es stellt sich heraus, dass wir möglicherweise wenig Daten am Eingang haben, aber viel am Ausgang. Und wenn wir das Maximum in Spalten untersuchen, haben wir zwei Möglichkeiten:
- 500 Spalten am Ausgang (das sind ungefähr 10 Adressen am Eingang);
- 500 Säulen am Eingang (und eine ganze Reihe am Ausgang).
Das Prinzip funktioniert auch in die entgegengesetzte Richtung. Was ist, wenn die Eingabe eine ganze Reihe von Daten ist und die Ausgabe zilch ist? Wenn es anstelle eines vollständigen Namens einen Unsinn wie "op34e8n8pe" gibt? Dann stellt sich heraus, dass alle zusätzlichen Spalten leer sind, nur der Status der Analyse "Sie haben mir Müll geschickt". Wir erhalten also ein Minimum am Ausgang (eine kleine Maus), das ebenfalls überprüft werden sollte.
Und wenn die Lautsprecher ausgeschlossen werden können! Es ist möglich, die Äquivalenzklasse "Null" zu überprüfen, wenn sich die Null am Ausgang befindet und die Quelldatei nicht leer ist. Sie können mindestens überprüfen, wann 1 von 100 Spalten übrig geblieben sind.
Die Hauptsache hier ist, sich daran zu erinnern, dass wir zusätzlich zu den Eingabedaten Ausgabedaten haben. Und manchmal können Sie in ihnen die Grenzen überprüfen, die nicht von den Eingabedaten abhängen. Und dann muss dies getan werden.
Mobile Apps
Kommunikation
Es gibt verschiedene Kommunikationsmöglichkeiten:
- Normal
- Sehr Feige (kleine Maus);
- Super schnell (groß).
Darüber hinaus kann eine schlechte Kommunikation teilweise auftreten: Wenn Sie sich in einem Gebiet mit normalem WLAN und einem schlechten Mobilfunknetz befinden. Das Internet funktioniert gut, aber die SMS ist schlecht.
Speichermenge
Es ist auch wichtig, wie viel Speicher die Anwendung hat:
- Normale Menge;
- Sehr wenig;
- Sehr viel.
Und wenn in diesem Fall der erste und der dritte Test in diesem Fall kombiniert werden können, ist die kleine Maus sehr interessant. Und es gibt verschiedene Möglichkeiten:
- Führen Sie die Anwendung auf dem Telefon aus, das bereits wenig Speicher hat.
- Ausführen, wenn der Speicher normal ist, reduzieren, etwas Großes bereitstellen und versuchen, zur ersten Anwendung zurückzukehren.
Wenn die Anwendung nicht weiß, wie man normalerweise Speicher reserviert, stürzt sie im zweiten Fall einfach ab, und der Speicher wurde bereits gedrückt.
Gerätediagonale
- Standard (wir untersuchen den Markt, schauen, was bei unseren Benutzern beliebter ist).
- Minimum (Telefon).
- Maximum (große Tablette).
Bildschirmauflösung
- Standard;
- Der kleinste;
- Der größte;
Verwechseln Sie Auflösung und Diagonale nicht, dies sind zwei verschiedene Dinge. Sie haben vielleicht ein altes Gerät mit einem großen Display, aber ich habe ein neues trendiges Smartphone, bei dem die Auflösung fünfmal besser ist. Und was in 20 Jahren passieren wird, ist beängstigend vorstellbar.
GPX-Pfade
GPX-Pfade sind XML-Dateien mit sequentiellen Koordinaten. Sie können auf mobile Emulatoren heruntergeladen werden, sodass das Telefon denkt, dass es sich mit einer gewissen Geschwindigkeit im Weltraum bewegt.
Nützlich, wenn die Anwendung für einige ihrer Zwecke GPS-Koordinaten liest. Es bestimmt also selbst, ob Sie gehen, laufen oder reiten. Und Sie können nicht laufen, nur die Anwendungskoordinaten eingeben, den Durchgangskoeffizienten einstellen und testen, während Sie im Büro sitzen.
Welche Chancen sind es wert, überprüft zu werden? Alles nach der Mnemonik:
- 1 - normaler Koeffizient, ersetzt einfaches Gehen;
- 0,01 - als ob Sie meeeeeeeeeeeeeeeeeeeeeballyly ziehen;
- 200 - nicht mal rennen, sondern fliegen!
Warum sollte das alles überprüft werden? Welche Fehler können gefunden werden?
Beispielsweise kann die Anwendung im Flugzeug abstürzen - sie wurde gestartet, ist jedoch sofort zusammengebrochen. Da liest es die Koordinaten und versucht deine Geschwindigkeit zu bestimmen. Aber wer wusste, dass die Geschwindigkeit über 130 liegen würde?
Bei langsamer Geschwindigkeit kann die Anwendung abstürzen. Er wird sich eine Million Zwischenpunkte setzen und diese nicht in Erinnerung behalten können. Und das war's!
Siehe auch:Was sind GPX-Pfade und warum benötigen sie einen Tester? - mehr über GPX-Pfade und ein Beispiel für eine solche Datei
Zusammenfassung gängiger Beispiele
Ich möchte hier zeigen, dass es so aussieht, als ob "groß, klein" ein Zahlenfeld ist und das war's!
Tatsächlich kann Mnemonik überall verwendet werden, sei es in Dateien, Spielzeugen, Berichten ... und es hilft uns wirklich, Fehler zu finden. Hier einige Beispiele aus meiner Praxis:Kleine Maus (untere Schranke)- Datum 01.01.1900Als ich freiberuflich arbeitete, hat dieses Datum alle Berichte für mich ruiniert. Denn selbst wenn der Entwickler den Schutz vor dem Narren festlegte, stellte er den Schutz ab 0000 ein. Er stellte jedoch keinen Schutz ab 1900 ein.- Ein einsamer Charakter am Ende einer Zeile.Dieser Test wurde mir von einem erfahreneren Kollegen vorgeschlagen, als wir Beispiele für die Verwendung von Mnemonik diskutierten. Wenn das System die Datei auf Leere überprüft, muss überprüft werden, ob sie nicht vollständig leer ist.Ich empfehle diesen Test: Fügen Sie der Datei einen Zeilenabschluss hinzu. Nicht einmal ein Leerzeichen, sondern ein besonderer Charakter. Und sehen Sie, wie das System reagiert. Und sie reagiert nicht immer gut =)Große Maus (obere Schranke)Wenn wir von einer großen Maus sprechen, gibt es im Allgemeinen unendlich viele Fehler:- Krieg und Frieden;- viele Daten;- 2 GB.Sie können Krieg und Frieden in ein Textfeld hochladen, eine große Datei in das System hochladen und viele Daten zur Eingabe oder Ausgabe abrufen. Dies sind alles häufige Fehler, auf die ich in meiner Praxis gestoßen bin. Und nicht nur ich, die Obergrenze wird oft überprüft, nur weil sie wissen, dass es Fehler geben kann. Vielmehr vergessen sie die kleine Maus.Ein weiteres Beispiel für eine große Maus sind Stresstests. Oh!
Ich habe solche Beispiele, also gehen wir zum Hardcore.Wenn Sie den Kontext kennen, wissen, wie Ihre Anwendung im Inneren funktioniert, in welcher Programmiersprache sie geschrieben ist, welche Datenbank sie verwendet, können Sie auch diese Mnemonik verwenden. Und das möchte ich anhand konkreter Beispiele zeigen.Meine Übungsbeispiele
Große Maus
Linux, Lucene, Mmap
Im Linux-Betriebssystem gibt es eine Einstellung für die maximale Anzahl geöffneter Dateideskriptoren:- redhat-6 - /etc/security/limits.conf
- redhat-7 - / etc / systemd / system / [Name des Dienstes] .service.d / limit.conf (für jeden Dienst seinen eigenen)
Für jede Aktion mit Dateien wird ein Dateideskriptor geöffnet:- eine Datenbankverbindung erstellen;
- Lesen Sie die Datei.
- in eine Datei schreiben.
- ...
Wenn Ihr System aktiv mit Dateien arbeitet und viele Vorgänge ausführt, muss die Einstellung erhöht werden. Andernfalls wird Sie die geringste Belastung setzen.Unser System verwendet den Lucene-Suchindex. In diesem Fall nehmen wir einige Daten aus der Datenbank und laden sie auf die Festplatte hoch, damit wir später schneller danach suchen können. Wenn wir den Index mithilfe der mmap-Technologie erstellen, werden während der Erstellung des Index viele Dateien zum Schreiben erstellt.
Die Testbasis hat normalerweise 100 Clients, also 1000. Nicht so viele. Die Neuerstellung läuft problemlos, auch wenn Sie die Deskriptoren nicht konfigurieren.Und im realen System wird es mehr als 10 Millionen Kunden geben. Und wenn Sie dort nicht die Anzahl der Dateideskriptoren konfigurieren, stürzt beim Erstellen von Indizes alles ab.Sie müssen dies wissen und sofort eine Anweisung schreiben: Konfigurieren Sie das Betriebssystem auf dem Server, sonst gibt es solche und solche Konsequenzen. Auf der anderen Seite ist es wichtig, nicht nur Funktionstests, sondern auch Stresstests an einer realen Datenmenge durchzuführen.Redhat 6 ≠ Redhat 7
Vergessen Sie beim Testen einer großen Maus (Laden) nicht, dass die Anwendung in verschiedenen Konfigurationen unterschiedlich funktioniert. Wenn Sie die Anweisungen aus dem letzten Absatz übernehmen, muss diese nicht nur geschrieben, sondern auch überprüft werden. Und überprüfen Sie die Umgebung des Kunden.Weil verschiedene Betriebssysteme unterschiedlich funktionieren. Und wir hatten eine solche Situation, dass alles konfiguriert zu sein scheint, aber das System stürzt ab und sagt "Ich habe nicht genug offene Dateideskriptoren." Wir sagen:- Überprüfen Sie den Parameter.- Er ist konfiguriert, alles entspricht Ihren Anweisungen!Wie so? Es stellt sich heraus, dass wir Anweisungen für Redhat 6 haben, und sie haben Redhat 7, wo sich die Einstellung an einem völlig anderen Ort befindet! Infolgedessen haben sie es gemäß nicht funktionierenden Anweisungen getan und als ob sie es überhaupt nicht getan hätten.Wenn Sie also mit verschiedenen Versionen von Linux-Distributionen arbeiten, müssen Sie alle überprüfen. Und nicht nur die Dienste auf einem Computer bereitstellen, sondern auch mindestens einmal Lasttests durchführen: Stellen Sie sicher, dass alles funktioniert. Schließlich ist es besser, einen Fehler in einer Testumgebung zu erkennen, als die Produktion später zu verstehen.Java und Garbage Collection
Wir verwenden die Java-Sprache, die über einen integrierten Garbage Collector verfügt ... Manchmal scheint es, dass Sie dieses Problem einfach lösen können, indem Sie einfach die Menge des verfügbaren Speichers erhöhen, wenn die Anwendung viel Speicher verwendet und für komplexe Vorgänge am Rande von OOM (Out of Memory) steht ! Warum testen?Nicht wirklich. Geben Sie viel Xmx - die Anwendung hängt am Garbage Collector ...
und sie manifestiert sich sehr plötzlich für den Benutzer. Hier haben sie nachts eine große Ladung abgelegt, viele Daten heruntergeladen - besonders nach Stunden, um niemanden zu stören. Am Morgen kommt der Benutzer, obwohl er der einzige ist, der mit dem System arbeitet, es gibt fast keine Last und alles hängt an ihm. Und er versteht nicht einmal warum.Tatsächlich ist die Ladung vorbei, die Ladung ist verschwunden, und der Müllsammler ist wegen dieses Frieses herausgekommen, um alles zu reinigen. Und obwohl jetzt keine Last mehr vorhanden ist und ein einsamer Benutzer arbeitet, ist er traurig.Daher wird der Anwendung nur viel Speicher zugewiesen, "und Sie können sie nicht testen" - dies funktioniert nicht. Besser überprüfen.Wildfliege
Der WildFly Java-Anwendungsserver erlaubt das Herunterladen großer Dateien nicht, wenn er nicht entsprechend konfiguriert ist.
Wir verwenden den Jboss-Anwendungsserver, auch bekannt als Wildfly. Und es stellt sich heraus, dass Sie standardmäßig keine großen Dateien hochladen können. Und wir erinnern uns, dass die Maus GROSS sein sollte. Wenn wir 5 MB oder 50 MB testen, funktioniert alles, alles ist in Ordnung.Wenn Sie jedoch versuchen, 2 GB herunterzuladen, gibt das System einen 404-Fehler aus und Sie können nichts aus den Protokollen verstehen: Die Protokolle der Anwendung sind leer. Da diese Anwendung eine Datei nicht herunterladen kann, schneidet Wildfly sie selbst.Wenn Sie keine Tests auf Ihrer Seite durchführen, kann dies beim Kunden auftreten. Und es wird sehr unangenehm sein, er wird mit der Frage kommen "Warum wird es nicht geladen?", Und ohne den Entwickler kann man nichts sagen. Daher ist es besser, nicht zu vergessen, die Grenzen zu testen, einschließlich großer Dateien, die in das System übertragen werden sollen. Zumindest kennen Sie das Ergebnis solcher Aktionen.Und hier beheben wir es entweder durch Erhöhen des Parameters max-post-size oder geben Informationen über die Einschränkung und schreiben sie in der Arbeitsaufstellung vor.Protokollierung
Ein weiteres Beispiel zum Testen der "großen" Maus. Ja, sie erinnert sich irgendwie an mehr Beispiele ... Meistens fängt sie Käfer!Angenommen, wir überprüfen die Fehlerprotokollierung. Dass der Fehler in den Stack-Trace im Protokoll geschrieben wird. Also haben wir nachgesehen, wir sind großartig: Ja, alles ist cool, alles ist aufgenommen! Und ich habe alles vom Stapel auf dem Fehlertext verstanden. Wenn der Kunde fällt, werde ich sofort verstehen, warum.
Und was passiert, wenn wir nicht einen Fehler haben, sondern mehrere? Alles ist auch gut, alles ist protokolliert, alles ist gut! Aber wir erinnern uns, dass die Maus
GROSS sein sollte: Was passiert, wenn wir VIELE Fehler haben? Wir hatten gerade diese Situation. Das Quellsystem lädt Daten in die Puffertabelle in der Datenbank hoch. Unser System nimmt diese Daten von dort und arbeitet dann irgendwie mit ihnen.Das Quellsystem stürzte ab und es wurde ein falsches Inkrement hochgeladen, bei dem alle Daten fehlerhaft waren. Unser System hat das Inkrement übernommen, und es gibt 13.600 Fehler. Und als Java versuchte, einen Stack-Trace für 13k-Fehler zu generieren, aß sie den gesamten Speicher, der ihm zugewiesen wurde, und sagte dann „Oh, Java-Heap-Speicherplatz“.Wie kann ich das beheben? Wir haben der Ladeaufgabe den Parameter maxStoredErrors (Standard 100) hinzugefügt - die maximale Anzahl von Fehlern, die für einen Stream im Speicher gespeichert sind. Bei Erreichen dieses Betrags werden Fehler protokolliert und die Liste gelöscht.Wir haben auch das Duplizieren von Fehlermeldungen über die Ausführung einer Aufgabe durch unsere Aufgabe und die Quarz RunShell entfernt und die Protokollierungsstufe der letzteren erhöht, um zu warnen (die Meldung wird in Informationen angezeigt). Aufgrund von Duplikaten verdoppelte sich der Stapel ...Und was ist die Schlussfolgerung aus dieser Geschichte? Es reicht nicht aus, "genau richtig" zu überprüfen. Dies ist ein wichtiger und nützlicher Test, ja, niemand argumentiert. Wir prüfen, ob der Fehler grundsätzlich protokolliert wird, in welchem Test usw. Aber dann ist es sehr wichtig, die BIG-Maus zu überprüfen. Was passiert, wenn es viele Fehler gibt?Und Sie müssen verstehen, dass "viel" - das bedeutet viel. Wenn Sie ein Inkrement von 10 Fehlern laden und sagen "10 Fehler sind auch normal, das System zeigt alle Stapelspuren an", dann scheinen sie die Tests durchgeführt zu haben, aber sie haben das Problem nicht aufgedeckt. Wenn wir sehen, dass das System alle Nachrichten anzeigt, müssen wir im Voraus überlegen: Was passiert, wenn es VIELE davon gibt? Und check out.
Transliteration
- , , ? , , ?
=
=?

, ? , , . :
, «»

Oracle RAC
Oracle ist eine beliebte Datenbank. Oracle RAC ist, wenn Sie mehrere Datenbankinstanzen haben. Es ist notwendig, den reibungslosen Betrieb geschäftskritischer Systeme sicherzustellen: Selbst wenn eine Instanz defekt ist, funktioniert der Rest weiter, der Benutzer weiß nicht einmal davon.
Wenn Sie Oracle RAC verwenden, ist es obligatorisch, Lasttests durchzuführen. Wenn Sie es nicht haben, müssen Sie den Kunden, mit dem es steht, bitten, die Ladung auf seiner Seite auszuführen.
Hier kann sich die Frage stellen - warum haben Sie es dann nicht? Es ist einfach, Hardware zum Testen ist normalerweise immer schlechter. Wenn sich das System ausschließlich auf Oracle konzentriert und RAC einen von zwanzig Clients verwendet, ist der Kauf zum Testen unrentabel, da RAC sehr teuer ist. Es ist einfacher, mit einem Kunden zu verhandeln und ihm bei der Durchführung von Tests zu helfen.
Was passiert, wenn keine Lastprüfung durchgeführt wird? Hier ist ein Beispiel aus dem Leben.
In der Datenbank besteht die Möglichkeit, eine Spalte zu erstellen und zu sagen, dass es sich um ein Feld für die automatische Inkrementierung handelt. Dies bedeutet, dass Sie das Feld überhaupt nicht ausfüllen, die Datenbank generiert es. Es gibt eine neue Zeile? Ich habe den Wert "1" aufgezeichnet. Noch eine neue Linie? Sie wird einen Wert von "2" haben. Und jeder neue Wert wird mehr und mehr.
So ist es beispielsweise sehr praktisch, Bezeichner zu generieren. Sie wissen immer, dass Ihre ID eindeutig ist. Und für jede neue Zeile ist es mehr als für die vorherige. Theoretisch ...
Wir haben zwei Entitätskennungen in unserem System:
- id - Kennung einer bestimmten Version, Feld für die automatische Inkrementierung;
- hid ist eine historische Kennung, für eine Entität ist sie immer konstant und ändert sich nicht.
Infolgedessen können Sie nach einer bestimmten Version auswählen oder durch das Verstecken einer Entität auswählen und deren gesamten Verlauf anzeigen.
Wenn eine Entität erstellt wird, ist id = versteckt. Und dann wächst die ID, sie ist für neue Versionen immer größer als versteckt. Daher die Formel zur Bestimmung der Version:
version = (id - versteckt) + 1Es kann nicht negativ sein, da die ID von der Datenbank selbst erstellt wird.
Aber hier kommen sie mit einer Frage im Wesentlichen zu uns und zeigen Aufzeichnungen aus der Datenbank. Ich kann mich nicht erinnern, worum es bei dieser Frage ging, und es spielt keine Rolle. Ich schaue mir die Aufzeichnungen an und kann meinen Augen nicht trauen: Dort hat die Version negative Werte. Wie so? Das ist unmöglich. Es stellte sich als möglich heraus.
In RAC hat jeder Knoten seinen eigenen Cache. Und es kann vorkommen, dass die Knoten keine Zeit haben, sich gegenseitig zu benachrichtigen, und Sie haben zweimal dieselbe Nummer auf dem Tablet:
- Erstellt eine Entität. Noda schaut in den Cache. Was ist der letzte Wert des Feldes für die automatische Inkrementierung? Ja, 10. Also werde ich die Kennung 11 geben.
- Sofort kommt eine neue Entität am zweiten Knoten an (Anforderungen kamen gleichzeitig und der Balancer warf eine auf Knoten 1 und die zweite auf Knoten 2).
- Der zweite Knoten schaut in seinen Cache. Was ist der letzte Wert des Feldes? Ja, 10 (der erste Knoten hat es noch nicht geschafft, den zweiten darüber zu informieren, dass er diese Nummer angenommen hat). Also werde ich die Kennung 11 geben.

Insgesamt erhalten wir keinen eindeutigen Wert eines eindeutigen Feldes. Und schließlich wird es bei einer großen Anzahl solcher Schnittpunkte von Bezeichnern nicht einen oder sogar zwei geben ... Wenn Sie die gesamte Geschäftslogik mit der Tatsache verknüpft haben, dass die ID immer eindeutig ist und immer zunimmt, ist sie OH.
In unserem Fall ist nichts Katastrophales passiert, und Lasttests am Prüfstand des Kunden haben geholfen. Wir haben das Problem früh festgestellt, da sich herausstellte, dass negative Versionen des Systems das Leben nicht beeinträchtigen. Aber nur für solche Fälle haben wir den Skripten zur Datenbankerstellung Sequenzierungssequenzen hinzugefügt.
Die Moral dieser Fabel lautet: Es ist SEHR wichtig, Lasttests auf derselben Hardware durchzuführen, die in PROD enthalten sein wird. Alles kann das Ergebnis beeinflussen: die Einstellungen des Betriebssystems selbst, die Einstellungen der Datenbank, ja alles. Was Sie nicht einmal vermutet haben.
Vorab testen. Und denken Sie daran, dass nicht alle Probleme durch Funktionstests gefunden werden können. In diesem Beispiel würde ein einfacher Test keine Fehler finden. Wenn Sie Entitäten manuell erstellen, dh langsam, haben alle Datenbankknoten Zeit, benachbarte Knoten zu benachrichtigen, sodass keine Inkonsistenz auftritt.
Kleine Maus
Leerer Json
Wenn Sie die geöffnete Achsenbibliothek verwenden, versuchen Sie, leeren JSON an die Anwendung zu senden. Er kann es sehr gut vollständig aufhängen.
Und vor allem - Sie können auf Ihrer Seite nichts dagegen tun! Dies ist ein Fehler in einer Bibliothek eines Drittanbieters. Warten Sie hier entweder auf eine offizielle Korrektur oder ändern Sie die Bibliothek, was sehr schwierig sein kann.
Tatsächlich wurde dieser Fehler bereits in der neuen Version von Axis behoben. Es scheint, dass nur ein Upgrade durchgeführt wird, und das war's! Aber ... Das System verwendet selten eine Bibliothek eines Drittanbieters. Normalerweise gibt es mehrere von ihnen, sie sind übereinander gebunden. Um sie zu aktualisieren, müssen Sie alles auf einmal aktualisieren. Refactoring muss durchgeführt werden, da sie jetzt anders funktionieren. Entwicklerressourcen müssen zugewiesen werden.
Im Allgemeinen erfordert das Aktualisieren der Bibliotheksversion manchmal eine vollständige Version eines coolen Entwicklers. Als wir zum Beispiel auf die neue Version von Lucene umgestiegen sind, haben wir 56 Stunden mit der Aufgabe verbracht. Dies sind 7 Manntage, eine Woche Vollzeitentwickler und Plus-Tests. Die Aufgabe selbst sieht ungefähr so aus, sagt der Architekt:
Lucene Wechseln Sie zu PointValues anstelle von Long / IntegerField
Das Dock von Lucene Migration 5 -> 6 enthält eine Klausel zum Löschen des Long-Felds (Integer / Double) zugunsten von PointValues.
Beim Wechsel zu Lucene 6.3.1 habe ich die alten Felder verlassen (alle Klassen wurden mit dem Legacy-Präfix umbenannt), da die Übersetzung in eine separate Aufgabe verschoben wird.
Sie müssen die alten Felder verlassen und die Long (Integer / Double) Point-Klassen verwenden, die durch Tests im Index schneller und weniger gewichtet werden. Müssen viel Code umschreiben.
Sicher! Der Übergang sollte abwärtskompatibel sein, damit die Suche (zumindest die Schlüsselfunktionen) beim Versions-Upgrade nicht abgebrochen wird. Es sollte mit dem alten Index funktionieren (vor der Neuerstellung), und nach der Neuerstellung (zu einem für den Kunden günstigen Zeitpunkt) sollten neue Felder aufgenommen werden.
Und dies ist nur ein Bibliotheksupdate! Und eine Bibliothek wegen eines Fehlers zu verlassen, ist im Allgemeinen beängstigend, sich vorzustellen, wie lange es dauern wird ...
Es ist also durchaus möglich, dass Sie für einige Zeit einfach mit einem Fehler leben. Wissen Sie über ihn, aber ändern Sie nichts. Am Ende "gibt es nichts, um dumme Anfragen zu senden."
In jedem Fall sollten Sie jedoch zumindest über das Vorhandensein eines Fehlers informiert sein. Denn wenn ein Benutzer zu Ihnen kommt und sagt: „Alles hat aufgelegt“, müssen Sie verstehen, warum. Vorausgesetzt, die Protokolle sind leer. Da dies nicht das Einfrieren Ihrer Anwendung ist, hängt alles in der JSON-Konvertierungsphase.
Es scheint - eine leere Anfrage! Und hier kann es zu ... Das heißt, selbst wenn Sie nicht wissen, dass Axis einen solchen Fehler aufweist, können Sie einfach nach leerem JSON suchen, einer leeren SOAP-Anfrage. Am Ende ist dies ein großartiges Beispiel für einen Nulltest im Kontext einer JSON-Anforderung.
Denken Sie daran, Null zu testen. Und der geringste Wert ist die kleine Maus, weil sie auch Fehler mit sich bringt, die manchmal so beängstigend sind.
Siehe auch:Die Äquivalenzklasse "Null-nicht Null" - mehr zum Testen von Null
"Moskau" im Adressfeld
Dadats Service
ist in der Lage, Adressen zu standardisieren - legen Sie die Adresse in einer Zeile auf granularen Komponenten an + bestimmen Sie den Bereich der Wohnung, falls er sich im Verzeichnis befindet.
Während des Tests wurde ein lustiger Fehler gefunden - wenn Sie das Wort "Moskau" in die Adresse eingeben, bestimmt das System den Bereich der Wohnung. Obwohl, wie es scheint, wo ist die Wohnung in dieser "Adresse"?

Ich denke, dies ist ein großartiges Beispiel für eine "kleine Maus". Denn was wird normalerweise überprüft? Die übliche Adresse, die Adresse zur Straße, zum Haus ... Ein leeres Feld. Jedes einzelne Zeichen - dies wird als Komponententest betrachtet.
Wenn Sie jedoch einen Buchstaben eingeben, ermittelt das System die Eingabe als vollständigen Papierkorb und löscht die Adresse. Es verhält sich korrekt, aber dies ist ein negativer Fall pro Einheit. Dies ist eine Überprüfung der ausschließlichen Feldlänge.
Und hier lohnt es sich, mehr darüber nachzudenken - gibt es eine positive Einheit? Es gibt. Ein Wort, das ein solches System bestimmen wird. Und auch hier gibt es verschiedene Äquivalenzklassen: Es kann ein Wort vom Anfang der Adresse (Stadt) oder von der Mitte (Straße) sein. Es lohnt sich, beides zu versuchen. Wenn Sie sich jedoch nur auf "Einheit im Textfeld = ein Zeichen" beschränken, werden Sie diesen Fehler nie finden.
Insgesamt
Mnemonik gibt es sehr viele. Und ihre Verwendung kann Ihnen helfen. Da Sie Ihre Bewerbung bereits zum 10., 100. Mal betrachten ... Sie haben bereits Ihre Augen verloren, können Sie den offensichtlichen Fehler überspringen. Wenn Sie vorhandene Mnemonics verwenden, sehen Sie sich die Anwendung auf eine neue Art und Weise an. Was hilft, neue Fehler zu erkennen.
Und selbst eine so einfache Mnemonik wie BMW hilft sehr. Aber es scheint ... groß, klein, denk nach! Einfache Grenzwerte. Aber sie müssen immer in Erinnerung bleiben und immer überprüft werden! Es bringt Früchte und eine Vielzahl von Käfern.
Anhand meiner Beispiele wollte ich zeigen, dass Sie nicht nur in einem Text- oder Zahlenfeld nach Rahmen suchen können. Mnemonics funktioniert überall: in Oracle RAC, Java, Wildfly, überall! Lernen Sie, Grenzen zu betrachten, die über das übliche Verständnis von „Eingabe von Krieg und Frieden in das Textfeld“ hinausgehen.
Das Hauptaugenmerk liegt natürlich auf der "großen Maus", die die meisten Fehler mit sich bringt. Genau solche Fälle werden zurückgerufen, wenn Sie glauben, sich in Ihrem Projekt getroffen zu haben.
Aber Sie sollten die "kleine Maus" nicht vergessen. Ja, ich konnte mich nur an einige Beispiele erinnern, die für meine Arbeit spezifisch waren. Dies bedeutet jedoch nicht, dass ich bei einer kleinen Maus keine Fehler finde. Ich finde es! Diejenigen, die im Abschnitt mit den allgemeinen Beispielen aufgeführt sind: 01.01.1900 Datum, 1-KB-Datei, leerer Bericht, wenn Daten ausgefüllt werden ...
Grenzen sind sehr wichtig. Denken Sie daran, sie zu testen. Ich hoffe, meine Beispiele inspirieren Sie, und BMW Mnemonics werden immer in meinem Kopf auftauchen, wenn Sie Äquivalenzklassen hervorheben.

Oder vielleicht kommen Sie mit Ihren eigenen Mnemonics. Welches wird für Sie, für Ihr Team, für Ihre Funktionen, für Ihre Prozesse sein. Und es ist auch großartig, es ist auch Erfolg. Die Hauptsache ist, dass es hilft!
PS ist ein Auszug aus
meinem Buch für Anfängertester. Ich habe auch über Mnemonik in einem Bericht über SQA Days gesprochen,
Video hier .