Unit tés dina DBMS - kumaha urang ngalakukeun eta di Sportmaster, bagian dua

Bagian kahiji- di dieu.

Unit tés dina DBMS - kumaha urang ngalakukeun eta di Sportmaster, bagian dua

Bayangkeun kaayaan. Anjeun disanghareupan tugas ngembangkeun fungsionalitas anyar. Anjeun gaduh kamajuan ti miheulaan anjeun. Upami urang nganggap yén anjeun teu ngagaduhan kawajiban moral, naon anu anjeun laksanakeun?

Langkung sering ti henteu, sadaya pamekaran lami dipopohokeun sareng sadayana dimimitian deui. Teu aya anu resep ngagali kodeu batur, tapi upami anjeun gaduh waktos, naha henteu ngamimitian nyiptakeun sistem anjeun nyalira? Ieu mangrupikeun pendekatan anu biasa, sareng éta leres pisan. Tapi dina proyék kami urang ngalakukeun éta salah. Kami ngadasarkeun sistem tés otomatis anu bakal datang dina pamekaran tés unit dina utPLSQL ti miheulaan urang, teras damel di sababaraha arah paralel.

  1. Malikkeun tés Unit heubeul. Pamulihan hartosna nyaluyukeun tes kana kaayaan sistem kasatiaan anu aya sareng nyaluyukeun tes kana standar utPLSQL.
  2. Ngarengsekeun masalah kalayan pamahaman naon kahayang, naon métode jeung prosés nu ditutupan ku autotests. Anjeun kudu boh nyimpen informasi ieu dina sirah anjeun, atawa nyieun conclusions dumasar langsung kana kode autotest. Ku alatan éta, urang mutuskeun pikeun nyieun katalog. Urang ditugaskeun kode mnemonic unik ka unggal autotest, dijieun pedaran tur dirékam setélan (Contona, dina kaayaan naon eta kudu dibuka, atawa naon anu kudu lumangsung lamun peluncuran test gagal). Intina, urang nyicingan metadata ngeunaan autotes sareng nempatkeun metadata éta kana tabel skéma utPLSQL standar.
  3. Nangtukeun strategi ékspansi, i.e. Pilihan fungsionalitas anu tunduk kana verifikasi ku tés otomatis. Urang mutuskeun pikeun nengetan tilu hal: perbaikan sistem anyar, insiden produksi, jeung prosés sistem konci. Ku kituna, urang ngamekarkeun dina paralel jeung release, mastikeun kualitas luhur na, sakaligus ngembangna ruang lingkup regression sarta mastikeun reliabiliti sistem di tempat kritis. Kahiji bottleneck sapertos éta prosés ngadistribusikaeun diskon na bonus on cek.
  4. Alami, urang mimitian ngembangkeun autotests anyar. Salah sahiji tugas pelepasan anu munggaran nyaéta ngira-ngira kinerja conto sistem kasatiaan anu tos ditetepkeun. Proyék kami ngagaduhan blok query SQL anu tetep kaku anu milih klien dumasar kana kaayaan. Salaku conto, kéngingkeun daptar sadaya palanggan anu pameseran terakhir di kota khusus, atanapi daptar palanggan anu jumlah beuli rata-rata saluhureun nilai anu tangtu. Ngabogaan autotests ditulis, urang pariksa sampel tos siap, dirékam parameter kinerja patokan, sarta Sajaba kami ngalaman beban nguji.
  5. Gawe sareng autotests kedah merenah. Dua tindakan anu paling umum nyaéta ngajalankeun autotes sareng nyiptakeun data tés. Ieu kumaha dua modul bantu muncul dina sistem kami: modul peluncuran sareng modul generasi data.

    Peluncur diwakilan salaku hiji prosedur universal sareng hiji parameter input téks. Salaku parameter, anjeun tiasa ngalangkungan kode mnemonic autotest, nami pakét, nami tés, setélan autotest, atanapi kecap konci anu ditangtayungan. Prosedur milih sareng ngajalankeun sadaya tés otomatis anu nyugemakeun kaayaan.

    Modul generasi data dibere dina bentuk pakét nu keur unggal obyék sistem anu diuji (tabel dina database), prosedur husus geus dijieun nu inserts data dinya. Dina prosedur ieu, nilai standar dieusian saloba mungkin, nu ensures kreasi objék sacara harfiah di klik hiji ramo. Sareng pikeun ngagampangkeun pamakean, témplat pikeun data anu dihasilkeun didamel. Contona, nyieun hiji klien tina umur nu tangtu ku telepon test sarta beuli réngsé.

  6. Autotests kudu dimimitian tur ngajalankeun dina waktu anu bisa ditarima pikeun sistem Anjeun. Ku alatan éta, hiji peluncuran peuting poean ieu diayakeun, dumasar kana hasil nu dihasilkeun laporan ngeunaan hasilna tur dikirim ka sakabéh tim ngembangkeun via mail perusahaan. Saatos malikkeun autotests lami sareng nyiptakeun anu énggal, total waktos operasi 30 menit. Kinerja ieu cocog kanggo sadayana, saprak peluncuranna di luar jam kerja.

    Tapi urang kedah ngusahakeun ngaoptimalkeun kagancangan damel. Sistem kasatiaan dina produksi diropéa peuting. Salaku bagian tina salah sahiji sékrési, urang kudu nyieun parobahan urgent peuting. Ngadagoan satengah jam pikeun hasil autotests jam tilu isuk-isuk teu nyieun jalma jawab release senang (salam ardent ka Alexey Vasyukov!), Jeung isuk-isuk loba kecap alus anu ceuk nuju sistem urang. Tapi hasilna, standar 5-menit pikeun digawé diadegkeun.

    Pikeun nyepetkeun kinerja, kami ngagunakeun dua métode: autotests mimiti ngajalankeun dina tilu threads paralel, untungna ieu pohara merenah alatan arsitektur sistem kasatiaan urang. Sareng urang ngantunkeun pendekatan dimana autotest henteu nyiptakeun data uji pikeun dirina, tapi nyobian mendakan anu cocog dina sistem. Sanggeus nyieun parobahan, total waktu operasi diréduksi jadi 3-4 menit.

  7. Proyék kalayan tés otomatis kedah tiasa disebarkeun dina sababaraha lapak. Dina awal perjalanan urang, aya usaha nulis file bets urang sorangan, tapi janten jelas yén instalasi otomatis timer ditulis éta horor lengkep, sarta kami tos ka arah solusi industri. Alatan kanyataan yén proyék ngandung loba kode langsung (kahiji sakabeh, urang nyimpen kodeu autotest) jeung saeutik pisan data (data utama metadata ngeunaan autotests), palaksanaan dina proyék Liquibase tétéla basajan pisan.

    Éta mangrupikeun perpustakaan sumber terbuka, bebas database pikeun nyukcruk, ngatur, sareng ngalaksanakeun parobahan skéma database. Diurus via garis paréntah atanapi kerangka sapertos Apache Maven. Prinsip operasi Liquibase cukup basajan. Simkuring boga proyék dikelompokeun dina cara nu tangtu, nu diwangun ku parobahan atawa Aksara nu kudu digulung kaluar ka server target, jeung file kontrol nu nangtukeun dina urutan naon jeung parameter naon parobahan ieu kudu dipasang.

    Dina tingkat DBMS, tabel husus dijieun dimana Liquibase nyimpen log rollover. Unggal parobahan ngabogaan Hash diitung, nu dibandingkeun unggal waktu antara proyék jeung kaayaan dina database. Hatur nuhun kana Liquibase, urang tiasa sacara gampil ngaluncurkeun parobihan kana sistem kami ka sirkuit mana waé. Autotest ayeuna diluncurkeun dina sirkuit uji sareng sékrési, ogé dina wadah (sirkuit pribadi pamekar).

