02291: System Integration Acceptance Tests Hubert Baumeister - - PowerPoint PPT Presentation

02291 system integration
SMART_READER_LITE
LIVE PREVIEW

02291: System Integration Acceptance Tests Hubert Baumeister - - PowerPoint PPT Presentation

02291: System Integration Acceptance Tests Hubert Baumeister huba@dtu.dk DTU Compute Technical University of Denmark Spring 2020 Types of Tests Supports Programming Critique Project Explorative Testing Business Facing Acceptance Tests


slide-1
SLIDE 1

02291: System Integration

Acceptance Tests Hubert Baumeister

huba@dtu.dk

DTU Compute Technical University of Denmark

Spring 2020

slide-2
SLIDE 2

Types of Tests

Technology Facing Business Facing Supports Programming Critique Project Unit Tests Acceptance Tests Property Testing (Performance, Scalability) Explorative Testing (trying to break the system)

slide-3
SLIDE 3

Acceptance Tests

Traditional testing

understand requirements understand requirements understand requirements System User Developer Quality Assurance (QA) fix defects implement run the tests create tests define system requirements Tests SystemRequirments UserRequirments define user requirements [no defects] [defect found]

slide-4
SLIDE 4

Acceptance Tests in Agile processes

Test-Driven Development

understand user story create test select the feature / user story with highest priority System User Developer Quality Assurance (QA) fix defects implement and refactor Find defects create test Test Feature / User Story UserRequirments define user requirements [more features] [no more features] [no defect] [defect found]

slide-5
SLIDE 5

Example of acceptance tests for a use case

◮ Use case

name: Login Admin actor: Admin precondition: Admin is not logged in main scenario

  • 1. Admin enters password
  • 2. System responds true

alternative scenarios:

  • 1a. Admin enters wrong password
  • 1b. The system reports that the password is wrong and the use

case starts from the beginning

postcondition: Admin is logged in

slide-6
SLIDE 6

Manual tests

Successful login

Prerequisit: the password for the administrator is “adminadmin” Input Step Expected Output Fail OK Startup system “0) Exit” “1) Login as administrator” “1” Enter choice “password” “adminadmin” Enter string “logged in”

Failed login

Prerequisit: the password for the administrator is “adminadmin” Input Step Expected Output Fail OK Startup system “0) Exit” “1) Login as administrator” “1” Enter choice “password” “admin” Enter string “Password incorrect” “0) Exit” “1) Login as administrator”

slide-7
SLIDE 7

Manual vs. automated tests

◮ Manual tests should be avoided

◮ Are expensive; can’t be run often

◮ Automated tests

◮ Are cheap; can be run often

◮ Robert Martin (Uncle Bob) in http://www.youtube.com/watch?v=hG4LH6P8Syk

◮ manual tests are immoral from 36:35 ◮ how to test applications having a UI from 40:00

◮ How to do UI tests?

→ Solution: Test under the UI

slide-8
SLIDE 8

Test under the UI

Tests Business Logic Domain Layer e.g. User, Book, ... Business logic Persistency Layer User Application Layer e.g. LibraryApp Business logic Thin Presentation Layer No Business Logic

slide-9
SLIDE 9

Language to express acceptance tests

Framework for integrated tests (Fit)

slide-10
SLIDE 10

Fit Framework

◮ Framework for integrated test (Fit)

◮ Goal: Automated acceptance tests ◮ Ward Cunningham (CRC cards, Wiki, patterns, XP) ◮ Tests are HTML tables → Customer formulates tests ◮ http://fit.c2.com

◮ Fitnesse

◮ Standalone Wiki with Fit integration ◮ http://www.fitnesse.org → use this to play around with Fit tests ◮ Download fitnesse-standalone.jar, run java -jar fitnesse-standalone.jar -p 8080 and go to localhost:8080 ◮ Set the class path with !path ... ◮ Compile with javac -cp fitnesse-standalone.jar:. ...

slide-11
SLIDE 11

Fit Framework

System under test Fixtures Fit engine Fit tables Glue code Model Program

slide-12
SLIDE 12

Column fixture

public class Division extends ColumnFixture { public double numerator; public double denominator; public double quotient() { Div sut = new Div(); return sut.divide(numerator, denominator); } } public class Div { public double divide(doube numerator, double denominator) { return numerator / denominator; } }

slide-13
SLIDE 13

