Tests d’acceptation utilisateur (UAT) : Processus, liste de contrôle et exemples réels
Un logiciel peut réussir tous les tests et échouer quand même pour les personnes qui en ont besoin. L’UAT est la vérification finale qu’elle résout le véritable problème commercial. Découvrez qui doit le diriger, comment le planifier et quand le signer.
- Les tests d’acceptation des utilisateurs vérifient que les logiciels répondent aux besoins réels de l’entreprise, à l’aide de scénarios réels.
- Il est géré par les utilisateurs professionnels ou les clients, et non par l’équipe qui a créé le logiciel.
- Le contrôle qualité demande « est-ce que cela fonctionne comme spécifié ? », tandis que l’UAT demande « est-ce que cela résout le problème ? ».
- Convenez des critères d’entrée, des critères de sortie et de la personne qui signe avant le début de l’UAT.
Une équipe livre un jour un système de dépenses qui réussit tous les tests techniques. Dès le premier jour, l’équipe financière découvre qu’elle ne peut pas gérer les créances multidevises, qui représentent une grande partie de son travail. Rien n’était “cassé”, mais ce n’était pas utilisable. Les tests d’acceptation des utilisateurs existent pour combler exactement ce type d’écart avant le lancement.
Ce guide explique en quoi l’UAT diffère des autres tests, comment l’exécuter étape par étape et comment décider quand vous êtes prêt à le publier. Le scénario ci-dessus et les exemples ci-dessous sont illustratifs et le processus doit être adapté à votre projet.
Qu’est-ce que l’UAT ?
L’UAT constitue généralement la phase de test finale avant la sortie, au cours de laquelle les utilisateurs prévus confirment que le logiciel peut faire son travail dans des conditions réalistes. On l’appelle également test utilisateur final ou test d’acceptation. Cela intervient après le développement et les tests du système, lorsque le produit est censé être stable.
Son but n’est pas de trouver tous les bugs. À ce stade, la plupart d’entre eux devraient déjà avoir disparu. L’objectif est la validation : avons-nous construit la bonne chose ? Les testeurs vérifient que le produit correspond aux spécifications. L’UAT valide que la spécification et le produit répondent réellement au besoin.
Tests UAT vs QA
| Aspect | Tests d’assurance qualité ou de système | UAT |
|---|---|---|
| Question principale | Est-ce que ça fonctionne comme spécifié ? | Est-ce que cela répond au besoin de l’entreprise ? |
| Interprété par | Testeurs et ingénieurs QA | Utilisateurs professionnels ou clients |
| Calendrier | Pendant et après le développement | Juste avant la sortie |
| Basé sur | Exigences et conceptions | De vrais flux de travail d’entreprise |
| Concentrez-vous | Défauts, cas extrêmes, intégrations | Convivialité et adéquation à l’usage prévu |
| Connaissances techniques | Souvent élevé | Pas nécessaire |
| Résultat | Rapports de bogues | Acceptation ou rejet |
L’UAT ne remplace pas les autres tests. Si les utilisateurs continuent de rencontrer des bugs de base, la version n’était pas prête et vous perdez leur temps limité. Ces problèmes appartiennent aux niveaux de test antérieurs et aux tests de régression.
Qui dirige l’UAT ?
| Rôle | Responsabilité |
|---|---|
| Utilisateurs finaux | Exécutez des scénarios et donnez votre avis |
| Product Owner ou analyste commercial | Définit la portée et rédige ou examine les scénarios |
| Coordonnateur UAT ou responsable de l’assurance qualité | Planifie les sessions, accompagne les testeurs, suit les problèmes |
| Développeurs | Résoudre les problèmes et répondre aux questions techniques |
| Commanditaire d’entreprise | Prend la décision finale d’approbation |
Choisissez des testeurs qui font vraiment le travail aujourd’hui. Un gestionnaire de sinistres expérimenté détectera des problèmes qu’un gestionnaire ou un mandataire ne détecterait jamais. Incluez une gamme d’expériences, car un nouvel employé révèle souvent des étapes déroutantes qu’un expert contourne sans s’en apercevoir. Et assurez-vous que leurs responsables libèrent du temps pour cela, car l’UAT ne peut pas réussir avec une charge de travail complète.
Types d’UAT
| Tapez | Ce qu’il vérifie | Exemple |
|---|---|---|
| Acceptation commerciale | Répond aux objectifs commerciaux | Le personnel complète une véritable réclamation du début à la fin |
| Tests alpha | Tests internes dans un cadre contrôlé | Le personnel essaie une nouvelle application avant les utilisateurs externes |
| Test bêta | De vrais clients dans des conditions réelles | Un aperçu public limité |
| Acceptation du contrat | Répond aux conditions contractuelles convenues | Un client vérifie un système livré |
| Acceptation réglementaire | Répond aux règles légales ou de conformité | Vérification des règles de santé ou bancaires |
| Acceptation opérationnelle | Prêt à fonctionner en production | Processus de sauvegarde, de surveillance et de support |
Le processus UAT en sept étapes
1. Définir la portée et les objectifs
Décidez de ce qui est accepté, de ce qui est hors de portée et des résultats commerciaux qui comptent. Par exemple : « Le personnel financier peut soumettre, approuver et payer une note de frais, dans n’importe quelle devise prise en charge. »
2. Convenez des critères d’acceptation
Écrivez en langage simple à quoi ressemble le succès, idéalement au début du projet plutôt que la semaine précédant le lancement. Des critères vagues conduisent ensuite à des disputes.
3. Choisir et briefer les testeurs
Sélectionnez de vrais utilisateurs, expliquez-leur le but, montrez-leur comment enregistrer les commentaires et indiquez clairement qu’ils testent le logiciel plutôt que d’être testés eux-mêmes. Beaucoup de gens craignent de se tromper.
4. Préparer l’environnement et les données
L’environnement UAT doit ressembler autant que possible à la production. Utilisez des données réalistes, configurez les rôles d’utilisateur appropriés et vérifiez les intégrations telles que la messagerie électronique. Si vous copiez des données de production, masquez d’abord les informations personnelles. Exécutez un smoke test rapide, afin que les testeurs n’arrivent pas à trouver une version cassée.
5. Écrivez des scénarios
Basez-les sur des flux de travail réels plutôt que sur des boutons individuels. Ils devraient lire comme le travail, pas comme le logiciel. Notre guide sur le cas de test par rapport au scénario de test explique le niveau de détails dont vous avez besoin.
6. Exécutez les tests et collectez des commentaires
Organisez des sessions avec une personne disponible pour vous aider. Regroupez les problèmes en un seul endroit, avec des captures d’écran. Prévoyez également du temps pour l’exploration libre, car les gens essaient des choses que les scripts n’ont jamais anticipées. Les tests exploratoires proposent des techniques utiles pour cela.
7. Corrigez, retestez et déconnectez-vous
Triez les commentaires, corrigez ce qui compte et demandez aux mêmes utilisateurs de confirmer les correctifs. Enregistrez ensuite une décision formelle.
Un cas de test UAT
Un cas de test UAT devrait être facile à suivre pour une personne non technique. Voici un exemple de système de dépenses :
ID: UAT-012
Scenario: Submit a foreign currency expense claim
User role: Sales employee
Before: Logged in, with a USD receipt ready
Steps:
1. Create a new expense claim
2. Enter a client dinner of 80 USD and attach the receipt
3. Submit the claim for approval
Expected: The amount is converted to INR at the current rate
The manager receives an approval request
The claim shows as "Awaiting approval"
Result: Pass / Fail
Comments:
Tester / Date:
A noter qu’il décrit une tâche réelle, pas des détails techniques, et qu’il laisse place aux commentaires. Ces commentaires s’avèrent souvent être la partie la plus précieuse, comme « cela fonctionne, mais je ne trouverais jamais ce bouton ».
Conseil : Regardez au moins un utilisateur faire cela en personne ou lors d’un appel. Les gens travaillent souvent autour de logiciels déroutants et ne le signalent jamais. Les voir hésiter vous en dit plus qu’un « Pass » ne le fera jamais.
Critères d’entrée et de sortie
| Critères d’entrée (prêt à commencer) | Critères de sortie (prêt à terminer) |
|---|---|
| Les tests du système sont terminés | Tous les scénarios critiques ont été exécutés |
| Aucun bug ouvert critique ou élevé | Aucun bug critique ouvert |
| L’environnement et les données sont prêts | Le taux de réussite convenu a été atteint |
| Les scénarios sont revus | Les problèmes restants ont un plan convenu |
| Les testeurs sont briefés et disponibles | Le sponsor commercial a signé |
Ceux-ci s’inscrivent dans le cycle de vie des tests logiciels plus large. Définissez les chiffres avec vos parties prenantes à l’avance. « Nous déciderons quand cela nous semblera approprié » a tendance à conduire à un oui précipité, motivé par le délai.
Gestion des commentaires
Les retours UAT sont un mélange de choses, et tout n’est pas un bug. Triez-le en catégories :
| Tapez | Exemple | Action habituelle |
|---|---|---|
| Défaut | Le total est mal calculé | Correctif, en fonction de la gravité |
| Exigence manquée | Le multidevise n’est pas pris en charge | Corriger avant le lancement ou replanifier |
| Problème d’utilisabilité | Les utilisateurs ne trouvent pas le bouton d’envoi | Cela vaut souvent la peine d’être réparé |
| Demande de changement | “Pourrait-il également exporter au format PDF ?” | Ajouter au retard |
| Problème de formation | La fonctionnalité fonctionne, mais a été mal comprise | Guides de mise à jour |
Utilisez des règles claires pour déterminer ce qui bloque une version, comme décrit dans gravité vs priorité. Et répondez à chaque élément, y compris ceux que vous refusez. Les gens arrêtent de donner leur avis si celui-ci semble disparaître. Notre guide sur comment rédiger un rapport de bug peut aider les testeurs à décrire clairement les problèmes.
Liste de contrôle UAT
Avant l’UAT
- Les critères de portée et d’acceptation sont convenus par écrit
- Les tests système et de régression sont terminés
- Les testeurs sont choisis, briefés et disposent de temps
- L’environnement, les comptes et les données réalistes sont prêts
- Les données personnelles contenues dans les copies ont été masquées
- Les scénarios sont revus par le business
- Un endroit pour enregistrer les problèmes est mis en place
- Le propriétaire de la signature est nommé
Pendant l’UAT
- Un contact d’assistance est disponible
- Les problèmes sont triés quotidiennement
- Les progrès sont partagés avec les parties prenantes
- Les correctifs sont déployés et retestés de manière contrôlée
Après l’UAT
- Les critères de sortie ont été vérifiés
- Les problèmes connus sont documentés, avec les propriétaires
- L’approbation formelle est enregistrée
- Les notes de formation et de version sont mises à jour
- Une courte rétrospective a eu lieu
UAT dans les équipes Agile
L’UAT traditionnelle se présente comme une grande phase finale, où une surprise coûte cher. Les équipes agiles raccourcissent cette boucle. Les propriétaires de produits examinent chaque histoire par rapport à ses critères d’acceptation pendant le sprint, et les utilisateurs voient le logiciel fonctionnel lors des revues de sprint. De nombreuses équipes exécutent encore un UAT ciblé avant une version majeure, en particulier lorsque plusieurs fonctionnalités sont combinées en un seul flux de travail.
Avec des versions fréquentes, des techniques telles que les indicateurs de fonctionnalités et les déploiements Canary permettent aux vrais utilisateurs d’essayer progressivement de nouveaux travaux. Notez que ceux-ci complètent les tests d’acceptation, mais ne les remplacent pas automatiquement, en particulier dans les secteurs réglementés qui ont besoin d’un enregistrement formel.
Erreurs courantes
- Le traiter comme une formalité. Une signature sans réelle utilité ne protège personne.
- Utiliser les mauvais testeurs. Les développeurs et le contrôle qualité ont trop de connaissances sur le système pour représenter les utilisateurs.
- Commencer avec une version instable. Les testeurs perdent rapidement confiance et intérêt.
- Laisser cela jusqu’à la dernière minute. Vous n’avez alors pas le temps de corriger ce que vous apprenez.
- Utilisation de données irréalistes. Les données de test présentent rarement les cas compliqués que connaît le travail réel.
- Laisser la portée s’élargir. Traitez les nouvelles idées comme des demandes de changement, à moins qu’elles ne soient de véritables bloqueurs.
Pour conclure
L’UAT est votre dernière chance de savoir, avant sa sortie, si le logiciel aide réellement les personnes qui l’utiliseront. Planifiez-le dès le début d’un projet, recrutez de vrais utilisateurs et convenez de ce à quoi ressemble le succès. Pour votre prochaine version, essayez un changement simple : asseyez-vous avec un utilisateur pendant un scénario réel et ne dites rien pendant qu’il travaille.
Questions fréquentes
Qu’est-ce que les tests d’acceptation des utilisateurs en termes simples ?
Il s’agit de la vérification finale au cours de laquelle de vrais utilisateurs essaient le logiciel avec des tâches réalistes pour confirmer qu’il répond à leurs besoins, avant sa sortie.
Qui est responsable de l’UAT ?
Les utilisateurs professionnels ou les clients exécutent les tests. Un propriétaire de produit ou un responsable de l’assurance qualité coordonne généralement, et un sponsor commercial prend généralement la décision finale d’approbation.
Quelle est la différence entre l’UAT et les tests système ?
Les tests du système vérifient que le logiciel fonctionne comme spécifié et sont effectués par des testeurs. L’UAT vérifie qu’elle répond aux besoins de l’entreprise et est effectuée par les utilisateurs.
Quand l’UAT se produit-elle ?
Généralement après les tests du système et avant la sortie de production, une fois que le logiciel est stable. Les équipes agiles peuvent également effectuer des contrôles d’acceptation plus petits à chaque sprint.
L’UAT peut-elle être automatisée ?
Certaines parties, telles que les contrôles répétés des flux de travail de l’entreprise. Cependant, pour juger si un logiciel est utile et adapté à son objectif, il faut toujours de vraies personnes.
Continuez à apprendre
Besoin d’aide pour les tests, WordPress ou le référencement ?
Nous aidons les équipes à proposer de meilleurs logiciels et à développer leurs sites. Dites-nous sur quoi vous travaillez et nous vous proposerons une prochaine étape claire.
Plus de guides sur tests, IA et développement moderne
Vous avez apprécié cet article ? Choisissez un sujet et accédez directement à nos nouveaux didacticiels.
Les hallucinations de l'IA expliquées : pourquoi les modèles de langage inventent les choses et comment les réduire
Les hallucinations de l'IA ont expliqué : ce qu'elles sont, pourquoi les modèles de langage les produisent, les types courants, comment les réduire …
Lire l'article →DevOpsVariables d'environnement expliquées : fichiers .env, secrets et configuration correctement effectués
Variables d'environnement expliquées avec des exemples Python que nous avons exécutés : lecture et définition, pourquoi chaque valeur est une chaîne…
Lire l'article →Développement logicielLimitation du débit de l'API expliquée : algorithmes, en-têtes et gestion des erreurs 429
Limitation du débit de l'API expliquée avec une simulation que nous avons exécutée : compartiment de jetons, fenêtre fixe, fenêtre glissante, 429 ré…
Lire l'article →Automatisation des testsSe moquer en Python : unittest.mock, patch et les erreurs qui font mentir les tests
Moquerie en Python avec unittest.mock, testée : Mock et return_value, side_effect, correctifs où un nom est utilisé, spec et autospec, dates moqueus…
Lire l'article →Tests logicielsCouverture du code expliquée : couverture des lignes par rapport aux branches et ce que signifie réellement 100 %
Couverture du code expliquée avec une véritable exécution de cover.py : couverture des lignes, des branches et des conditions, lecture d'un rapport,…
Lire l'article →Bases de données et SQLDELETE vs TRUNCATE vs DROP dans SQL : différences, restauration et quand les utiliser
DELETE vs TRUNCATE vs DROP expliqué avec SQL testé : ce que chacun supprime, restauration, déclencheurs, réinitialisation d'identité, vitesse et en …
Lire l'article →Bases de données et SQLVues SQL expliquées : créez, utilisez et évitez les pièges, avec des exemples
Vues SQL expliquées avec les requêtes que nous avons exécutées : création d'une vue, résultats en direct, masquage des colonnes, performances, vues …
Lire l'article →Développement logicielInterface TypeScript vs Type : différences réelles, testées avec le compilateur
Interface TypeScript vs type, vérifiée avec le vrai compilateur : ce que les deux peuvent faire, ce qu'un seul peut faire, la fusion des déclaration…
Lire l'article →Développement logicielPython *args et **kwargs expliqués : fonctions flexibles avec des exemples clairs
Python *args et **kwargs expliqués avec le code que nous avons exécuté : emballage et déballage, ordre des paramètres, arguments de mot-clé uniqueme…
Lire l'article →Développement logicielFonctions Python Lambda : syntaxe, utilisations réelles et quand ne pas les utiliser
Fonctions Python lambda expliquées avec le code que nous avons exécuté : syntaxe, tri avec clé, carte et filtre, fermetures, piège de liaison tardiv…
Lire l'article →Intelligence artificielleQue sont les agents IA ? Comment ils fonctionnent, avec une simple boucle d'agent que vous pouvez exécuter
Que sont les agents IA ? Un guide simple sur la boucle d'agent, les outils, la mémoire et les garde-fous, avec une petite boucle Python que nous avo…
Lire l'article →DevOpsSurveillance vs observabilité : la vraie différence, avec les journaux, les métriques et les traces
Surveillance et observabilité expliquées : échecs connus et inconnus, journaux, métriques et traces, présentation pas à pas des incidents de paiemen…
Lire l'article →DevOpsVolumes Docker vs montages Bind : conserver les données du conteneur de la bonne manière
Volumes Docker et montages de liaison expliqués : pourquoi les données du conteneur disparaissent, volumes nommés, montages de liaison, tmpfs, exemp…
Lire l'article →Automatisation des testsTDD vs BDD : principales différences, une fonctionnalité conçue dans les deux sens et quand les utiliser
TDD vs BDD expliqué avec une fonctionnalité de remise construite dans les deux sens : refactor rouge-vert avec le code que nous avons exécuté, scéna…
Lire l'article →Tests logicielsTests d'acceptation utilisateur (UAT) : processus, liste de contrôle et exemples réels
Les tests d'acceptation des utilisateurs sont expliqués : qui les exécute, en quoi ils diffèrent du contrôle qualité, un processus en sept étapes, u…
Lire l'article →Bases de données et SQLExplication des valeurs SQL NULL : IS NULL, COALESCE, NULLIF et les pièges à éviter
Les valeurs SQL NULL expliquées avec les requêtes que nous avons exécutées : logique à trois valeurs, IS NULL, COALESCE, NULLIF, comment les agrégat…
Lire l'article →Bases de données et SQLInstruction SQL CASE WHEN : syntaxe, exemples réels et erreurs courantes
SQL CASE WHEN expliqué avec les requêtes que nous avons exécutées : formulaires simples et recherchés, ordre des conditions, pivots avec SUM, astuce…
Lire l'article →Développement logicielQu'est-ce que JWT ? Les jetons Web JSON expliqués avec un exemple fonctionnel
Qu’est-ce que JWT ? JSON Web Tokens expliqué : les trois parties, un jeton construit et falsifié dans le code que nous avons exécuté, JWT vs session…
Lire l'article →Développement logicielBoucle d'événements JavaScript expliquée : pile d'appels, microtâches et minuteries avec des exemples
La boucle d'événements JavaScript expliquée avec le code que nous avons exécuté : pile d'appels, files d'attente de tâches et de microtâches, pourqu…
Lire l'article →Développement logicielGénérateurs Python et rendement expliqués : économisez de la mémoire avec des exemples réels
Les générateurs Python et le rendement expliqués avec le code que nous avons exécuté : comment ils s'arrêtent et reprennent, les économies de mémoir…
Lire l'article →Intelligence artificielleQue sont les intégrations ? Vecteurs et similarité cosinus expliqués simplement
Que sont les intégrations ? Un guide en langage simple sur les vecteurs, la similarité cosinus et la recherche sémantique, avec un petit exemple que…
Lire l'article →DevOpsDéploiement Bleu-Vert vs Canary : différences, compromis et comment choisir
Explication du déploiement bleu-vert ou canari : comment chacun fonctionne, coût, risque et restauration, regroupement d'utilisateurs stable que nou…
Lire l'article →Automatisation des testsTests instables : quelles sont leurs causes et comment les corriger définitivement
Des tests irréguliers expliqués avec des démos que nous avons exécutées : les principales causes, comment en confirmer et en diagnostiquer une, les …
Lire l'article →Tests logicielsTests de charge vs tests de contrainte : différences, métriques et exemples k6
Explication des tests de charge et des tests de stress : ce que chacun prouve, les tests de pointe et de trempage, les métriques qui comptent, pourq…
Lire l'article →Tests logicielsScénario de test et scénario de test : principales différences, exemples et quand les utiliser
Scénario de test et scénario de test expliqués : des définitions claires, un tableau côte à côte, une fonctionnalité de réinitialisation de mot de p…
Lire l'article →Bases de données et SQLOptimisation des requêtes SQL : lire les plans d'exécution et corriger les requêtes lentes, avec des délais
Optimisation des requêtes SQL testée sur un million de lignes : lire les plans d'exécution, ajouter les bons index, corriger les filtres non Sargabl…
Lire l'article →Bases de données et SQLSQL UNION vs UNION ALL : différences, exemples et performances testées
SQL UNION vs UNION ALL expliqué avec les requêtes que nous avons exécutées : des doublons, les règles suivent toutes les deux, un véritable bug de d…
Lire l'article →Développement logicielTutoriel API JavaScript Fetch : GET, POST, gestion des erreurs et délais d'attente
Un didacticiel de l'API JavaScript Fetch testé sur un serveur local : GET et POST, pourquoi 404 ne lance pas, un assistant réutilisable, des chaînes…
Lire l'article →Développement logicielGestion des fichiers Python : lecture, écriture, CSV, JSON et pathlib avec exemples
Gestion des fichiers Python expliquée avec le code que nous avons exécuté : modes ouverts, avec lecture de fichiers volumineux, CSV, JSON, pathlib, …
Lire l'article →Développement logicielClasses et objets Python : didacticiel POO avec des exemples réels
Classes et objets Python expliqués avec le code que nous avons exécuté : __init__, méthodes, attributs de classe par rapport à l'instance, héritage,…
Lire l'article →Intelligence artificielleQu'est-ce qu'un grand modèle de langage ? Comment fonctionnent les LLM, expliqués sans battage médiatique
Qu’est-ce qu’un grand modèle de langage ? Les LLM expliqués en langage simple : jetons, intégrations, attention, formation, fenêtres de température …
Lire l'article →DevOpsCommandes Linux pour les débutants : le guide du terminal essentiel avec des exemples
Commandes Linux pour débutants, regroupées par tâche : navigation, fichiers, affichage des journaux, grep, tuyaux, autorisations, processus et archi…
Lire l'article →Automatisation des testsSelenium vs Playwright : principales différences, code comparé et lequel choisir
Comparatif Selenium vs Playwright : architecture, attente, support du navigateur et du langage, débogage, même test dans les deux outils, conseils d…
Lire l'article →Tests logicielsPartitionnement d'équivalence : technique de conception de tests expliquée avec des exemples concrets
Le partitionnement d'équivalence expliqué : comment trouver des partitions valides et invalides, des exemples concrets d'âges, de mots de passe et d…
Lire l'article →Tests logicielsGravité vs priorité dans les tests logiciels : différences, matrice et exemples réels
Explication de la gravité et de la priorité dans les tests logiciels : des définitions claires, une matrice à quatre voies avec des exemples, des éc…
Lire l'article →Bases de données et SQLTutoriel sur les sous-requêtes SQL : types, sous-requêtes corrélées et EXISTE avec des exemples
Un didacticiel sur les sous-requêtes SQL avec les requêtes que nous avons exécutées : les sous-requêtes scalaires, IN, FROM et SELECT, les sous-requ…
Lire l'article →Bases de données et SQLTransactions SQL et ACID expliquées : COMMIT, ROLLBACK et niveaux d'isolement
Transactions SQL et ACID expliquées avec un virement bancaire que nous avons effectué : COMMIT, ROLLBACK, points de sauvegarde, verrous, niveaux d'i…
Lire l'article →Développement logicielGit merge vs rebase : différences, exemples et quand utiliser chacun
Git merge vs rebase expliqué avec de vraies sorties de log, un tableau comparatif, la règle d'or du rebase et un flux de travail sûr pour les équipes.
Lire l'article →Développement logicielList comprehension Python : syntaxe, exemples et cas à éviter
La list comprehension Python expliquée : syntaxe, filtres, if-else, boucles imbriquées, temps mesurés et cas où une boucle for classique est préféra…
Lire l'article →Bases de données et SQLJointures SQL expliquées avec exemples (Inner, Left, Right, Full)
Comprenez les jointures SQL pas à pas avec des tables et requêtes d'exemple : INNER, LEFT, RIGHT, FULL, CROSS et SELF, plus erreurs courantes et con…
Lire l'article →