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.
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 |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Exemple de documentation de l'API Player / Signup
Comme mentionné ci-dessus, les membres de l'équipe ont créé ceux qui peuvent comprendre la demande et la réponse.
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.
Vous pouvez également émettre une requête à partir de la liste des API sur l'écran de gestion mentionné précédemment.
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