[JAVA] Überprüfungspunkte für die Schulung neuer Mitarbeiter im Jahr 2019

In unserem Unternehmen werden wir im Rahmen der Schulung für neue Ingenieure für etwa Januar eine Beispielanwendung erstellen. Der Umfang der Beispielanwendung beträgt ca. 6-7 Bildschirme. Während des Erstellungszeitraums führt ein leitender Ingenieur, der sich täglich dem Konfigurationsmanagement verschrieben hat und Pädagoge geworden ist, eine Codeüberprüfung durch.

In diesem Artikel werde ich einige der Inhalte aufgreifen und vorstellen, auf die während der Codeüberprüfung hingewiesen wurde, und beschreiben, was ich nach der Durchführung der Programmüberprüfung als Verbesserungspunkt ab dem nächsten Jahr dachte.


Vorausgesetzte Informationen

Im Folgenden werden die Informationen beschrieben, die auf den Umständen beruhen, unter denen die Überprüfung durchgeführt wurde.

Informationen zur Beispielanwendung

Folgende Komponenten wie die Programmiersprache und der Server werden in der Beispielanwendung verwendet. Versionsinformationen werden weggelassen.

-** Programmiersprache ** Java

Konfigurationsverwaltungstool

Ich benutze Subversion. Vesion ist wie folgt.

svnadmin --version
svnadmin,Version 1.7.14 (r1542130)
Zusammenstellungsdatum und -zeit: Nov 20 2015, 19:25:09

Statisches Analysewerkzeug

Holen Sie sich den Quellcode von Subversion auf SonarQube Check täglich. Bei der Durchführung der Überprüfung werden die statischen Analyseergebnisse auch als Referenzinformationen bezeichnet.


Programmüberprüfungspunkte

Ich habe auf Folgendes hingewiesen.


** Ersetzen Sie durch "Logger" anstelle von "System.out". ** ** **

   @Override
	public void getDelItem(TestDTO dto) {
		System.out.println("###Flow dto.getItemNumber() = " + dto.getItemNumber());
		getItemPrimitive().delItem(dto);
	}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
	
   private Logger logger = LoggerFactory.getLogger(this.getClass());

   ...

   @Override
	public void getDelItem(TestDTO dto) {
      logger.info("###Flow dto.getItemNumber() = " + dto.getItemNumber());
		getItemPrimitive().delItem(dto);
	}

Die Logger-Bibliothek verwaltet das Protokollausgabeziel in der Einstellungsdatei. Abhängig von den Einstellungen können Sie nur in die Protokolldatei ausgeben, nur in die Konsole ausgeben, sowohl in die Protokolldatei als auch in die Konsole ausgeben und so weiter. Wenn Sie Logger verwenden, können Sie die Einstellungsdatei so ändern, dass die Produktionsumgebung das Protokoll nicht ausgibt, auch wenn Sie die Protokollausgabe zum Debuggen belassen.


Die Wicket-Initialisierungsverarbeitung wird in "onInitialize ()" anstelle des Konstruktors der Page-Klasse und der Panel-Klasse implementiert.

Ab Wicket 1.5x wird empfohlen, den Initialisierungsprozess in onInitialize () anstelle des Konstruktors zu implementieren.

    /**
     *Konstrukteur
     *
     * @param params Eingabeparameter
     */
    public PracticeMyPage(PageParameters params) {
        super(params);
        super.renderJavaScriptFile("PracticeMyPage.js");
        add(new AbstractMyPage("MyPagePanel", params) {
            @Override
            protected AbstractMyPageMediator getMyPageMediator() {
                return kikakuMyPageMediator;
            }
        });
 
        String serverDate = DateUtil.dateTimeToStr(DateUtil.getSystemDate());
        this.setBodyOnLoad("setServerDate('" + serverDate + "');");
    }
 /**
     *Konstrukteur
     *
     * @param params Eingabeparameter
     */
    public PracticeMyPage(PageParameters params) {
        super(params);
    }

	/**
	 *Initialisierungsprozess
	 **/
	@Override
	public void onInitialize() {

      super.renderJavaScriptFile("PracticeMyPage.js");
      
      PageParameters params = super.getPageParameters();
      
      add(new AbstractMyPage("MyPagePanel", params) {
         @Override
         protected AbstractMyPageMediator getMyPageMediator() {
                return kikakuMyPageMediator;
         }
      });
      
      String serverDate = DateUtil.dateTimeToStr(DateUtil.getSystemDate());
      
      this.setBodyOnLoad("setServerDate('" + serverDate + "');");

      //Übergeordnetes Element beim Initialisieren()Der Anruf kann am Ende des Prozesses sein
      super.onInitialize();
	}

