Markup Transfer - Alptraum oder ein Stück Kuchen?

train Markup transfer   nightmare or a piece of cake?
Der gesamte Prozess der Schaffung einer Markup und der Entwicklung von Tests ist zeitaufwändig. Und wenn es scheint, dass die Arbeit getan ist, eine neue Version der Spezifikation ist freigegeben. Was passiert als nächstes? Natürlich besteht die Notwendigkeit einer neuen Version des Test-Suite. Neue Tests müssen geschrieben werden und die alten aktualisiert oder sogar gestrichen.

Der beste Weg zu beginnen ist, das Markup zu tun. Diese Aufgabe kann in zwei Teilaufgaben unterteilt werden:

  • Transfer alten Markup aus früheren spec auf die neue Spezifikation (dies ist nötig, weil viele Tests bereits geschrieben wurden, sind sie zu spec-ID verknüpft ist, alle möglichen Tests Wiederverwendung ist eine gute Idee);
  • Markup neue und aktualisierte Behauptungen.

Übertragen der Markup ist einfach genug, um es von Hand machen:

  1. Finden Sie die Markup-Tag in der alten spec.
  2. Finden Sie den besten Platz zum Einfügen des Tags in der neuen Version des spec.
  3. Stecken Sie den Tag.

Wenn es nur 10 Behauptungen sind - dieses Werk ist ein Stück Kuchen. Aber es gibt Tausende, wenn es ein harter Job, dass automatisiert werden soll. Der schwierigste Teil ist, eine neue geeignete Stelle für Markup-Tags finden. Es ist schwer, nur weil die Spezifikation geändert wurde. Für JLS2 zu JLS3 Migrationsprozess der flollowing alrorithm verwendet wurde:

Jede Behauptung ist mit HTML Anker abgerundet. Beide sollten mit solchen Algorithmus übertragen werden.

Hin 1t: Wenn einige tag übertragen wird, gibt es eine große Möglichkeit, dass nächsten Tag im alten spec wird nach der einen, die übertragen wird positioniert werden.

Tipp 2: Algorithmus sollte überprüfen, ob die zweite Anker sollte nach dem ersten Teil und nicht allzu weit davon entfernt positioniert werden.

  1. Schauen Sie sich den Text vor und nach tag in alten spec. Finden Sie es in den neuen spec. Wenn einer von ihnen 72s Markup transfer   nightmare or a piece of cake? wurde nicht verändert - die Antwort ist gefunden. Die Länge sollte in der Regel 1-2 sentances werden, mindestens 60 Zeichen lang sein. Wenn keine oder mehrere sentances gefunden - diesen Schritt überspringen.
  2. Versuchen Sie, die gleiche wie zu tun in (1), sondern entfernen Sie alle HTML-Tags aus dem Text, der in der Nähe von dem Tag umgibt. Wenn keiner gefunden - diesen Schritt überspringen.
  3. Probieren Sie den Algorithmus zu erlassen, die zu ähnlichen Text in der neuen Spezifikation zu finden versucht.
    ein. Verwenden Sie die Schritte (1) und (2), aber desrease die Länge der Benutzer Text in einer Schleife, bis die Sentance gefunden wird oder die Länge zu kurz ist. Die praktische Arbeit hat gezeigt, dass diese Zahl sollte nicht kleiner als 20 sein.
    b. Wenn die Schritte (1) und (2), oder (3a) fand mehrere sentances Erhöhung der Länge des Textes bis zur Volltextsuche ist in der neuen Spezifikation entsprechen, oder die obere Grenze (zB 140 Zeichen) erreicht ist gefunden. Verwenden Sie Hinweise zu den am besten passenden Text zu finden.

Adopt-Algorithmus kann sowohl mit HTML-Tags ignoriert und unter Ausnutzung von ihnen verwendet werden. Algorithmus gilt für Angaben im Klartext geschrieben, HTML oder XML.

