Retour à la liste des articles Articles
14 minutes de lecture

Questions d'entretien SQL pour les testeurs de logiciels

Le langage SQL est une compétence cruciale pour les testeurs de logiciels. Sinon, comment obtiendraient-ils les données à tester ? Les personnes qui vous interviewent pour ces postes peuvent vous poser plusieurs questions sur les tests de logiciels en SQL. Si vous vous préparez à un entretien d'embauche, vous devez donc savoir comment répondre à ces dix questions SQL courantes.

Pourquoi les questions d'entretien pour les tests de logiciels incluent-elles le langage SQL ? Les testeurs de logiciels utilisent couramment le langage de requête structuré dans leurs tâches quotidiennes. Par exemple, ils l'utilisent pour

  • Valider les données entre les applications et les bases de données.
  • Trouver des comptes d'utilisateurs qui répondent aux critères qu'ils doivent tester.
  • Récupérer des données de test dans des bases de données
  • Vérifier les erreurs dans les données enregistrées dans les bases de données.
  • Vérifier la logique commerciale mise en œuvre dans la base de données.

Le mot commun ici est "base de données", qui est le domaine de SQL ; il a été conçu pour traiter les données dans les bases de données.

En raison de son importance dans les tâches quotidiennes des tests de logiciels, le langage SQL figure souvent dans les questions d'entretien sur les tests de logiciels. Les questions testent généralement les connaissances théoriques et pratiques de SQL. La meilleure façon de se préparer à l'entretien est de lire les concepts SQL utilisés par les testeurs de logiciels et de résoudre le plus grand nombre possible de défis de codage impliquant ces sujets.

Il est donc fortement recommandé de trouver d'autres articles comme celui-ci ou d'autres listes de questions d'entretien SQL. Vous pouvez également suivre des cours qui se concentrent sur les connaissances dont vous avez besoin, comme notre cours de SQL pour les débutants cours. Les sujets abordés vont de l'extraction de données d'une base de données à la création de rapports de base et au filtrage de données à l'aide de WHERE, en passant par l'utilisation de JOINs, GROUP BY, les sous-requêtes et les opérations ensemblistes. Si vous ne maîtrisez pas encore ces sujets, les plus de 100 exercices de codage de ce cours vous aideront à acquérir les compétences dont vous avez besoin.

Cet article se concentre sur les concepts SQL qui sont importants pour les tests de logiciels. Si vous n'êtes pas déjà familier avec SQL, je vous conseille d'avoir notre memento SQL pour les débutants à portée de main pour une référence rapide.

1. Quelle est la structure de base d'une requête SQL ?

Réponse : La requête SQL de base est une instruction SELECT avec une clause FROM, comme indiqué ci-dessous :

SELECT 
  column_1,
  column_2,
  …
FROM table_name;

Une requête SQL ne peut fonctionner sans ces deux clauses :

  • SELECT - Liste la ou les colonnes à extraire de la table.
  • FROM - Spécifie la table à partir de laquelle la (les) colonne(s) de SELECT sera (seront) récupérée(s).

Toutefois, une requête SQL comprend très souvent d'autres clauses (facultatives). Une requête un peu moins basique ressemblerait à ceci :

SELECT 
  column_1,
  column_2,
  …,
  aggregated_column
FROM table_name
WHERE column_1 condition
GROUP BY column_1, column_2, …
HAVING aggregated_column condition
ORDER BY column_1 [ASC|DESC];

Voici une explication de chaque clause supplémentaire.

  • WHERE: Vérifie les valeurs de la (des) colonne(s) spécifiée(s) et renvoie les lignes dont les valeurs satisfont à la condition. Utilisé pour filtrer les données avant
  • GROUP BY: Organise les données en fonction des valeurs des colonnes spécifiées.
  • HAVING: vérifie les valeurs dans la (les) colonne(s) agrégée (s) spécifiée(s) et renvoie les lignes dont les valeurs remplissent la condition. Utilisé pour filtrer les données après
  • ORDER BY: Trie les résultats en fonction de colonnes spécifiques par ordre croissant (de la valeur numérique la plus faible à la plus élevée ; par ordre alphabétique pour les chaînes de caractères ; de la date la plus ancienne à la plus récente) ou décroissant (de la valeur numérique la plus élevée à la plus faible ; par ordre alphabétique inversé pour les chaînes de caractères ; de la date la plus récente à la plus ancienne).

