19/7/2019

Blog des développeurs : autopsie d’un bug

Dans ce blog des développeurs, nous allons nous intéresser aux bugs, comment nous les avons résolus, et ce que leur correction implique pour les bugs à venir.

HISTORIQUE

11 et 12 mai

  • Début mai, trois bugs ont pris de l’ampleur au sein de la communauté de Rainbow Six Siege : les bugs du bouclier de Clash, de la claymore et des boucliers déployables. 
  • L’équipe a surveillé la situation lors du week-end, et s’est vite rendu compte qu’il s’agissait d’un problème à régler en priorité.

13 MAI

  • L’équipe a commencé à enquêter sur les bugs.  Notre première action a été de reproduire de manière précise et systématique les bugs au studio afin de mieux comprendre le problème et d’en identifier les causes initiales.
  • Les premières recherches ont révélé qu’il allait falloir du temps pour comprendre l’étendue du problème, et qu’un correctif rapide ne serait pas possible.
  • Alors que les bugs continuaient à se répandre dans la communauté, nous avons commencé à débattre de la meilleure manière pour limiter les dégâts à court terme.

15 MAI

  • Les chefs de projet de Rainbow Six Siege ont réfléchi à propos des bugs. Il nous fallait déterminer, grâce à des données quantitatives, la portée exacte, ainsi que l’impact des bugs dans le jeu.

16 MAI

  • Au matin du 16, après avoir examiné les données, nous avons pris la décision de désactiver Clash, les claymores et les boucliers déployables.
  • Plusieurs équipes ont interrompu leur travail habituel pour explorer les possibilités de création et de mise en place d’une solution qui désactiverait Clash, les claymores et les boucliers déployables.
  • Nous avons commencé à tester chacune des solutions potentielles au fur et à mesure que nous les terminions. Nous avons identifié cinq manières potentielles d’aborder le problème, et, après un certain nombre d’échecs, nous avons fini par réussir.

17 MAI

  • Après que les première et seconde batteries d’essai ont été couronnées de succès, nous avons activé les interrupteurs qui désactivent Clash, les claymores et les boucliers déployables en mesure d’urgence.

24 MAI

  • Nous nous sommes rendu compte qu’un correctif complet nécessiterait davantage de temps, car cela influerait sur des processus de système de jeu, notamment l’ordre dans lequel les paquets sont transmis au serveur. Cependant, étant donné que la suppression de Clash et de gadgets clés a beaucoup de répercussions sur le gameplay, des équipes ont commencé à travailler main dans la main pour mettre au point diverses sécurités que nous pourrions introduire sans encombre.

JUIN

  • Au cours des quelques semaines suivantes, de nouveaux rapports de bug ont commencé à faire leur apparition.
  • Cependant, les interrupteurs étant d’ores et déjà mis en place, nous avons pu réagir rapidement face à ces nouveaux rapports pour désactiver Clash et IQ.
  • À ce moment, l’équipe avait déjà finalisé un correctif complet et opérationnel à la cause sous-jacente des bugs. Nos tests en interne avaient déjà montré des résultats positifs, mais il fallait que nous passions le correctif sur le serveur de test, pour essayer en plus grande échelle, avant de pouvoir le déployer en toute confiance sur le serveur live.

JUIN-JUILLET

  • Vers la fin juin, "Ordonnement global" arrive d’abord sur PC, puis plus tard sur console, en juillet.
  • Pendant cette période, nous surveillons les performances des modifications apportées par "Ordonnement global" et vérifions si les problèmes reviennent.

INTERRUPTEURS + SÉCURITÉS

Pendant qu’une partie de l’équipe travaillait sur un correctif, une autre partie avait commencé à développer plusieurs sécurités à court terme, avec comme objectif de créer une solution qui soit plus durable. Ces interrupteurs et sécurités, qui ne ciblent que les bugs, n’ont pas été conçus comme un correctif complet. À la place, il s’agissait d’un essai fait par l’équipe, après avoir jaugé les conséquences que la suppression de Clash et de deux gadgets avait sur le jeu. Peu après, les interrupteurs et sécurités ont été mis en place sur les serveurs live, et la communauté a été poussée à signaler toute nouvelle occurrence.

