Orodha ya Yaliyomo
1. Utangulizi
Mabadiliko ya kidijitali yanayochochewa na uchumi wa API yategemea usanifu tata wa huduma ndogo zilizotumika katika mazingira mchanganyiko ya wingu na ukingoni. Huduma hizi, mara nyingi kutoka kwa wauzaji wengi, huchanganywa ili kutoa thamani ya biashara. Kwa mfano, duka la vitabu la mtandaoni linaweza kuunganisha huduma ndogo za hesabu ya bidhaa, gari la ununuzi, uthibitishaji wa mkopo, na usafirishaji. Uchanganyiko huu unaanzisha changamoto kubwa za ubora zaidi ya usahihi wa kazi, ikiwa ni pamoja na kushindwa kwa mawasiliano, matatizo ya mpangilio wa ujumbe, uwekaji wa huduma, na kushindwa kwa kuvunja mzunguko.
Kujaribu API hizi ni tata kwa asili kwa sababu ya nafasi kubwa ya mlolongo unaowezekana wa wito na mchanganyiko wa vigezo, na kufanya majaribio kamisi kuwa yasiyowezekana. Majaribio ya kawaida yanayoelekezwa yanahitaji nguvu kazi nyingi. Karatasi hii inatangaza Autotest Assist, zana ya uundaji wa majaribio ya nasibu iliyoundwa kuwezesha majaribio ya API kwa kusoma maelezo ya API, kutoa mfano, na kuunda majaribio, huku ikifunua pia changamoto za maelezo.
2. Changamoto Kuu katika Uundaji wa Majaribio ya Nasibu ya API
Mfano wa uundaji wa majaribio ya nasibu unahusisha kuchagua kwa nasibu utendakazi wa API $f()$ na vigezo vyake vya ingizo halali $p_1, ..., p_k$, kuutekeleza, na kuchunguza matokeo na athari za ziada. Mchakato huu unakabiliwa na changamoto kadhaa muhimu.
2.1 Uhalali wa Ingizo la Kiufundi na Kimaanishi
Zaidi ya kutoa ingizo lililo sahihi kimaudhui, jenereta lazima ihakikishe vigezo vinazingatia masharti ya awali ya API ili wito ufanikiwe. Kwa mfano, kuita API ya "nunua kitabu" $g()$ inahitaji rejeleo halali la kitabu kilichopatikana kutoka kwa API ya awali ya "pata kitabu" $f()$.
2.2 Uthibitishaji wa Tabia na Tatizo la Oracle
Kubaini ikiwa wito wa API ulifanya kazi kama ilivyotarajiwa (tatizo la oracle la jaribio) sio jambo rahisi katika majaribio ya nasibu, hasa kwa mifumo yenye hali.
2.3 Utafutaji wa Hitilafu na Kutenganisha Tatizo
Mfumo lazima usaidie utafutaji wa hitilafu wakati jaribio lililoundwa kwa nasibu linapofunua tatizo, jambo ambalo linaweza kuwa gumu kwa sababu ya hali isiyo ya uhakika ya majaribio.
2.4 Ujumuishaji na Vifurushi vya Majaribio ya Kurudia yanayoelekezwa
Swali kuu ni jinsi ya kuunganisha kesi ya jaribio yenye thamani, iliyogunduliwa kupitia uundaji wa nasibu (hasa ile iliyofunua hitilafu), katika kifurushi thabiti cha majaribio ya kurudia yanayoelekezwa.
2.5 Tathmini ya Ufuniko na Uaminifu
Kutathmini ufuniko uliopatikana kwa uundaji wa nasibu na kubaini ikiwa unaweza kuaminika kurudisha mfumo peke yake, au ikiwa kifurushi cha majaribio yanayoelekezwa bado kinahitajika.
3. Njia ya Autotest Assist
Autotest Assist inashughulikia changamoto mbili za kwanza kwa kuzingatia kimsingi maelezo ya API.
3.1 Maelezo ya API kama Msingi
Zana husoma maelezo ya API, ambayo lazima yafafanue masharti ya awali na ya baadae. Maelezo haya hutumika kama chanzo kimoja cha ukweli cha kuunda majaribio halali na oracle.
3.2 Utoaji wa Mfano na Uundaji wa Majaribio
Kutoka kwa maelezo, Autotest Assist hutoa mfano wa tabia ya API, utegemezi, na hali. Mfano huu kisha hutumiwa kuendesha uundaji wa nasibu wa mlolongo halali wa wito wa API kimaudhui na kimaanishi.
3.3 Kufunua Changamoto za Maelezo
Faida kubwa ya ziada ya njia hii ni kwamba mchakato wa kusoma na kuiga maelezo wenyewe unaweza kufunua utata, kutolingana, au ukosefu wa vikwazo katika maelezo—changamoto ambazo zinaweza kusababisha makosa ya ujumuishaji.
4. Ufahamu Muhimu & Mtazamo wa Mchambuzi
Ufahamu Msingi
Autotest Assist sio tu zana nyingine ya uwezeshaji wa majaribio; ni mtekelezaji wa kufuata maelezo. Thamani yake halisi iko katika kutibu maelezo ya API sio kama hati, bali kama mkataba unaotekelezwa. Uundaji wa nasibu ni jaribio la msongo tu kwa mkataba huo. Hii inalingana na falsafa ya kuhama kushoto inayotangazwa na utafiti kutoka Taasisi ya Uhandisi wa Programu ya Carnegie Mellon, ambayo inasisitiza kukamata kasoro katika hatua ya maelezo ili kupunguza gharama kwa kasi.
Mtiririko wa Kimantiki
Mantiki ya karatasi hii ni ya kulazimisha: 1) Uchumi wa API una tata isiyoweza kujaribiwa kwa mikono. 2) Uundaji wa nasibu unaweza kuongezeka lakini ni wa kijinga. 3) Suluhisho: Zuia nasibu kwa maelezo. 4) Ziada: Mchakato wa kusoma maelezo unakuwa hatua ya uthibitishaji. Hii inafanana na mafanikio ya majaribio yanayotegemea mfano katika mifumo muhimu ya usalama, kama inavyoonekana katika mifumo kama Fuzzing, ambapo uundaji wa ingizo wenye muundo unafanya vizuri kuliko nasibu safi.
Nguvu na Kasoro
Nguvu: Mwelekeo wa kimatumizi kwenye changamoto za ulimwengu halisi kama ujumuishaji wa majaribio na utafutaji wa hitilafu. Mkazo wa kufunua kasoro za maelezo ni ufafanuzi mzuri wa ukomo wa zana kama kipengele. Kasoro Muhimu: Njia hii inategemea kabisa ubora na uwezo wa kusomeka kwa mashine wa maelezo. Katika ulimwengu halisi, kama ilivyobainishwa katika tafiti kutoka Blogu ya Kujaribu ya Google, maelezo ya API mara nyingi hayakamiliki, yamepitwa na wakati, au hayana muundo rasmi. Autotest Assist ina hatari ya kuwa mfumo wa "taka ndani, taka nje" ikiwa maelezo ni duni, onyo ambalo karatasi hii haijasisitiza vya kutosha.
Ufahamu Unaotekelezwa
Timu hazipaswi kutumia Autotest Assist peke yake. Kipaumbele lazima iwe kwanza kuwekeza katika kuunda maelezo madhubuti ya API yanayoweza kuchanganuliwa na mashine (kwa mfano, kutumia OpenAPI na miundo ya kina na mifano). Zana hii inapaswa kuwa chanzo cha nidhamu hiyo. Zaidi ya hayo, matokeo yake yanapaswa kusambazwa kwenye mfumo wa kupanga vipaumbele ambapo majaribio ya nasibu yanayoshindwa yanachambuliwa sio tu kwa hitilafu katika utekelezaji, bali pia kwa mapungufu katika maelezo wenyewe, na hivyo kuunda mzunguko mzuri wa uboreshaji.
5. Maelezo ya Kiufundi & Mfumo wa Hisabati
Kiini cha Autotest Assist kinahusisha utoaji wa mfano kutoka kwa maelezo. Tunaweza kufikiria API $f$ kama utendakazi wenye masharti ya awali $Pre_f$ na masharti ya baadae $Post_f$. Hali ya mfumo $S$ inabadilishwa na wito wa API.
Algorithm ya uundaji inaweza kufupishwa kama:
- Mfano: Kwa kila API $f_i$, toa $Pre_{f_i}(S, \vec{p})$ na $Post_{f_i}(S, S', \vec{p}, \vec{r})$ ambapo $S$ ni hali ya awali, $S'$ ni hali ya baadae, $\vec{p}$ ni vigezo, na $\vec{r}$ ni matokeo.
- Uchaguzi: Chagua kwa nasibu API $f_i$ ambapo $Pre_{f_i}(S_{current}, \vec{p})$ inaweza kuridhika. Hii inahitaji kutatua kwa $\vec{p}$ kwa kuzingatia $S_{current}$.
- Uundaji: Unda thamani halisi za $\vec{p}$ zinazoridhisha $Pre_{f_i}$.
- Utekelezaji & Uthibitishaji: Tekeleza $f_i(\vec{p})$, chunguza hali mpya $S'_{observed}$ na matokeo $\vec{r}_{observed}$. Thibitisha ikiwa $Post_{f_i}(S_{current}, S'_{observed}, \vec{p}, \vec{r}_{observed})$ inashikilia.
- Sasisho la Hali: Ikiwa halali, sasisha $S_{current} = S'_{observed}$.
Changamoto ni kutatua kwa ufanisi vikwazo katika hatua 2 na 3, ambayo inahusiana na tatizo la Uhalalishaji Modulo Nadharia (SMT).
6. Matokeo ya Majaribio & Utendaji
Ingawa sehemu iliyotolewa ya PDF haina matokeo maalum ya kiasi, karatasi hii inamaanisha vipimo vya utendaji ambavyo vingekuwa muhimu kwa tathmini:
- Kiwango cha Ugunduzi wa Hitilafu: Idadi na ukali wa kasoro (katika utekelezaji na maelezo) zilizofunuliwa kwa kila kitengo cha wakati wa kujaribu ikilinganishwa na majaribio yanayoelekezwa.
- Kiwango cha Uhalali wa Mlolongo: Asilimia ya mlolongo wa wito wa API ulioundwa kwa nasibu ambao ni halali kimaanishi (yaani, inaridhisha masharti yote ya awali), ikionyesha ufanisi wa mfano.
- Ufuniko wa Nafasi ya Hali: Vipimo vya ufuniko wa hali tofauti za mfumo na mipaka ya thamani ya vigezo, ambavyo kwa uwezekano hupimwa kwa kutumia zana za ufuniko wa msimbo au vipimo maalum vya hali.
- Ugunduzi wa Changamoto za Maelezo: Uchambuzi wa ubora wa aina za utata au makosa yaliyopatikana katika maelezo ya API wakati wa hatua ya kuiga.
Chati ya matokeo ya kinadharia ingeonyesha mkunjo mkali wa awali wa ugunduzi wa hitilafu kwa majaribio ya nasibu, hatimaye ikisimama, wakati majaribio yanayoelekezwa yanatoa ugunduzi thabiti lakini wa kiwango cha chini. Njia iliyochanganywa inatoa ugunduzi wa juu zaidi wa kasoro zilizokusanyika.
7. Mfumo wa Uchambuzi: Mfano Usio na Msimbo
Fikiria "API ya Duka la Vitabu" iliyorahisishwa yenye shughuli mbili:
GET /book/{id}: Inarudisha maelezo ya kitabu. Sharti la Awali: Kitabu chenye `{id}` lazima kipo kwenye hesabu ya bidhaa.POST /cart/{bookId}: Huongeza kitabu kwenye gari la ununuzi. Sharti la Awali: Kitabu chenye `{bookId}` lazima kiwe kinapatikana (kipo na kipo kwenye hesabu).
Mtiririko wa Kazi wa Autotest Assist:
- Utoaji wa Mfano: Zana husoma maelezo na kujifunza utegemezi: `POST /cart` inahitaji wito wa `GET /book` uliofanikiwa kwanza (ili kuthibitisha uwepo/upatikanaji).
- Uundaji wa Majaribio: Huamua kwa nasibu kujaribu `POST /cart/{bookId}`.
- Kutatua Vigezo: Ili kuridhisha sharti la awali, lazima kwanza itoe `bookId` halali. Inaweza kufanya hivyo kwa:
a) Kuita `GET /book` kwa ID ya nasibu hadi moja ifanikiwe (kupima).
b) Kutumia orodha inayojulikana ya ID kutoka kwa mkimbio wa jaribio la awali au data ya mbegu.
Kisha hutumia `bookId` hii halali kwa wito wa `POST /cart`. - Ugunduzi wa Changamoto: Ikiwa maelezo ya `POST /cart` yanataja tu "kitabu lazima kipo" lakini utekelezaji pia unakagua kiwango cha hesabu, jaribio la nasibu linaweza kushindwa. Autotest Assist huashiria hii kama changamoto ya maelezo: sharti la awali katika maelezo halijakamilika.
- Ujumuishaji wa Kurudia: Mlolongo `[GET /book/valid_id, POST /cart/valid_id]` ambao uliweza kuongeza kipengee kwenye gari la ununuzi huhifadhiwa kama mgombea wa kifurushi cha majaribio ya kurudia yanayoelekezwa.
8. Matumizi ya Baadaye & Mwelekeo wa Utafiti
- Utoaji wa Maelezo Ulioimarishwa na AI: Kuunganisha LLM kutafsiri lugha asilia au maelezo yasiyokamilika na kupendekeza masharti rasmi ya awali/ya baadae, na hivyo kupunguza mzigo wa kuunda maelezo kamili mapema.
- Uundaji wa Kukabiliana na Maoni: Kuhamia zaidi ya nasibu safi kwa kutumia ujifunzaji wa kuimarisha. Jenereta ingejifunza ni mlolongo gani wa API na thamani gani za vigezo zina uwezekano mkubwa wa kupata hitilafu mpya au kuchunguza nafasi ya hali isiyofunikwa, sawa na mbinu katika fuzzing inayokabiliana.
- Majaribio ya Kuvuka Huduma & Ujumuishaji: Kupanua mfano kuelewa utegemezi na mikataba kati ya huduma ndogo kutoka kwa wauzaji tofauti, na kuunda majaribio kwa mtiririko tata wa kazi za huduma nyingi na hali za kushindwa (kwa mfano, muundo wa kuvunja mzunguko).
- Majaribio ya Kufuata Kanuni & Usalama: Kuunganisha sera za usalama (kwa mfano, maeneo ya OAuth, sheria za faragha ya data) ndani ya mfano ili kuunda majaribio kiotomatiki ambayo yanathibitisha mahitaji ya kufuata kanuni ya kazi na yasiyo ya kazi.
- Ufuatiliaji wa API ya Moja kwa Moja & Majaribio: Kutumia mfano huo huo kuunda kifurushi cha majaribio cha kiasi kidogo, kinachoendelea kinachofanywa dhidi ya mazingira ya uzalishaji au majaribio ili kugundua kurudi nyuma au mabadiliko ya maelezo kwa wakati halisi.
9. Marejeo
- Farchi, E., Prakash, K., & Sokhin, V. (2022). Uundaji wa Nasibu wa Majaribio ya Kiolesura cha Programu. arXiv preprint arXiv:2207.13143v2.
- Myers, G. J., Sandler, C., & Badgett, T. (2011). Sanaa ya Kujaribu Programu. John Wiley & Sons. (Kwa kanuni za msingi za kujaribu).
- Osterweil, L., et al. (2020). Kuhama Kushoto: Athari za Kiuchumi za Ugunduzi wa Mapema wa Kasoro. Chuo Kikuu cha Carnegie Mellon, Taasisi ya Uhandisi wa Programu. (Kwa uchambuzi wa gharama na faida ya majaribio ya mapema).
- Blogu ya Kujaribu ya Google. (2019). Fuzzing kwa Kipimo Kikubwa. Imepatikana kutoka https://testing.googleblog.com/. (Kwa ufahamu wa vitendo wa majaribio ya nasibu ya kipimo kikubwa).
- de Moura, L., & Bjørner, N. (2008). Z3: Kitatuzi cha SMT chenye Ufanisi. Zana na Algorithms kwa Ujenzi na Uchambuzi wa Mifumo. (Kwa msingi wa kiufundi katika kutatua vikwazo vinavyotumika katika uundaji wa majaribio).
- Mradi wa OpenAPI. (2023). Maelezo ya OpenAPI v3.1.0. https://spec.openapis.org/oas/v3.1.0. (Kwa kiwango cha maelezo ya API yanayoweza kusomeka na mashine).