2. Comment modifier les données d'une base de données ?

Réponse : Les testeurs modifient parfois les données d'une base de données pour créer une condition de test spécifique. Les questions sur la modification des données sont donc assez fréquentes dans les entretiens avec les testeurs de logiciels.

Vous pouvez insérer des données dans une base de données à l'aide de l'instruction INSERT. Vous modifiez les données existantes dans une base de données avec l'instruction UPDATE. Vous supprimez des données d'une base de données à l'aide de l'instruction DELETE.

L'instruction INSERT insère une ou plusieurs nouvelles lignes de données dans une table en utilisant cette syntaxe :

INSERT INTO table_name (column_1, column_2, column_3, …) 
VALUES (value_1, value_2, value_3, …);

L'instruction UPDATE modifie les valeurs existantes d'une colonne d'une table de base de données. Voici la syntaxe :

UPDATE table_name
SET column_name = value
WHERE condition;

L'instruction DELETE efface une ou plusieurs lignes de la table en utilisant cette syntaxe :

DELETE
FROM table_name
WHERE condition; 

Pour d'autres sujets de questions d'entretien sur les tests de logiciels, vous pouvez travailler sur certaines de ces 22 pratiques de commandes SQL avant l'entretien.

3. Trouver les comptes d'utilisateurs qui répondent à certains critères

Description du problème : Imaginez que vous travaillez avec le tableau app_users tableau ci-dessous et que vous voulez le tester en utilisant certaines de ses données. Ces données doivent inclure uniquement

  • Les utilisateurs actifs qui
  • se sont inscrits en 2024, et
  • ont plus de 100 $ sur leur compte.

Comment écririez-vous la requête pour trouver ces utilisateurs ? Tout d'abord, examinons un échantillon de données :

idusernameemailregistration_dateuser_typestatusaccount_balance
1mjohnsonmjohnson@gmail.com2024-02-08adminactive25.00
2sstevenssstevens@gmail.com2023-05-08regular_useractive528.49
3bkingbking@gmail.com2023-09-12regular_userinactive0.00
4adedicadedic@gmail.com2024-07-04adminactive184.22
5blavetteblavette@gmail.com2024-11-03regular_useractive208.50

Solution : Pour résoudre le problème qui vous est posé, vous devez écrire la requête suivante qui comporte trois conditions à l'adresse WHERE:

SELECT 
  id,
  username,
  email,
  registration_date,
  user_type,
  status,
  account_balance
FROM app_users
WHERE status = 'Active'
  AND registration_date > '2023-12-31'
  AND account_balance > 100;

Cette requête sélectionne toutes les colonnes de la table app_users. Elle utilise ensuite WHERE et trois conditions de filtrage avec les opérateurs logiques et de comparaison.

La première condition est que le statut soit actif, donc les valeurs de la colonne status doivent être égales (=; l'opérateur de comparaison) à la valeur 'active'. Remarque: cette opération filtre les données textuelles, de sorte que la valeur doit être écrite entre guillemets simples (').

La deuxième condition de filtrage est que la date d'enregistrement doit être postérieure à (l'opérateur de comparaison > ) 2023-12-31, c'est-à-dire que l'utilisateur s'est enregistré en 2024. Remarque : cette méthode filtre les dates, qui doivent également être écrites entre guillemets simples.

Enfin, la troisième condition vérifie que le solde du compte de l'utilisateur est supérieur à 100. Cette condition utilise à nouveau l'opérateur de comparaison plus grand que (>). Ici, la valeur est écrite sans guillemets simples car il s'agit d'une valeur numérique.

