Développer des tests à partir d'un modèleDevelop tests from a model

Vous pouvez utiliser les spécifications et les modèles architecturaux pour mieux organiser les tests de votre système et de ses composants.You can use requirements and architectural models to help you organize the tests of your system and its components. Cette pratique vous permet de vous assurer que vous testez les impératifs importants des utilisateurs et des autres parties prenantes, et vous aide à mettre rapidement à jour les tests quand les impératifs changent.This practice helps ensure that you test the requirements that are important to the users and other stakeholders, and it helps you update the tests quickly when the requirements change. Si vous utilisez Microsoft Test Manager, vous pouvez également tenir à jour des liens entre les modèles et les tests.If you use Microsoft Test Manager, you can also maintain links between the models and the tests.

Pour connaître les versions de Visual Studio prend en charge ces fonctionnalités, consultez prise en charge de la Version pour l’architecture et les outils de modélisation.To see which versions of Visual Studio support these features, see Version support for architecture and modeling tools.

Tests système et de sous-systèmesSystem and Subsystem Testing

Test du système, également appelé tests d’acceptation, moyens de test de déterminer si les besoins des utilisateurs sont satisfaits.System testing, also known as acceptance testing, means testing whether the users' needs are being met. Ces tests portent sur le comportement extérieurement visible du système, plutôt que sur sa conception interne.Such tests are concerned about the externally visible behavior of the system instead of the internal design.

Les tests système sont extrêmement utiles lors de l'extension ou de la modification de conception d'un système.System tests are very valuable when extending or redesigning a system. Ils vous évitent d'introduire des bogues quand vous modifiez le code.They help you avoid introducing bugs when you change the code.

Lorsque vous planifiez une modification ou une extension d'un système, il est utile de commencer avec un ensemble de tests système qui s'exécutent sur le système existant.When you plan any change or extension to a system, it is helpful to start with a set of system tests that run on the existing system. Ensuite, vous pouvez étendre ou adapter les tests pour tester les nouveaux impératifs, apporter les modifications au code et réexécuter l'ensemble complet de tests.Then you can extend or adjust the tests to test the new requirements, make the changes to the code, and rerun the complete set of tests.

Quand vous développez un nouveau système, vous pouvez commencer à créer des tests dès le début du développement.When you develop a new system, you can begin to create tests as soon as development begins. Définir des tests avant de développer chaque fonctionnalité vous permet de capturer les discussions d'impératifs d'une manière très spécifique.By defining tests before you develop each feature, you can capture the requirements discussions in a very specific way.

Les tests de sous-systèmes appliquent les mêmes principes aux composants majeurs d'un système.Subsystem testing applies the same principles to the major components of a system. Chaque composant est testé indépendamment des autres composants.Each component is tested separately from other components. Les tests de sous-systèmes sont axés sur le comportement visible au niveau des interfaces utilisateur ou des API du composant.Subsystem tests focus on the behavior visible at the component's user interfaces or API.

Dérivation de tests système à partir d'un modèle d'impératifsDeriving System Tests from a Requirements Model

Vous pouvez créer et tenir à jour une relation entre des tests système et un modèle d'impératifs.You can create and maintain a relationship between system tests and a requirements model. Pour établir cette relation, vous devez écrire des tests qui correspondent aux principaux éléments du modèle d'impératifs.To establish this relationship, you write tests that correspond to the main elements of the requirements model. Visual Studio vous aide à tenir à jour cette relation en vous permettant de créer des liens entre les tests et les parties du modèle.Visual Studio helps you maintain that relationship by letting you create links between the tests and parts of the model. Pour plus d’informations sur les modèles de configuration requise, consultez modéliser les besoins des utilisateurs.For more information about requirements models, see Model user requirements.

Écrire des tests pour chaque cas d'usageWrite Tests for Each Use Case

Si vous utilisez Microsoft Test Manager, vous pouvez créer un groupe de tests pour chaque cas d'usage que vous avez défini dans votre modèle d'impératifs.If you use Microsoft Test Manager, you can create a group of tests for each use case that you defined in your requirements model. Par exemple, si vous avez un cas d'usage Commander un repas, qui comprend Créer une commande et Ajouter un article à la commande, vous pouvez créer des tests à la fois pour le cas d'usage global et pour les cas d'usage plus détaillés.For example, if you have a use case Order a Meal, which includes Create Order and Add Item to Order, you can create tests for both the overall and the more detailed of these use cases.

