1 komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip...
TRANSCRIPT
![Page 1: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/1.jpg)
1
Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai.
Didesniems vienetams negu individuali funkcija “baltos dėžės” testavimas turi būti išplėstas.
Nėra akivaizdžios viršūnės smulkinančiam integravimui ir testavimui.
Objektinis testavimas
![Page 2: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/2.jpg)
2
Testavimo lygiai
Testuoti operacijas susietas su objektais.
Testuoti objektų klases. Testuoti bendradarbiaujančių objektų
grupes. Testuoti užbaigtą objektinę sistemą.
![Page 3: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/3.jpg)
3
Objektų klasių testavimas
Pilnas klasės testavimas apima : testavimas visų operacijų susietų su objektu, nustatymas ir apklausinėjimas visų objektų
atributų, bandymas objektų visose galimose būsenose.
Paveldimumas sukelia daug sunkumų sukurti klasių testus, kadangi informacija, kuri turi būti testuojama, nėra lokalizuota.
![Page 4: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/4.jpg)
4
Meteorologinės stoties objekto sąsaja
Testiniai atvejai reikalingi visoms operacijoms.
Naudoti būvio modelį, kad identifikuoti testavimui būsenų perėjimus.
Testavimo sekų pavyzdžiai: Shutdown Waiting Shutdown
Waiting Calibrating Testing Transmitting Waiting
Waiting Collecting Waiting Summarising Transmitting Waiting
identifier
reportWeather ()calibrate (instruments)test ()startup (instruments)shutdown (instruments)
WeatherStation
![Page 5: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/5.jpg)
5
Objektų integravimas
Integravimo lygiai yra mažiau aiškūs objektiškai--orientuotose sistemose.
Grupės (Cluster) testavimas liečia bendradarbiaujančių objektų integravimą ir testavimą.
Grupių identifikavimui naudojamos žinios apie objektų operacijas ir sistemos savybes, kurios yra įdiegtos šiose grupėse.
![Page 6: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/6.jpg)
6
Objektų grupių testavimo metodai
Naudojamų atvejų arba scenarijaus testavimas: testavimas yra pagrįstas vartotojo ryšiu su sistema, turi pranašumą, kad taip testuojamos sistemos savybės
kaip patyrusių vartotojų. Gijų testavimas:
sistemos atsakymų į įvykius testavimas kaip veiksmų gijų apdorojimas.
Objektų bendravimo testavimas: testų sekos objektų bendravimui, kuris nutrūksta, kai
objekto operacijos neprašo paslaugų iš kitų objektų.
![Page 7: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/7.jpg)
7
Testavimas pagal scenarijų
Atpažįsta scenarijų iš naudojamų atvejų (use-cases) ir jų papildymų su bendravimo diagramomis, kurios parodo objektus, įtrauktus į scenarijų.
Aptarkime meteorologinės stoties scenarijų, kur ataskaita yra sugeneruota.
![Page 8: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/8.jpg)
8
Surinkti meteorologinius duomenis
:CommsController
request (report)
acknowledge ()report ()
summarise ()
reply (report)
acknowledge ()
send (report)
:WeatherStation :WeatherData
![Page 9: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/9.jpg)
9
Meteorologinės stoties testavimas
Vykdomų metodų gijos CommsController:request WeatherStation:report
WeatherData:summarise
Įvedimas ir išvedimas: įvedamas prašymas reikalauja susietų žinių ir galinės
ataskaitos išvedimo, gali būti pratestuota sukurtais “žaliais” duomenimis ir
įsitikinta , kad reziumuota tinkamai, naudojami tie patys “žali” duomenys testuoti
WeatherData objektus.
![Page 10: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/10.jpg)
10
What is Object-Oriented Programming?
Do we really know
what it is?
![Page 11: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/11.jpg)
11
Things you “hear” about OO:a grain ( grūdas) of truth in all but one
It’s a “new way” of looking at things It’s a paradigm shift You have methods instead of functions you pass messages If you’ve used the “procedural approach”
than you can’t transition to OO You use objects, whatever they are! You use polymorphism, whatever that is!
![Page 12: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/12.jpg)
12
Let’s compare OO to the “old ways”
Previous approach stressed algorithms. Usuall referred to as “procedure-
oriented” approach I like A. Riel’s term: “Action-Oriented”
approach
![Page 13: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/13.jpg)
13
Action-Oriented Programming
Stresses “getting the algorithm correct” uses “functional decomposition” Has a “main” calling routine that
choreographs the activity, calling functions to implement the application
![Page 14: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/14.jpg)
14
Object-Oriented Programming
Stresses the data Decompose the data, together with the
functions that operate on that data Put the data and operations into a “class” An instance of the “class” is an object Each “object” maintains its own data and
operations: must initialize and clean up! Decentralize control
![Page 15: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/15.jpg)
15
Let’s consider an example
Let’s compare the worst-case action-oriented with the best-case object-oriented
Then, we’ll consider the case when the action-oriented goes right!
And, the object-oriented goes wrong!
![Page 16: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/16.jpg)
16
A typicalaction-oriented topology
F1()
F4()
F3(
F2()
F5()
![Page 17: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/17.jpg)
17
Consider a change to the data, marked X
F1()
F4()
F3(
F2()
F5() Functions f1() and f2() mustbe modified
![Page 18: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/18.jpg)
18
However, suppose you or another developer added f6() (and forgot you did it!)
F1()
F4()
F3(
F2()
F5()
F6()
![Page 19: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/19.jpg)
19
However, suppose you or another developer added f6() (and forgot you did it!)
F1()
F4()
F3(
F2()
F5()
You compile,link and execand it doesn’twork!
F6()
![Page 20: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/20.jpg)
20
How does the OO approachcontrol this complexity
D1 D2
D1’s data D2’s data
f1()f2()f3()
f4()f5()f6()
call
call
![Page 21: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/21.jpg)
21
Decompose the data
Data is encapsulated in a class (or object) well-defined public interface permits
operations on the data
![Page 22: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/22.jpg)
22
When action-oriented goes right
Many people build systems using files, with each data structure in a separate file
the functions that operate on data are placed in the same file
some languages contain primitives to restrict operations within/across files (e.g. static, extern)
here, AO takes on attributes of OO approach
![Page 23: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/23.jpg)
23
How can OO go wrong
The god class: performs most of the work, leaves minor details to other classes
proliferation ( daugintis) of classes: too many classes for the size of the problem
![Page 24: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/24.jpg)
24
Class design heuristics
All data is hidden in a class implement a minimum public interface that all
classes understand do not put implementation details in the public
interface A class should capture one, and only one, key
abstraction Keep related data and behavior in one place
![Page 25: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/25.jpg)
25
An important aspect of OO design is to determine the relationships between classes
BookItemJournalItem
LibraryItem
CommandProcessor
StudentPerson StaffPerson
Person LibrarySystem
ClerkPerson
Polymorphos-multiformSubstitutability- Įstatomumas
![Page 26: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/26.jpg)
26
Testing Object-Oriented Software
An Overview,
from McGregor/Sykes
![Page 27: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/27.jpg)
27
Advantages of OO Approach
improvement to development process & to code
if implemented correctly, oo software is higher quality than software developed under the procedural paradigm: understandability, maintainability, extensibility, reliability and reusability
![Page 28: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/28.jpg)
28
Adv of OO
represents design results as refinement & extension of analysis
represents implementation results as a refinement & extension of design
testing OO is based primarily in the requirements of the software
![Page 29: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/29.jpg)
29
What’s different about testing OO
Much carry-over from the procedural approach
For example, still do unit testing; however, what constitutes a until may be different in OO
![Page 30: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/30.jpg)
30
What is software?
instruction codes and data necessary to accomplish a task, as well as all representations of those instructions and data
what are representations: the models developed during analysis
![Page 31: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/31.jpg)
31
Adv of models
test cases can be identified earlier in the development process
errors and faults can be detected earlier test cases developed for analysis
models can be refined and extended to test design models, which can be refined and extended to test subsystems and systems
![Page 32: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/32.jpg)
32
The approach
analyze a little design a little code a little test what you can
![Page 33: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/33.jpg)
33
Kinds of testing for OO
Model testing interaction testing; replaces integration
testing system and subsystem testing acceptance testing: testing of the
application by end users, usually before release
![Page 34: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/34.jpg)
34
Testing Perspective
questions the validity of software & utilizes thorough investigation to identify failures
makes execution-based testing more powerful than reviews or inspections;
reviews never find something that’s missing -- only validates what’s there
![Page 35: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/35.jpg)
35
OO Programming centers around:
object message encapsulation inheritance, and polymorphism
![Page 36: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/36.jpg)
36
For testing, an object:
might be destroyed before it should be might persist ( išsilaikyti) longer than it
should might be manipulated by another object
so that its data becomes inconsistent with other data in the system
might have inappropriate data or exhibit incorrect behavior in the system
![Page 37: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/37.jpg)
37
For testing, a message can fail if:
a sender requests an operation not defined by the receiver
a message contains an improper actual parameter
the receiver cannot perform the requested operation at the time of the request
a sender doesn’t handle the reply properly the receiver returns an incorrect reply
![Page 38: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/38.jpg)
38
Two parts to each class
specification: what each object in the class can do query operations (in C++ s/b const) modifier operations
implementation: how each object in the class does it
![Page 39: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/39.jpg)
39
Two special kinds of class operations
constructor destructor These are different from queries and
modifiers: invoked implicitly!
![Page 40: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/40.jpg)
40
3 Kinds of statements to specify the semantics of a class
pre-conditions: conditions that must hold before an operation can be performed
post-conditions: conditions that must hold after the operation is performed
class invariants: conditions that must always hold for an instance of a class; an implied ( numatomas) post-condition for each operation; can be violated during execution
![Page 41: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/41.jpg)
41
methods
Characterized by behavior behavior can be specified by:
state diagrams sequence diagrams
Two approaches to defining the interface between sender and receiver: contract approach, B. Meyers (1994) defensive programming approach
![Page 42: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/42.jpg)
42
Contract Approach
The interface is defined in terms of the obligations of the sender and receiver involved in the action
obligations specified by pre/post conditions pre-condition: describe the obligation of the
sender (to ensure preconditions are met) post-condition: obligations of the receiver (to
ensure post-conditions and class invariants are met)
![Page 43: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/43.jpg)
43
#ifndef PUCKSUPPLY_H#define PUCKSUPPLY_Hclass PuckSupply {public:
PuckSupply();~PuckSupply();Puck * get();int count() const;
private:int _count;Puck* _store[N];
};#endif
#include “PuckSupply.h”PuckSupply::PuckSupply():(N) {
for (int I = 0; I < N; ++I) {_store[I] = new Puck;
};}
PuckSupply::~Puck() {(for int I=0; I < _count; ++I) {
delete _store[I];};
}
Puck* PuckSupply::get() {return _count > 0 ? _store[--_count]:0;
}
int PuckSupply::count() const {return _count;
}
![Page 44: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/44.jpg)
44
Spec for PuckSupply based on contractsA puck supply is a set of pucks not in play that can be retrieved one at a time. The
pucks are created by a puck supply when it is created.
Class invariant: count associated w/ puck supply is always an integer from 0 to 3, incl.
The count() operation can be applied at any time; it returns the no. of pucks left in the receive and has no effect on the receiver
The get() operation can only be applied if the receiver has at least one puck (count > 0)
constructor has no pre-conditions. The result of the constructor is a puck supply of 3 (count = 3)
the destructor has no pre-conditions; the destructor deletes any pucks that remain in the object
![Page 45: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/45.jpg)
45
Spec for PuckSupply based on Defensive ProgrammingA puck supply is a set of pucks not in play that can be retrieved one at a time. The pucks
are created by a puck supply when it is created.
Class invariant: (count between 0 & 3) -- same The count() operation: (returns no. of pucks) -- same The get() operation can be applied at any time; if the
receiver has at least one puck (count>0) then the result of the operation is a return of a pointer to a puck and reduce the number of pucks by one; owise a NULL pointer is returned and count attribute remains 0.
Constructor: (gives you 3 pucks) -- same the destructor: (deletes remaining pucks) -- same
![Page 46: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/46.jpg)
46
Spec for PuckSupply based on Contract ProgrammingUsing OCL Notation
PuckSupplycount >= 0
PuckSupply::PuckSupply():pre: -- nonepost: count = 3 AND pucks->forAll(puck | not puck.inPlay())
void PuckSupply::count() const:pre: -- nonepost: result = count
Puck * PuckSupply::get()pre: count > 0post: result = pucks->asSequence->first AND
count = count@pre-1
![Page 47: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/47.jpg)
47
Defensive vs Contract
Defensive: interface defined in terms of receiver an operation typically uses return code, or exception goal is to identify “garbage in” to eliminate “garbage out” tends to increase software complexity because each sender
must follow each message w/ check of return code (even though receiver already checked)
complicates class testing: must test for all possible outcomes! Complicates interaction testing: all outcomes handled by
sender
![Page 48: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/48.jpg)
48
Defensive vs Contract
Contract: reflects mutual responsibility and trust eliminates need for receiver to check return
codes important question: How are contracts
enforced? Simplifies class testing but complicates
interaction testing: ensure sender meets pre-conditions
![Page 49: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/49.jpg)
49
A class implementation has:
Data members set of member functions set of constructors destructor set of private operations (in private
interface)
![Page 50: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/50.jpg)
50
Class testing
Since a class is an abstraction of commonaltie, the process must ensure that a rep sample of instances of the class are selected for testing
![Page 51: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/51.jpg)
51
Potential causes of failure of class design/implementation
Doesn’t meet specification contains operations and data that affects the
proper construction of instances might rely on collaboration w/ other objects might meet its spec, but spec might be
incorrect, or violate a higher requirement might specify pre-conditions but not provide
mechanism to check if pre-condition is met
![Page 52: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/52.jpg)
52
In contract/defensive approach:
Contract: must test to ascertain that every attempt to apply an operation must first satisfy pre-conditions
defensive: ascertain that every possible outcome is handled properly
![Page 53: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/53.jpg)
53
Inheritance
Define a new class based on definition of an existing class
used only to implement is-a-kind-of relationship
best use of inheritance is with respect to interfaces and not implementations
![Page 54: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/54.jpg)
54
Inheritance, from testing view
Permits bugs to be propagated from a class to its descendents ( palikuonis)
permits test case reuse verify it’s used properly:
use of inheritance solely for code reuse will probably lead to maintenance difficulty,
this is a design issue, but so common that testers can make a significant contribution by making sure inheritance is used properly
![Page 55: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/55.jpg)
55
Polymorphism
A sender in an OO program can use an object based on its interface and not on its exact class
a derived class inherits the public interface of its base class and thus instances of either class can respond to the same messages
in Java, supported through inheritance or interfaces
![Page 56: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/56.jpg)
56
Poly (cont.)
Because polymorphic references hide the actual class of a referent, both C++ & Java provide support for determining at run time the actual class of a referent
Good OO design holds these run-time inspections to a minimum because they create a maintenance point: extension of the class hierarchy introduces more types to be inspected
![Page 57: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/57.jpg)
57
Testing polymorphism
An operation can return a reply that is a polymorphic reference; the actual class of the referent could be incorrect
any operation can have one or more parameters that is a polymorphic reference; the parameter could be incorrect
Number of instances to check could be large: Need statistical analysis to determine which configurations will expose most faults for least cost
![Page 58: 1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos](https://reader036.vdocuments.pub/reader036/viewer/2022062719/56649ed25503460f94be1a20/html5/thumbnails/58.jpg)
58
OO development products
Use cases class diagrams activity diagrams
state diagrams sequence diagrams
class specification (in OCL) state diagrams activity diagrams