Pour de nombreux informaticiens, y compris moi-même il y a quelques années, le processus de développement logiciel idéal impliquerait la création de documents de conception détaillés avec de nombreux diagrammes UML avant l'écriture d'une ligne de code. (Cela ressemble à une description du modèle de cascade, mais c'est la même chose avec Agile, sauf que les itérations sont plus petites.)
Au cours des deux ou trois dernières années, j'ai complètement changé d'avis. Je pense toujours qu'une spécification détaillée des exigences avec les cas de test associés est absolument essentielle. Pour les grands projets, j'aurais également besoin d'un aperçu de l'architecture globale avant de commencer à coder. Mais tout le reste doit être fait en code autant que possible. Dans le cas idéal, il ne devrait y avoir aucune description de la conception du logiciel à l'exception du code lui-même.
Comment en suis-je arrivé à cette conclusion? Voici quelques arguments:
Retour d'information
Les outils pour écrire des documents ou créer des diagrammes fournissent peu de commentaires. Oui, il existe des outils de modélisation qui effectuent des vérifications de cohérence sur les diagrammes UML, mais ils sont limités et entraînent de nombreux frais généraux.
Sans rétroaction, il est difficile de reconnaître et de corriger les erreurs.
Dès que vous écrivez du code, vous obtenez beaucoup de commentaires, par exemple:
- Erreurs et avertissements du compilateur
- Résultats de l'analyse de code statique
- Tests unitaires
Les erreurs peuvent être rapidement reconnues et corrigées.
Cohérence
Pour vous assurer que le code est cohérent avec vos documents, vous devez vérifier encore et encore. S'il y a des changements fréquents, il est difficile de synchroniser le code et les documents.
Refactoring
Il existe de puissants outils et techniques pour refactoriser le code tandis que la refactorisation des descriptions textuelles ou des diagrammes est généralement difficile et sujette aux erreurs.
Il y a une condition préalable pour que cela fonctionne: le code doit être assez facile à lire et à comprendre. Cela ne peut probablement pas être réalisé avec Assembler, Basic ou Fortran mais les langages (et bibliothèques) modernes sont beaucoup plus expressifs.
Donc, si mes arguments sont valables, il devrait y avoir une tendance vers des spécifications et une documentation de conception logicielle moins ou plus légères. Existe-t-il des preuves empiriques de cette tendance?