[PYTHON] Probleme und Gegenmaßnahmen bei der Entwicklung von Smartphone-App-Spielen Teil 1

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.

Umgebung

Problem- und Gegenmaßnahmenmenü

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

Bevor ich es wusste, wurde der von mir geschriebene Code unbeabsichtigt geändert

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.

pr.png

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.

Bewertungen sind mit Hinweisen auf Verstöße gegen Kodierungskonventionen gefüllt

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.

  1. Haken Sie ein und überprüfen Sie, ob Sie mit git arbeiten
  2. Führen Sie eine Codierungsprüfung durch und spielen Sie Verstöße ab, bevor auf der Stash-Seite eine Pull-Anforderung gestellt wird
  3. Fügen Sie ein Plug-In ein, das im Editor automatisch nach PEP8-Verstößen sucht

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.

Ich weiß nicht, ob es ein guter Code zum Überprüfen ist oder ob er noch in Bearbeitung ist

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.

Nach der Bereitstellung der Entwicklungsumgebung gibt der Client an, dass der Server aufgrund eines Fehlers nicht verbunden werden kann

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.

server_pptx.png

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.

Häufige Änderungen der Stammdaten und Dateninkonsistenzen

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.

masterdata.png

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.

Der Client versteht die Spezifikationen der vom Server erstellten API nicht

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. api_1.png

Beispiel für eine Player- / Anmelde-API-Dokumentation

api_2.png

api_3.png

Wie oben erwähnt, haben die Teammitglieder diejenigen erstellt, die die Anfrage und Antwort verstehen können.

Ich möchte die API ausprobieren, aber das Festlegen der URL- und Post-Parameter ist problematisch

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.

arc.png

Sie können auch eine Anforderung aus der API-Liste auf dem zuvor erwähnten Verwaltungsbildschirm ausgeben.

api_4.png

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

Probleme und Gegenmaßnahmen bei der Entwicklung von Smartphone-App-Spielen Teil 1
Probleme und Gegenmaßnahmen bei der Entwicklung von Smartphone-App-Spielen Teil 2
Probleme und Gegenmaßnahmen zum Überlaufen der Binärisierung von Otsu in Python
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
AM-Modulation und Demodulation mit Python Part 2
Lasttest der Smartphone-Spiel-App Iroha
Easy Raspberry Pi GUI App Entwicklung Anfänger Teil 1
[Python] Udemy Image Judgement AI App-Entwicklung Teil1
Easy Raspberry Pi GUI App Entwicklung Anfänger Teil 2