Testarea programelor orientate pe obiecte 21 noiembrie 2011 Marius Minea

Documente similare
PROGRAMARE ORIENTATA PE OBIECTE

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Microsoft Word - lab4.doc

Paradigme de Programare

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Laborator 3

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Ingineria Sistemelor de Programare

Proiectarea Sistemelor Software Complexe

Analiză statică Analiza fluxului de date 23 octombrie 2014

Cuantizare Vectoriala.doc

Analiză de flux de date 29 octombrie 2012

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Paradigme de programare

Limbaje de Programare Curs 6 – Functii de intrare-iesire

SUBPROGRAME

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Top

Slide 1

Curs 10

Creational design patterns

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

Definiţie: modele analitice care asigură evaluarea unor caracteristici de calitate alese, bazându-se pe date din măsurători ale proiectelor software.

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Retele Petri si Aplicatii

PowerPoint Presentation

Microsoft Word - Curs_09.doc

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Limbaje de Programare Curs 8 – Fisiere

PowerPoint Presentation

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Microsoft Word - Curs_08.doc

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Automatizarea testării 4 decembrie 2014

Curs 6 Gestiunea memoriei in C++ Alocare dinamica. Destructor. RAII. Rule of three. Tratarea excepțiilor exception safe code Moștenire Curs 5 Template

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Microsoft Word - cap1p4.doc

Object Oriented Programming

Modulul 1 M1-2.3 Protocoale şi servicii în reţea În acest capitol ne propunem să abordăm următoarele: Protocoalele şi aplicaţiile folosite în reţelele

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

E_d_Informatica_sp_MI_2015_bar_02_LRO

Limbaje de Programare Curs 5 – Siruri de caractere

Declararea variabilelor

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Slide 1

Microsoft Word - Algoritmi genetici.docx

REVISAL Versiunea: Data release: 15 martie 2016 IMPORTANT! Distribuţia curentă (v6.0.4) a aplicaţiei Revisal conţine nomenclatorul COR ISCO 08 î

Prezentarea calculatorului

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

C++ Probleme

1

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

OPERATII DE PRELUCRAREA IMAGINILOR 1

Retele Petri si Aplicatii

Microsoft Word - CarteC.doc

proiectarea bazelor de date

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

LEGE nr. 109 din 25 aprilie 2007 (*actualizata*) privind reutilizarea informatiilor din institutiile publice EMITENT: PARLAMENTUL Data intrarii in vig

1

Creational design patterns

ASDN

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

INSPECTORATUL ŞCOLAR JUDEŢEAN MUREŞ COMISIA JUDEŢEANĂ DE BACALAUREAT SESIUNEA IUNIE-IULIE 2019 BACALAUREAT 2019 Atribuțiile președintelui Comisiei de

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

CL2009R0976RO bi_cp 1..1

Introducere în limbajul JavaScript

PPSD

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Document2

Microsoft Word - _arbori.docx

Dragi colaboratori,

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

E_d_Informatica_sp_SN_2014_bar_10_LRO

Sistem de supraveghere video inteligent cu localizarea automata a evenimentelor de interes SCOUTER, cod proiect PN-II-IN-DPST , contract nr

Slide 1

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

CURS

Slide 1

Curs 6: Clasificarea surselor de informatii - Clasificarea Bayes Naiva. Modelul Bernoulli

SECURITATE ȘI CRIPTOGRAFIE

Microsoft Word - 2 Filtre neliniare.doc

Chestionar privind despăgubiri collective

Guns N' Roses Video Slots Regulile jocului Guns N' Roses Video Slots este un slot video cu 5 role, 3 rânduri și 20 de linii care conține substituții W

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Lucrarea 10

BCBA-BCaBA task list fourth edition romanian

ExamView Pro - Untitled.tst

www

INSTITUTUL NAŢIONAL

Transcriere:

Testarea programelor orientate pe obiecte 21 noiembrie 2011

Testarea programelor orientate pe obiecte 2 Probleme în testarea orientatǎ pe obiecte [Binder] Fiecare nivel de ierarhie creeazǎ alt context pentru elementele moştenite: corectitudinea superclasei nu garanteazǎ pe cea a clasei derivate Se comportǎ corect metodele superclasei în contextul subclasei? Exemplu, pentru o clasa B care mosteneste o metoda m din A 1. putem sǎ omitem complet re-testarea lui B.m? 2. sunt de ajuns cazurile de test pentru A.m? 3. trebuie cazuri de test noi?