La décision de supprimer des agents et de reconfigurer des équipements n’est pas une décision que nous avons prise à la légère. Nous devons respecter le temps et les efforts que les joueurs ont consacrés à débloquer du contenu du jeu, et devons avoir conscience de l’énorme impact que la suppression de certaines mécaniques majeures du gameplay pourrait avoir sur le méta-jeu et l’écosystème de Rainbow Six Siege. Cependant, compte tenu de la situation, nous avons estimé qu’il n’était pas acceptable d’attendre d’avoir un correctif complet. Il nous fallait empêcher les bugs et rendre le gameplay normal à nouveau, de manière aussi sécuritaire et rapide que possible pour les joueurs.

Il fallait que les solutions des sécurités remplissent plusieurs conditions. Elles devaient être : chirurgicales, de manière à ce qu’elles ne causent aucune sorte de récurrence ni de dégâts collatéraux involontaires ; faciles à modifier pour réagir vite ; et elles devaient nécessiter un minimum de tests avant d’être mises en place. Les interrupteurs agent et gadget qui en découlent ont été notre première réponse pour rapidement nous occuper des bugs, tout en gardant à l’esprit qu’il s’agissait d’une solution de dernier recours à très court-terme, en attendant de préparer et tester nos sécurités.

QU’EST-CE QUE "ORDONNEMENT GLOBAL" ?

Chaque agent, gadget, grenade, bouclier, caméra, mur et plante de Rainbow est un objet. Chaque objet de Rainbow Six Siege envoie un message (paquet) au serveur chaque fois qu’une étape d’une action est réalisée. Par exemple, quand vous utilisez votre gadget, votre agent envoie consécutivement les messages "J’équipe mon gadget" et "J’utilise mon gadget". Au même moment, votre gadget envoie simultanément des messages au serveur, tels que "gadget activé" et "gadget déployé". Le serveur envoie ces messages aux autres joueurs présents dans la partie.

Auparavant, l’ordre dans lequel ces messages étaient envoyés au serveur n’était garanti que pour chaque objet. Cela signifiait que des problèmes étaient possibles lorsque des messages étaient perdus ou étaient transmis au serveur dans le mauvais ordre. Les bugs tiraient profit de cette faille dans nos protocoles réseau en spammant des actions simultanément, ce qui augmentait les probabilités que ces messages réseau ne soient pas correctement reçus. En conséquence, la copie erronée sur le serveur signifiait que le jeu des joueurs n’affichait pas correctement les bonnes actions.

Notre réponse au problème, "Ordonnement global", modifie le moteur réseau afin de gérer l’ensemble des messages. Les messages sont aussi envoyés en plusieurs exemplaires, de manière à garantir une réception fiable. Cela signifie que chaque jeu recevra la même séquence de messages, et la copie sur le serveur sera synchrone à travers le jeu de chaque joueur.

Une fois que nous avons découvert que les bugs en cours étaient liés à ce processus de base, nous avons dû rester consciencieux par rapport à notre manière d’aborder "Ordonnement global". Il nous fallait nous assurer que les modifications n’entraîneraient pas d’effets secondaires nocifs. En fin de compte, bien que les modifications de "Ordonnement global" imposent une utilisation plus conséquente de la bande passante, nous avons estimé que les avantages de ce dernier compensaient cette légère augmentation, et avons choisi de continuer dans cette direction.

CE QUE CELA IMPLIQUE À L’AVENIR

Avec la mise en place de "Ordonnement global", les actions sont copiées uniformément pour tous les joueurs d’une partie puisqu’elles sont maintenant ordonnées au niveau mondial, au lieu du niveau client. Nous avons réévalué le coût en bande passante, et bien que celui-ci a légèrement augmenté, cela n’affectera pas votre expérience de jeu. Cela devrait éviter tout problème consécutif lié à l’envoi désordonné des messages et tout autre bug similaire.

Les bugs et leur impact sur la communauté ont aussi mis en évidence l’importance des interrupteurs agent et gadget, et la nécessité pour nous d’avoir un meilleur contrôle sur les configurations agent et équipement sur les serveurs live. Nous avons depuis commencé à consacrer plus de ressources visant à répondre à ce besoin, de manière à nous permettre de réagir rapidement en cas de bugs à venir.

Visiter nos autres réseaux sociaux

facebook icontwitter iconyoutube icontwitch icon