1 / 13

Erori in interpretorul limbajului SAIL

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

nemo
Download Presentation

Erori in interpretorul limbajului SAIL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Daniel Cioata Erori in interpretorul limbajului SAIL

  2. 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)

  3. 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

  4. 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

  5. Principalele categorii de teste • Operatii asupra tipurilor elementare • Operatii asupra tipurilor compuse • lucrul cu structuri • lucrul cu colectii • Lucrul cu instructiunile limbajului • select

  6. 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

  7. 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

  8. 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

  9. 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 !” }

  10. Lucrul cu functii • Testarea functiilor • definire • apel • structura de baza a unei functii • valoarea returnata, transmiterea de parametri • overloading • referintele nu erau retinute corect

  11. 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);

  12. 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

  13. Intrebari, va rog... Va multumesc …

More Related