Testarea programelor orientate pe obiecte 3 Liskov Substitution Principle subclasa poate fi folosita oriunde in locul superclasei pre(m, Class) pre(m, SubClass) post(m, SubClass) post(m, Class) inv(subclass) inv(class) Dar: trebuie sa cunoaştem invariantii pentru a-i verifica Ca minim: analizǎm ce membri sunt modificati

Testarea programelor orientate pe obiecte 4 Exemplul clasic dreptunghi - patrat public class Rectangle { private int height; private int width; public void setheight(int value) { this.height = value; } public void setwidth(int value) { this.width = value; } public int getarea() { return this.height * this.width; } } public class Square extends Rectangle { public void setheight(int value) { super.setheight(value); super.setwidth(value); } public void setwidth(int value) { super.setwidth(value); super.setheight(value); } }

Testarea programelor orientate pe obiecte 5 Probleme în testarea orientatǎ pe obiecte (cont.) Interacţiunile dintre apeluri şi starea obiectului sunt complexe Existǎ interacţiuni nedorite între metode? Polimorfismul şi legarea dinamicǎ cresc numǎrul de cǎi de execuţie îngreuneazǎ analiza staticǎ pentru determinarea cǎilor prin cod void foo(a obj) { obj.m(); } poate fi de fapt metoda m pentru oricare subclasa a lui A Încapsularea limiteazǎ observabilitatea stǎrii la testare Legarea dinamicǎ creşte potenţialul de neînţelegere şi erori Erori de interfaţǎ sunt favorizate de existenţa multor componente mici Controlul stǎrii obiectelor e dificil, fiind distribuit în tot programul

Testarea programelor orientate pe obiecte 6 Specific şi probleme în testarea OO (cont.) [McGregor&Sykes] Datorate noţiunilor fundamentale de limbaj: Obiecte ascund informaţia îngreuneazǎ observarea stǎrii în testare au stare persistentǎ dacǎ e inconsistentǎ cauzeazǎ erori au o duratǎ de viaţǎ erori prin construirea/distrugerea inoportunǎ Mesaje / metode importante în testarea interacţiunii obiectelor pot fi apelate în stǎri nepotrivite ale obiectului au parametri (folosiţi/actualizaţi): se aflǎ în starea potrivitǎ? implementeazǎ corect interfeţele dorite? (vezi probleme de subtip) Interfaţǎ = specificaţie comportamentalǎ Douǎ abordǎri privind precondiţiile de funcţionare corectǎ: bazatǎ pe contract: le presupune / programare defensivǎ: le verificǎ influenţeazǎ complexitatea implementǎrii şi testǎrii: simplificǎ/complicǎ testarea clasei/testarea de integrare Obs: programarea defensivǎ verificǎ şi rezultatele (deşi în practicǎ adesea serverul/receptorul e considerat de încredere, doar clientul nu)

Testarea programelor orientate pe obiecte 7 Specific şi probleme în testarea OO (cont.) Clasa specificaţie: pre/postcondiţii de metode, invarianţi de clasǎ testate! Specificaţia trebuie şi ea validatǎ! implementare: potenţial de erori prin: Constructori/destructori (iniţializare/(de)alocare incorectǎ) Colaborare inter-clase: membri/parametri obiecte pot avea erori Un client are mijloacele de a verifica precondiţiile necesare? Moştenirea Poate propaga erorile la descendenţi oprite prin testarea la timp Impune aspectul tipic de cod OO (multe apeluri, puţine prelucrǎri, metode scurte) acoperirea de cod/decizie e puţin relevantǎ Oferǎ un mecanism de refolosire a testelor, din super- în subclasǎ Testarea poate detecta moştenirea doar pentru refolosirea codului (fǎrǎ a fi o specializare, adicǎ a moşteni specificaţa)

Testarea programelor orientate pe obiecte 8 Specific şi probleme în testarea OO (cont.) Polimorfismul Testarea trebuie sǎ verifice principiul substituţiei. În subclasǎ metodele au precondiţii mai slabe/postcondiţii mai puternice invariantul implicǎ cel al clasei de bazǎ (e mai puternic) Din perspectiva stǎrilor observabile (prin program / test): Subclasa pǎstreazǎ toate stǎrile observabile şi tranziţiile între ele Poate adǎuga tranziţii (comportament suplimentar) Poate adǎuga stǎri observabile ca sub-stǎri ale celor iniţiale Problema yo-yo: dificultatea înţelegerii ( testǎrii) secvenţei de apeluri eroare probabilǎ: apelul versiunii greşite de metodǎ din ierarhie Abstracţia în ierarhia de clase reflectatǎ în teste (general specific)

