Ich möchte die Notwendigkeit des Testens beurteilen, indem ich die Unterschiede der Klassendateien beim Refactoring von Java vergleiche.

Ich möchte die Notwendigkeit des Testens beurteilen, indem ich die Unterschiede der Klassendateien beim Refactoring von Java vergleiche.

Geschichte der Refactoring-Version ohne Testen von mehr als 200.000 Zeilen Codebasis Nachdem ich diesen Artikel gelesen hatte, fragte ich mich, ob Java dasselbe mit einer Klassendatei tun könnte.

Als Hintergrund meiner Forschung beschäftige ich mich selbst mit Java bei der Arbeit. Dies liegt daran, dass ich umgestalten wollte, aber die Anzahl der Schritte so weit wie möglich reduzieren wollte.

Untersuchungsverfahren

Wir werden den Hash-Wert (SHA1) der Klassendatei vergleichen, der mit verschiedenen Änderungen basierend auf dem Standard-Quellcode kompiliert wurde. Ich habe den Befehl certutil -hashfile verwendet, um den Hash-Wert zu erhalten. image.png

Referenzquellcode

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): b38492ff5641fa0f074a82ca5f397c7ba7f3575d

Der Hash-Wert der aus Main.java kompilierten Datei Main.class ist wie oben. Vergleichen Sie dies mit den Unterschieden zwischen den Dateien nach verschiedenen Änderungen.

Zusammenfassung der Umfrageergebnisse

Da der Inhalt der Umfrage lang ist, werde ich aus den Ergebnissen und Schlussfolgerungen schreiben.

Es gab einen Unterschied im Hash-Wert (SHA1) der Klassendatei

Es gab keinen Unterschied im Hash-Wert (SHA1) der Klassendatei

Fazit

** Es gab keinen Unterschied im Hash-Wert (SHA1) der Klassendatei. ** In Bezug auf die Änderung scheint es, dass Sie "OK ohne Test" sagen können, indem Sie den Unterschied der Klassendatei vergleichen. Insbesondere das Ändern des Einzugs führt zu einem großen Unterschied im Quellcode. Daher dachte ich, es wäre schön, wenn ich sagen könnte: "Klassendateien vergleichen und es gibt keinen Unterschied, also ist es in Ordnung."

Ermittlung

Code hinzufügen

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test"); System.out.println("test2");
    }

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): "2356a12ac1ca0147356c1eb9824bdacf94e5eaac"

Importreihenfolge ändern

Main.java


import java.util.List;
import java.util.Arrays;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): b38492ff5641fa0f074a82ca5f397c7ba7f3575d

Kommentar hinzufügen (vorhandene Zeile)

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main addcomment
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): b38492ff5641fa0f074a82ca5f397c7ba7f3575d

Kommentar hinzufügen (neue Zeile)

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main
     * add comment
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): a05020054dd7c85ef01c20bc9d1f0cc45c46d1e1

Fügen Sie eine leere Zeile hinzu

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {

        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): a05020054dd7c85ef01c20bc9d1f0cc45c46d1e1

Einzug ändern

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {
            List<String> list = Arrays.asList("a", "b", "c");
        System.out.println(list);
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): b38492ff5641fa0f074a82ca5f397c7ba7f3575d

Gruppierungsklammern ändern

Main.java


import java.util.Arrays;
import java.util.List;

public class Main {
    /**
     * test
     */
    public static void test() {
        System.out.println("test");
    }

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        System.out.println((list));
        System.out.println("main");
        test();
    }

}

Hash-Wert (SHA1): b38492ff5641fa0f074a82ca5f397c7ba7f3575d

Recommended Posts

Ich möchte die Notwendigkeit des Testens beurteilen, indem ich die Unterschiede der Klassendateien beim Refactoring von Java vergleiche.
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte die Eingabe begrenzen, indem ich den Zahlenbereich einschränke
Ich möchte die JSP des offenen Portlets bei der Entwicklung von Liferay kennen
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich möchte den Inhalt der Absicht var_dump
Erster Touch der Files-Klasse (oder Java 8)
Ich möchte eine von Git verwaltete Datei löschen
[Förderung des Ruby-Verständnisses (1)] Wenn Sie von Java zu Ruby wechseln, verstehen Sie zuerst den Unterschied.
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Ich möchte eine Methode einer anderen Klasse aufrufen
[JavaScript] Ich möchte die Verarbeitung einschränken, indem ich Eingabeelemente überprüfe, wenn die angegebene Zeit zum Zeitpunkt des Fokusausgangs abgelaufen ist.
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte herausfinden, welche Java-Version die JAR-Datei hat, die ich habe
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Bei Verwendung des Konstruktors der Date-Klasse von Java wird das Datum um 1900 vorverlegt.
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte die Liste der Klassen unter dem Paket rekursiv durchsuchen
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Vergleich von Versionszeichenfolgen, wenn Sie die Verarbeitung zwischen zwei Versionen verzweigen möchten (Java-Implementierung)
Ich möchte den Rahmen des Textfelds rot machen, wenn ein Eingabefehler auftritt
[Scala] [Java] Ich habe versucht, die Sicherheitsanfälligkeit beim Durchqueren von Zip4j durch Bytecode-Operation zu beheben.
Wechseln Sie die von SDKMAN installierte Java-Version, wenn Sie Verzeichnisse verschieben
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ich möchte OutOfMemory bei der Ausgabe großer Dateien mit POI vermeiden
Ich habe versucht, die Fehlermeldung beim Ausführen von Eclipse (Java) zu übersetzen.
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Durch die Überprüfung der Funktionsweise von Java unter Linux konnte ich die Kompilierung und Hierarchie verstehen.
So zerlegen Sie eine Java-Klassendatei
So dekompilieren Sie eine Java-Klassendatei
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Was ich dachte, als ich den Eingabewert des Benutzers an die Service-Klasse übergab
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
Aufgenommen, weil ich süchtig nach der Standardeingabe der Scannerklasse war
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren