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

Héy Habr!

Nami abdi Maxim Ponomarenko sareng abdi pamekar di Sportmaster. Abdi gaduh 10 taun pangalaman dina widang IT. Anjeunna ngamimitian karirna dina nguji manual, teras gentos kana pamekaran database. Pikeun 4 taun ka tukang, ngumpulkeun pangaweruh anu ditampi dina uji coba sareng pamekaran, kuring parantos ngajadikeun otomatis tés dina tingkat DBMS.

Kuring geus di tim Sportmaster pikeun ngan leuwih sataun sarta ngamekarkeun nguji otomatis dina salah sahiji proyék utama. Dina April, éta guys ti Sportmaster Lab na I spoke dina konferensi di Krasnodar, laporan abdi disebut "Unit tés dina DBMS a," sarta ayeuna abdi hoyong bagikeun eta sareng anjeun. Bakal aya seueur téks, janten kuring mutuskeun pikeun ngabagi laporan kana dua tulisan. Dina kahiji, urang bakal ngobrol ngeunaan autotests sarta nguji sacara umum, sarta dina kadua, urang bakal Huni di leuwih jéntré ngeunaan sistem nguji Unit urang jeung hasil aplikasi na.

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

Kahiji, téori boring saeutik. Naon tés otomatis? Ieu mangrupikeun tés anu dilaksanakeun nganggo parangkat lunak, sareng dina IT modéren langkung seueur dianggo dina pamekaran parangkat lunak. Ieu disababkeun ku kanyataan yén perusahaan ngembang, sistem inpormasina tumbuh sareng, sasuai, jumlah fungsionalitas anu kedah diuji ningkat. Ngalaksanakeun tés manual janten langkung mahal.

Kuring digawé pikeun hiji pausahaan badag anu release kaluar unggal dua bulan. Dina waktos anu sami, sabulan sadayana dihabiskeun pikeun gaduh belasan panguji sacara manual pariksa fungsionalitasna. Hatur nuhun kana palaksanaan otomatisasi ku tim pamekar leutik, kami tiasa ngirangan waktos uji ka 2 minggu dina sataun satengah. Kami henteu ngan ukur ningkatkeun laju tés, tapi ogé ningkatkeun kualitasna. Tés otomatis diluncurkeun sacara rutin sareng aranjeunna ngalaksanakeun sadayana pamariksaan anu kalebet dina éta, nyaéta, urang ngaluarkeun faktor manusa.

IT modern dicirikeun ku kanyataan yén pamekar bisa jadi diperlukeun teu ukur nulis kode produk, tapi ogé nulis tés Unit nu pariksa kode ieu.

Tapi kumaha upami sistem anjeun dumasar kana logika server? Henteu aya solusi universal atanapi prakték pangsaéna dina pasaran. Sakumaha aturan, perusahaan ngabéréskeun masalah ieu ku nyiptakeun sistem tés anu ditulis sorangan. Ieu mangrupikeun sistem tés otomatis anu ditulis ku sorangan anu didamel dina proyék kami sareng kuring bakal nyarioskeun éta dina laporan kuring.

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

Nguji kasatiaan

Mimiti, hayu urang ngobrol ngeunaan proyék dimana urang nyebarkeun sistem uji otomatis. Proyék kami nyaéta sistem kasatiaan Sportmaster (ku jalan kitu, kami parantos nyerat ngeunaan éta dina pos ieu).

Upami perusahaan anjeun cukup ageung, maka sistem kasatiaan anjeun bakal ngagaduhan tilu sipat standar:

  • Sistem anjeun bakal dimuat pisan
  • Sistem anjeun bakal ngandung prosés komputasi anu kompleks
  • Sistim anjeun bakal aktip ditingkatkeun.

Hayu urang balik dina urutan ... Dina total, lamun urang nganggap sagala merek Sportmaster, urang boga leuwih ti 1000 toko di Rusia, Ukraina, Cina, Kazakhstan jeung Bélarus. Sakitar 300 pameseran dilakukeun di toko-toko ieu unggal dinten. Nyaéta, unggal detik 000-3 cék asupkeun sistem kami. Alami, sistem kasatiaan urang sarat pisan. Sarta saprak éta aktip dipaké, urang kudu nyadiakeun standar pangluhurna kualitas na, sabab sagala kasalahan dina software hartina moneter badag, reputasi jeung karugian lianna.

Dina waktos anu sami, Sportmaster ngajalankeun langkung ti saratus promosi anu béda. Aya rupa-rupa promosi: aya promosi produk, aya nu dedicated ka poé minggu, aya nu dihijikeun ka toko husus, aya promosi pikeun jumlah resi, aya pikeun jumlah barang. Sacara umum, teu goréng. Klién gaduh bonus sareng kode promosi anu dianggo nalika ngagaleuh. Sadaya ieu nyababkeun kanyataan yén ngitung pesenan mangrupikeun tugas anu teu pati penting.

Algoritma nu implements processing urutan sabenerna dahsyat na pajeulit. Jeung sagala parobahan algoritma ieu rada picilakaeun. Éta sigana yén parobihan anu paling teu penting tiasa nyababkeun épék anu teu kaduga. Tapi éta prosés komputasi anu rumit, khususna anu ngalaksanakeun fungsionalitas kritis, nyaéta calon anu pangsaéna pikeun otomatisasi. Mariksa puluhan kasus anu sami ku panangan nyéépkeun waktos. Sareng saprak titik éntri kana prosésna henteu robih, saatos dijelaskeun sakali, anjeun tiasa gancang nyiptakeun tés otomatis sareng yakin yén fungsionalitasna bakal jalan.

Kusabab sistem kami aktip dianggo, bisnis bakal hoyong anu énggal ti anjeun, hirup sareng jaman sareng berorientasi pelanggan. Dina sistem kasatiaan urang, release kaluar unggal dua bulan. Ieu ngandung harti yén unggal dua bulan urang kudu ngalakonan regression lengkep sakabéh sistem. Dina waktos anu sami, sacara alami, sapertos dina IT modern, pamekaran henteu langsung angkat ti pamekar ka produksi. Asalna dina sirkuit pamekar, teras teras-terasan ngalangkungan bangku uji, sékrési, nampi, sareng ngan ukur dina produksi. Sahenteuna, dina sirkuit uji sareng sékrési, urang kedah ngalaksanakeun régrési lengkep sadaya sistem.

Sipat anu dijelaskeun mangrupikeun standar pikeun ampir sistem kasatiaan. Hayu urang ngobrol ngeunaan fitur proyék urang.

Téknologis, 90% tina logika sistem kasatiaan kami dumasar kana server sareng dilaksanakeun dina Oracle. Aya hiji klien kakeunaan di Delphi, nu ngalakukeun fungsi hiji administrator gaw otomatis. Aya jasa wéb anu kakeunaan pikeun aplikasi éksternal (contona situs wéb). Ku alatan éta, logis pisan lamun urang nyebarkeun hiji sistem nguji otomatis, urang bakal ngalakukeun eta dina Oracle.

Sistem kasatiaan di Sportmaster geus eksis pikeun leuwih ti 7 taun sarta dijieun ku pamekar tunggal... Jumlah rata-rata pamekar dina proyék urang salila 7 taun ieu 3-4 jalma. Tapi dina taun katukang, tim kami parantos ningkat sacara signifikan, sareng ayeuna aya 10 urang damel dina proyék éta. Hartina, jalma datang ka proyék nu teu wawuh jeung tugas has, prosés, jeung arsitéktur. Sareng aya résiko anu langkung ageung yén urang bakal sono kasalahan.

Proyék dicirikeun ku henteuna tester khusus salaku unit staf. Aya, tangtosna, nguji, tapi tés dilaksanakeun ku analis, salian ti tanggung jawab utama maranéhanana séjén: komunikasi jeung konsumén bisnis, pamaké, ngembangkeun syarat sistem, jsb. jsb... Sanaos kanyataan yén tés dilaksanakeun kualitas anu luhur pisan (ieu hususna pantes disebatkeun, sabab sababaraha analis tiasa ningali laporan ieu), éféktivitas spésialisasi sareng konsentrasi dina hiji hal henteu acan dibatalkeun. .

Mertimbangkeun sagala di luhur, pikeun ngaronjatkeun kualitas produk dikirimkeun sarta ngurangan waktu ngembangkeun, gagasan automating nguji dina proyék sigana pisan logis. Sarta dina tahap béda tina ayana sistem kasatiaan urang, pamekar individu nyieun usaha pikeun nutupan kode maranéhanana jeung tés Unit. Gemblengna éta prosés anu cukup disjointed, jeung dulur ngagunakeun arsitektur jeung métode sorangan. Hasil ahir éta umum pikeun tés unit: tés dikembangkeun, dipaké pikeun sawatara waktu, disimpen dina gudang file versioned, tapi di sawatara titik aranjeunna dieureunkeun ngajalankeun sarta poho. Anu mimiti, ieu alatan kanyataan yén tés ieu dihijikeun leuwih kana hiji pamaen husus, sarta teu proyek.

utPLSQL datang ka nyalametkeun teh

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

Naha anjeun terang nanaon ngeunaan Stephen Feuerstein?

Ieu bodo pinter anu devoted bagian panjang karirna pikeun gawé bareng Oracle na PL / SQL, sarta geus ditulis angka nu gede ngarupakeun karya dina topik ieu. Salah sahiji bukuna anu kasohor nyaéta: "Oracle PL/SQL. Pikeun profésional ". Stephen anu ngembangkeun solusi utPLSQL, atanapi, sakumaha anu dimaksud, kerangka Unit Testing pikeun Oracle PL/SQL. Solusi utPLSQL dijieun dina 2016, tapi terus aktip digarap sarta versi anyar dileupaskeun. Dina waktos ngalaporkeun, versi panganyarna tanggal deui ka 24 Maret 2019.
Anu mana. Ieu mangrupikeun proyék open source anu misah. Beuratna sababaraha megabyte, kalebet conto sareng dokuméntasi. Sacara fisik, éta mangrupikeun skéma anu misah dina pangkalan data ORACLE kalayan sakumpulan pakét sareng tabel pikeun ngatur tés unit. Pamasangan butuh sababaraha detik. Fitur has tina utPLSQL nyaéta gampang dianggo.
Sacara global, utPLSQL mangrupikeun mékanisme pikeun ngajalankeun tés unit, dimana tés unit dipikaharti salaku prosedur bets Oracle biasa, organisasi anu nuturkeun aturan anu tangtu. Salian peluncuran, utPLSQL nyimpen log sadaya uji coba anjeun, sareng ogé gaduh sistem pelaporan internal.

Hayu urang nempo conto kumaha kode Unit test Sigana mah, dilaksanakeun ngagunakeun téhnik ieu.

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

Janten, layar nunjukkeun kode pikeun spésifikasi pakét anu biasa sareng tés unit. Naon syarat wajib? pakét kudu diawalan ku "utp_". Sadaya prosedur sareng tés kedah gaduh awalan anu sami. Paket kedah ngandung dua prosedur standar: "utp_setup" sareng "utp_teardown". Prosedur kahiji disebut ku restarting unggal unit test, kadua - sanggeus peluncuran.

"utp_setup", sakumaha aturan, nyiapkeun sistem kami pikeun ngajalankeun tés unit, contona, nyieun data tés. "utp_teardown" - sabalikna, sadayana balik deui ka setélan aslina sareng ngareset hasil peluncuran.

Ieu conto tes unit pangbasajanna anu mariksa normalisasi nomer telepon palanggan anu diasupkeun kana bentuk standar pikeun sistem kasatiaan urang. Henteu aya standar wajib ngeunaan cara nyerat prosedur sareng tés unit. Sakumaha aturan, nelepon ka metodeu sistem anu diuji, sareng hasil anu dipulangkeun ku metode ieu dibandingkeun sareng rujukan. Kadé ngabandingkeun tina hasil rujukan jeung diala hiji lumangsung ngaliwatan métode utPLSQL baku.

Hiji tés unit tiasa gaduh sababaraha cék. Sapertos tiasa katingal tina conto, urang ngadamel opat sauran padeukeut kana metode anu diuji pikeun normalisasi nomer telepon sareng ngaevaluasi hasilna saatos unggal telepon. Nalika ngamekarkeun tés Unit, anjeun kudu tumut kana akun nu aya cék nu teu mangaruhan sistem sagala cara, sarta sanggeus sababaraha anjeun kudu gulung deui ka kaayaan aslina tina sistem.
Contona, dina test Unit dibere urang ngan pormat nomer telepon input, nu teu mangaruhan sistem kasatiaan sagala cara.

