Systematic Black-Box Testing
Variability Management
Compositional Design
Clean Code & Refactoring
Good luck
100

Black-box testing

The UUT is treated as a black box. We only know the specification and general programming knowledge.

100

3 - 1 - 2 processen

Find variabilitetspunkt og refaktorer - Programmer til et interface - Deleger funktionaliteten af variabiliteten til interface.

100

3 - 1 - 2 processen

Find variabilitetspunkt og refaktorer - Programmer til et interface - Deleger funktionaliteten af variabiliteten til interface.

100

Forklar og nævn navn på onklen:

Small

Do One Thing

One Level of Abstraction

Onkel Bob

Small: Make it do 1-5 logical steps / ‘functional nuggets’

Do One Thing: Make it do 1-5 logical steps / ‘functional nuggets’

One Level of Abstraction: Metoder indeholder et abstraktionsniveau. En metode skal ikke både ændre på data, kalde andre metoder, indeholde loops mm.

100

Sig TDD rytmen

1. Quickly add a test
2. Run all tests and see the new one fail 

3. Make a little change
4. Run all tests and see them all succeed 

5. Refactor to remove duplication


200

Systematic testing

A planned and systemic process with the explicit goal of finding defects in some well-defined part of the system. 

Tests skrevet til systemer som allerede er skrevet.

200

Coupling & Cohesion

Coupling: Graden af hvor afhængig et stykke software er af andre

Cohesion: Graden af hvor tætte ansvarsområderne for et stykke software ligger.

200

Coupling & Cohesion

Coupling: Graden af hvor afhængig et stykke software er af andre

Cohesion: Graden af hvor tætte ansvarsområderne for et stykke software ligger.

200

Forklar og nævn navn på onklen:

Use Descriptive Names

Keep Number of Arguments low

Avoid Flag Arguments

Onkel Bob

Use Descriptive Names: Only tell what it does, nothing else

Keep Number of Arguments low: 0-1-2 maybe three arguments. No more. If more, your method does more than one thing!

Avoid Flag Arguments: Undgå argumenter der afgør udfaldet af en algoritme. Heri boolske værdier, der fuldkommen ændrer metodens handling

200

Unit testing

Integration Test

System Test

Unit testing is the process of executing a software unit in isolation in order to find defects in the unit itself.

Integration testing is the process of executing a software unti in collaboration with other units in order to find defects in their interactions.

System testing is the process of executing the whole software system in order to find deviations from the specified requirements.

300

Myers Heuristics

1. Until all valid ECs have been covered, define a test case that covers as many uncovered valid ECs as possible. 2. Until all invalid ECs have been covered, define a test case whose element only lies in single invalid ECs.

300

Nævn de 4 forskellige løsninger og fortæl om dem hver især.

Source tree copy: Når hele projektet kopieres og variabiliteten introduceres - Største problem er maintainability

Parametric solution: Når variabiliteten håndteres via et flag argument - Største problem er lav analyzability og reliability over tid

Polymorphic solution: Når variabiliteten håndteres via nedarving - Reuse er svært og man mister sin nedarvings mulighed. (Lav Changeability)

Compositional design: Følg 3-1-2 processen - Største plus: Løser ovenstående problemer - Største minus: Kræver kunden forstår strategierne.

300

Law of Demeter

"Dont talk to strangers". Et metodekald skal ikke gå igennem for mange. Do not collaborate with indirect objects

300

Forklar og nævn navn på onklen:

Have no side effects

Command / Query seperation

Prefer exceptions to Error Codes

Dont repeat yourself

Onkel Bob!

Have no side effects: A method should only do what it says it does (through its descriptive name)

Command / Query seperation: Command = setter, query = getter, bør ikke være i samme metode.

Prefer exceptions to Error Codes: Java har et indbygget error-handling system. Heri kan man benytte sig af det til at give uddybende forklaringer af fejlen, håndtere dem forskelligt og skabe let-læselig kode

Dont repeat yourself: Avoid code duplication (det giver multiple maintanence problemer)

300

Nævn de 5 karakteristikker for et framework og forklar dem.

Karakteristik (Skeleton): Skeleton/design/high-level language --> provide behavior on high level of abstraction: a design/skeleton/architecture.

Karakteristik (Application)Application/class of software-->has a well defined domain where it provides behavior.

Karakteristik (Coorporating)Cooperating / collaborating classes --> define and limit interaction patterns (protocol) between well
defined roles.

