130 likes | 249 Views
Daniel Cioata. Erori in interpretorul limbajului SAIL. Despre …. LRG din 1999 se ocupa cu inspectia codului programelor principalul scop: calitatea proiectarii programelor orientate pe obiecte tehnici si metode de analiza statica
E N D
Daniel Cioata Erori in interpretorul limbajului SAIL
Despre… • LRG • din 1999 se ocupa cu inspectia codului programelor • principalul scop: calitatea proiectarii programelor orientate pe obiecte • tehnici si metode de analiza statica • implementate intr-o larga varietate de limbaje • in 2002 s-a definit limbajul SAIL • Cristina Marinescu, Radu Marinescu, Tudor Gîrba • SAIL • se lucreaza si in prezent • doreste sa unifice modalitatile de exprimare ale diferitelor metode inrudite de analiza statica • usurinta programarii prin similaritate cu alte limbaje existente (Java, Sql)
SAIL, un exemplu structura structClassValue { Class theClass; int theValue; }; main() { Class crtClass; ClassValue[] metricCollection; iterate(systemClasses, crtClass) { metricCollection = metricCollection + select(crtClass, sum(body.cyclomaticNumber)) from crtClass.methods; } output metricCollection; } select
Erori in implementarea limbajului SAIL ! • Interpretorul SAIL este inca imatur • Va suferi modificari in intervalul de timp urmator • exemplu : refactorizarea pentru o mai buna performanta de timp • Initial interpretorul nu dispunea de nici un test • orice modificare facuta putea afecta corectitudinea interpretorului • eroarea nu putea fi depistata imediat dupa aparitia ei • Am realizat o suita de teste pentru eventualele erori • Teste impartite pe categorii in functie de tematica
Principalele categorii de teste • Operatii asupra tipurilor elementare • Operatii asupra tipurilor compuse • lucrul cu structuri • lucrul cu colectii • Lucrul cu instructiunile limbajului • select
Operatii asupra tipurilor elementare • Tipurile int si real • operatii primitive: adunare, scadere, inmultire, impartire • respectarea prioritatii intre operatiile primitive • testarea unei atribuiri • Tipul boolean • operatii logice: si, sau • instructiunea if • atribuire condition = ((age>25) && (redHat==true)); • Tipul string • respectarea ordonarii sirurilor: “abc”<“abd” • operatia de concatenare a sirurilor: sir = “Unu”+”Doi”; … rezultatul era sirul vid
Tipuri compuse: Structuri • Doua metode de abordare: • operatii de baza • accesarea campurilor • Operatii de baza: • initializarea automata cu valori predefinite • listarea unei structuri • compararea a 2 structuri • referintele nu erau retinute corect: firstAddress = setAddress("Aleea Zambilelor",2,10); secondAddress = setAddress("Aleea Macului",3,2); firstPerson = setPerson(“Dani",21,false,firstAddress); secondPerson = setPerson(“Adi",34,true,secondAddress); output firstPerson ( Adi, 34, true,(Aleea Macului,3,2)) output secondPerson( Adi, 34, true,(Aleea Macului,3,2)) • Accesarea campurilor unei structuri: • folosirea operatorului punct pentru a accesa campurile • compararea campurilor a doua structuri
Tipuri compuse: Colectii • Sunt foarte folosite in SAIL • Doua cai de testare: • operatii de baza • operatii specifice • Operatii de baza: • creare • uniune, intersectie, diferenta • iterare • Operatii specifice colectiilor: • compararea colectiilor • aflarea numarului de elemente • produsul cartezian, operatie specifica SAIL prodCart = select (*) from cart(Colectia1,Colectia2); …prodCart nu continea toate aranjamentele dintre cele doua colectii date ca parametru
Lucrul cu instructiunile limbajului • Principalele instructiuni: • iterate iterate (man,iterator) { manNames=manNames+iterator.name; } • select • specificarea unor campuri pentru selectare secondMan=select (name, age, hasJob) from man; • selectarea unor elemente dintr-o colectie cu filtru wom=select (*) from woman where Fiter(age,29); • if/else if (firstPerson.name==“Dani”) { output firstPerson; } else { output “Eroare !” }
Lucrul cu functii • Testarea functiilor • definire • apel • structura de baza a unei functii • valoarea returnata, transmiterea de parametri • overloading • referintele nu erau retinute corect
Specificatii corecte ? • “Comparatia dintre elementele unei structuri se refera la valorile lor si nu la identitatea lor fizica” In urma testelor a rezultat ca comparatia se face prin referinta ! • “Produsul cartezian dintre o colectie si ea insasi nu este posibil” Person[] col1,col2; . . . . . col1=col2; cartCol=select (*) from cart(col1,col2);
Concluzii si dezvoltari ulterioare • Test – un program SAIL • usor de inteles • ruleaza rapid • nu este necesara prezenta unui mediu special • Au fost depistate erori de implementare • In urma modificarilor viitoare aspura interpretorului limbajului SAIL, dupa aplicarea testelor, se pot identifica imediat eventualele erori aparute • 2 tipuri de testare • black box: testare functionala • glass box:testarea automatizata cu biblioteca JUNIT • testarea functionala dublata de testarea automatizata
Intrebari, va rog... Va multumesc …