Les instructions suivantes peuvent être utiles :These guidelines might be helpful:

  • Chaque cas d'usage doit avoir plusieurs tests, pour les itinéraires principaux et pour les résultats exceptionnels.Each use case should have several tests, for main paths and exceptional outcomes.

  • Quand vous décrivez un cas d'usage dans le modèle d'impératifs, il est plus important de définir sa post-condition, autrement dit l'objectif atteint, que de décrire en détail les procédures suivies par l'utilisateur pour atteindre l'objectif.When you describe a use case in the requirements model, it is more important to define its postcondition, that is, the goal that is achieved, than to describe in detail the procedures the user follows in order to achieve the goal. Par exemple, la post-condition de Commander un repas pourrait être qu'un Restaurant a préparé un repas pour un Client et que le client a payé.For example, the postcondition of Order a Meal might be that a Restaurant is preparing a meal for a Customer and that the Customer has paid. La post-condition correspond aux critères que vos tests doivent vérifier.The postcondition is the criterion that your tests should verify.

  • Basez des tests distincts sur les clauses distinctes de la post-condition.Base separate tests on the separate clauses of the postcondition. Par exemple, créez des tests distincts pour informer le restaurant de la commande et pour recevoir le paiement du client.For example, create separate tests for notifying the restaurant of the order, and for taking payment from the customer. Cette séparation offre les avantages suivants :This separation has these advantages:

    • Les modifications de différents aspects des impératifs se produisent souvent indépendamment.Changes in different aspects of the requirements frequently occur independently. En séparant les tests en différents aspects de cette manière, vous simplifiez la mise à jour des tests en cas de modification des impératifs.By separating the tests into different aspects in this manner, you make it easier to update the tests when requirements change.

    • Si le plan de développement implémente un aspect du cas d'usage avant un autre, vous pouvez activer les tests séparément à mesure que le développement progresse.If the development plan implements one aspect of the use case before another, you can enable the tests separately as development progresses.

  • Lors de la conception des tests, séparez le choix des données de test du code ou du script qui détermine si la post-condition a été remplie.When you design the tests, separate the choice of test data from the code or script that determines whether the postcondition has been achieved. Par exemple, voici un exemple de test d'une fonction arithmétique simple : entrer 4, vérifier que la sortie est 2.For example, a test of a simple arithmetic function might be: Input 4; verify that the output is 2. Au lieu de cela, concevez le script comme suit : choisir une entrée, multiplier le résultat par lui-même et vérifier que le résultat est l'entrée d'origine.Instead, design the script as: Choose an input; multiply the output by itself, and verify that the result is the original input. Ce style vous permet de faire varier les entrées de test sans modifier le corps principal du test.This style enables you to vary the test inputs without changing the main body of the test.

Liaison de tests à des cas d'usageLinking tests to use cases

