Keresésalapú szoftvertervezés

A Wikipédiából, a szabad enciklopédiából

A keresésalapú szoftverfejlesztés (search-based software engineering, SBSE) metaheurisztikus keresési technikákat alkalmaz szoftverfejlesztési problémák megoldására, mint például genetikus algoritmusokokat, szimulált hűtést, tabu keresést. Az operációkutatásban alkalmazott optimalizálási technikák (például lineáris vagy dinamikus programozás) összetettségük miatt általában nem praktikusak nagyszabású szoftverfejlesztési feladatok esetén. A kutatók és a programozók metaheurisztikus keresési technikákat alkalmaznak, amelyeket nem befolyásol a probléma szerkezete, annak érdekében, hogy szinte optimális vagy legalábbis megfelelő megoldásokat találjanak.

Az SBSE-problémák két típusra oszthatóak:

  • feketedobozos problémák, például emberek hozzárendelése egyes feladatokhoz (tipikus kombinatorikus optimalizálási feladat)
  • fehérdobozos problémák, amelyeknél fontolóra kell venni a forráskódon végzett műveleteket.[1]

Meghatározás[szerkesztés]

Az SBSE egy szoftvertervezési problémát egy egyszerű keresési problémává alakít, amely metaheurisztikus módszerekkel kezelhető; ez számos esetben alkalmazható.[2] Ez magában foglalja a keresési térnek, vagy a lehetséges megoldások halmazának meghatározását. Ez a tér általában túl nagy ahhoz, hogy kimerítően kezelhető legyen, ez pedig metaheurisztikus megközelítésre sarkall. Ezután egy metrikát (más néven fitness függvényt, költségfüggvényt, objektív függvényt vagy minőségi mutatót) használnak a lehetséges megoldások minőségének meghatározására.[3]

Az SBSE nem összetévesztendő a keresésalapú alkalmazással (search-based application), mely keresőmotor-technológiákat (nem keresési technikákat) alkalmaz ipari alkalmazásokban.

Rövid története[szerkesztés]

Webb Miller és David Spooner 1976-ban számolt be az egyik legkorábbi próbálkozásról: a szoftvertesztelés területén próbáltak optimalizálást keresni egy szoftvertervezési feladatra.[4] 1992-ben S. Xanthakis és munkatársai először alkalmaztak keresési technikát egy szoftverfejlesztési problémára.[5] Az SBSE kifejezést 2001-ben használta először Harman és Jones.[6] A kutatói közösség 2013-ig több mint 800 szerzővel bővült, és 40 ország mintegy 270 intézményére terjedt ki.[7]

Alkalmazási területek[szerkesztés]

A keresésalapú szoftvertervezés a szoftverfejlesztési folyamat szinte minden szakaszában alkalmazható. Egyik leggyakoribb alkalmazása a szoftverek tesztelésénél van,[8] de más szoftvertervezési tevékenységekben is alkalmazzák, például követelményelemzés, szoftvertervezés, kódrefaktorálás, szoftverfejlesztés, karbantartásban.

Követelménytervezés[szerkesztés]

A követelménytervezés az a folyamat, amelynek során meghatározzák és kezelik a szoftver felhasználói és környezeti igényeit. Keresésalapú módszereket alkalmaznak a követelmények kiválasztásához és optimalizálásához azzal a céllal, hogy megtalálják a követelmények lehető legjobb részhalmaztát, amely megfelel a felhasználói igényeknek, figyelembe véve a korlátozott erőforrásokat és a kölcsönös függőségeket. Ezt a problémát gyakran több kritériumot tartalmazó döntéshozatali problémaként (MCDM) kezelik, és általában magában foglalja a döntéshozó számára a kompromisszumok halmazát a költség és a felhasználói elégedettség, valamint a követelmények kockázata között.

Hibakeresés és karbantartás[szerkesztés]

A szoftverhibák azonosítása és kijavítása (vagy a kód refatorálása) nagyrészt emberi és munkaigényes erőfeszítés, bár a folyamat eszköztámogatott. Az SBSE egyik célja a hibák automatikus azonosítása és kijavítása (például mutációs teszteléssel).

A biológia által ihletett genetikus programozás, amely keresztezés és mutáció segítségével járul hozzá a szoftverek fejlesztéséhez, a forráskód néhány sorának megváltoztatásával keresi és javítja a programok hibáit. A GenProg Evolutionary Program Repair szoftver 105 hibából 55-öt javított ki egy teszt alatt, egyenként körülbelül 8 dollárért.[9]