Sareng upami urang nyerat tés unit nganggo metode nyiptakeun klien énggal, maka saatos unggal tés bakal nyiptakeun klien énggal dina sistem, anu tiasa mangaruhan peluncuran tés salajengna.

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

Ieu kumaha tés unit dijalankeun. Aya dua pilihan peluncuran anu mungkin: ngajalankeun sadaya tés unit tina pakét khusus atanapi ngajalankeun uji unit khusus dina pakét khusus.

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

Ieu mangrupikeun conto sistem pelaporan internal. Dumasar kana hasil uji unit, utPLSQL ngawangun laporan leutik. Di jerona urang ningali hasil pikeun tiap cek khusus sareng hasil sakabéh tés unit.

6 aturan autotests

Sateuacan ngamimitian nyieun sistem anyar pikeun nguji otomatis tina sistem kasatiaan, babarengan jeung manajemén, urang nangtukeun prinsip nu tés otomatis hareup urang kudu matuh.

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

  1. Autotests kudu éféktif jeung kudu mangpaat. Simkuring gaduh pamekar éndah, anu pasti kudu disebutkeun, sabab sababaraha di antarana meureun bakal ningali laporan ieu, sarta aranjeunna nulis kode éndah. Tapi malah kode maranéhna éndah teu sampurna jeung boga, boga, sarta bakal neruskeun ngandung kasalahan. Autotests diperlukeun pikeun manggihan kasalahan ieu. Upami ieu sanés masalahna, maka urang nyerat autotes anu goréng, atanapi urang parantos sumping ka daérah anu maot anu, prinsipna, henteu dikembangkeun. Dina duanana kasus, urang ngalakukeun lepat, sarta pendekatan urang saukur teu make akal pikiran.
  2. Autotests kedah dianggo. Teu aya rasa nyéépkeun waktos sareng usaha pikeun nyerat produk parangkat lunak, nempatkeun éta dina gudang sareng hilap. Tés kudu dijalankeun, sarta dijalankeun sakumaha rutin mungkin.
  3. Autotests kedah dianggo stably. Paduli waktos beurang, peluncuran stand sareng setélan sistem anu sanés, uji coba kedah ngakibatkeun hasil anu sami. Sakumaha aturan, ieu dipastikeun ku kanyataan yén autotest tiasa dianggo sareng data uji khusus sareng setélan sistem tetep.
  4. Autotests kedah dianggo dina speed ditarima pikeun proyék Anjeun. waktos ieu ditangtukeun individual pikeun tiap sistem. Sababaraha urang tiasa mampuh damel sadinten, sedengkeun anu sanésna mendakan penting pikeun ngalakukeunana dina sababaraha detik. Kuring bakal ngabejaan Anjeun saeutik engké naon standar speed kami kahontal dina proyék urang.
  5. Pangwangunan Autotest kedah fleksibel. Henteu disarankeun pikeun nolak nguji fungsionalitas naon waé kusabab kami henteu acan dilakukeun sateuacanna atanapi kusabab sababaraha alesan sanés. utPLSQL henteu maksakeun larangan dina pangwangunan, sareng Oracle, prinsipna, ngamungkinkeun anjeun pikeun ngalaksanakeun sababaraha hal. Seueur masalah gaduh solusi, éta ngan ukur waktos sareng usaha.
  6. Deployability. Kami ngagaduhan sababaraha lapak dimana urang kedah ngajalankeun tés. Dina unggal stand, dump data tiasa diropéa iraha waé. Perlu ngalaksanakeun proyék kalayan tés otomatis ku cara anu henteu aya rasa nyeri pikeun ngalaksanakeun instalasi pinuh atanapi parsial na.

Sareng dina postingan kadua dina sababaraha dinten kuring bakal nyarioskeun ka anjeun naon anu kami laksanakeun sareng naon hasil anu kami rampa.

sumber: www.habr.com

Tambahkeun komentar