Ab Java 7 können Sie den Diamantoperator verwenden.

In Java7 können Sie den Diamantoperator verwenden. Einige Codes sind in Java6 oder früher geschrieben, und einige Codes verwenden nicht den Diamantoperator. Wenn Sie jedoch einen neuen erstellen, verwenden wir ihn aktiv.

   List<String> strings = new ArrayList<String>();  
   Map<String,List<Integer>> map = new HashMap<String,List<Integer>>();
   List<String> strings = new ArrayList<>();
   Map<String,List<Integer>> map = new HashMap<>();

Definieren Sie nur die erforderlichen Variablen als Mitgliedsvariablen.

Ich denke, dass es viele Muster gibt, in denen die Beschreibung der Umleitungsquellenquelle unverändert bleibt, aber Variablen, die keine Mitgliedsvariablen sein müssen, werden als Mitgliedsvariablen definiert.

public class AbstractRegistItem extends BaseNewUIPanel {

	/** Form */
	private HImForm<Void> form = null;
	
	/**Produktcode*/
    private HImTextField<String> code = null;
    
    /**Produktname*/
    private HImTextField<String> syouhin = null;
    
    /**Menge/Einheit*/
    private HImTextField<String> num = null;
    ......

}
public class AbstractRegistItem extends BaseNewUIPanel {

	/**
	 *Seiteninitialisierungsprozess
	 */
	private void initPage(PageParameters params) {

		/** Form */
		HImForm<Void> form =  new HImForm<>("form", this);

      //1. Textfeld
		HImTextField txtItemName = new HImTextField<>("txtItemName");
		form.add(txtItemName);
      this.add(form);

      ...
   }

Die switch-Anweisung definiert die Standardklausel.

Stellen Sie sicher, dass die default-Klausel in der switch-Anweisung enthalten ist.


   switch(dto.getSelectedValue()){
		case "1":
			sbSql.append("UPD_DATE DESC ");
			break;
		case "2":
			sbSql.append("UPD_DATE ASC ");
			break;
		case "3":
			sbSql.append("ITEM_NUMBER DESC ");
			break;
		case "4":
			sbSql.append("ITEM_NUMBER ASC ");
			break;
	}

	switch(dto.getSelectedValue()){
		case "1":
			sbSql.append("UPD_DATE DESC ");
			break;
		case "2":
			sbSql.append("UPD_DATE ASC ");
			break;
		case "3":
			sbSql.append("ITEM_NUMBER DESC ");
			break;
		case "4":
			sbSql.append("ITEM_NUMBER ASC ");
			break;
		default:
         //Es liegt nahe am Fall, löst jedoch eine Ausnahme aus, wenn der Wert niemals festgelegt werden kann.
			throw new llegalArgumentException("dto.getSelectedValue() is illegal...");
	}

Löschen Sie nicht verwendete Importanweisungen

Löschen Sie nicht verwendete Importanweisungen, da diese während der Wartungsphase nach der Implementierung verrauscht sind. Mit Eclipse unter Windows können Sie Verknüpfungen wie Strg + Umschalt + O-Importe organisieren.


Verwenden Sie die Kamelschreibung für Variablennamen, sofern keine Einschränkungen bestehen

Verwenden Sie für Variablennamen den im Codierungsstandard angegebenen Kamelfall, es sei denn, das Framework unterliegt Einschränkungen.