Dieser Algorithmus wurde in JLS2-> JLS3 Markup Transfer Tool implementiert. 84% der Markup-Tags wurden automatisch übertragen. Der Rest von ihnen wurden manuell durchgeführt.



, , , , , ,
  • Share / Bookmark
Print This Post Print This Post

Zwei Arten von Behauptungen

refrigerator Two types of assertions Manchmal gibt es Tatsachen, dass konnte nicht direkt überprüft werden. Sagen wir, es ist ein Kühlschrank in einem Kasten, dass kann nicht geöffnet werden. Imagine Kühlschrank kann aus 5 verschiedenen Farben - weiß, blau, rot, schwarz und grün. Das Handbuch sagt, dass es blau ist. Aber das Einzige, was verfügbar ist, ist ein Schwarz-Weiß-Foto des Kühlschranks. Der direkte Farb-Test zu überprüfen, ist schwer zu machen, mit nur dem Foto (nehme an, es ist unmöglich). Aber man kann sagen, defenately (schaut auf dem Foto), dass der Kühlschrank entweder weiß oder nicht. Also der Test nicht überprüft die Farbe selbst, es tatsächlich testet, ob die Farbe ist weiß.

Ähnliche Situationen auftreten, die ganze Zeit. Deshalb gibt es zwei Arten von Assertions. Die erste ist die direkte Eins, wenn es möglich testen, ob die Tatsache, genaue Kontrollen angegeben ist, von dieser Behauptung. Die zweite Art ist die indirekte Behauptung abgeleitet. Es ist nicht in einer Spezifikation geschrieben, sondern leitet sich von einem oder mehreren, die sind.

Gehen wir zurück zu Kühl-und Schwarz-Weiß-Foto, hier sind einige Beispiele: wheel Two types of assertions

  • Direct Behauptung:
    Geschrieben ist das spec: "Der Kühlschrank ist weiß". Der Test prüft lediglich, wenn es weiß ist.
  • Abgeleitet Behauptung:
    Die Basis Behauptung in einem spec ist "Der Kühlschrank ist blau".
    Der abgeleitet werden konnte "Der Kühlschrank ist weiß oder schwarz". Die Tests wird überprüft, ob es nicht blau (weiß / schwarz).

Es ist nicht wahr, dass abgeleitete Aussagen nur dann sinnvoll, wenn es keine Möglichkeit, die Basis Behauptung aus spec testen. In vielen Fällen helfen sie ausführliche Berichterstattung über eine Behauptung zu erhöhen.



, , , , , ,
  • Share / Bookmark
Print This Post Print This Post

Assertions Markup und

book Assertions and markup

Es ist sehr wichtig, einen guten Prozess beim Schreiben der Testsuite. Ich werde über die eine, die für JLS verwendet wurde, zu sprechen.

Nach wie vor ist das Endprodukt der Anzahl der Prüfungen angegeben. Es besteht ein Zusammenhang zwischen den Tests und der Spezifikation. Die Behauptung gesteuerten Prozess gibt eine Vorstellung von dem, was jede Gruppe von Tests tatsächlich Kontrollen in der Spezifikation. Mit Hilfe dieser Beziehung die Entwickler die Reichweite berechnen kann, nutzen Sie die Liste der Behauptungen, auf denen die Tests nicht geschrieben wurden, etc.

Behauptung ist eine Aussage aus einer Spezifikation, die getestet werden können. Und der erste Schritt ist, alle Behauptungen, die in der Spezifikation zu identifizieren. Danach kann der Entwickler Tests schreiben.

Beispiel für die Behauptungen aus der Java Language Specification: smt Assertions and markup

  • Einen Compiler-Fehler auftritt, wenn die gleiche Modifier scheint mehr als einmal in einer Interface-Deklaration.
  • Die binären Namen eines Mitglieds Typ besteht aus den binären Namen seines unmittelbar einschließenden Typ, gefolgt von $, gefolgt von den einfachen Namen des Mitglieds.
  • Eine continue-Anweisung darf nur erfolgen, in einer Weile zu tun, oder für die Anweisung.