Testarea programelor orientate pe obiecte 9 Axiome de testare [Weyuker 86, 88], aplicate în contextul OO de [Perry & Kaiser 90] Antiextensionalitate: Implementǎri diferite la aceeaşi funcţionalitate pot necesita suite de test diferite. 1) O metodǎ redefinitǎ necesitǎ (şi) alte teste (depinzând de cod) 2) Aceeaşi metodǎ moştenitǎ necesitǎ teste în funcţie de clasǎ! Ex: A: +m(), +n() B: +m() C: +n() şi m apeleazǎ n() C::m moşteneşte B::m dar apeleazǎ alt n() cere alte teste! Antidecompoziţie: Un set de teste adecvat pentru un program nu e neapǎrat adecvat pentru o componentǎ a lui. (ea poate fi exercitatǎ în alt context decât programul respectiv) Testarea adecvatǎ a unui client nu e suficientǎ pentru serverele lui! (clientul ar putea folosi doar o parte din funcţionalitate) Derivând dintr-o clasǎ testatǎ trebuie re-testate metodele moştenite! (codul adǎugat poate interacţiona cu starea cu metodele moştenite)

Testarea programelor orientate pe obiecte 10 Axiome de testare (cont.) Anticompoziţie: Un set de teste adecvat pentru componente nu e neapǎrat suficient pentru combinaţia lor. adevǎratǎ şi pentru combinaţie secvenţialǎ: p cǎi de test în P şi q cǎi de test în Q produc p q > p + q cǎi în P ; Q cu atât mai mult când execuţia alterneazǎ repetat între P şi Q Testarea de modul nu poate substitui testarea de integrare! O metodǎ testatǎ în clasa de bazǎ nu e suficient testatǎ în clasa derivatǎ (pentru cǎ poate fi compusǎ în alte feluri) General Multiple Change Programe care au acelaşi flux de control dar alte valori / operaţii necesitǎ suite de test diferite.

Testarea programelor orientate pe obiecte 11 Exemple de erori: Încapsulare Exemplu: clasǎ mulţime cu metode de add(element) // precondiţie: element nu e în mulţime // genereazǎ excepţie Duplicate în caz contrar remove(element) Testare: douǎ add(x) consecutive genereazǎ excepţie dar totuşi elementul e adǎugat a doua oarǎ eroare descoperitǎ doar cu 2 add, 2 remove mai dificil decât dacǎ starea obiectului ar fi direct observabilǎ

Testarea programelor orientate pe obiecte 12 Exemple de erori: Moştenire Problema: în realizarea unei clase trebuie înţelese detaliile şi convenţiile de reprezentare ale tuturor claselor de bazǎ pentru a fi siguri de o implementare corectǎ. Moştenirea slǎbeşte încapsularea Douǎ clase mari de probleme: 1) iniţializarea ex. dacǎ se uitǎ execuţia corectǎ a iniţializǎrii pentru superclasǎ 2) omiterea redefinirii unor metode ţinând cont de specificul clasei ex. metode de copiere, sau isequal

Testarea programelor orientate pe obiecte 13 Modele de eroare în testarea OO [Offutt] Folosire inconsistentǎ ca tip Deriv e folositǎ inconsistent şi ca Base (chiar fǎrǎ redefiniri) Ex: Stack (acces la un capǎt) implementat din Vector (acces arbitrar) folosirea Vector::removeAt(idx) pe Stack violeazǎ invariantul clasei Cauza: eroare de proiectare. Detecţie: testarea invarianţilor de clasǎ Erori de definiţie de stare 1) Metodele derivate interacţioneazǎ diferit cu starea obiectului Detecţie: verificare cǎ metodele definesc/folosesc aceiaşi membri 2) Redefinirea localǎ a unui membru (ascunde membru omonim moştenit) dar metodele moştenite acceseazǎ membrul vechi inconsistenţǎ 3) Metodǎ redefinitǎ face alt calcul asupra aceluiaşi membru inconsistenţǎ a stǎrii în raport cu specificaţia (moştenitǎ) Erori de constructor Apel virtual în constructor în derivat, acces la stare neiniţializatǎ... şi altele (anomalii de vizibilitate, etc.)

Testarea programelor orientate pe obiecte 14 Particularitǎţi ale testǎrii OO Nivele: intra- şi inter-metodǎ, intra- şi inter-clasǎ Problema vizibilitǎţii (limitatǎ de încapsulare): expandarea explicitǎ în sursǎ a ierarhiei de clase (flattening) suport de limbaj/implementare pentru accesul de cǎtre clasa de test folosirea de metode accesor pentru observarea stǎrii Polimorfismul: necesitǎ instanţierea prin test a tuturor subtipurilor posibile pentru un obiect declarat dintr-un tip de bazǎ analizǎ staticǎ pentru determinarea tuturor posibilitǎţilor Testarea bazatǎ pe flux de date Sunt importante datele transmise/starea modificatǎ; acoperirea de cod/decizie dǎ informaţie redusǎ pe corpuri mici de metodǎ Cuplajul: definit prin perechi def-use între metode i.e. un membru definit(scris) în m1() şi folosit(citit) în m2() folosit pentru a selecta metodele care sunt testate împreunǎ