A koevolúció egy „ragadozó és zsákmány” metaforát alkalmaz, amelyben egy programcsomag és egy egységteszt együtt fejlődik és befolyásolja egymást.[10]

Tesztelés[szerkesztés]

A keresésalapú szoftvertervezést gyakran alkalmazzák a szoftvertesztelés berkein belül, ideértve a tesztesetek (tesztadatok) automatikus előállítását, az esetek minimalizálását és rangsorolását.[11] Ezek mellett a regressziós tesztelés is figyelmet kapott.

Optimalizáló szoftver[szerkesztés]

Az SBSE használata a programoptimalizálásban (egy szoftver módosítása annak érdekében, hogy hatékonyabb legyen, ami a sebességet és az erőforrás-felhasználást illeti) sikeres kutatás tárgya volt.[12] Egyik esetben egy 50 000 soros program genetikailag javult, mely 70-szer gyorsabb futást eredményezett.[13] Basios és mások munkája kimutatta, hogy az adatstruktúra optimalizálásával a Google Guava szerint a végrehajtási idő 9%-kal, a memóriahasználat 13%-kal, a processzorhasználat 4%-kal javult.[14]

Projektmenedzsment[szerkesztés]

Számos döntést, amelyet általában egy projektmenedzser léptet életbe, meg lehet hozni automatikusan (például a projekt ütemezését).[15]

Eszközök[szerkesztés]

Az SBSE számára elérhető eszközök közé tartozik az OpenPAT[16] és az EvoSuite[17] valamint a Coverage, egy kódlefedettség-mérőeszköz Pythonhoz.[18]

Módszerek és technikák[szerkesztés]

Számos módszer és technika áll rendelkezésre, többek között:

  • Profilozás[19] mérőeszközökön keresztül, melyek a program egyes részeit figyelik futás közben
  • A program absztrakt szintaxisfájának elkészítése, amely segítségével betekintést nyerhetünk a program szerkezetébe
  • SBSE-alapú szeletelés (program slicing) alkalmazásai: karbantartás, optimalizálás, programelemzés
  • Kódlefedettség mérése (a kód mekkora része fut le adott bemeneti adatkészlettel)
  • Statikus kódanalízis

Elfogadottsága[szerkesztés]

Az SBSE, mint viszonylag új kutatási terület, még nem élvez széleskörű elfogadottságot az iparágban.

Az SBSE sikeres alkalmazása az iparágban többnyire a szoftveres tesztelésen belül található, ahol a vállalatok számára vonzó az a lehetőség, hogy automatikusan véletlenszerű tesztbemeneteket generáljanak a hibák nagy mértékű feltárására. 2017-ben a Facebook megvásárolta a Majicke Limited startupot, amely kifejlesztette a Sapienz nevű keresésalapú hibakereső alkalmazást.[20]

Más alkalmazási esetekben a szoftvermérnökök nem szívesen támaszkodnak olyan eszközökre, amelyekbe korlátozott beavatkozásuk van, vagy amik olyan megoldásokat eredményeznek, amelyek eltérnek az emberek által generáltaktól.[21] Mikor a programok javítására vagy fejlesztésére SBSE-t alkalmaznak, a fejlesztőknek biztosnak kell lenniük abban, hogy bármilyen automatikus módosítás nem okoz váratlan viselkedést, melyek túlmutatnak a rendszer követelményein és tesztelési környezetén. Figyelembe véve, hogy a teljesen automatizált programozást még el kell érni, az ilyen módosítások kívánatos tulajdonsága az lenne, hogy az emberek könnyen megértsék, így könnyebben tufjanak karbantartási tevékenységeket végezni.[22]

További gond, hogy az SBSE feleslegessé teheti a szoftvermérnököket. A támogatók azt állítják, hogy az SBSE célja a mérnök és a program közötti kapcsolat javítása.[23]

