Yaliyomo
1. Utangulizi
Muongo mmoja uliopita umeona ukuaji mkubwa wa API za wavuti, hasa API za RESTful zinazofuata mtindo wa usanifu wa REpresentational State Transfer. Huduma za kisasa za wavuti hutoa API za REST kwa wateja ili kufikia utendakazi wao, na hii inachochea ukuzaji wa mbinu na zana nyingi za kupima otomatiki.
Utafiti huu unashughulikia changamoto ya kulinganisha zana za kupima API za REST ambazo zimetathminiwa katika mazingira tofauti na vipimo tofauti. Tunawasilisha utafiti wa kwanza wa kina wa kimaumbile ambao utambulisha kwa utaratibu zana za kitaaluma na za watendaji, uchambue sifa za msimbo zinazoathiri utendaji wa zana, ufanye uchambuzi wa kina wa hitilafu, na utambue mwelekeo maalum wa utafiti wa baadaye.
Zana 10 Zilizotathminiwa
Zikiwemo zana za kitaaluma na za tasnia
Huduma 20 za Ulimwengu Halisi
API za RESTful za chanzi wazi kama viwango vya kulinganisha
Vipimo 2 Muhimu
Ufuniko wa msimbo na hitilafu za kipekee zilizogunduliwa
2. Mbinu
2.1 Uchaguzi wa Zana
Tulifanya utafiti wa kina wa fasihi ambao ulitambua zana 8 za kitaaluma na zana 11 za watendaji. Baada ya kutumia vigezo vya uteuzi ikiwemo upatikanaji, nyaraka, na hali ya udumishaji, tulichagua zana 10 za kisasa za tathmini kamili.
2.2 Huduma za Kigezo
Kigezo chetu kina huduma 20 za RESTful zilizochaguliwa kutoka kwa kazi zinazohusiana na utafutaji wa GitHub. Vigezo vya uteuzi vilijumuisha:
- Utekelezaji wa chanzi wazi wa Java/Kotlin
- Upatikanaji wa maelezo ya OpenAPI
- Kutegemea kiwango cha chini rasilimali za nje
- Matumizi na utata wa ulimwengu halisi
2.3 Vipimo vya Tathmini
Tulitathmini zana kwa kutumia vipimo viwili muhimu:
- Ufuniko wa Msimbo: Ufuniko wa mistari, ufuniko wa matawi, na ufuniko wa mbinu uliopimwa kwa kutumia JaCoCo
- Uvumbuzi wa Hitilafu: Hitilafu za kipekee zilizosababishwa, zilizopangwa kulingana na aina na ukali
3. Matokeo ya Majaribio
3.1 Uchambuzi wa Ufuniko wa Msimbo
Matokeo yetu yanaonyesha tofauti kubwa katika ufuniko wa msimbo uliopatikana kwa zana tofauti. Zana zilizo na utendaji bora zilifikia hadi asilimia 78 ya ufuniko wa mistari, huku zingine zikikosa kufikia asilimia 30. Ufuniko ulikuwa mgumu hasa kwa msimbo wa kushughulikia makosa na mantiki tata ya biashara.
Kielelezo 1: Ulinganisho wa ufuniko wa msimbo kwenye zana 10 za kupimia. Zana zinazotumia algorithm za mageuzi na utekelezaji wa ishara zilikuwa bora zaidi kuliko mbinu za kupimia nasibu.
3.2 Uvumbuzi wa Hitilafu
Zana zilifichua hitilafu 247 za kipekee katika huduma za kigezo. Aina za hitilafu zilijumuisha:
- Hitilafu za HTTP 500 za Seva ya Ndani (42%)
- HTTP 400 Ombi Baya (28%)
- Isipokuwa za kielekezi tupu (15%)
- Kuvuja kwa rasilimali (8%)
- Isipokuwa zingine (7%)
3.3 Ulinganisho wa Zana
Hakuna zana moja iliyotawala katika vipimo vyote. Zana zilifanikiwa katika maeneo tofauti:
- EvoMaster: Bora kabisa kwa ufuniko wa jumla
- RESTler: Bora zaidi kwa kupimia API zenye hali
- Schemathesis: Bora kwa uthibitishaji wa mpangilio
4. Uchambuzi wa Kiufundi
4.1 Mfumo wa Kihisabati
Tatizo la uzalishaji wa vipimo linaweza kuwekwa kwa umbo la tatizo la uboreshaji. Acha $T$ iwe seti ya visa vya kipimo, $C$ iwe kigezo cha ufuniko, na $F$ iwe seti ya hitilafu. Lengo ni kuongeza kiwango cha juu:
$$\max_{T} \left( \alpha \cdot \text{cov}(T, C) + \beta \cdot \sum_{f \in F} \mathbb{1}_{f \text{ imegunduliwa na } T} \right)$$
ambapo $\alpha$ na $\beta$ ni uzani, na $\text{cov}(T, C)$ inapima jinsi safu ya vipimo $T$ inavyokidhi kigezo cha ufuniko $C$.
4.2 Utekelezaji wa Algorithm
Hapa kuna msimbo wa uwongo uliorahisishwa wa uzalishaji wa kipimo cha API ya REST:
function generateTests(apiSpec, maxTime):
testSuite = initializeTestSuite()
population = initializePopulation(apiSpec)
while timeElapsed < maxTime:
for individual in population:
testCase = decodeIndividual(individual)
coverage, failures = executeTest(testCase, apiSpec)
fitness = calculateFitness(coverage, failures)
updateIndividualFitness(individual, fitness)
population = selectAndReproduce(population)
population = mutatePopulation(population, apiSpec)
testSuite.updateBestTests(population)
return testSuite.getBestTests()
5. Mwelekeo wa Baadaye
Kulingana na matokeo yetu, tunatambua mwelekeo kadhaa wa utafiti unaotumainiwa:
- Mbinu Mchanganyiko: Kuchanganya mikakati mingi ya kupimia
- Kujifunza kwa Mashine: Kutumia ML kutabiri pembejeo bora za kipimo
- Uwekaji ndani ya Kontena: Kushughulikia vyema utegemezi wa nje
- Kupimia Usalama: Kupanua kwa ugunduzi wa udhaifu wa usalama wa API
Uchambuzi wa Asili
Utafiti huu wa kimaumbili unawakilisha maendeleo makubwa katika utafiti wa kupimia API za REST kwa kutoa ulinganisho wa kwanza wa kina wa zana za kitaaluma na za tasnia. Matokeo yanaonyesha kuwa ingawa maendeleo makubwa yamefanyika, bado kuna nafasi kubwa ya kuboresha, hasa katika kufikia ufuniko wa juu thabiti wa msimbo katika utekelezaji tofauti wa API.
Mbinu ya utafiti inalingana na desturi zilizoanzishwa za uhandisi wa programu wa kimaumbile, sawa na mbinu madhubuti za tathmini zilizoonekana katika kazi za msingi kama karatasi ya CycleGAN (Zhu et al., 2017), ambayo ililinganisha kwa utaratibu miundo mingi ya uzalishaji. Hata hivyo, tofauti na mwelekeo wa CycleGAN kuhusu tafsiri ya picha, kazi hii inashughulikia changamoto za kipekee za kupimia API za REST, ikiwemo mwingiliano wenye hali na utegemezi tata wa data.
Ufahamu mmoja muhimu ni usawa kati ya mikakati tofauti ya kupimia. Zana zinazotegemea algorithm za mageuzi, sawa na zile zinazotumiwa katika kupimia programu kulingana na utafutaji (Harman & Jones, 2001), zilionyesha ufuniko bora lakini zilihitaji rasilimali zaidi za kompyuta. Hii inafanana na matokeo kutoka kwa IEEE Transactions on Software Engineering kuhusu ukubwa wa rasilimali wa mbinu za kisasa za kupimia.
Uchambuzi wa hitilafu unaonyesha kuwa zana za sasa ni bora hasa katika kugundua hitilafu za moja kwa moja za utekelezaji lakini hushindwa na hitilafu tata za mantiki ya biashara. Kikwazo hiki kinafanana na changamoto zilizotambuliwa katika uchambuzi wa ACM Computing Surveys wa mipaka ya kupimia otomatiki (Barr et al., 2015), ambapo uelewa wa maana bado ni kikwazo kikubwa.
Kwa kuangalia mbele, ushirikishwaji wa miundo kubwa ya lugha kwa uzalishaji wa vipimo, kama ilivyoachunguzwa katika kazi ya hivi karibuni kutoka kwa Google Research na Microsoft Research, kunaweza kushughulikia baadhi ya mipaka ya sasa. Hata hivyo, kama ilivyoelezwa katika chapisho la awali la arXiv na watafiti kutoka Stanford na MIT, uthibitishaji makini unahitajika ili kuhakikisha kuwa mbinu kama hizo zinaenea katika mifumo tofauti ya API.
Mchango wa utafiti katika kuanzisha viwango vya kawaida vya kulinganisha ni wa thamani hasa, sawa na athari ya ImageNet katika tazamo ya kompyuta. Kwa kutoa mfumo wa kawaida wa tathmini, kazi hii inawezesha ulinganisho wenye maana zaidi na inaharakisha maendeleo katika eneo hilo, na inaweza kuathiri ukuzaji wa zana za baadaye katika mazingira ya kitaaluma na ya tasnia.
6. Marejeo
- Kim, M., Xin, Q., Sinha, S., & Orso, A. (2022). Automated Test Generation for REST APIs: No Time to Rest Yet. In Proceedings of ISSTA '22.
- Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks. In Proceedings of ICCV.
- Harman, M., & Jones, B. F. (2001). Search-based software engineering. Information and Software Technology.
- Barr, E. T., Harman, M., McMinn, P., Shahbaz, M., & Yoo, S. (2015). The Oracle Problem in Software Testing: A Survey. IEEE Transactions on Software Engineering.
- Martin-Lopez, A., Segura, S., & Ruiz-Cortés, A. (2021). RESTest: Black-Box Testing of RESTful Web APIs. In Proceedings of ICSOC.
- Atlidakis, V., Godefroid, P., & Polishchuk, M. (2019). RESTler: Stateful REST API Fuzzing. In Proceedings of ICSE.
- Arcuri, A. (2019). RESTful API Automated Test Case Generation with EvoMaster. ACM Transactions on Software Engineering and Methodology.