Ang regression testing ay ang proseso ng muling pagsusuri ng application pagkatapos gumawa ng mga pagbabago upang matukoy ang mga depekto sa dating gumaganang functionality. Bawat pagbabago ng code — bagong functionality, pag-aayos ng bug o refactoring — ay maaaring hindi sinasadyang masira ang mga umiiral na kakayahan ng application. Awtomatiko ng regression tests ang pagpapatunay na ang lumang functionality ay nanatiling gumagana. Ayon sa pag-aaral ng IBM, 2023, ang regression testing ay sumasaklaw mula 30 hanggang 70% ng lahat ng isinasagawang pagsusulit sa mga komersyal na product team, na nagbibigay-diin sa papel nito bilang pangunahing hadlang laban sa mga insidente sa produksyon.
Mga Pangunahing Punto
Ang regression testing ay isang uri ng pagsusuri na naglalayong kumpirmahin na ang mga pagbabago sa code ay hindi nakaapekto sa umiiral na functionality. Ang terminong „regression” ay nangangahulugang pagbabalik sa mas masamang estado — kapag ang isang function na gumagana sa nakaraang bersyon ay huminto sa paggana sa bago. Ang regression tests ay isinasagawa nang maraming beses sa bawat development cycle, na nagpapahiwalay sa kanila mula sa mga pagsusulit ng bagong functionality na isinusulat nang isang beses lamang.
Ang pangangailangan para sa regression testing ay nagmumula sa epekto ng mga cascading na pagbabago: ang pag-aayos ng bug sa isang module ay maaaring malutas ang problema ngunit masira ang katabing functionality na nakadepende dito. Halimbawa, ang pagbabago ng SQL query sa user repository ay maaaring mapabilis ang pag-login ngunit masira ang data export na gumamit ng parehong query. Ang regression test sa data export ay makakatuklas ng paglabag na ito bago ang release.
Ayon sa ulat ng CISQ 2023, ang gastos sa pag-aayos ng regression defect na natuklasan sa produksyon ay 15 beses na mas mataas kaysa sa yugto ng automated regression run. Ang mga kumpanyang namumuhunan sa automated regression testing ay nagbabawas ng bahagi ng regression defects sa mga release mula 25% hanggang 5% sa loob ng isang taon pagkatapos ng implementasyon, ayon sa Capgemini World Quality Report.
Mayroong ilang mga approach sa regression testing, na nagkakaiba sa dami at pamantayan ng pagpili ng pagsusulit. Ang pagpili ng approach ay depende sa laki ng proyekto, dalas ng mga pagbabago at magagamit na oras sa CI pipeline. Sa ibaba ay ang mga pangunahing uri ng regression testing kasama ang kanilang mga katangian.
Ang buong regression run ay nagsasagawa ng lahat ng automated na pagsusulit ng proyekto nang walang pagbubukod. Ang approach na ito ay nagbibigay ng maximum na katiyakan ngunit nangangailangan ng malaking computing resources at oras. Ang buong run ay isinasagawa bago ang malalaking release — isang beses bawat 2–4 na linggo. Para sa isang application na may 5000 pagsusulit, ang buong run ay tumatagal ng 2 hanggang 6 na oras depende sa imprastraktura.
Ang piling approach ay nagpapatakbo lamang ng mga pagsusulit na may kaugnayan sa mga binagong module. Para sa pagtukoy ng kaugnayan, ginagamit ang dependency analysis sa antas ng code: kung ang klase na UserRepository ay binago, ang mga pagsusulit na nakadepende sa UserRepository nang direkta o transitibo ay pinapatakbo. Ang mga tool na Jacoco, Android Test Coverage at Xcode Code Coverage ay nagbibigay ng coverage maps para sa tumpak na pagpili. Ang piling run ay isinasagawa sa bawat pull request at tumatagal ng 5–15 minuto.
Ang risk-based regression ay nagra-rank ng mga pagsusulit batay sa kritikalidad ng functionality at posibilidad ng pagkasira. Ang mga kritikal na function — pagbabayad, awtorisasyon, synchronization — ay sinusuri sa bawat pagbabago ng code. Ang mga pantulong na function — screen na „Tungkol sa Application”, mga animation — ay sinusuri lamang bago ang release. Ang ranking ay sinusuri kada quarter batay sa data ng mga insidente sa produksyon.
Madalas na napagkakamalan ang mga konsepto ng regression testing at retest, kahit na magkaibang proseso ang mga ito. Ang retest ay ang muling pagpapatakbo ng isang partikular na pagsusulit na dati nang nabigo, pagkatapos ng pag-aayos ng depekto. Ang layunin ng retest ay tiyakin na gumagana ang pag-aayos: hindi na na-uulit ang bug. Ang retest ay isinasagawa nang isang beses, kaagad pagkatapos ng pag-aayos at kumpirmasyon ng pag-aayos ng developer.
Ang regression testing ay ang pagpapatakbo ng mga pagsusulit sa umiiral na functionality na HINDI binago. Ang layunin ay tiyakin na ang pag-aayos ng isang depekto ay hindi lumikha ng bagong depekto sa ibang lugar. Ang regression tests ay pinapatakbo nang maraming beses sa bawat development cycle, anuman ang mga partikular na bug na naayos. Ang pangunahing pagkakaiba: sinusuri ng retest ang pag-aayos mismo, sinusuri ng regression ang mga kahihinatnan ng pag-aayos.
Sa CI/CD pipeline, ang parehong proseso ay isinasagawa nang sunud-sunod. Pagkatapos ma-merge ang pull request, ang retest ng partikular na bug ay pinapatakbo, na sinusundan ng buo o piling regression run. Ayon sa SmartBear (2022), ang paghihiwalay ng mga prosesong ito ay nagbabawas ng oras ng diagnostic ng mga nabigong CI run ng 30%, dahil nakikita agad ng team kung aling bahagi ng mga depekto ang nauugnay sa regression at alin sa hindi gumaganang pag-aayos.
Ang automation ng regression testing ay isang kritikal na salik ng tagumpay para sa mga modernong mobile project. Ang manual regression testing ay hindi scalable: sa isang set ng 200 pagsusulit, isang run ay nangangailangan ng 2–3 araw ng trabaho ng isang QA engineer, na ginagawang imposible ang araw-araw na runs. Ang automated regression tests ay isinasagawa sa loob ng 10–60 minuto nang walang interbensyon ng tao, na nagpapahintulot sa mga ito na patakbuhin sa bawat commit o pull request.
Para mapanatili ang regression set sa napapanahong estado, ginagamit ang test analytics: mga tool tulad ng Allure, ReportPortal at Xray ay sumusubaybay sa mga porsyento ng pagpasa, tagal at katatagan ng bawat pagsusulit. Ang mga pagsusulit na ang katatagan ay bumaba sa ibaba 90% (madalas masira dahil sa mga pagbabago sa mga kinakailangan) ay minarkahan bilang legacy at ipinapadala para sa pagsusuri sa may-ari.
Isaalang-alang natin ang configuration ng isang automated regression test sa Android gamit ang library na JUnit 5 at Espresso. Ipinapakita ng halimbawa ang piling regression — sinusuri ng pagsusulit na pagkatapos ng refactoring ng user repository, ang profile screen ay hindi nasira. Para sa iOS, ginagamit ang XCTest na may katulad na lohika — paulit-ulit na pagsusulit sa pangunahing senaryo.
Ang pagsusulit ay gumagamit ng MockWebServer para sa emulation ng server at sinusuri ang buong landas: pag-load ng data ng user, pagpapakita sa profile screen at paghawak ng error kapag hindi available ang server. Ang mga ganitong pagsusulit ay isinasama sa regression set at isinasagawa sa bawat pagbabago sa module-profile.
@RunWith(AndroidJUnit4::class)
class ProfileRegressionTest {
@get:Rule
val composeRule = createComposeRule()
@Test
fun profileScreen_rendersCorrectly() {
val user = User(id = 1, name = "Alice", email = "alice@test.com")
composeRule.setContent {
ProfileScreen(user)
}
composeRule.onNodeWithText("Alice").assertIsDisplayed()
composeRule.onNodeWithText("alice@test.com").assertIsDisplayed()
}
@Test
fun profileScreen_handlesNetworkError() {
setNetworkError()
composeRule.onNodeWithText("Error sa pag-load").assertIsDisplayed()
}
}
Para sa iOS, ang regression test ay gumagamit ng XCTestExpectation para sa asynchronous na pagsusuri ng pag-update ng UI pagkatapos makatanggap ng data mula sa API. Ginagaya ng pagsusulit ang network response at sinusuri na ang mga elemento ng UI ay na-update nang tama.
class ProfileRegressionTests: XCTestCase {
func testProfileScreen_rendersCorrectly() {
let viewModel = ProfileViewModel(userId: 1)
let view = ProfileView(viewModel: viewModel)
viewModel.loadProfile()
let expectation = expectation(description: "profile loaded")
viewModel.onProfileLoaded = {
XCTAssertEqual(viewModel.userName, "Alice")
XCTAssertEqual(viewModel.userEmail, "alice@test.com")
expectation.fulfill()
}
waitForExpectations(timeout: 3.0)
}
}
Ang pagbuo ng epektibong regression set ay isang paulit-ulit na proseso batay sa data ng mga depekto at pagbabago ng code. Ang pangunahing estratehiya ay isama ang lahat ng umiiral na pagsusulit sa regression set at magpatakbo ng buong run bago ang bawat release. Habang lumalaki ang test base (higit sa 2000 pagsusulit), ang buong run ay nagiging masyadong mahaba at nangangailangan ng piling approach.
Ang ikalawang yugto — implementasyon ng mga tool sa dependency analysis: Jacoco para sa Android, Xcode Test Plan para sa iOS. Ang mga tool na ito ay bumubuo ng mapa ng „pagsusulit — klase — metodo” at nagpapahintulot na matukoy kung aling mga pagsusulit ang apektado ng isang partikular na pagbabago. Ang piling run batay sa coverage analysis ay nagbabawas ng oras ng pagpapatupad ng 60–80% habang pinapanatili ang 95% na epektibidad ng pagtuklas ng regression, ayon sa Spotify Engineering (2022).
Ang ikatlong yugto — patuloy na pagsubaybay at pag-optimize. Ang mga pagsusulit na hindi nabigo sa loob ng 6 na buwan ay inililipat sa mababang-priyoridad na set. Ang mga pagsusulit na nabigo nang higit sa isang beses bawat buwan ay mga kandidato para sa pagsusuri: maaaring nakakahuli sila ng mga tunay na problema (nangangailangan ng pag-aayos), o masyadong marupok (nangangailangan ng pagpapapanatag). Ang quarterly na pagsusuri ng regression set ay isang karaniwang kasanayan upang mapanatili ang epektibidad at bilis ng pagpapatupad nito.
Mga Madalas Itanong
Piling regression run — sa bawat pull request. Buong regression run — bago ang bawat release at lingguhan (nightly build). Ang pangunahing patakaran: mas madalas ang pagpapatakbo, mas mabilis na natutuklasan ang mga regression at mas mababa ang gastos ng kanilang pag-aayos. Para sa mga kritikal na proyekto, posible ang buong regression sa bawat merge.
Lahat ng unit tests (base regression), integration tests sa mga pangunahing component at UI tests sa mga kritikal na senaryo ng user. Huwag isama ang mga pagsusulit ng eksperimental na functionality, mga pagsusulit na may flakiness na higit sa 10% at mga pagsusulit na nangangailangan ng manual na kapaligiran.
Alisin ang mga pagsusulit ng tinanggal na functionality, i-update ang mga pagsusulit kapag nagbago ang mga kinakailangan, magsagawa ng quarterly audit ng set. CI analytics — Allure, ReportPortal — tumutulong na matukoy ang mga pagsusulit na nawalan ng kaugnayan: kung ang isang pagsusulit ay hindi nagbago at hindi nabigo sa loob ng 3 buwan, ito ay kandidato para alisin mula sa araw-araw na run.
Gumamit ng parallel na pagpapatakbo ng mga pagsusulit sa maraming device, ipatupad ang piling regression batay sa coverage analysis ng binagong code, i-off ang visual screenshots para sa hindi kaugnay na mga screen. Target na oras para sa piling run — 5–10 minuto, para sa buong run — hindi hihigit sa 2 oras.
Hindi, ang regression testing ay kasama rin ang mga manual na pagsusuri: exploratory testing pagkatapos ng release, UX regression at accessibility check pagkatapos ng pagbabago ng interface. Sinasaklaw ng automation ang 70–80% ng regression checks; ang natitirang 20–30% ay mga manual na pagsusulit, na nakatutok sa mga senaryo na hindi maaari o masyadong mahal na i-automate.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.