Testarea programelor orientate pe obiecte 15 Testarea ierarhiilor de clase Distingem: teste pornind de la specificaţie sau implementare (cod) S: noi teste pentru metode vechi, la modificarea specificaţiei S: postcondiţii/invarianţi noi pentru teste vechi, în clase derivate I: noi teste pentru metode noi, în funcţie de criteriul de acoperire dorit Exemple: Modificare m() în superclasǎ: re-testare m() + metode dependente; re-testare m() în contextul subclaselor Modificare subclasǎ: retestare metode moştenite care pot interacţiona Suprascriere m(): augmentare teste Base::m pt. acoperire adecvatǎ Suprascriere m() folositǎ de Base::n: test n în subclasǎ Modificare interfaţǎ (clasǎ abstractǎ): retestarea întregii ierarhii!

Testarea programelor orientate pe obiecte 16 Tipare de testare OO [Binder] La nivel de metodǎ Category/Partition (analizǎ I/O, partiţionare/echivalenţǎ) Combinational Function Test (acoperire a condiţiilor) Recursive Function Test Polymorphic Message Test (client al unui server polimorfic) La nivel de clasǎ Invariant Boundaries Nonmodal Class Test (clasǎ fǎrǎ constrângeri de secvenţiere) Modal Class Test (clasǎ cu constrângeri de secvenţiere) Quasi-Modal Class Test (constrângeri dependente de stare) Pentru componente reutilizabile Abstract Class Test (interfaţǎ) Generic Class Test (parametrizatǎ) New Framework Test Popular Framework Test (modificǎri în cadru de aplicaţie intens folosit)

Testarea programelor orientate pe obiecte 17 Exemplu: Polymorphic Message Test pentru un apel de metodǎ virtualǎ (într-un client), testeazǎ toate clasele posibile la care s-ar putea face apelul Necesitate / erori posibile: precondiţii incorecte de apel pentru anumite subclase apel (prin pointer incorect) la clasa neintentionata modificarea ierarhiei de clase Procesul de legare dinamicǎ ramificare în cod acoperirea tuturor instanţelor posibile branch coverage

Testarea programelor orientate pe obiecte 18 Nonmodal Class Test clasǎ ne-modalǎ = acceptǎ orice mesaj (apel) în orice stare ex. DateTime acceptǎ orice secvenţǎ de get/set (use/def) Tipuri de comportament de test define-operation: set pentru intrare validǎ / verificǎ rǎspuns define-exception: set pentru intrare invalidǎ / verificǎ rǎspuns define-exception-corruption: stare nu e coruptǎ dupǎ excepţie use-exception-test: se revine normal dupǎ utilizare use-correct-return: se revine cu valoarea corectǎ dupǎ utilizare use-corruption: obiectul nu e corupt dupǎ utilizare

Testarea programelor orientate pe obiecte 19 (Quasi-)Modal Class Test Modal Class Test: clasǎ cu constrângeri permanente/fixe privind ordinea operaţiilor se creeazǎ un model cu stǎrile obiectului şi tranziţiile între ele Probleme: tranziţie lipsǎ: o operaţie e respinsǎ într-o stare validǎ acţiune incorectǎ: rǎspuns incorect pentru stare/metodǎ datǎ stare rezultantǎ invalidǎ: metoda produce tranziţie în stare incorectǎ stare rezultantǎ coruptǎ mesaj acceptat când ar trebui respins Quasi-modal class test clasǎ unde constrângerile la mesaje se schimbǎ odatǎ cu starea clasei ex. clasele de tip container / colecţie (stivǎ plinǎ/goalǎ, etc.) Tipic: am dori acoperire tip N+ (orice mesaj în orice stare)

Testarea programelor orientate pe obiecte 20 Testarea la nivel de clasǎ Abordarea Small Pop scriere clasǎ, scriere teste, rulare (fǎrǎ alte detalieri/intermedieri) valabilǎ pentru clase simple în contexte stabile Abordarea Alpha-Omega se trece obiectul de la creare la distrugere, prin fiecare metodǎ constructori accesori (get) predicate modificatori (set) iteratori destructori