Les trois conditions devant être remplies simultanément, nous les "enchaînons" sur WHERE en utilisant deux opérateurs logiques AND.

Il s'agit d'une question d'entretien courante, c'est pourquoi je vous conseille de vous entraîner sur ce sujet en utilisant ces 20 exercices SQL WHERE pour les débutants.

Résultat : La sortie montre deux utilisateurs qui satisfont aux trois critères.

idusernameemailregistration_dateuser_typestatusaccount_balance
4adedicadedic@gmail.com2024-07-04adminactive184.22
5blavetteblavette@gmail.com2024-11-03regular_useractive208.50

4. Trier les valeurs de sortie

Description du problème : L'interviewer pourrait vous demander de trier les résultats obtenus à la question précédente, de la date d'inscription la plus récente à la plus ancienne.

Solution : Pour ce faire, vous avez besoin d'une clause ORDER BY à la fin de la requête.

SELECT id,
       username,
       email,
       registration_date,
       user_type,
       status,
       account_balance
FROM app_users
WHERE status = 'active'
  AND registration_date > '2023-12-31'
  AND account_balance > 100
ORDER BY registration_date DESC;

Pour trier les résultats par date d'inscription, il suffit d'ajouter une clause ORDER BY avec la colonne registration_date à la fin de la requête précédente. Vous devez trier de la date d'enregistrement la plus récente à la plus ancienne - c'est-à-dire trier par ordre décroissant - donc n'oubliez pas d'écrire DESC après le nom de la colonne.

Résultat : Voici le résultat trié :

idusernameemailregistration_dateuser_typestatusaccount_balance
5blavetteblavette@gmail.com2024-11-03regular_useractive208.50
4adedicadedic@gmail.com2024-07-04adminactive184.22

5. Trouver les valeurs les plus élevées et les plus basses

Description du problème : Une question d'entretien SQL très courante pour les testeurs d'assurance qualité consiste à trouver les valeurs les plus élevées et les plus basses dans un ensemble de données.

Plus précisément, disons que l'on vous demande de trouver le montant le plus bas et le montant le plus élevé de tous les comptes d'utilisateurs en interrogeant la même table que précédemment. Une fois que vous avez obtenu ces valeurs, vous pouvez vérifier les données dans l'application pour voir si certains comptes sont inférieurs ou supérieurs à ces valeurs.

Solution : Pour résoudre ce problème, vous avez besoin de deux fonctions agrégées : MIN() et MAX(). Leur syntaxe est simple ; il suffit d'écrire le nom de la colonne dont vous souhaitez obtenir la valeur minimale/maximale entre les parenthèses de la fonction.

SELECT 
  MIN(account_balance) AS minimum_account_balance,
  MAX(account_balance) AS maximum_account_balance
FROM app_users;

Pour rendre la sortie plus lisible, nous pouvons créer des alias pour les colonnes agrégées en écrivant le mot-clé AS suivi de l'alias de la colonne.

Résultat : Voici le résultat :

minimum_account_balancemaximum_account_balance
0528.49

6. Qu'est-ce qu'un JOIN en SQL, et quels sont les Les jointures en SQL que vous connaissez ?

Réponse : JOIN est une clause utilisée pour combiner deux tables ou plus en SQL.

La syntaxe est illustrée ci-dessous :

SELECT 
  table_1.column_1,
  table_2.column_2,
  …
FROM table_1
JOIN table_2
ON table_1.common_column = table_2.common_column;

La première table jointe est répertoriée dans FROM, et la seconde dans JOIN. Les tables sont jointes sur la colonne commune et cette condition de jointure est écrite dans la clause ON.

En SQL, il existe cinq JOINs:

  • (INNER) JOIN
  • LEFT (OUTER) JOIN
  • RIGHT (OUTER) JOIN
  • FULL (OUTER) JOIN
  • CROSS JOIN

INNER JOIN renvoie uniquement les lignes correspondantes des tables jointes.