Es könnte viele Aussagen, die nicht überprüfbar oder Unsicherheit verbunden sind. Manchmal werden solche Aussagen gehören Wörter wie "möglich" oder "vielleicht". Es ist nicht wahr, dass wenn in einem Satz das Wort "kann" es ist nicht überprüfbar, aber normalerweise ist es so.

Beispiele für nicht prüfbare Aussagen:

  • Wir empfehlen nicht, wie "gemischte Schreibweise" für Array-Deklarationen.
  • Situationen, in denen die Klasse eines Objekts ist nicht statisch bekannt kann zu Laufzeit-Fehlern Typ.
  • Wenn, wirft jedoch Auswertung eines Ausdrucks eine Ausnahme, dann ist der Ausdruck gesagt wird abrupt abgeschlossen.

Es gibt viele Diskussionen und Streitigkeiten über die Behauptungen. Einige sagen, dass Beispiele nicht als Behauptungen behandelt werden. Andere sagen, dass jede Aussage eine Behauptung ist, und es gibt zwei Arten von ihnen: überprüfbare und nicht überprüfbar. Meine persönliche Meinung ist, dass eine Behauptung ist sicherlich etwas, überprüfbar. Und in den meisten Fällen Beispiele sind Behauptungen, nur weil der Test schriftliche Prüfung der speziellen Beispiel kann.

Der Prozess der Ermittlung Behauptungen in der Spezifikation heißt Markup. Es gibt viele Ansätze. Aber in jedem Fall muss der Benutzer in der Lage, Informationen darüber, ob die Aussage ist eine Behauptung und irgendwie unterscheiden, eine Behauptung von einem anderen zu gelangen. Es könnte ein separates Repository mit Zuordnung von Aussagen und ihre id's Aussagen sein. Ich mag die Idee der Integration der Markup in der Spezifikation. Dieser Ansatz wurde gewählt, die für den Bereich der Sprache Java SE Testpaket. Die JLS wurde in FrameMaker geschrieben. Mit dem Export-Mechanismen die PDF-und HTML-Versionen erstellt wurden. Die HTML-Version wurde bei der Erstellung der Test-Suite verwendet.

In JLS und JLS-2 einige spezielle Anker den Anfang und das Ende einer Aussage identifiziert. Ergänzende Informationen war die assertionID und kurze Zusammenfassung der Aussage. Das Ende Anker war ein Bild und einen Link auf die Probe. Die HTML-Ansicht und Code-Ansicht auf den entsprechenden Abbildungen. Die Behauptung, id's sind arr033, arr034, arr020, etc.

JLC2 html1 Assertions and markup

JLC2 html code1 Assertions and markup

Die allgemeine Idee kann wie folgt beschrieben werden:

<a name=assertionID> <! - shord Beschreibung als HTML-Kommentar ->
Assertion hier
<img src="pics/assert.gif"> <a href="path zu test"> Test-ID, das ist das gleiche wie Behauptung ID </ a>

Wenn einzelne Aussagen in verschiedenen Teilen der Spezifikation werden von einem Test der erste Tag getestet wird so etwas wie arr033_0, arr033_1, arr033_2 werden.

Diese Art von Architektur war für JLS und JLS-2 verwendet. Es war leicht für JLS3 geändert, aber die Grundidee wurde beibehalten. Ich kenne einige Beispiele von Ansätzen mit nicht-statischen Behauptung IDs in einem separaten Repository, wo sich einige ID-Hash-Wert berechnet auf der Grundlage des Inhalts gehalten. Aus mehreren Gründen Dabei zeigte sich, als nicht eine sehr gute Lösung. Es ist immer ein schwieriger Prozess der Migration auf die neue Version der Spezifikation. Aber meiner Meinung nach ist es viel einfacher mit der statischen ID's in der Spezifikation eingebettet.



, , , , , , , , , , , , , , , , , ,
  • Share / Bookmark
Print This Post Print This Post