Jegyzetek[szerkesztés]

  1. Harman, Mark (2010). „Why Source Code Analysis and Manipulation Will Always be Important”. 10th IEEE Working Conference on Source Code Analysis and Manipulation (SCAM 2010): 7–19. doi:10.1109/SCAM.2010.28. 
  2. Clark et al (2003). „Reformulating software engineering as a search problem”. IEE Proceedings - Software 150 (3), 161–175. o. DOI:10.1049/ip-sen:20030559. ISSN 1462-5970.  
  3. Harman, Mark (2004). „Metrics are fitness functions too”. 10th International Symposium on Software Metrics, 2004: 58–69. doi:10.1109/METRIC.2004.1357891. 
  4. Miller et al. (1976). „Automatic Generation of Floating-Point Test Data”. IEEE Transactions on Software Engineering SE-2 (3), 223–226. o. DOI:10.1109/TSE.1976.233818. ISSN 0098-5589.  
  5. S. Xanthakis, C. Ellis, C. Skourlas, A. Le Gall, S. Katsikas and K. Karapoulios, "Application of genetic algorithms to software testing," in Proceedings of the 5th International Conference on Software Engineering and its Applications, Toulouse, France, 1992, pp. 625–636
  6. Harman és Bryan (2001. december 15.). „Search-based software engineering”. Information and Software Technology 43 (14), 833–839. o. DOI:10.1016/S0950-5849(01)00189-6. ISSN 0950-5849.  
  7. Harman et al (2012. november 1.). „Search-based software engineering: Trends, techniques and applications” (angol nyelven). ACM Computing Surveys 45 (1), 1–61. o. DOI:10.1145/2379776.2379787.  
  8. McMinn, Phil (2004). „Search-based software test data generation: a survey”. Software Testing, Verification and Reliability 14 (2), 105–156. o. DOI:10.1002/stvr.294. ISSN 1099-1689.  
  9. (2012) „A systematic study of automated program repair: Fixing 55 out of 105 bugs for $8 each”. 2012 34th International Conference on Software Engineering (ICSE): 3–13. doi:10.1109/ICSE.2012.6227211. 
  10. (2008) „A novel co-evolutionary approach to automatic software bug fixing”. IEEE Congress on Evolutionary Computation, 2008. CEC 2008. (IEEE World Congress on Computational Intelligence): 162–168. doi:10.1109/CEC.2008.4630793. 
  11. Harman (2015. április 1.). „Achievements, Open Problems and Challenges for Search Based Software Testing”. 2015 IEEE 8th International Conference on Software Testing, Verification and Validation (ICST), Graz, Austria, 1–12. o, Kiadó: IEEE. DOI:10.1109/ICST.2015.7102580.  
  12. Memeti (2018. április 27.). „Using meta-heuristics and machine learning for software optimization of parallel computing systems: a systematic literature review”. Computing 101 (8), 893–936. o. DOI:10.1007/s00607-018-0614-9.  
  13. Langdon. „Optimising Existing Software with Genetic Programming”. IEEE Transactions on Evolutionary Computation.  
  14. Basios, Michail. Optimising Darwinian Data Structures on Google Guava, Lecture Notes in Computer Science (angol nyelven), 161–167. o.. DOI: 10.1007/978-3-319-66299-2_14 (2017. szeptember 9.). ISBN 978-3-319-66298-5 
  15. (2012) „Evolutionary algorithms for the project scheduling problem: runtime analysis and improved design”.: 1221–1228, New York, NY, USA: ACM. doi:10.1145/2330163.2330332. 
  16. Predicting Regression Test Failures Using Genetic Algorithm-Selected Dynamic Performance Analysis Metrics”. 8084: 158–171. doi:10.1007/978-3-642-39742-4_13. 
  17. (http://www.evosuite.org/)
  18. others, Ned Batchelder and 100, coverage: Code coverage measurement for Python, <https://bitbucket.org/ned/coveragepy>. Hozzáférés ideje: 2021-05-23 Archiválva 2020. július 28-i dátummal a Wayback Machine-ben Archivált másolat. [2020. július 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2021. május 23.)
  19. Open Source Profilers in Java. [2021. május 7-i dátummal az eredetiből archiválva]. (Hozzáférés: 2021. május 23.)
  20. Sapienz: Facebook’s push to automate software testing. VentureBeat, 2018. december 30. (Hozzáférés: 2020. szeptember 29.)
  21. Jones: Programming using genetic algorithms: isn't that what humans already do ;-). The Shape of Code, 2013. október 18. (Hozzáférés: 2013. október 31.)
  22. Le Goues (2013. szeptember 1.). „Current challenges in automatic software repair”. Software Quality Journal 21 (3), 421–443. o. DOI:10.1007/s11219-013-9208-0. ISSN 1573-1367.  
  23. (2013. május 1.) „Whither (away) software engineers in SBSE?”.. 

További információk[szerkesztés]

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Search-based software engineering című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.