Le quotidien d’un développeur de logiciels
Les logiciels sont plus que jamais indissociables de notre quotidien, que ce soit les plateformes de commerce en ligne, les applications pour mobile, les guichets automatiques, les caisses libre-service en magasin, etc.
Tous ces systèmes ont d’abord dû être imaginés et développés, puis il faut les maintenir tout au long de leur vie utile. Tous les jours, nous les utilisons quotidiennement sans même plus y penser. Mais savez-vous en quoi consiste le travail quotidien des programmeurs qui ont développé tous ces outils dont on ne saurait plus se passer ?
En tant que développeur spécialisé en applications web, je vous propose un aperçu des tâches et défis que je rencontre typiquement chaque jour. Bien sûr, chaque projet de développement logiciel est unique et chaque équipe a sa façon de faire, mais cette vue d’ensemble est sans doute assez représentative de l’approche générale pour tout type de développement logiciel.
Notons d’abord que malgré le terme courant de “développement” qui recouvre tout ce qui participe à la naissance d’un logiciel, le développement logiciel n’est pas l’affaire uniquement des développeurs. En fait, il fait appel à différents professionnels et à de nombreuses compétences autres que la seule écriture de code.
Le cycle de développement logiciel
Dans le cycle de développement logiciel moderne dit “Agile”, une application est continuellement en développement :
- Analyse — L’analyse des besoins : nouvelles fonctionnalités, bogues à corriger, etc.
- Conception — Élaboration des maquettes, de l’architecture logicielle requise, etc.
- Implémentation — Développement (“codage”).
- Tests — Assurance qualité (AQ) pour valider le bon bon fonctionnement et trouver les bogues manqués lors du développement.
- Déploiement — Mise en production.
Les meilleures pratiques veulent que le développement passe par toutes les étapes de ce cycle à intervalles réguliers, de manière à avoir des mises à jour fréquentes en production. En général, un cycle typique, appelé “sprint”, dure d’une à quatre semaines selon la nature du projet, mais dans les cas d’urgences majeures (par exemple, un “hotfix”), un cycle complet peut être accompli en aussi peu qu’une seule journée.
Il est à noter que tous les cycles ne produisent pas nécessairement de changements visibles pour les utilisateurs finaux de l’application. Un cycle peut en effet contenir uniquement de l’analyse ou des changements d’architecture en arrière plan, en préparation de fonctionnalités futures ou pour stabiliser la plateforme. De plus, une fonctionnalité peut être divisée en plusieurs petites tâches moins complexes afin de mieux répartir le travail entre les différents développeurs.
À l’occasion et selon la répartition des équipes au sein d’une entreprise, le développeur est amené à devoir réaliser des tâches relevant de chaque étape du cycle. Un bon développeur doit donc être polyvalent et pouvoir s’adapter rapidement lorsque nécessaire.
Ainsi, même si on a la plupart du temps une équipe d’assurance qualité (AQ) dédiée pour tester l’application et trouver les bogues avant la mise en production des nouvelles fonctionnalités, un développeur effectue tout de même certains tests lors de l’implémentation afin de corriger une partie des bogues en amont.
Mentionnons que les phases du cycle de développement ne sont pas nécessairement séquentielles. Par exemple, les phases d’analyse et de conception du prochain cycle peuvent être accomplies en parallèle durant le cycle en cours.
La phase d’analyse s’accompagne généralement des tâches suivantes :
- Analyse des besoins : identification et priorisation des bogues et des nouvelles fonctionnalités pour le prochain cycle.
- Documentation des besoins techniques à implémenter pour répondre aux besoins identifiés. Division des fonctionnalités complexes en sous-tâches plus simples.
- Estimation de la complexité et du temps requis pour chacune des tâches déterminées.
- Planification et validation du contenu du prochain cycle de développement.
La phase d’analyse est amorcée en étroite collaboration avec le client (représenté par le “Product Owner”), et les équipes de développement et d’assurance qualité sont généralement impliquées lors des phases finales d’estimation et de planification.
Le travail du codeur
Pour ce qui est du développement à proprement parler, un développeur réalise généralement les travaux suivants pour chaque tâche :
- Implémentation de la tâche dans le code (ajout de la fonctionnalité dans le code ou ajustement du code existant pour corriger un bogue) :
- Recherche et documentation (utiliser une librairie logicielle externe, trouver une solution existante pour résoudre un bogue, explorer des alternatives technologiques, etc.).
- Ajout de tests unitaires ou même de tests fonctionnels et/ou de tests d’intégration selon le projet.
- Test de la fonctionnalité dans un environnement de développement dédié.
- Ouverture de la revue de code aux autres développeurs :
- Ajustements et corrections suite aux retours de la revue de code (le cas échéant).
- Déploiement de la fonctionnalité dans l’environnement d’AQ dédié :
- Ajustements et corrections des bogues trouvés par l’équipe d’assurance qualité (s’il y a lieu).
Une fois toutes les tâches complétées et mises ensemble, on peut alors faire le déploiement du “sprint” achevé en production.
Notons finalement que toutes les étapes du cycle de développement ne sont pas indépendantes, mais bien interreliées.
Par exemple, après l’implémentation d’une fonctionnalité, si des bogues sont détectés par l’équipe d’assurance qualité, le développeur responsable de la tâche va les corriger en retournant à l’étape d’implémentation.
Ou bien encore, si un bogue est détecté en production durant un cycle, il est alors analysé et priorisé. Selon sa gravité, il sera soit corrigé en “hotfix”, soit inséré au cycle actuel (possiblement à la place d’une autre fonctionnalité) en vue du prochain déploiement, soit reporté à un cycle ultérieur.
Collaborer et communiquer
La collaboration et la communication entre les différentes équipes sont l’une des principales clés pour le développement efficace d’une application de qualité. Un développeur est donc en constante communication avec les autres développeurs et membres de l’équipe selon l’état d’avancement du cycle.
Idéalement, les communications se font directement en personne, mais selon la taille des entreprises et l’emplacement des clients, il peut arriver que les équipes soient réparties entre plusieurs villes, pays ou même continents. Il arrive donc que des réunions ou discussions soient réalisées de manière virtuelle, mais elles n’en sont pas moins importantes pour autant. Notons aussi que de nos jours, plusieurs entreprises offrent également des possibilités de télétravail à leurs employés, auquel cas la qualité et la régularité des communications au sein de l’équipe sont d’autant plus essentielles.
Pour un développeur, une journée type est donc par exemple accompagnée des tâches suivantes (pas nécessairement dans cet ordre) :
- Synchronisation avec le reste de l’équipe (par exemple, une rencontre “scrum”).
- Revue de code des fonctionnalités terminées par les autres développeurs.
- Ajustement des fonctionnalités terminées à la suite de la revue de code des autres développeurs ou des retours de l’équipe AQ.
- Développement de nouvelles fonctionnalités (implémentation + test).
- Participation à l’estimation des prochaines fonctionnalités (généralement une seule fois par “sprint” ou cycle selon les besoins).
Bien sûr, tout ceci est très variable, selon le projet et selon le rôle de chaque développeur au sein de l’équipe.
Pour conclure, le développement logiciel reste un processus complexe et en constante effervescence. Outre les développeurs, il fait intervenir plusieurs acteurs clés tous aussi importants. Et la prochaine fois que vous utiliserez votre application préférée, peut-être aurez-vous l’occasion de penser à la somme de travail et les efforts soutenus des équipes de développement qui l’ont rendue possible.