[PYTHON] Problèmes et contre-mesures dans le développement de jeux d'applications pour smartphone Partie 1

Je voudrais partager les différents problèmes qui surviennent dans le développement de jeux pour smartphone dans lesquels je suis impliqué et quels outils sont utilisés pour les résoudre.

Quand je parlais à un collègue, on m'a dit que ce serait bien si d'autres équipes pouvaient partager des choses utiles, alors j'aimerais d'abord partager mon équipe. Je développe avec python, mais je pense qu'il existe de nombreux problèmes courants qui peuvent survenir n'importe où. Je suis ingénieur serveur, donc je suis un peu orienté serveur.

environnement

Menu des problèmes et des contre-mesures

problème Contre-mesures
Avant que je ne m'en rende compte, le code que j'ai écrit a été modifié de manière involontaire Revue de code
Les examens sont remplis d'indications de violations de conventions de codage Outil de formatage conforme aux normes de codage
Je ne sais pas si c'est un bon code à revoir ou s'il est toujours en cours Dans le titre de la revue[WIP]Ajouter
Après avoir déployé l'environnement de développement, le client dit que le serveur ne peut pas être connecté en raison d'une erreur Test de test / d'intégration d'API introduit avec Jenkins
Modifications fréquentes des données de base et incohérences des données Modélisation et validation automatiques avec Jenkins
Le client ne comprend pas les spécifications de l'API créée par le serveur Génération automatique de documents API
Je veux essayer l'API, mais la définition des paramètres d'URL et de publication est problématique Faire une demande avec la documentation de l'API
Je ne sais pas qui fait actuellement quelle tâche Géré par le backlog
Les tâches à accomplir à l'avenir sont oubliées Géré par le backlog
Le client dit qu'il y a une erreur sur le serveur, mais je ne sais pas quel type de demande a été faite Obtenir le journal de communication de la demande
Je souhaite identifier les API lentes et empêcher leur publication avant leur publication Introduction de New Relic dans l'environnement de développement
Je veux voir si les performances du serveur sortent Test de chargement
Je souhaite reproduire l'utilisateur dans l'environnement de production dans l'environnement de développement Export des utilisateurs sur l'écran de gestion/import

Avant que je ne m'en rende compte, le code que j'ai écrit a été modifié de manière involontaire

Lorsqu'une ou deux personnes écrivent du code, elles sont toujours en mesure de coopérer entre elles et il est facile de suivre le journal de validation, il y a donc de nombreux cas où il n'y a pas de problème même si vous n'effectuez pas de révision de code. Cependant, avec un grand nombre de personnes (6-7 personnes dans mon équipe), je joue souvent avec et utilise le code des autres, et la charge augmente sans l'utiliser comme le créateur l'a prévu. Il fera froid et causera des bugs. Surtout, si une seule personne comprend le code, la réponse à un échec sera retardée.

Nous avons introduit une révision du code pour résoudre le problème ci-dessus. Nous utilisons ** Stash ** et cela s'appelle une pull request dans Stash.

Faites des demandes d'extraction par fonctionnalité comme indiqué ci-dessous et demandez aux membres de l'équipe de les examiner.

pr.png

Il est temps de fusionner, mais dans mon équipe, si deux examinateurs ou plus approuvent, la personne qui a effectué la demande d'extraction peut fusionner. Si tout le monde approuve la révision, nous le faisons parce que son approbation prend trop de temps.

Cependant, le processus d'approbation lui-même entraîne certainement une attente pour la personne qui a effectué la demande d'extraction, c'est donc une promesse que de petits changements peuvent être fusionnés sans examen.

J'ai déjà vu des critiques de code sur des blogs étrangers avant, après les avoir fusionnés, alors je pensais qu'il y avait certainement un tel moyen, mais je pense que cela dépend de la situation de l'équipe.

Les examens sont remplis d'indications de violations de conventions de codage

L'équipe s'engage à respecter la norme PEP8.

En plus de cela, lorsque vous lancez une révision de code, le problème est que la révision indique qu'elle enfreint la norme de codage. Ce point en lui-même est simple, mais ceux qui le font et ceux qui le font se sentent comme une perte de temps et sont stériles.

Vous pouvez éviter le problème en effectuant une pull request qui ne viole pas les conventions de codage ** avant de passer en revue **.

Les méthodes suivantes peuvent être envisagées pour atteindre ce qui précède.

  1. Accrocher et vérifier lors de la validation avec git
  2. Exécutez une vérification de codage et jouez toutes les violations avant qu'une demande d'extraction ne soit faite du côté de la réserve
  3. Insérez un plug-in qui vérifie automatiquement les violations PEP8 dans l'éditeur

Nous recommandons les méthodes 1 et 3 au sein de l'équipe. Pour faire le premier, après avoir validé avec autopep8, laissez le fichier validé corriger automatiquement les violations de codage. J'écrirai la méthode détaillée dans un autre article.

Je ne sais pas si c'est un bon code à revoir ou s'il est toujours en cours