Row fixture

public class PrimeNumberRowFixture extends RowFixture { public Object[] query() throws Exception { Primes sut = new Primes(); PrimeData[] array = new PrimeData[5]; int[] primes = sut.primes(5); for (int i = 0; i < 5; i++) { PrimeData pd = new PrimeData(); pd.setPrime(primes[i]); array[i] = pd; } return array; } public Class getTargetClass() { return PrimeData.class; } }

slide-14
SLIDE 14

Action fixture

public class CountFixture extends Fixture { private Counter sut = new Counter(); public void count() { sut.count(); } public int counter() { return sut.getCounter(); } public void counter(int c) { sut.setCounter(c); } } public class Counter { int counter = 0; public void count() { counter++;} public int getCounter() { return counter;} publc void setCounter(int c) { counter = c;} }

slide-15
SLIDE 15

Action Fixture: From use case to test

◮ Interactions: The user does something with the system

◮ press: performing one action: press a button: e.g. press | count ◮ enter: performing one action with a parameter: e.g. enter | name | Anne ◮ (action: performing an action with several parameters: e.g. action | offer | mask | p2

◮ Not standard fit: Can be done with e.g. enter instead: enter | object to trade | mask enter | offer object to | p2

◮ The system changes because what the user did

◮ check: e.g. check | counter equals | 3

◮ Preconditions / postconditions

◮ check: e.g. check | user registered | true

slide-16
SLIDE 16

Travel Agency: detailed use case list available flights

name: list available flights description: the user checks for available flights actor: user main scenario:

  • 1. The user provides information about the city to travel to and

the arrival and departure dates

  • 2. The user initiates the search
  • 3. The system provides a list of available flights with prices

and booking number

alternative scenario:

  • 1a. The input data is not correct (see below)
  • 2. The sytem notifies the user of that fact and terminates and

starts the use case from the beginning

  • 3a. There are no flights matching the users data
  • 3. The use case starts from the beginning

note: The input data is correct, if the city exists (e.g. is correctly spelled), the arrival date and the departure date are both dates, the arrival date is before the departure date, arrival date is 2 days in the future, and the departure date is not more then one year in the future

◮ Acceptance Tests: http://www2.compute.dtu.dk/courses/02291/ examples/test/travel_agency_fit_tests.pdf

slide-17
SLIDE 17

Travel Agency: list available flights Fit tests

main scenario:

  • 1. The user provides

information about the city to travel to and the arrival and departure dates

  • 2. The user initiates the

search

  • 3. The system provides a

list of available flights with prices and booking number

start enter start city Copenhagen enter destination city Paris enter Arrival date 01-04-10 enter Departure date 08-04-10 enter number of people 1 press search check error message None ActionFixture TravelAgency

price number departure time arrival time Return number Return departure time Return arrival time #0001 1000 SK1111 01-04-10 08:00 01-04-10 10:00 SK1112 08-04-10 08:00 08-04-10 10:00 #0002 2000 AF4221 01-04-10 13:00 01-04-10 15:00 AF4222 08-04-10 15:00 08-04-10 17:00 ReturnedFlights booking nr

slide-18
SLIDE 18

Testing in the system integration course

◮ Learn how to write test

→ Acceptance tests as tables

◮ Check that tests and scenarios describe the same interactions ◮ Explain the tables and their kind (column-, row-, or action fixtures) ◮ Just the tables: LaTeX, Word, . . . ◮ http://www.fitnesse.org/FitNesse.UserGuide. WritingAcceptanceTests.FitFramework

slide-19
SLIDE 19

Buy Fruit Fit tests

◮ Main Scenario ActionFixture start VendingMachineFixture check number of apples 5 enter input 1 enter input 2 press apple check dispensed item apple check rest money check number of apples 4 ◮ Alternative Scenario a ActionFixture start VendingMachineFixture check number of apples 5 enter input 1 enter input 5 press apple check dispensed item apple check rest money 3 check number of apples 4

◮ Use Case Buy Fruit main scenario:

  • 1. Input coins until the

price for the fruit to be selected is reached

  • 2. Select a fruit
  • 3. Vending machine

dispenses fruit and zero rest money

alternative scnearios:

  • a1. User inputs more coins

than necessary

  • a2. select a fruit
  • a3. Vending machine

dispenses fruit

  • a4. Vending machine

returns excessive coins