120 likes | 246 Views
Návrh a implementácia modelu samo liečiaceho kódu. Riešiteľ: Bc. Anton Krbaťa Vedúci: doc. RNDr. Gabriel Semanišin, PhD. Konzultant: Mgr. Róbert Šoffa. Ciele. Analyzovať a klasifikovať typické chyby softvéru. Navrhnúť konceptuálny model pre dynamické obnovovanie systému
E N D
Návrh a implementácia modelu samoliečiaceho kódu Riešiteľ: Bc. Anton Krbaťa Vedúci: doc. RNDr. Gabriel Semanišin, PhD. Konzultant: Mgr. Róbert Šoffa
Ciele • Analyzovať a klasifikovať typické chyby softvéru. • Navrhnúť konceptuálny model pre dynamické obnovovanie systému • Analyzovať vedľajšie účinky dynamicky vygenerovaných opráv systému • Implementovať demonštračnú aplikáciu produkujúcu rôzne typy chýb, ktorá ich sama detekuje a dynamicky opraví
Fungovanie systému • Transformácia existujúceho kódu • Detekcia chyby • Analýza chyby • Výber politiky/scenáru liečenia • Zalogovanie zmien • Znovu zavedenie opraveného kódu prípadne reštart aplikácie
Transformácia existujúceho kódu • Pridanie try-catch blokov na odchytávanie výnimiek do každej metody • Možnosť použiť dynamické liečenie • Thread.setDefaultUncaughtExceptionHandler Alebo ekvivalentne Pridanie try-catch blokov iba do main metód Možnosť použiť hlavne pre statické zmeny
Detekcia a Analýza chyby • Odchytenie výnimky • Zaznamenanie chyby do logu • Zistenie pôvodcu chyby • Pomocou stacktrace • V prípade že ešte nie je vytvorený scenár liečenia vytvoriť žiadosť o jej vytvorenie
Scenár liečenia • Pre danú chybu si môžeme nadefinovať scenár liečenia (FaultModel) • Obsahuje • Meno výnimky • Javassist kód pre statické liečenie • Javassist kód pre dynamické liečenie • Meno triedy ktorá sa postará o opravu daného súboru
Logovanie zmien a znovu zavedenie • Zaznamenávanie zmien v zdrojovom kóde ktoré sa vykonajú po danej akcií • Znovu zavedenie metódy ktorá spôsobila výnimku uskutočňujeme pomocou opätovného volania metódy s rovnakými parametrami z catch bloku... • 3 spôsoby ako urobiť opätovné volanie • Vloženie kódu do catch bloku • Vytvorenie novej metódy a jej následné zavolanie • Zmena pôvodne j metódy - značné obmedzenia
Aktuálny stav • Statická časť – spôsob vloženia try-catch blokov do všetkých metód • Dynamická časť – FaultModel v podobe java triedy – podľa potreby ešte pridávané nove časti • Demonštračná aplikácia – vyvíjaná postupne ako aplikácia na testovanie aktuálneho stavu projektu
Postup práce • Naprogramovať ďalší spôsob injektovania tried • Pridanie logovania pre určité operácie ktoré systém vykonáva • Statické a dynamické liečenie • Zaevidovanie odchytenej výnimky • Vytvorenie inštancií FaultModel-u pre niektoré výnimky • Znovu zavedenie opravených súborov
Literatúra • SINHA, Saurabh – JIANG, Shujua – SHAH, Hina – KIM, Mijung – GORG, Carsten – HARROLD, Mary Jean : Fault Localization and Repair for Java Runtime Exceptions [online] ISSTA’09, Chicago, Illinois, USA, 2009. Dostupné na internete: <http://portal.acm.org/citation.cfm?id=1572291> • FENG ,Thomas Huining : Incremental Checkpointing based on Java Source Code Refactoring [online] UC Berkeley, 2005. Dostupné na internete: <http://thomasfeng.com/articles/05cs264/cs264report.pdf> • JIANG, Michael – ZHANG, Jing – RAYMER, David – STRASSNER, John: A Modeling Framework for Self-Healing Software Systems [online]. Lancaster University, UK: 2007. Dostupnénainternete: <http://www.comp.lancs.ac.uk/~bencomo/MRT07/papers/MRT07_Jiangl_etall.pdf>