Unit tés dina DBMS - kumaha urang ngalakukeun eta di Sportmaster, bagian dua

Janten, hayu urang ngobrol ngeunaan hasil ngagunakeun sistem uji unit urang.

  1. Tangtosna, mimitina, kami yakin yén kami parantos ngamimitian ngembangkeun parangkat lunak anu langkung saé. Autotests diluncurkeun unggal dinten sareng puluhan kasalahan kapanggih unggal sékrési. Sumawona, sababaraha kasalahan ieu ngan ukur aya hubunganana sareng fungsionalitas anu urang hoyong robih. Aya mamang serius yén kasalahan ieu kapanggih ku tés manual.
  2. Tim ayeuna gaduh kayakinan yén fungsionalitas spésifik berpungsi leres... Anu mimiti, ieu masalah prosés kritis urang. Salaku conto, salami genep bulan katukang kami henteu ngagaduhan masalah sareng distribusi diskon sareng bonus dina kuitansi, sanaos parobihan sékrési, sanaos dina période sateuacana aya kasalahan dina sababaraha frékuénsi.
  3. Urang junun ngurangan jumlah iterasi nguji. Kusabab kanyataan yén autotes ditulis pikeun fungsionalitas anyar, analis sareng panguji part-time nampi kode kualitas anu langkung luhur, sabab eta geus dipariksa.
  4. Sababaraha kamajuan dina tés otomatis dianggo ku pamekar. Contona, data tés dina wadah dijieun maké modul obyék generasi.
  5. Kadé urang geus ngembangkeun hiji "katampi" tina sistem nguji otomatis dina bagian tina pamekar. Aya pamahaman yén ieu penting jeung mangpaat. Tapi tina pangalaman kuring sorangan kuring tiasa nyebatkeun yén ieu jauh tina kasus éta. Autotests kedah ditulis, aranjeunna kedah dirojong sareng dikembangkeun, hasilna kedah dianalisis, sareng sering biaya waktos ieu ngan saukur teu patut. Éta langkung gampang pikeun angkat ka produksi sareng ngatasi masalah di dinya. Di dieu, pamekar baris naroskeun kami pikeun nutupan fungsionalitasna ku autotes.

