J'ai travaillé sur un grand système de transactions financières pour une banque qui s'occupait des pensions et des investissements. Après 15 ans de changements de fonctionnalités, le coût du test de régression manuelle était passé à 200 000 $ par version. (10M LOC, 10M $ traités par jour). Ce système s'interface également avec 19 autres systèmes de l'entreprise qui déplacent de nombreuses données. Ce système a été implémenté en Java.
Ce que nous observons cependant, c'est que plus nous réutilisons, plus les coûts des tests de régression augmentent. (La raison étant que vous devez "tester le code que vous touchez" - et que le code réutilisé / partagé a un impact sur une multiplicité d'endroits quand il est touché. - nous observons une incitation financière à copier et coller du code. Cela permet de réduire les coûts des tests de régression, car nous ne voulons pas modifier le code qui pourrait être partagé, car cela entraînerait un impact important du test de régression.)
Ma question est la suivante : existe-t-il un principe de génie logiciel qui décrit la relation entre les coûts de réutilisation et de régression?
La raison pour laquelle je poserais cette question est qu'il est sans doute avantageux de décomposer le système en parties plus petites à tester.
Hypothèses:
«Test de régression» signifie «test d'acceptation» - c'est-à-dire qu'un autre groupe passe du temps à écrire de nouveaux tests et à réutiliser d'anciens tests sur le système au nom de l'entreprise, y compris l'environnement et les configurations de données.
Je sais que la réaction instinctive à un gros coût de test de régression est «des tests plus automatisés». C’est un bon principe. Dans cet environnement, il y a quelques défis.
(a) Les tests automatisés sont moins utiles au-delà des frontières du système, à moins que ce système n'ait également une couverture de test automatisée élevée. (Défi sphère d'influence).
(b) Il est culturellement difficile d'obtenir un élan sur le temps du programmeur ou un investissement en capital sur une couverture de test automatisée élevée lorsque votre système est déjà volumineux et complexe.
(c) Le coût de la maintenance des tests automatisés est caché dans un projet et peut donc être facilement éliminé au niveau du projet.
(d) C'est juste la réalité culturelle du travail dans une banque.
(e) Je travaille pour résoudre ce problème d'une manière différente (décomposition).