Nous utilisons des méthodes agiles dans mon projet actuel pour le moment et nous avons des tas d'histoires comme celles-ci:
En tant qu'assistant, je tiens à payer un client un remboursement afin de pouvoir obtenir de l'argent quand ils le demandent
En tant que client, je veux payer un achat afin que je puisse recevoir mon article.
Comment nous l'avons fait jusqu'à présent, c'est de choisir les histoires les plus importantes chaque sprint et de l'élaborer dans un certain nombre de spécifications d'exigences formelles (nous collectons certaines des histoires similaires dans la même spécification). Selon l'histoire, cela pourrait simplement être un bouton sur un écran ou un flux de travail entier.
Le problème est maintenant que parce qu'il y a tellement d'histoires, il n'est pas immédiatement clair, car une partie du système que les histoires se rapportent.
Cela fonctionne au moment des développeurs, chaque sprint Le Devs vient d'obtenir une spécification décrivant ce qu'ils doivent faire et les changements dont ils ont besoin pour faire. Mais en termes de maintenance de cette liste d'histoires et de tests, il commence à obtenir des bogues de suivi vraiment difficiles et, en général, il suffit de maintenir les spécifications, car une fonction de fonctionnalité à l'écran aurait peut-être été documentée dans un certain nombre de lieux différents en raison de son être. Split par histoire.
Les spécifications d'écriture sont-elles basées sur des histoires une bonne idée? Avons-nous écrit les histoires dans le mauvais sens?
À compter du temps à écrire cette réponse, j'ai réalisé qu'il ne s'agit pas de tester, il s'agit de la documentation. Vous devriez d'abord lire Manifesto agile :
[Nous valorisons] logiciel de travail sur une documentation complète
Donc, vous devez rendre vos spécifications exécutables, c'est-à-dire écrivez-les comme un ensemble de tests entièrement automatisé.
Les spécifications d'écriture sont-elles basées sur des histoires une bonne idée?
Oui, imho, c'est. C'est ce qu'on appelle "développement axé sur le comportement" ou "spécification par exemple". IN Ruby Il y a un excellent outil concombre qui aide beaucoup.
Le problème est maintenant que parce qu'il y a tellement d'histoires, il n'est pas immédiatement clair, car une partie du système que les histoires se rapportent.
Pourquoi voulez-vous que ce soit clair? Je veux dire, avez-vous vraiment besoin d'une matrice de traçabilité "test/code"? L'avantage des tests d'écriture en tant que spécification est que vous n'avez pas besoin d'une traçabilité distincte "exigences/tests", car les tests deviennent des exigences. Aux fins des tests d'intégration, vous devez traiter votre logiciel dans son ensemble, pas comme des parties séparées.
Vous aurez peut-être besoin d'un outil de couverture pour voir s'il existe des modules "morts", des parties de votre système non couvertes par vos tests de spécification. Mais vous ne devriez vraiment pas vous soucier de la spécification que ce code particulier correspond. Il devrait être inversement: à partir d'une spécification particulière, vous devez savoir quelle partie du système correspond à elle. Vous ne devriez pas vous inquiéter de certaines duplications dans vos spécifications. Et si vous appliquez un [~ # ~ # ~] sèche [~ # ~ ~] Principe à votre code, il y aurait des dizaines de spécifications exécutant le même code.
Cela fonctionne au moment des développeurs, chaque sprint Le Devs vient d'obtenir une spécification décrivant ce qu'ils doivent faire et les changements dont ils ont besoin pour faire. Mais en termes de maintenance de cette liste d'histoires et de tests, il commence à obtenir des bogues de suivi vraiment difficiles et, en général, il suffit de maintenir les spécifications, car une fonction de fonctionnalité à l'écran aurait peut-être été documentée dans un certain nombre de lieux différents en raison de son être. Split par histoire.
Il n'est pas rare que des centaines de tests d'intégration soient brisés par un petit changement dans un module critique. C'est là que des étapes de test de l'unité dans.
Vous devez structurer vos tests de manière à ce que vous puissiez dire si un test particulier couvre une exigence de niveau élevé, ou simplement un détail subtil. Si ce dernier, vous devez séparer ce test de votre suite de tests d'intégration. Le test de l'unité est de localiser des bugs. Pour que si vous introduisez un bogue, il y aura un et un seul échec de test.
Avons-nous écrit les histoires dans le mauvais sens?
Je pense que vous devez juste organiser vos histoires dans des épopées soit par l'utilisateur, par exemple. "Client", "Assistant", ou par caractéristiques/écrans/flux de travail ("achat", "remboursement").
Et encore une fois, les tests de spécification ne remplacent pas les tests unitaires. En savoir plus
> Writing specs by stories? a good idea?
Oui Si vous pouvez gérer des interdépendances et des priorités de vos histoires.
Voici un article sur cartes de l'histoire qui peut vous aider à commander et à gérer de nombreux usagers.
Vous avez mentionné un problème et la façon dont vous le résolvez, mais vous oubliez de mentionner un exemple de vos spécifications et de votre regroupement et de la manière dont il est lié à la manière dont vous développez votre produit.
Écrire des spécifications par histoires? une bonne idée?
Agile ne l'interdit pas. Dans Agile, vous pouvez faire tout ce dont vous avez besoin pour offrir une valeur d'entreprise maximale en rythme durable. Donc, si les spécifications d'écriture sont quelque chose que vous devez fournir plus de valeur commerciale, il est absolument correct de le faire.
Votre exemple montre deux histoires d'utilisateurs. Ils sont peut-être en quelque sorte liés dans votre logique commerciale, mais c'est un scénario très courant.
Si vous avez besoin de la fonctionnalité BacTrack vers des histoires d'utilisateurs, vous pouvez à nouveau utiliser les costumes, y compris les costumes, y compris la documentation, certains diagrammes ou votre "SPEC", mais vous devez être préparé que le maintien de ces artefacts vous coûtera plus que votre complexité de l'application développée augmente. Donc, la seule question que vous devez répondre dans ce cas est la suivante: Si je n'utilise pas mes spécifications, cela nous coûtera plus? Si la réponse est oui, vous avez choisi une meilleure option.
L'agile fonctionne mieux pour les projets faibles à moyennes avec une petite équipe était une architecture toute l'architecture en tant que connaissances tacites partagées dans l'équipe. Lors de la planification de l'itération, vous passerez sur vos histoires cueillies, discutez d'un impact sur la mise en œuvre actuelle et écrivez des tâches nécessaires pour compléter l'histoire. La véritable documentation dans ce cas sera la suite de tests contenant une acceptation automatique et des tests d'intégration/unités. Une fois que votre SW ou votre équipe pousse que la connaissance tacite devra se déplacer partiellement vers une documentation.
C'est là que c'est là que l'abstraction joue un rôle majeur. Vous devez examiner les histoires avec le respect de la perspective pertinente. Rassemblez les noms et verbes dans les relevés et les confirmer. Vous ne pouvez pas baser vos modèles sur des hypothèses personnelles. Aussi faire attention aux détails.
Les spécifications d'écriture basées sur des histoires d'utilisateurs ne peuvent pas être exactes. Vous devez creuser des détails supplémentaires et parfois ignorer les détails qui ne sont pas pertinents. Les spécifications doivent être écrites lorsque votre modèle est complet et précis lors de la confirmation de votre analyste.