LEFT JOIN renvoie toutes les lignes de la première table (gauche) et les lignes correspondantes de la deuxième table (droite). Les valeurs non correspondantes de la table de droite sont affichées à l'adresse NULL.

RIGHT JOIN est l'image inversée de LEFT JOIN. Il renvoie toutes les lignes du deuxième tableau (droit) et les lignes correspondantes du premier tableau (gauche). Les valeurs non correspondantes de la table de gauche sont affichées sous la forme NULL.

FULL JOIN est une combinaison de LEFT JOIN et RIGHT JOIN; il renvoie toutes les lignes des tables de gauche et de droite. Les valeurs non appariées de l'une ou l'autre table sont affichées à l'adresse NULL.

CROSS JOIN combine chaque ligne d'une table avec toutes les lignes de l'autre table, ce qui donne un produit cartésien (c'est-à-dire toutes les combinaisons possibles de lignes).

Il s'agit là d'une connaissance cruciale du langage SQL ; vous pouvez en apprendre davantage à ce sujet grâce à ces 10 questions et réponses d'entretien sur les JOIN SQL.

7. Produire des données correspondantes à partir de deux tables

Description du problème : Une fois de plus, on vous donne la table app_users table. Vous disposez également du tableau session_data qui contient des informations sur chaque session de l'application. Un extrait de ce tableau est présenté ci-dessous :

idapp_user_idsession_startsession_end
112024-10-30 6:05:282024-10-30 6:25:52
222024-10-30 12:58:492024-10-30 14:07:07
312024-10-31 4:22:122024-10-31 5:12:43
422024-10-31 9:51:122024-10-31 9:58:24
552024-11-03 21:36:392024-11-03 23:18:25

Votre tâche consiste à dresser la liste des identifiants des utilisateurs, de leurs noms d'utilisateur et des heures de début et de fin de leurs sessions afin de pouvoir tester ces données. N'incluez pas les noms d'utilisateurs qui n'ont eu aucune session dans l'application.

Solution : Le problème nécessite l'utilisation de données provenant des deux tables, vous devez donc les joindre. Cependant, quel type de jointure devez-vous utiliser ? La réponse est INNER JOIN. Pourquoi ? Parce qu'il ne renvoie que les lignes correspondantes, c'est-à-dire uniquement les utilisateurs qui peuvent être trouvés dans les deux tables. S'ils sont présents dans les deux tables, cela signifie qu'ils ont au moins une session enregistrée dans la table session_data.

SELECT 
  au.id AS user_id,
  au.username,
  sd.session_start,
  sd.session_end
FROM app_users au
JOIN session_data sd
ON au.id = sd.app_user_id;

La première table jointe est référencée dans FROM et reçoit l'alias au (les alias ne sont pas obligatoires, mais ils permettent de raccourcir le nom de la table lorsque vous devez la référencer à nouveau). Pour joindre la deuxième table, ajoutez le mot-clé JOIN (ou INNER JOIN; ils ont la même signification en SQL) et écrivez le nom de la table.

Les tables sont jointes sur la colonne commune. Dans ce cas, il s'agit de id de la première table et de app_user_id de la deuxième table.

Vous pouvez maintenant sélectionner toutes les colonnes nécessaires dans les deux tables. Pour comprendre facilement quelle colonne provient de quelle table, faites précéder le nom de la colonne du nom de la table (ou de l'alias de la table) suivi d'un point : table_name.row_name.

Résultat : La sortie montre cinq sessions pour trois utilisateurs :

user_idusernamesession_startsession_end
1mjohnson2024-10-30 6:05:282024-10-30 6:25:52
2sstevens2024-10-30 12:58:492024-10-30 14:07:07
1mjohnson2024-10-31 4:22:122024-10-31 5:12:43
2sstevens2024-10-31 9:51:122024-10-31 9:58:24
5blavette2024-11-03 21:36:392024-11-03 23:18:25

8. Catégories dont le stock est supérieur à 100

Description du problème : Vous disposez du tableau products pour répondre à cette question d'entretien sur les tests de logiciels. En voici un aperçu :

idproduct_nameproduct_categorystock_quantity
1Wireless earbudsElectronics518
2Vacuum cleanerAppliances208
3TreadmillSports12
4USB-C cableElectronics121
5DishwasherAppliances80
6Exercise bikeSports17
7Wireless boomboxElectronics94
8Washing machineAppliances103
9Yoga matSports54

Vous voulez éditer les catégories de produits et leur quantité totale en stock, mais seulement pour les catégories dont le stock total est supérieur à 100. Vous en aurez besoin pour vérifier si les données sont correctement enregistrées dans l'application d'inventaire.

Solution : La solution utilise la fonction agrégée SUM() pour additionner la quantité totale en stock. Pour obtenir ce calcul par catégorie de produit, sélectionnez la colonne product_category et regroupez les résultats par la même colonne dans GROUP BY.

Pour afficher les catégories dont le stock total est supérieur à 100, le filtrage doit être effectué après l'agrégation. Pour cette raison, vous devez utiliser HAVING pour le filtrage. (N'oubliez pas que WHERE ne sert qu'à filtrer avant l'agrégation). Dans HAVING, vous écrirez à nouveau la colonne d'agrégation qui calcule la quantité totale de stock, à condition que seules les valeurs supérieures à 100 soient incluses dans la sortie.

Résultat : Il y a deux catégories de produits qui satisfont la condition HAVING:

product_categorytotal_stock_quantity
Appliances391
Electronics733

9. Qu'est-ce qu'une clé primaire dans une base de données ?

Réponse : Une clé primaire est une contrainte créée sur la colonne, identifiant de manière unique chaque ligne de la table en n'acceptant pas les valeurs dupliquées et NULLs.

Elle a plusieurs objectifs importants :

  • S'assurer qu'il n'y a pas de données en double ou manquantes dans cette colonne.
  • Fournir un moyen d'identifier de manière unique chaque ligne de la table.
  • Établir une relation avec une autre table par le biais d'une clé étrangère.
  • garantir l'accessibilité des données d'une table au niveau de la ligne.

Pour en savoir plus sur les clés, consultez notre article intitulé Pourquoi utiliser des clés primaires et des clés étrangères dans les bases de données ?

10. Quels sont les moteurs de base de données que vous utilisez ?

Description du problème : On peut vous demander avec quels moteurs de base de données vous avez travaillé. Cette question quelque peu étrange et facile peut vous surprendre si vous n'y avez jamais réfléchi.

Réponse : Tous les moteurs de base de données SQL ne sont pas identiques. Le(s) moteur(s) de base de données que vous utilisez a(ont) son(leur) importance, surtout s'il(s) est(sont) celui(s) que vous utiliserez dans le cadre d'un emploi potentiel. Assurez-vous de connaître les moteurs de base de données les plus populaires. Cela est important non seulement en raison des différences techniques entre les outils, mais aussi en raison des différences entre les dialectes SQL utilisés par ces moteurs.

Plus important encore, sachez lequel de ces moteurs vous avez utilisé dans vos précédents projets ou fonctions. L'examinateur peut être intéressé par les moteurs de base de données que vous connaissez.

Prêt à maîtriser ces questions de tests logiciels SQL ?

Ces dix questions d'entretien vous ont donné une bonne idée de ce à quoi ressemblent les questions d'entretien SQL pour les testeurs de logiciels. Attendez-vous à un mélange de questions théoriques et de tâches SQL pratiques.

Les sujets que nous avons abordés sont des connaissances SQL de base. Si vous voulez réussir votre entretien SQL, assurez-vous d'être à l'aise avec tout ce que j'ai mentionné dans l'article. Pour consolider vos connaissances fondamentales en SQL, je vous recommande vivement d'essayer nos tests SQL pour les débutants et Comment modifier une base de données avec SQL puis de revoir tout ce qui se trouve sur le site La pratique du SQL.