Black-box testing
The UUT is treated as a black box. We only know the specification and general programming knowledge.
3 - 1 - 2 processen
Find variabilitetspunkt og refaktorer - Programmer til et interface - Deleger funktionaliteten af variabiliteten til interface.
3 - 1 - 2 processen
Find variabilitetspunkt og refaktorer - Programmer til et interface - Deleger funktionaliteten af variabiliteten til interface.
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.
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
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.
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.
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.
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
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.
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.
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.
Law of Demeter
"Dont talk to strangers". Et metodekald skal ikke gå igennem for mange. Do not collaborate with indirect objects
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)
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.
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.
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
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
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)
CRUD
HTTP Kald: Create (Post), Read(Get), Update(Put), Delete
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
Multidimensionel varians
Kombinatorisk eksplosion, forestil jer strat x strat^antal nye strategier. F.eks. 3x3 grid
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.
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å.
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