Si vous utilisez --- --- Gestionnaire de testsTest Manager pour concevoir et exécuter vos tests, vous pouvez organiser vos tests sous spécification, cas d’usage ou des éléments de travail récit utilisateur.If you are using --- --- Gestionnaire de testsTest Manager to design and run your tests, you can organize your tests under requirement, use case, or user story work items. Vous pouvez lier ces éléments de travail à des cas d'usage dans votre modèle.You can link these work items to use cases in your model. Cela vous permet d'effectuer un suivi rapide des modifications d'impératifs lors des tests et vous aide à suivre la progression de chaque cas d'usage.This enables you to quickly trace requirements changes to the tests, and helps you track the progress of each use case.

  1. Dans --- --- Gestionnaire de testsTest Manager, créez un impératif et basez une suite de tests dessus.In --- --- Gestionnaire de testsTest Manager, create a requirement and base a test suite on it.

    L'impératif que vous créez est un élément de travail dans --- --- Team Foundation ServerTeam Foundation Server.The requirement that you create is a work item in --- --- Team Foundation ServerTeam Foundation Server. Il peut s'agir d'un élément de travail Récit utilisateur, Spécification ou Cas d'usage, selon le modèle de processus utilisé par votre projet avec Team FoundationTeam Foundation.It might be a User Story, Requirement, or Use Case work item, depending on the process template that your project uses with Team FoundationTeam Foundation. Pour plus d’informations, consultez suivre le travail à l’aide de Visual Studio Team Services ou Team Foundation Server.For more information, see Track work using Visual Studio Team Services or Team Foundation Server.

  2. Liez l'élément de travail Spécification à un ou plusieurs cas d'usage dans votre modèle.Link the requirement work item to one or more use cases in your model.

    Dans un diagramme de cas d’utilisation, un cas d’utilisation d’avec le bouton droit, puis lien vers l’élément de travail.In a use case diagram, right-click a use case and then click Link to Work Item.

  3. Ajoutez à la suite de tests des cas de test qui vérifient les cas d'usage.Add to the test suite, test cases that verify the use cases.

    En général, chaque élément de travail Récit utilisateur ou Spécification est lié à plusieurs cas d'usage dans votre modèle et chaque cas d'usage est lié à plusieurs spécifications ou récits utilisateur.Usually, each user story or requirement work item will link to several use cases in your model, and each use case will link to several user stories or requirements. Cela est dû au fait que chaque récit utilisateur ou spécification couvre un ensemble de tâches qui développent plusieurs cas d'usage.This is because each user story or requirement covers a set of tasks that develop several use cases. Par exemple, lors d'une itération précoce de votre projet, vous pourriez développer le récit utilisateur de base selon lequel un client peut sélectionner des articles dans un catalogue et se les faire livrer.For example, in an early iteration of your project, you might develop the basic user story in which a customer can choose items from a catalog and have them delivered. Lors d'une itération ultérieure, le récit pourrait préciser que l'utilisateur paie à la fin de la commande et que le fournisseur reçoit la somme payée après avoir envoyé la marchandise.In a later iteration, the story might be that the user pays when completing the order, and the supplier receives the money after it sends the goods. Chaque récit ajoute une clause à la post-condition du cas d'usage Commander des biens.Each story adds a clause to the postcondition of the Order Goods use case.

    Vous pouvez créer des liens séparés entre les spécifications et les clauses de la post-condition en écrivant ces clauses dans des commentaires distincts dans le diagramme de cas d'usage.You can create separate links from requirements to the clauses of the postcondition by writing those clauses in separate comments on the use case diagram. Vous pouvez lier chaque commentaire à un élément de travail Spécification et le lier au cas d'usage dans le diagramme.You can link each comment to a requirement work item, and link the comment to the use case on the diagram.

Tests de base sur les types de spécificationsBase Tests on the Requirements Types