Karakteristik (Customize)Customize/abstract classes/reusable/specialize --> can be tailored to a concrete context.

Karakteristik (Implementation)Classes/implementation/skeleton --> is reuse of code as well as reuse of design.

400

Coverage and Representation

 Coverage: Every possible input element belongs to at least one EC.

Representation: if one element in the subset demonstrates a defect during testing, then we assume the same defect can be demonstrated by other values in the EC.

400

Beskriv ISO 9126

Maintainability: Hvor kapabel er softwaren i forhold til modifikation. Afhængig af Analyzability, Changeability, Stability og Testability

Analyzability: Hvor let er softwaren at forstå i forhold til at modificere og finde defects

Changeability: Hvor let kan en modifikation blive introduceret

Stability: Kan softwaren undgå uforventede effekter som følge af ændringer (Reliability fra automated testing)

Testability: I hvor stor grad kan en modifikation blive testet (doubles)

Flexibility: Kapabiliteten i forhold til at håndtere change by addition fremfor change by modification

400

Beskriv ISO 9126

Maintainability: Hvor kapabel er softwaren i forhold til modifikation. Afhængig af Analyzability, Changeability, Stability og Testability

Analyzability: Hvor let er softwaren at forstå i forhold til at modificere og finde defects

Changeability: Hvor let kan en modifikation blive introduceret

Stability: Kan softwaren undgå uforventede effekter som følge af ændringer (Reliability fra automated testing)

Testability: I hvor stor grad kan en modifikation blive testet (doubles)

Flexibility: Kapabiliteten i forhold til at håndtere change by addition fremfor change by modification

400

Nævn alle onkel Bobs 10 principper og forklar dem.

Small: Make it do 1-5 logical steps / ‘functional nuggets’

Do One Thing: Make it do 1-5 logical steps / ‘functional nuggets’

One Level of Abstraction: Metoder indeholder et abstraktionsniveau. En metode skal ikke både ændre på data, kalde andre metoder, indeholde loops mm.

Use Descriptive Names: Only tell what it does, nothing else

Keep Number of Arguments low: 0-1-2 maybe three arguments. No more. If more, your method does more than one thing!

Avoid Flag Arguments: Undgå argumenter der afgør udfaldet af en algoritme. Heri boolske værdier, der fuldkommen ændrer metodens handling.

Have no side effects: A method should only do what it says it does (through its descriptive name)

Command / Query seperation: Command = setter, query = getter, bør ikke være i samme metode.

Prefer exceptions to Error Codes: Java har et indbygget error-handling system. Heri kan man benytte sig af det til at give uddybende forklaringer af fejlen, håndtere dem forskelligt og skabe let-læselig kode

Dont repeat yourself: Avoid code duplication (det giver multiple maintanence problemer)

400

CRUD

HTTP Kald: Create (Post), Read(Get), Update(Put), Delete

500

Partitioning Heuristics & Computation Heuristics

Partitioning: Range, Set, Boolean. Teste en under range, i range og over range. Teste alle i settet og en for værdier ikke i settet. Teste for både true og false.

Computation: Addition and subtraction: Select one valid EC for the neutral value 0. Multiplication and division: Select one valid EC for the neutral value 1

500

Multidimensionel varians

Kombinatorisk eksplosion, forestil jer strat x strat^antal nye strategier. F.eks. 3x3 grid

500

Budd: Who/what cycle

Først skal man bestemme hvem der skal have rollen, og så hvad de skal gøre for at udføre den rolle.

500

Navn alle onkel Henriks 4 principper og forklar dem

Arguments in Argument Lists: Argumenter skal ikke være i metode navne, men i parametre (medmindre det er test cases, hvor man bruger hardcoded værdier)

Do the Same Thing, the Same Way: Det er ulogisk at gøre den samme ting på flere forskellige måder, og giver dårligere analysability.

Name Boolean Expressions: Navngiv subexpression så man kan læse hvad den gør (og ikke behøver læse og forstå koden)

Bail out fast: Hvis man har mange conditions der skal checkes for, ender man ofte med at neste sine if statements. Svært at maintaine og forstå.

500

Remote Procedure Call

Når vi ikke har en Root-invoker og nameservice, så er kaldende IKKE RMI (Remote-Method Invocation => At invoke metoder på remote instanser), men RPC. Vi kalder nemlig ikke på noget konkret objekt

M
e
n
u