	private String SelectedValue = "";
	private String selectedValue = "";

Löschen Sie die auskommentierte Zeile des Programms

Löschen Sie die Kommentarzeile des Programms. Die Gründe, warum Sie es löschen sollten, sind folgende.


Nicht verwendete Variablen löschen

Nicht verwendete Variablen löschen. Dies liegt auch daran, dass es bei der Untersuchung des Programms Rauschen verursacht. SonarQube gibt die folgende Warnung aus.

Remove this unused "selLineCnt" private field.  

Wenn Sie die Variable aus irgendeinem Grund verlassen müssen, können Sie die Warnung unterdrücken, indem Sie "@SuppressWarnings (" unused ")" angeben.


Überlegen Sie, ob Beschriftungs-Tags zu Eingabe-Tags hinzugefügt werden können

Dies ist ein HTML-Punkt. Dem Eingabe-Tag können zwei Beschriftungsattribute hinzugefügt werden. Wenn Informationen beschriftet werden können, geben Sie ihr eine Beschriftung und klicken Sie auf die Beschriftung, um sich auf das Eingabeattribut zu konzentrieren.

<th colspan="2">
    <p class="disp-ic"><img height="13" width="23" class="ic-required" alt="Verpflichtend" src="/web2/jp/images/ic-must.gif"></p>
Produktcode
    <div class="letter-control">(Innerhalb von 20 Zeichen halber Breite)</div>
</th>
<td>
    <span class="cstm-tx">
        <span class="cstm-tx-bg">
            <input wicket:id="txtCode" type="text" maxlength="20" rel="Innerhalb von 20 Zeichen halber Breite" class=" w100 noticeTip ime-actv" id="txtCode" name="c1-29" tabindex="40" />
        </span>
    </span>
</td>
<th colspan="2">
    <p class="disp-ic">
        <img height="13" width="23" class="ic-required" alt="Verpflichtend" src="/web2/jp/images/ic-must.gif">
    </p>
    <!--Fügen Sie dem Produktcode ein Etikett hinzu-->
    <label for="c1-29">Produktcode</label>
    <div class="letter-control">(Innerhalb von 20 Zeichen halber Breite)</div>
</th>
<td>
    <span class="cstm-tx">
        <span class="cstm-tx-bg">
            <input wicket:id="txtCode" type="text" maxlength="20" rel="Innerhalb von 20 Zeichen halber Breite" class=" w100 noticeTip ime-actv" id="txtCode" name="c1-29" tabindex="40" />
        </span>
    </span>
</td>

Denken Sie darüber nach, eine Programmüberprüfung durchzuführen

Beschreiben Sie Ihre Gedanken durch die Programmüberprüfung. Es wird auch nur eine Sorge genannt.


Sollte ich Best Practice oder Anti-Pattern unterrichten?

Programmüberprüfungen sollten dies für Anti-Patterns tun. Ich hatte das Gefühl, dass es nur wenige Möglichkeiten gab zu lehren, dass es besser ist, so zu schreiben. Ich denke, wenn Sie mit der Implementierung mit Pair Pro und Mob Pro fortfahren und den Teil erklären, dass Sie die Bedeutung der Implementierung nicht verstehen, haben Sie die Möglichkeit, das Best-Practice-System zu unterrichten. Ich denke auch: "Welche der besten Praktiken und Anti-Muster lässt sich schneller entwickeln?", Aber es wurde derzeit keine Antwort gegeben.


Es gibt eine Ebene, in der Sie den Warninhalt des statischen Analysetools nicht verstehen.

Dies war eine große Erkenntnis für mich persönlich. Ich denke, das statische Analysetool ist das beste Tool für selbstlernende Anti-Patterns. In der Schulung für Neulinge wird der Warninhalt für einige Personen ins Japanische übersetzt Verwendung des SpotBugs Eclipse-Plug-Ins - Dokument spotbugs 4.0.0-beta4 Ich hatte .html) installiert, weiß aber nicht, was ich tun soll, wenn ich mir den Inhalt der Warnung ansehe. Also habe ich beschlossen, es nicht zu sehen. Ich war in einer Situation von `. In diesem Fall denke ich, dass es notwendig ist, zu lehren, wie man den Inhalt der Warnung liest, das Vokabular in Bezug auf die Informationsverarbeitung auswendig zu lernen und zu lernen, wie man prüft, ob man es nicht versteht.


Machen Sie ein schlechtes Programm, indem Sie ein schlechtes Programm umleiten.

Die Trainingsanwendung wird erstellt, indem der Code des tatsächlich in Betrieb befindlichen Dienstes umgeleitet und in ein Skelett konvertiert wird. Aufgrund der Umstände während der Entwicklung gab es Fälle, in denen die Qualität stabil und einige nicht stabil waren, und die Überprüfung ergab, dass die Umleitungsquelle nicht gut war. In Bezug auf das Unterrichten des Ideals dachte ich, es wäre besser, die Qualität der Trainingsanwendung zu verbessern.


Schließlich

Im Training des nächsten Jahres möchte ich die diesjährigen Fehlerpunkte nutzen und eine bessere Überprüfung durchführen. Ich habe mehrmals Pair Pro und Mob Pro gemacht, aber ich möchte die Anzahl etwas weiter erhöhen.

das ist alles.

Recommended Posts

Überprüfungspunkte für die Schulung neuer Mitarbeiter im Jahr 2019
Codeüberprüfungspunkte
Punkte für das Refactoring (if-Anweisung)