Les types (c'est-à-dire les classes, les interfaces et les énumérations) d'un modèle d'impératifs décrivent les concepts et les relations d'après la façon dont les utilisateurs pensent et communiquent leur activité professionnelle.The types, that is, the classes, interfaces and enumerations, of a requirements model describe the concepts and relationships in terms of how users think and communicate about their business. Cela exclut les types axés exclusivement sur la conception interne du système.It excludes types concerned only with the internal design of the system.

Vous devez concevoir vos tests par rapport à ces types d'impératifs.Design your tests in terms of these requirements types. Cette pratique vous permet de vous assurer que lors de la discussion des changements d'impératifs il est facile d'associer ces changements aux modifications de tests nécessaires.This practice helps you ensure that when changes to the requirements are discussed, it is easy to relate the changes to the necessary changes in the tests. Cela permet de discuter des tests et de leurs résultats prévus directement avec les utilisateurs finaux et les autres parties prenantes.It makes it possible to discuss the tests and their intended results directly with end-users and other stakeholders. Cela signifie que vous pouvez gérer les besoins des utilisateurs en dehors du processus de développement et évite de concevoir involontairement les tests autour de failles possibles dans la conception.This means that the users' needs can be maintained outside the development process, and avoids the inadvertent design of the tests around possible flaws in the design.

Pour les tests manuels, cette pratique implique le respect du vocabulaire du modèle d'impératifs dans les scripts de tests.For manual tests, this practice involves adhering to the vocabulary of the requirements model in the test scripts. Pour les tests automatisés, cette pratique implique l'utilisation des diagrammes de classes d'impératifs comme base pour votre code de test et la création de fonctions d'accès et de mise à jour pour lier le modèle d'impératifs au code.For automated tests, this practice involves using the requirements class diagrams as a basis for your test code, and creating accessor and updater functions to link the requirement model to the code.

Par exemple, un modèle d'impératifs peut inclure les types Menu, Élément de menu, Commande et des associations entre ces types.For example, a requirements model might include types Menu, Menu Item, Order, and associations between them. Ce modèle représente les informations stockées et traitées par le système de commande de repas, mais ne représente pas les complexités de son implémentation.This model represents the information that is stored and dealt with by the meal ordering system, but does not represent the complexities of its implementation. Dans le système opérationnel, il peut y avoir plusieurs réalisations différentes de chaque type, dans des bases de données, dans des interfaces utilisateur et dans des API.In the working system, there might be several different realizations of each type, in databases, in user interfaces and on APIs. Dans un système distribué, il peut exister plusieurs variantes de chaque instance stockées simultanément dans différentes parties du système.In a distributed system, there might be several variants of each instance stored in different parts of the system at the same time.

Pour tester un cas d'usage tel que Ajouter un article à la commande, une méthode de test peut inclure du code semblable au suivant :To test a use case such as Add Item to Order, a test method could include code similar to this:

Order order = ... ; // set up an order  
// Store prior state:  
int countBefore = order.MenuItems.Count;   
// Perform use case:  
MenuItem chosenItem = ...; // choose an item  
AddItemToOrder (chosenItem, order);   
// Verify part of postcondition:  
int countAfter = order.MenuItems.Count;  
Assert (countAfter == countBefore = 1);   

Notez que cette méthode de test utilise les classes du modèle d'impératifs.Notice that this test method uses the classes of the requirements model. Les associations et les attributs sont réalisés en tant que propriétés .NET.Associations and attributes are realized as .NET properties.

Pour cela, les propriétés des classes doivent être définies en tant que fonctions ou accesseurs en lecture seule, qui accèdent au système pour récupérer des informations sur son état actuel.To make this work, the properties of the classes must be defined as read-only functions or accessors, which access the system to retrieve information about its current state. Les méthodes qui simulent des cas d'usage, telles que AddItemToOrder, doivent faire passer le système via son API ou une couche située en dessous de son interface utilisateur.Methods that simulate use cases such as AddItemToOrder must drive the system through its API or through a layer underneath its user interface. Les constructeurs d'objets de test tels que Order et MenuItem doivent aussi piloter le système pour créer des éléments correspondants dans le système.The constructors of test objects such as Order and MenuItem must also drive the system to create corresponding items inside the system.

Une grande partie des accesseurs et des programmes de mise à jour seront déjà disponibles via l'API normale de l'application,Many of the accessors and updaters will already be available through the application's normal API. mais vous devrez peut-être écrire certaines fonctions supplémentaires pour activer les tests.But some additional functions might have to be written in order to enable the tests. Ces accesseurs et programmes de mise à jour supplémentaires sont parfois appelés « instrumentation de test ».These additional accessors and updaters are sometimes known as 'test instrumentation'. Comme ils dépendent de la conception interne du système, il incombe aux développeurs du système de les fournir, tandis que les testeurs écrivent le code des tests conformément au modèle d'impératifs.Because they depend on the internal design of the system, it is the responsibility of the system's developers to provide them, whereas the testers write the code of the tests in terms of the requirements model.

Quand vous écrivez des tests automatisés, vous pouvez utiliser des tests génériques pour encapsuler les accesseurs et les programmes de mise à jour.When you write automated tests, you can use Generic Tests to wrap the accessors and updaters.

Tests de règles métierTests for Business Rules

Certains impératifs ne sont directement liés à aucun cas d'usage.Some requirements are not directly related to any one use case. Par exemple, l'entreprise DinnerNow permet aux clients de choisir parmi de nombreux Menus, mais elle exige que dans chaque Commande, tous les Éléments choisis proviennent d'un même Menu.For example, the DinnerNow business allows customers to choose from many Menus, but requires that in every Order, all the chosen Items shall be from a single Menu. Cette règle métier peut être exprimée comme un invariant relatifs aux associations entre Commandes, Menus et Éléments dans le modèle de classes d'impératifs.This business rule can be expressed as an invariant about the associations between Orders, Menus, and Items in the requirements class model.

Une règle invariante de ce genre régit non seulement tous les cas d'usage actuellement définis, mais aussi les autres cas d'usage qui seront définis ultérieurement.An invariant rule of this kind governs not only all the use cases that are currently defined, but also any other use cases that will be defined later. Ainsi, il est utile de l'écrire et de la tester séparément de tout cas d'usage.Therefore, it is useful to write it separately from any use case, and to test it separately from the use cases.

Dérivation de tests de sous-systèmes à partir de modèlesDeriving Subsystem Tests from Models

Dans la conception globale d'un grand système, vous pouvez identifier les composants ou les sous-systèmes.In the high-level design of a large system, you can identify components or subsystems. Ils représentent des parties qui peuvent être conçues séparément, qui se trouvent sur des ordinateurs différents ou qui sont des modules réutilisables pouvant être recombinés de plusieurs manières.These represent parts that can be separately designed, or are located on different computers, or are reusable modules that can be recombined in many ways.

Vous pouvez appliquer à chaque composant majeur les mêmes principes que ceux utilisés pour l'ensemble du système.You can apply to each major component the same principles as you use for the complete system. Dans un grand projet, chaque composant peut avoir son propre modèle d'impératifs.In a large project, each component can have its own requirements model. Dans les projets plus petits, vous pouvez créer un modèle d'architecture ou une conception globale pour montrer les principaux composants et leurs interactions.In smaller projects, an architectural model or high-level design can be created to show the major components and their interactions. Pour plus d’informations, consultez modéliser l’architecture de votre application.For more information, see Model your app's architecture.

Dans les deux cas, vous pouvez établir une relation entre les éléments de modèle et les tests de sous-systèmes comme vous le feriez entre le modèle d'impératifs et les tests système.In either case, you can establish a relationship between the model elements and the subsystem tests in the same manner as you would between the requirements model and the system tests.

Isoler des composants avec des interfaces fournies et requisesIsolate Components with Provided and Required Interfaces

Il est utile d'identifier toutes les dépendances d'un composant envers d'autres parties de votre système ou envers des services externes et de les représenter en tant qu'Interfaces requises.It is useful to identify all the dependencies that a component has on other parts of your system or external services, and to represent these as Required Interfaces. Cet exercice entraîne généralement une modification de la conception qui rend le composant bien plus découplé et aisément séparable du reste de votre conception.This exercise usually leads to some redesign that leaves the component much more decoupled and easily separable from the rest of your design.

L'un des avantages de ce découplage est que vous pouvez tester le composant en remplaçant les services qu'il utilise habituellement par des objets fictifs.An advantage of this decoupling is that the component can be executed for testing by replacing with mock objects the services it usually uses. Il s'agit de composants qui sont configurés pour les besoins des tests.These are components that are set up for the purposes of testing. Un composant fictif fournit l'interface dont votre composant a besoin et répond aux requêtes avec des données simulées.A mock component provides the interface that your component requires, responding to queries with simulated data. Les composants fictifs font partie d'un atelier de test complet que vous pouvez connecter à toutes les interfaces du composant.The mock components form part of a complete test harness that you can connect to all the interfaces of the component.

L'un des avantages des tests fictifs est que vous pouvez développer votre composant pendant que les autres composants dont il utilisera les services sont en cours de développement.A benefit of mock testing is that you can develop your component while the other components whose services it will use are still under development.

Gérer les relations entre les tests et le modèleMaintain the Relationships between Tests and Model

Dans un projet classique qui effectue une itération toutes les deux ou trois semaines, un examen des impératifs a lieu au début de chaque itération.In a typical project that performs an iteration every few weeks, a requirements review is held near the beginning of each iteration. Durant cette réunion, vous discutez des fonctionnalités qui doivent être délivrées lors de l'itération suivante.The meeting discusses the features that are to be delivered in the next iteration. Vous pouvez utiliser un modèle d'impératifs pour faciliter la discussion des concepts, des scénarios et des séquences d'actions qui seront développés.A requirements model can be used to help discuss the concepts, scenarios, and sequences of actions that will be developed. Les parties prenantes définissent des priorités, les développeurs réalisent des évaluations et les testeurs s'assurent que le comportement attendu de chaque fonctionnalité est capturé correctement.The business stakeholders set priorities, the developers make estimates, and the testers ensure the expected behavior of each feature is captured correctly.

L'écriture de tests constitue le moyen le plus efficace de définir un impératif et permet également de bénéficier d'une vision claire de ce qui est exigé.Writing tests is the most effective way to define a requirement, and is also an effective way to ensure that a person has a clear understanding of what is required. Toutefois, alors que l'écriture de tests prend trop de temps au cours d'un atelier d'impératifs, la création de modèles peut être effectuée plus rapidement.However, whereas writing tests takes too long to do during a specification workshop, creating models can be done much more rapidly.

Du point de vue des tests, un modèle d'impératifs peut être considéré comme un raccourci pour les tests.From a testing point of view, a requirements model can be seen as a shorthand for the tests. Ainsi, il est important de maintenir la relation entre les tests et le modèle tout au long du projet.Therefore, it's important to maintain the relationship between tests and model throughout the project.

Attachement de cas de Test pour les éléments de modèleAttaching Test Cases to Model Elements

Si votre projet utilise --- --- Gestionnaire de testsTest Manager, vous pouvez lier des tests aux éléments de votre modèle.If your project uses --- --- Gestionnaire de testsTest Manager, you can link tests to the elements in your model. Cela vous permet d'identifier rapidement les tests affectés par une modification des impératifs et de suivre dans quelle mesure un impératif a été satisfait.This lets you quickly find the tests affected by a change in the requirements, and helps you track the extent to which a requirement has been realized.

Vous pouvez lier des tests à tous les types d'éléments.You can link tests to all kinds of element. Voici quelques exemples :Here are some examples:

  • Lier un cas d'usage aux tests qui l'utilisent.Link a use case to the tests that exercise it.

  • Écrire les clauses d'une post-condition de cas d'usage, ou objectif, dans les commentaires associés au cas d'usage, puis lier des tests à chaque commentaire.Write the clauses of a use case postcondition, or goal, onto comments that are linked to the use case, and then link tests to each comment.

  • Écrire des règles invariantes dans des commentaires dans les diagrammes de classes ou d'activités et les lier à des tests.Write invariant rules in comments on class diagrams or activity diagrams, and link them to tests.

  • Lier des tests à un diagramme d'activités ou à des activités spécifiques.Link tests to an activity diagram, or to individual activities.

  • Lier une suite de tests au composant ou au sous-système qu'elle teste.Link a test suite to the component or subsystem it tests.

  1. Dans --- --- Gestionnaire de testsTest Manager, créez un impératif et basez une suite de tests dessus.In --- --- Gestionnaire de testsTest Manager, create a requirement and base a test suite on it.

    L'impératif que vous créez est un élément de travail dans --- --- Team Foundation ServerTeam Foundation Server.The requirement that you create is a work item in --- --- Team Foundation ServerTeam Foundation Server. Il peut s'agir d'un élément de travail Récit utilisateur, Spécification ou Cas d'usage, selon le modèle de processus utilisé par votre projet avec Team FoundationTeam Foundation.It might be a User Story, Requirement, or Use Case work item, depending on the process template that your project uses with Team FoundationTeam Foundation. Pour plus d’informations, consultez suivre le travail à l’aide de Visual Studio Team Services ou Team Foundation Server.For more information, see Track work using Visual Studio Team Services or Team Foundation Server.

  2. Liez l'élément de travail Spécification à un ou plusieurs éléments dans votre modèle.Link the requirement work item to one or more elements in your model.

    Dans un diagramme de modélisation, cliquez sur un élément, commentaire ou une relation, puis lien vers l’élément de travail.In a modeling diagram, right-click an element, comment or relationship and then click Link to Work Item.

  3. Ajoutez à la suite de tests des cas de test qui vérifient l'impératif exprimé dans l'élément de modèle.Add to the test suite, test cases that verify the requirement expressed in the model element.

Voir aussiSee Also

Créer des modèles pour votre application Create models for your app
Modéliser les besoins des utilisateurs Model user requirements
Modèle d’architecture de votre application Model your app's architecture
Analyse et modélisation de l’architectureAnalyzing and Modeling Architecture