Ich möchte die verschiedenen Probleme, die bei der Entwicklung von Smartphone-Spielen auftreten, an denen ich beteiligt bin, und die Tools, mit denen sie gelöst werden, erläutern.
Als ich mit einem Kollegen sprach, wurde mir gesagt, dass es schön wäre, wenn andere Teams nützliche Dinge teilen könnten, deshalb möchte ich zuerst mein Team teilen. Ich entwickle mit Python, aber ich denke, es gibt viele häufige Probleme, die überall auftreten können. Ich bin Serveringenieur und daher ein wenig serverorientiert.
Problem | Gegenmaßnahmen |
---|---|
Bevor ich es wusste, wurde der von mir geschriebene Code unbeabsichtigt geändert | Code-Review |
Bewertungen sind mit Hinweisen auf Verstöße gegen Kodierungskonventionen gefüllt | Formatierungswerkzeug, das den Codierungsstandards entspricht |
Ich weiß nicht, ob es ein guter Code zum Überprüfen ist oder ob er noch in Bearbeitung ist | Im Rezensionstitel[WIP]Hinzufügen |
Nach der Bereitstellung der Entwicklungsumgebung gibt der Client an, dass der Server aufgrund eines Fehlers nicht verbunden werden kann | Einführung des API-Tests / Integrationstests mit Jenkins |
Häufige Änderungen der Stammdaten und Dateninkonsistenzen | Automatische Modellierung und Validierung mit Jenkins |
Der Client versteht die Spezifikationen der vom Server erstellten API nicht | Automatische Generierung von API-Dokumenten |
Ich möchte die API ausprobieren, aber das Festlegen der URL- und Post-Parameter ist problematisch | Stellen Sie eine Anfrage mit API-Dokumentation |
Ich weiß nicht, wer gerade welche Aufgabe erledigt | Verwaltet durch Rückstand |
Zu erledigende Aufgaben werden vergessen | Verwaltet durch Rückstand |
Der Client sagt, dass auf dem Server ein Fehler vorliegt, aber ich weiß nicht, welche Art von Anfrage gestellt wurde | Kommunikationsprotokoll der Anfrage abrufen |
Ich möchte langsame APIs identifizieren und verhindern, dass sie veröffentlicht werden, bevor sie veröffentlicht werden | Einführung von New Relic in die Entwicklungsumgebung |
Ich möchte sehen, ob die Leistung des Servers herauskommt | Lade Test |
Ich möchte den Benutzer in der Produktionsumgebung in der Entwicklungsumgebung reproduzieren | Benutzerexport auf dem Verwaltungsbildschirm/import |
Wenn ein oder zwei Personen Code schreiben, können sie immer miteinander kooperieren, und es ist einfach, dem Festschreibungsprotokoll zu folgen. In vielen Fällen gibt es also kein Problem, auch wenn Sie keine Codeüberprüfung durchführen. Bei einer großen Anzahl von Personen (6-7 Personen in meinem Team) kann ich jedoch häufig mit dem Code anderer Personen herumspielen und ihn verwenden, und die Last steigt, ohne ihn wie vom Ersteller beabsichtigt zu verwenden. Es wird kalt sein und Fehler verursachen. Vor allem, wenn nur eine Person den Code versteht, verzögert sich die Reaktion auf einen Fehler.
Wir haben eine Codeüberprüfung eingeführt, um das oben genannte Problem zu lösen. Wir verwenden ** Stash ** und es wird eine Pull-Anfrage in Stash genannt.
Stellen Sie Pull-Anfragen nach Funktionen wie unten gezeigt und lassen Sie sie von den Teammitgliedern überprüfen.
Es ist Zeit zum Zusammenführen, aber in meinem Team kann die Person, die die Pull-Anfrage gestellt hat, zusammengeführt werden, wenn zwei oder mehr Prüfer zustimmen. Wenn alle die Überprüfung genehmigen, tun wir dies, weil die Genehmigung zu lange dauert.
Der Prozess der Selbstgenehmigung führt jedoch sicherlich zu einem Warten auf die Person, die die Pull-Anforderung gestellt hat. Daher ist es ein Versprechen, dass kleine Änderungen ohne Überprüfung zusammengeführt werden können.
Ich habe schon früher Blogs in Übersee gesehen, und die Codeüberprüfungen werden nach dem Zusammenführen durchgeführt. Daher dachte ich, dass es sicherlich eine solche Methode gibt, aber ich denke, dass dies von der Situation des Teams abhängt.
Das Team ist der Einhaltung von PEP8 verpflichtet.
Wenn Sie eine Codeüberprüfung starten, besteht das Problem außerdem darin, dass die Überprüfung darauf hinweist, dass sie gegen den Codierungsstandard verstößt. Dieser Punkt selbst ist unkompliziert, aber sowohl diejenigen, die es tun, als auch diejenigen, die es tun, fühlen sich wie Zeitverschwendung und sind unfruchtbar.
Sie können das Problem vermeiden, indem Sie vor dem Überprüfen eine Pull-Anforderung stellen, die nicht gegen die Codierungskonventionen verstößt **.
Die folgenden Methoden können in Betracht gezogen werden, um das Obige zu erreichen.
Wir empfehlen die Methoden 1 und 3 im Team. Lassen Sie die festgeschriebene Datei nach dem Festschreiben mit autopep8 zunächst alle Codierungsverletzungen automatisch beheben. Ich werde die detaillierte Methode in einem anderen Artikel schreiben.
In den frühen Tagen, als ich mir zum Zeitpunkt der Codeüberprüfung die Pull-Anforderungsliste ansah, konnte ich anhand des Titels nicht erkennen, ob es sich um eine gute oder eine vorübergehende Überprüfung handelte, die ich vor der Überprüfung abgegeben hatte.
Um dies zu lösen, habe ich [Review] zu denen hinzugefügt, die es überprüfen können, und [WIP] zu denen, die es noch nicht überprüfen möchten. WIP steht für Work in Progress.
Selbst bei einer Codeüberprüfung sind immer noch Fehler vorhanden. Um dies zu verhindern, führt Jenkins nach dem Zusammenführen den Test aus. Wenn dies in Ordnung ist, wird er auf dem Entwicklungsserver bereitgestellt.
In der folgenden Umgebung habe ich Jenkins auf einem anderen Computer-Mac im Unternehmen eingerichtet, die Änderung des Entwicklungszweigs in Stash abgefragt und alle 15 Minuten bereitgestellt. Ich möchte den Test ausführen, sobald er von Stash auf Web Hook geändert wird, aber ich frage ab, weil er aus Sicherheits- und Kostengründen intern ist.
Der Test führt den folgenden Test mit py.test aus.
Der Integrationstest dauert zu lange. Wenn der API-Test erfolgreich ist, werde ich ihn auf dem Entwicklungsserver bereitstellen.
Die Stammdaten des Spiels sind die Daten, die der Parameter der Einheit oder der Parameter der Quest sind. Die Originaldatei ist Excel, aber aus verschiedenen Gründen kompliziert. Das Folgende ist eine Übersicht.
Der Servercode liest die Stammdaten und verwendet sie für den Code. Es ist Zeitverschwendung, den Servercode bei jeder Aktualisierung manuell zu aktualisieren, sodass Jenkins ihn automatisch aktualisiert.
Ein weiteres Problem mit Stammdaten besteht darin, dass die Stammdaten häufig mehr Spalten enthalten. Zum Beispiel scheinen die Stammdaten der Einheit Fähigkeiten zu haben und die Fähigkeits-ID hat zugenommen. Als Gegenmaßnahme wird auf der Serverseite ein Modellquellcode mit einem Stammdaten verknüpft. Beim Erweitern der Funktion wird dieser umbrochen und die Methode geschrieben.
Zum Beispiel hat es die folgende Form.
application / module / unit / models / unit.py #Modelle für Einheitenstammdaten (Einheit) application / module / unit / models / unit_wrapper.py # Unit Wrapper application/module/unit/models/init.py
init.py ist wie folgt definiert
# -*- coding:utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
from .unit import UnitWrapper as Unit
Wenn Sie dann von außen referenzieren, kann UnitWrapper wie folgt als Unit gelesen werden.
from module.unit.models import Unit
Dieser unit.py-Teil wird automatisch durch Ausführen des Skripts erstellt, sodass Sie sich nicht um die Aktualisierung der Stammdaten kümmern müssen. Dieser Teil wird von Jenkins nicht automatisiert, kann es aber natürlich sein.
Es ist ein Problem, wenn die Serverseite eine API erstellt und deren Spezifikationen (Anforderungsparameter und Antwortparameter) nicht bestätigt werden können. Es gibt ein Muster, das in Confluence usw. geschrieben werden muss, aber es ist nur dann sinnvoll, wenn es ständig aktualisiert wird. Daher ist es vorzuziehen, es mit dem Quellcode zu verknüpfen.
Es gibt Swagger usw., aber in meinem Team merke ich es selbst auf dem Verwaltungsbildschirm.
Die APIs werden aufgelistet. Es wird automatisch hinzugefügt, wenn Sie eine neue API erstellen.
Beispiel für eine Player- / Anmelde-API-Dokumentation
Wie oben erwähnt, haben die Teammitglieder diejenigen erstellt, die die Anfrage und Antwort verstehen können.
Während der Entwicklung möchten Sie möglicherweise die API aufrufen, um die Antwort zu überprüfen. Es gibt Advanced REST Client usw. als Chrome-Plug-In, aber es ist schwierig zu warten, da täglich APIs hinzugefügt werden.
Sie können auch eine Anforderung aus der API-Liste auf dem zuvor erwähnten Verwaltungsbildschirm ausgeben.
Es wird automatisch hinzugefügt, wenn eine neue API hinzugefügt wird. Darüber hinaus können Sie bis zu 5 Parameterkandidaten speichern. Dies ist hilfreich, wenn Sie verschiedene Parameter ausprobieren möchten. Einmal eingestellt, wird es automatisch im Browser gespeichert. Die Mitglieder haben zusätzlich den Teil entwickelt, in dem Sie mehrere Parameter ausprobieren können.
Da es lang geworden ist, werde ich "Teil 2" schreiben.
Recommended Posts