Naon salajengna

Unit tés dina DBMS - kumaha urang ngalakukeun eta di Sportmaster, bagian dua

Hayu urang ngobrol ngeunaan rencana pangwangunan pikeun proyék tés otomatis.

Tangtosna, salami sistem kasatiaan Sportmaster masih hirup sareng terus berkembang, éta ogé mungkin pikeun ngembangkeun autotests ampir endlessly. Ku alatan éta, arah utama pangwangunan nyaéta ngalegaan daérah cakupan.

Salaku jumlah autotests naek, total waktu operasi maranéhna bakal steadily ngaronjat, sarta kami kudu balik deui ka masalah kinerja. Paling dipikaresep, leyuran bakal nambahan jumlah threads paralel.

Tapi ieu cara atra pangwangunan. Lamun urang ngobrol ngeunaan hal anu leuwih non-trivial, urang nyorot handap:

  1. Ayeuna, manajemén autotest dipigawé dina tingkat DBMS, i.e. pangaweruh PL / SQL diperlukeun pikeun digawé suksés. Upami diperyogikeun, manajemén sistem (contona, ngaluncurkeun atanapi nyiptakeun metadata), anjeun tiasa nyiptakeun sababaraha jinis panel admin nganggo Jenkins atanapi anu sami.
  2. Sarerea mikanyaah indikator kuantitatif jeung kualitatif. Pikeun nguji otomatis, indikator universal sapertos nyaéta Code Coverage atanapi métrik cakupan kode. Ngagunakeun indikator ieu, urang bisa nangtukeun sabaraha perséntase kodeu sistem urang dina test katutupan ku autotests. Dimimitian ti vérsi 12.2, Oracle nyayogikeun kamampuan ngitung métrik ieu sareng nawiskeun panggunaan pakét DBMS_PLSQL_CODE_COVERAGE standar.

    Sistem autotest kami umurna langkung ti sataun sareng panginten ayeuna waktosna pikeun ngévaluasi liputan kami. Dina proyék panungtungan kuring (sanes proyék Sportmaster) ieu naon anu lumangsung. Sataun saatos ngerjakeun autotes, manajemén netepkeun tugas pikeun meunteun sabaraha perséntase kode anu kami tutup. Kalayan cakupan langkung ti 1%, manajemén bakal bagja. Kami, pamekar, diperkirakeun hasil sakitar 10%. Kami masang sinyalna kode, ngukur éta, sareng nampi 20%. Pikeun ngagungkeun, urang indit pikeun meunangkeun hadiah, tapi kumaha urang indit pikeun meunangkeun eta jeung dimana urang indit saterusna nyaéta carita lengkep beda.

  3. Autotests tiasa pariksa jasa wéb anu kakeunaan. Oracle ngamungkinkeun urang pikeun ngalakukeun ieu kalayan saé, sareng urang moal deui mendakan sababaraha masalah.
  4. Sareng, tangtosna, sistem uji otomatis urang tiasa diterapkeun kana proyék sanés. Solusi anu kami tampi sacara universal sareng ngan ukur ngabutuhkeun panggunaan Oracle. Kuring ngadéngé yén proyék Sportmaster séjén museurkeun nguji otomatis jeung sugan urang bakal buka aranjeunna.

papanggihan

Hayu urang nyimpulkeun. Dina proyék sistem kasatiaan di Sportmaster, urang junun nerapkeun hiji sistem nguji otomatis. Hal ieu dumasar kana solusi utPLSQL ti Stephen Feuerstein. Sabudeureun utPLSQL aya kode autotest sareng modul tulisan mandiri tambahan: modul peluncuran, modul generasi data sareng anu sanésna. Autotests diluncurkeun unggal dinten sareng, anu paling penting, tiasa dianggo sareng mangpaat. Kami yakin yén kami geus mimiti ngaleupaskeun software kualitas luhur. Dina waktos anu sami, solusi anu hasilna universal sareng tiasa sacara bébas diterapkeun kana proyék naon waé anu peryogi pikeun ngatur tés otomatis dina Oracle DBMS.

PS Artikel ieu henteu spésifik pisan: aya seueur téks sareng praktis henteu aya conto téknis. Upami topikna umumna pikaresepeun, maka kami siap neraskeunana sareng uih deui kalayan neraskeun, dimana kami bakal nyarioskeun ka anjeun naon anu robih salami genep bulan katukang sareng nyayogikeun conto kode.

Tulis koméntar upami aya poin anu kedah ditekenkeun ka hareup, atanapi patarosan anu peryogi panyingkepan.

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Naha urang badé nyerat langkung seueur ngeunaan ieu?

  • Sumuhun, pasti

  • Henteu nuhun

12 pamaké milih. 4 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar