Série d’exercice de recall pour toute la session

Ces exercices servent de recall. Ce ne sont pas forcément des questions typiques d’examens, l’objectif étant plutot de faire un survol rapide la matière vue durant la session. Ce survol n’est pas non plus exhaustif.

Tests unitaires

  1. Que représentent les 3 A?
  2. Quelle est la différence entre des assertions logiques et physiques?
  3. ¤ Combien d’assertions logiques devraient avoir un test? Combien de physiques?
  4. ¤ Qu’est-ce qu’un test unitaire en blackbox?
  5. Écrivez un test unitaire qui n’est pas en blackbox (imaginez un cas)
  6. ¤ Refaite l’exercice de la pile en 10 minutes maximum. Vous devriez avoir au minimum 5 tests d’écrits. Prennez un 3 minutes supplémentaires pour écrire toutes les bonnes pratiques de tests unitaires que vous avez utilisés durant cet exercice.
  7. Quelle est la différence entre le TDD et les tests unitaires?
  8. On dit que le TDD est d’avantage une technique qui permet de faire du design et de l’architecture. Pourquoi?
  9. Mon test unitaire a 40 lignes de “setup” au début. Quel principe SOLID n’est probablement pas respecté?
  10. Comment se manifeste un non-respect du TDA dans un test unitaire?
  11. Quels sont les 2 rôles des mocks dans les tests unitaires?
  12. Quand devons-nous utiliser un any() dans la configuration d’un mock (dans un “given”)?
  13. Quand devons-nous utiliser un any() dans la vérification d’un mock (dans un “then”)?
  14. Imaginer un bon cas d’utilisation d’un never() et écrivez ce test.
  15. “Don’t mock concret classes”. Pourquoi? Nommez aussi une bonne raison de mocker une classe concrète.

OO

  1. Nommez les principes SOLID + T
  2. Qu’est-ce que le cycle de vie?
  3. ¤ Quel serait le problème à ce que la classe concrète A appelle et instancie la classe concrète B si ces objets n’ont pas le même cycle de vie?
  4. ¤ Quel serait le problème à ce qu’il y ait une interface entre 2 objets qui ont le même cycle de vie?
  5. Dessinez un diagramme où une classe A utilise une interface B qui a 2 implémentations.
    • Dessinez le flot de compilation
    • Dessinez le flot d’execution
  6. En quoi est-ce qu’une interface peut stopper une vague de propagation de changement (ripple effects)?
  7. ¤ Créez une interface qui “leak” une abstraction (en UML ou en code)
  8. Qu’est-ce que la primitive obsession?
  9. ¤ Dans une classe Patient (dans un contexte médical), on a une attribut “private String chambre”. Donnez un cas où c’est une violation de la primitive obsession et un cas où ce ne l’est pas.
  10. Nommez une façon autre qu’une interface de stopper un ripple effect
  11. ¤ Qu’est-ce qui est un couplage plus fort : utilisé une classe concrète directement, ou hériter d’une interface? Pourquoi?
  12. Quel est le principale défaut d’un domaine anémique dans le cas d’une application avec un domain riche?
  13. ¤ Si j’ai un train wreck du genre a.getB().getC(), est-ce que j’ai forcément une violation du TDA? Si oui, pourquoi? Si non, nommez un contre-exemple.
  14. Une interface doit être “conçue en fonction de son client”. Sinon quoi?
  15. Trouvez une formule mathématique pour calculer la cohésion d’une classe
  16. Un constructeur d’un objet a this.creationDate = LocalDateTime.now(). Quel est le problème?
  17. Un value object n’a pas de comportement. Vrai ou faux?
  18. Un value object est nécessairement un DTO. Vrai ou faux?
  19. Un DTO est nécessairement un value object. Vrai ou faux?
  20. Pourquoi est-ce plus dur de régler un problème de LSP qu’un problème d’ISP?
  21. Si un bout de code du domaine a un if (variable instanceof MaClasse), quel principe SOLID n’est pas respecté?
  22. Est-ce possible d’avoir un problème d’ISP sur une classe concrète qui n’a pas d’interface?
  23. “Explain it to me like I’m 5 years-old” : qu’est-ce que le DIP?

Architecture

  1. ¤ Dans un diagramme hexagonal, dessinez ces 4 classes et nommez les couches auxquelles elles appartiennent dans une architecture en DDD : Une resource rest, un application service, une interface de repository, une implémentation d’un repository
  2. Quels sont les 2 rôles principales de la couche d’application service en DDD?
  3. ¤ Le rôle d’un architecte est de minimiser la quantité de décisions prises. Nommez un exemple où vous avez appliqué cette règle dans votre projet de session.
  4. Faites le lien entre chacun des principes SOLID et son impact sur le design d’un API rest.
  5. Quelle est la différence entre une factory et un assembler/mapper?
  6. Mon repository a une méthode “findAllByDate”. Est-ce une bonne chose? Est-ce sa responsabilité?
  7. Est-ce qu’une factory peut être utilisée pour réhydrater un objet?
  8. Quel est le rôle d’un DTO dans un modèle en couche ou hexagonal? Pourquoi est-ce à l’encontre de ce rôle que le DTO soit mutable?
  9. Qu’est-ce qu’un niveau d’abstraction? Comment les reconnaitre?

Tests non-unitaires

  1. On utilise souvent “test unitaire” pour designer le bas de la pyramide ET le quadrant inférieur gauche. Quels sens différents a ce terme dans ces 2 cas?
  2. ¤ Faites une stratégie de test (quadrant + pyramide) pour cette story de votre projet : http://projet2019.qualitelogicielle.ca/carnet/1_acp_achat_passes/
  3. Est-ce qu’un même test unitaire peut se retrouver à plusieurs endroits dans le quadrant? Pourquoi?
  4. Que sont les tests de caractérisation?
  5. Une fois les tests de caractérisation faits dans une application legacy, comment pouvons nous procéder afin de faire du TDD?
  6. Quelle est la différence entre un test moyen et un test d’acceptation? (hint: trick question!)
  7. Qu’est-ce que le boulonnage des tests?
  8. Que sont les tests exploratoires? Donnez un exemple.
  9. Dans quels quadrants se trouvent généralement ces tests? Est-ce toujours le cas?
  10. Est-ce que les tests exploratoires sont testés? Des fois? Jamais? Toujours?
  11. Si tu n’as pas la couche contexte telle que vue dans le cours (ou une couche similaire), quel sera l’effet sur la pyramide de tests? Pourquoi?
  12. Quels sont les proportions à respecter dans la pyramide de tests (en %) ?

Autres

  1. Qu’est-ce que le devops?
  2. ¤ Vous êtes dans une entreprise où il y a une “équipe devops”. Quels arguments apporteriez-vous pour dire que c’est une mauvaise idée?
  3. Quelle est la différence entre le contrôle de la qualité et l’assurance qualité?
  4. Dans un monde idéal, lister 3 tâches d’un QA en entreprise
  5. Quelles sont les différences entre Continuous integration, continous delivery et continuous deployment
  6. Qu’est-ce que le trunk based development, en vos mots, et quels sont les avantages/inconvénients?
  7. ¤ Trouvez le plus d’erreurs de clean code possible en 5 minute dans ce code
  8. Qu’est-ce que la dette technique?
  9. ¤ En 3 minutes, mettez le plus de buzzwords possible sur papier qui vous semblent importants pour qu’un logiciel soit maintenable.
  10. Vous devez écrire en 3 lignes ce qui fait que vos valeurs font de vous un professionnel en informatique que Uncle Bob voudrait engager?