Au début, lorsque je regardais la liste des demandes d'extraction au moment de la révision du code, je ne pouvais pas dire à partir du titre s'il s'agissait d'une bonne critique ou temporaire que j'avais donnée avant la révision.

Pour résoudre ce problème, j'ai ajouté [Review] à ceux qui peuvent l'examiner et [WIP] à ceux qui ne veulent pas encore l'examiner. WIP signifie Work in Progress.

Après avoir déployé l'environnement de développement, le client dit que le serveur ne peut pas être connecté en raison d'une erreur

Même avec une révision du code, les bogues sont toujours là. Pour éviter cela, après la fusion, Jenkins exécute un test et s'il est OK, il est déployé sur le serveur de développement.

Dans l'environnement suivant, j'ai configuré Jenkins sur une autre machine Mac de l'entreprise, interrogé le changement de la branche de développement dans Stash et le déploie toutes les 15 minutes. Je souhaite exécuter le test dès qu'il est passé de Stash à Web Hook, mais j'interroge parce qu'il est en interne pour des raisons de sécurité et de coût.

server_pptx.png

Le test exécute le test suivant avec py.test.

Le test d'intégration prend trop de temps, donc si le test d'API réussit, je le déploierai sur le serveur de développement.

Modifications fréquentes des données de base et incohérences des données

Les données de base du jeu sont les données qui sont le paramètre de l'unité ou le paramètre de la quête. Le fichier d'origine est Excel, mais il est compliqué pour diverses raisons. Voici un aperçu.

masterdata.png

Le code serveur lit les données de base et les utilise sur le code. C'est une perte de temps de mettre à jour manuellement le code du serveur chaque fois qu'il est mis à jour, donc Jenkins le mettra à jour automatiquement.

Un autre problème avec les données de base est qu'elles ont souvent plus de colonnes dans les données de base. Par exemple, il semble que les données de base de l'unité aient des compétences et que l'ID de compétence ait augmenté. En guise de contre-mesure, côté serveur, un code source de modèle est associé à une donnée maître, et lors de l'extension de la fonction, il est encapsulé et la méthode est écrite.

Par exemple, il a la forme suivante.

application / module / unit / models / unit.py #Models for unit master data (Unit) application / module / unit / models / unit_wrapper.py # Unit Wrapper application/module/unit/models/init.py

init.py est défini comme suit

# -*- coding:utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
from .unit import UnitWrapper as Unit

Ensuite, lors du référencement de l'extérieur, UnitWrapper peut être lu comme une unité en procédant comme suit.

from module.unit.models import Unit 

Cette partie unit.py est créée automatiquement en exécutant le script, vous n'avez donc pas à vous soucier de la mise à jour des données de base. Cette partie n'est pas automatisée par Jenkins, mais bien sûr elle peut l'être.

Le client ne comprend pas les spécifications de l'API créée par le serveur

C'est un problème si le côté serveur crée une API et que ses spécifications (paramètres de requête et paramètres de réponse) ne peuvent pas être confirmées. Il y a un modèle à écrire dans Confluence etc., mais il n'a de sens que s'il est constamment mis à jour, il est donc préférable de le lier avec le code source.

Il y a Swagger etc., mais dans mon équipe, je le réalise moi-même sur l'écran de gestion.

Les API sont répertoriées. Il sera ajouté automatiquement lorsque vous créerez une nouvelle API. api_1.png

Exemple de documentation de l'API Player / Signup

api_2.png

api_3.png

Comme mentionné ci-dessus, les membres de l'équipe ont créé ceux qui peuvent comprendre la demande et la réponse.

Je veux essayer l'API, mais définir les paramètres d'URL et de publication est gênant

Pendant le développement, vous souhaiterez peut-être accéder à l'API pour vérifier la réponse. Il existe Advanced REST Client, etc. en tant que plug-in Chrome, mais il est difficile à maintenir car des API sont ajoutées chaque jour.

arc.png

Vous pouvez également émettre une requête à partir de la liste des API sur l'écran de gestion mentionné précédemment.

api_4.png

Il sera ajouté automatiquement lorsqu'une nouvelle API sera ajoutée. De plus, vous pouvez enregistrer jusqu'à 5 paramètres candidats, ce qui est utile lorsque vous souhaitez essayer différents paramètres. Une fois défini, il sera automatiquement enregistré dans le navigateur. Les membres ont en outre développé la partie où vous pouvez essayer plusieurs paramètres.

Comme c'est devenu long, j'écrirai "Part 2".

Recommended Posts

Problèmes et contre-mesures dans le développement de jeux d'applications pour smartphone Partie 1
Problèmes et contre-mesures dans le développement de jeux d'applications pour smartphone Partie 2
Problèmes et contre-mesures pour le débordement de la binarisation d'Otsu en Python
[Astuces] Problèmes et solutions dans le développement de python + kivy
Modulation et démodulation AM avec Python Partie 2
Test de charge de l'application de jeu pour smartphone Iroha
Débutant du développement d'applications GUI Raspberry Pi facile, partie 1
[Python] Développement d'applications IA Udemy Image Judgment - Partie 1
Débutant du développement d'applications GUI Raspberry Pi facile, partie 2