{"id":37495,"date":"2019-10-31T22:17:57","date_gmt":"2019-10-31T19:17:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\/"},"modified":"2019-10-31T22:17:57","modified_gmt":"2019-10-31T19:17:57","slug":"unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","title":{"rendered":"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107, Habr!<\/p>\n<p>Nazywam si\u0119 Maksym Ponomarenko i jestem programist\u0105 w Sportmasterze. Mam dziesi\u0119cioletnie do\u015bwiadczenie w bran\u017cy IT. Swoj\u0105 karier\u0119 zacz\u0105\u0142em w obszarze manualnego testowania, a nast\u0119pnie przeszed\u0142em do tworzenia baz danych. Przez ostatnie 4 lata, kumuluj\u0105c wiedz\u0119 zdobyt\u0105 w testowaniu i programowaniu, zajmuj\u0119 si\u0119 automatyzacj\u0105 test\u00f3w na poziomie system\u00f3w zarz\u0105dzania bazami danych.<\/p>\n<p>W zespole Sportmastera jestem od nieco ponad roku i w jednym z du\u017cych projekt\u00f3w zajmuj\u0119 si\u0119 tworzeniem automatyzacji test\u00f3w. W kwietniu wyst\u0105pili\u015bmy z ch\u0142opakami z Sportmaster Lab na konferencji w Krasnodarze, a m\u00f3j wyk\u0142ad nosi\u0142 tytu\u0142 \u201eTesty jednostkowe w systemach zarz\u0105dzania bazami danych\u201d, i teraz chc\u0119 si\u0119 nim z wami podzieli\u0107. Tekstu b\u0119dzie du\u017co, dlatego postanowi\u0142em podzieli\u0107 wyk\u0142ad na dwa posty. W pierwszym porozmawiamy o automatyzacji test\u00f3w i testowaniu w og\u00f3le, a w drugim szczeg\u00f3\u0142owo om\u00f3wi\u0119 nasz system test\u00f3w jednostkowych oraz wyniki jego zastosowania.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\"><img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/4e521cc85eb3a3806860a40ab2e4050f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Na pocz\u0105tku troch\u0119 nudnej teorii. Czym jest automatyczne testowanie? To testowanie, kt\u00f3re przeprowadza si\u0119 przy pomocy oprogramowania, i w nowoczesnym IT jest coraz cz\u0119\u015bciej stosowane w procesie tworzenia oprogramowania. Wynika to z faktu, \u017ce firmy rozwijaj\u0105 si\u0119, ich systemy informacyjne r\u00f3wnie\u017c, a co za tym idzie, ro\u015bnie r\u00f3wnie\u017c liczba funkcji, kt\u00f3re trzeba testowa\u0107. Przeprowadzanie r\u0119cznych test\u00f3w staje si\u0119 coraz bardziej kosztowne i czasoch\u0142onne.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPracowa\u0142em w du\u017cej firmie, kt\u00f3rej wydania odbywa\u0142y si\u0119 co dwa miesi\u0105ce. Przy tym ca\u0142y miesi\u0105c po\u015bwi\u0119cano na r\u0119czne sprawdzanie funkcjonalno\u015bci przez dziesi\u0119ciu tester\u00f3w. Dzi\u0119ki wprowadzeniu automatyzacji, ma\u0142ym zespo\u0142em programist\u00f3w uda\u0142o nam si\u0119 w ci\u0105gu p\u00f3\u0142tora roku skr\u00f3ci\u0107 czas testowania do 2 tygodni. Nie tylko zwi\u0119kszyli\u015bmy szybko\u015b\u0107 testowania, ale r\u00f3wnie\u017c poprawili\u015bmy jego jako\u015b\u0107. Testy automatyczne s\u0105 uruchamiane regularnie i zawsze wykonuj\u0105 pe\u0142ny zestaw wbudowanych kontroli, co eliminuje czynnik ludzki. <\/p>\n<p>Dla wsp\u00f3\u0142czesnego IT charakterystyczne jest to, \u017ce od programisty mo\u017ce by\u0107 wymagane nie tylko pisanie kodu produktu, ale tak\u017ce pisanie test\u00f3w jednostkowych, kt\u00f3re weryfikuj\u0105 ten kod. <\/p>\n<p>Co zrobi\u0107, je\u015bli Tw\u00f3j system opiera si\u0119 g\u0142\u00f3wnie na logice serwerowej? Nie ma uniwersalnego rozwi\u0105zania ani og\u00f3lnych praktyk w tej dziedzinie. Zazwyczaj firmy rozwi\u0105zuj\u0105 ten problem, tworz\u0105c w\u0142asny system testowania. Taki autorski system zautomatyzowanego testowania zosta\u0142 stworzony w naszym projekcie, o czym opowiem w swoim wyst\u0105pieniu. <\/p>\n<p><img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/fee34f7214fb2075ee50fa0f4af14a44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Testujemy lojalno\u015b\u0107<\/h2>\n<p>\nNa pocz\u0105tek porozmawiajmy o projekcie, w kt\u00f3rym wdro\u017cyli\u015bmy system zautomatyzowanego testowania. Nasz projekt to system lojalno\u015bciowy Sportmastera (zreszt\u0105, ju\u017c pisali\u015bmy o tym w <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/453252\/\">tym po\u015bcie<\/a><\/noindex>).<\/p>\n<p>Je\u015bli Twoja firma jest dostatecznie du\u017ca, Tw\u00f3j system lojalno\u015bciowy b\u0119dzie mia\u0142 trzy standardowe cechy: <\/p>\n<ul>\n<li>Tw\u00f3j system b\u0119dzie intensywnie wykorzystywany<\/li>\n<li>Tw\u00f3j system b\u0119dzie zawiera\u0107 z\u0142o\u017cone procesy obliczeniowe<\/li>\n<li>Tw\u00f3j system b\u0119dzie aktywnie rozwijany. <\/li>\n<\/ul>\n<p>\nZacznijmy od pocz\u0105tku... \u0141\u0105cznie, je\u015bli spojrze\u0107 na wszystkie marki Sportmastera, na terytorium Rosji, Ukrainy, Chin, Kazachstanu i Bia\u0142orusi mamy ponad 1000 sklep\u00f3w. W tych sklepach dziennie odbywa si\u0119 oko\u0142o 300 000 zakup\u00f3w. Oznacza to, \u017ce co sekund\u0119 do naszego systemu trafia 3-4 paragon\u00f3w. Oczywi\u015bcie, nasz system lojalno\u015bciowy jest intensywnie wykorzystywany. A poniewa\u017c jest cz\u0119sto u\u017cywany, musimy zapewnia\u0107 najwy\u017csze standardy jego jako\u015bci, poniewa\u017c ka\u017cdy b\u0142\u0105d w oprogramowaniu to znacz\u0105ce straty finansowe, reputacyjne i inne. <\/p>\n<p>Jednocze\u015bnie w Sportmasterze dzia\u0142a ponad sto r\u00f3\u017cnych promocji. Promocje s\u0105 bardzo zr\u00f3\u017cnicowane: s\u0105 produktowe, s\u0105 zwi\u0105zane z dniem tygodnia, s\u0105 przypisane do konkretnych sklep\u00f3w, s\u0105 promocje na kwot\u0119 paragonu, s\u0105 na ilo\u015b\u0107 produkt\u00f3w. W skr\u00f3cie, to nie jest ma\u0142a sprawa. Klienci maj\u0105 bonusy, s\u0105 kody promocyjne, kt\u00f3re s\u0105 u\u017cywane przy zakupach. Wszystko to prowadzi do tego, \u017ce rozliczenie ka\u017cdego zam\u00f3wienia to do\u015b\u0107 z\u0142o\u017cone zadanie. <\/p>\n<p>Algorytm obs\u0142ugi zam\u00f3wie\u0144 jest naprawd\u0119 skomplikowany i trudny do zrozumienia. Jakiekolwiek zmiany w tym algorytmie mog\u0105 wi\u0105za\u0107 si\u0119 z du\u017cym ryzykiem. Nawet drobne zmiany mog\u0105 prowadzi\u0107 do nieprzewidywalnych konsekwencji. A to w\u0142a\u015bnie takie skomplikowane procesy obliczeniowe, szczeg\u00f3lnie realizuj\u0105ce krytyczne funkcje, s\u0105 najlepszymi kandydatami do automatyzacji. R\u0119czne sprawdzanie dziesi\u0105tek podobnych przypadk\u00f3w zajmuje zbyt du\u017co czasu. A poniewa\u017c punkt wej\u015bcia do procesu pozostaje niezmienny, mo\u017cna go raz opisa\u0107 i do\u015b\u0107 szybko wygenerowa\u0107 automatyczne testy, maj\u0105c pewno\u015b\u0107 co do dzia\u0142ania funkcjonalno\u015bci.<\/p>\n<p>Poniewa\u017c nasz system jest aktywnie wykorzystywany, biznes b\u0119dzie oczekiwa\u0142 od Ciebie nowo\u015bci, dostosowuj\u0105c si\u0119 do zmieniaj\u0105cych si\u0119 czas\u00f3w i stawiaj\u0105c na obs\u0142ug\u0119 klienta. W naszym systemie lojalno\u015bci wydania odbywaj\u0105 si\u0119 co dwa miesi\u0105ce. Oznacza to, \u017ce co dwa miesi\u0105ce musimy przeprowadza\u0107 pe\u0142ny regres ca\u0142ego systemu. Przy tym, jak w ka\u017cdym nowoczesnym IT, rozw\u00f3j nie trafia od razu od programisty na produkcj\u0119. Powstaje najpierw w obszarze programisty, nast\u0119pnie przechodzi przez testowy, wydaniowy, akceptacyjny, a dopiero potem trafia na produkcj\u0119. Co najmniej na obszarze testowym i wydaniowym musimy przeprowadza\u0107 pe\u0142ny regres ca\u0142ego systemu. <\/p>\n<p>Opisane w\u0142a\u015bciwo\u015bci s\u0105 standardowe dla praktycznie ka\u017cdego systemu lojalno\u015bci. Porozmawiajmy o szczeg\u00f3lno\u015bciach naszego projektu.<\/p>\n<p>Technologicznie w 90% logika naszego systemu lojalno\u015bci dzia\u0142a na serwerze i jest zrealizowana na Oracle. Mamy klienta wystawionego na Delphi, kt\u00f3ry pe\u0142ni funkcj\u0119 APM-administratora. S\u0105 dost\u0119pne us\u0142ugi internetowe dla aplikacji zewn\u0119trznych (na przyk\u0142ad strony internetowej). Dlatego te\u017c ca\u0142kowicie logiczne jest, \u017ce je\u015bli zdecydujemy si\u0119 na rozw\u00f3j systemu automatyzacji test\u00f3w, to b\u0119dziemy to robi\u0107 na Oracle.<\/p>\n<p>System lojalno\u015bci w Sportmasterze istnieje od ponad 7 lat i zosta\u0142 stworzony przez pojedynczych programist\u00f3w\u2026 \u015arednia liczba programist\u00f3w pracuj\u0105cych nad naszym projektem w ci\u0105gu tych 7 lat wynosi\u0142a 3-4 osoby. Jednak w ostatnim roku nasz zesp\u00f3\u0142 znacznie si\u0119 powi\u0119kszy\u0142 i teraz nad projektem pracuje 10 os\u00f3b. Oznacza to, \u017ce do projektu do\u0142\u0105czaj\u0105 ludzie, kt\u00f3rzy nie s\u0105 zaznajomieni ze standardowymi zadaniami, procesami, architektur\u0105. Istnieje wi\u0119c zwi\u0119kszone ryzyko, \u017ce b\u0119dziemy pomija\u0107 b\u0142\u0119dy.<\/p>\n<p>W projekcie brakuje wydzielonych tester\u00f3w jako etatowych pracownik\u00f3w. Testowanie, oczywi\u015bcie, jest przeprowadzane, ale zajmuj\u0105 si\u0119 nim analitycy opr\u00f3cz swoich innych g\u0142\u00f3wnych obowi\u0105zk\u00f3w: komunikacji z biznesowymi zleceniodawcami, u\u017cytkownikami, opracowywaniem wymaga\u0144 do systemu itd. Mimo \u017ce testowanie jest realizowane w spos\u00f3b bardzo jako\u015bciowy (szczeg\u00f3lnie warto to podkre\u015bli\u0107, poniewa\u017c niekt\u00f3rzy z analityk\u00f3w mog\u0105 zobaczy\u0107 ten raport), nikt nie podwa\u017ca efektywno\u015bci specjalizacji i koncentracji na czym\u015b jednym.<\/p>\n<p>Bior\u0105c pod uwag\u0119 wszystkie powy\u017csze, aby poprawi\u0107 jako\u015b\u0107 dostarczanego produktu i skr\u00f3ci\u0107 czas rozwoju, pomys\u0142 automatyzacji test\u00f3w w projekcie wydaje si\u0119 bardzo logiczny. Na r\u00f3\u017cnych etapach istnienia systemu lojalno\u015bci niekt\u00f3rzy programi\u015bci podejmowali pr\u00f3by pokrycia swojego kodu testami jednostkowymi. By\u0142 to w zasadzie do\u015b\u0107 rozproszony proces, w kt\u00f3rym ka\u017cdy u\u017cywa\u0142 swojej architektury i metod. Wsp\u00f3lnym rezultatem dla test\u00f3w jednostkowych by\u0142y ko\u0144cowe wyniki: testy by\u0142y opracowywane, przez pewien czas u\u017cywane, przechowywane w wersjonowanym repozytorium plik\u00f3w, ale w pewnym momencie przestawa\u0142y dzia\u0142a\u0107 i by\u0142y zapominane. W pierwszej kolejno\u015bci dzia\u0142o si\u0119 tak, poniewa\u017c testy by\u0142y bardziej zwi\u0105zane z konkretnym wykonawc\u0105, a nie projektem.<\/p>\n<h2>Z pomoc\u0105 przychodzi utPLSQL<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/f21dfcb085aace687566dc51cb9b5613.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCzy wiesz co\u015b o Stephenie Feuersteinie? <\/p>\n<p>To inteligentny facet, kt\u00f3ry du\u017c\u0105 cz\u0119\u015b\u0107 swojej kariery po\u015bwi\u0119ci\u0142 pracy z Oracle i PL\/SQL, napisa\u0142 na ten temat wystarczaj\u0105c\u0105 ilo\u015b\u0107 prac. Jedna z jego znanych ksi\u0105\u017cek nosi tytu\u0142: \u201eOracle PL\/SQL. Dla profesjonalist\u00f3w\u201d. To w\u0142a\u015bnie Stephen jest tw\u00f3rc\u0105 rozwi\u0105zania utPLSQL, czyli frameworka do testowania jednostkowego dla Oracle PL\/SQL. Rozwi\u0105zanie utPLSQL zosta\u0142o stworzone w 2016 roku, ale prace nad nim trwaj\u0105 nadal i regularnie wydawane s\u0105 nowe wersje. W momencie wyst\u0105pienia ostatnia wersja datowana by\u0142a na 24 marca 2019 roku.<br \/>\nCzym to jest? To osobny projekt open source. Ma kilka megabajt\u00f3w, \u0142\u0105cznie z przyk\u0142adami i dokumentacj\u0105. Fizycznie stanowi osobn\u0105 schem\u0119 w bazie danych ORACLE z zestawem pakiet\u00f3w i tabel dla organizacji test\u00f3w jednostkowych. Instalacja zajmuje kilka sekund. Charakterystyczn\u0105 cech\u0105 utPLSQL jest jego prostota u\u017cytkowania. <br \/>\nOg\u00f3lnie rzecz bior\u0105c, utPLSQL to mechanizm do uruchamiania test\u00f3w jednostkowych, gdzie przez test jednostkowy rozumiemy zwyk\u0142e procedury pakietowe Oracle, kt\u00f3rych organizacja odpowiada pewnym zasadom. Opr\u00f3cz uruchamiania utPLSQL przechowuje log wszystkich Twoich uruchomie\u0144 testowych, a tak\u017ce ma wewn\u0119trzny system raportowania.<\/p>\n<p>Zobaczmy na przyk\u0142adzie, jak wygl\u0105da kod testu jednostkowego zrealizowanego zgodnie z t\u0105 metod\u0105.<\/p>\n<p><img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/6fc8cc2d84c6c32a8b5269ebad1d2381.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa ekranie przedstawiony jest kod typowej specyfikacji pakietu z testami jednostkowymi. Jakie s\u0105 wymagania obowi\u0105zkowe? Pakiet musi mie\u0107 prefiks \u201eutp_\u201d. Taki sam prefiks powinny mie\u0107 wszystkie procedury testowe. W pakiecie koniecznie musz\u0105 znale\u017a\u0107 si\u0119 dwie standardowe procedury: \u201eutp_setup\u201d i \u201eutp_teardown\u201d. Pierwsza procedura jest wywo\u0142ywana przed ka\u017cdym testem jednostkowym, druga \u2014 po jego uruchomieniu.<\/p>\n<p>\u201eutp_setup\u201d zazwyczaj przygotowuje nasz system do uruchomienia testu jednostkowego, na przyk\u0142ad tworzy dane testowe. \u201eutp_teardown\u201d \u2014 przeciwnie, wszystko przywraca do pierwotnych ustawie\u0144 i resetuje wyniki uruchomienia.<\/p>\n<p>Oto przyk\u0142ad najprostszego testu jednostkowego, kt\u00f3ry sprawdza normalizacj\u0119 wprowadzonego numeru telefonu klienta do standardowego formatu naszego systemu lojalno\u015bciowego. Nie ma obowi\u0105zkowych standard\u00f3w dotycz\u0105cych pisania procedur z testami jednostkowymi. Zazwyczaj wywo\u0142uje si\u0119 jak\u0105\u015b metod\u0119 testowanego systemu, a wynik zwr\u00f3cony przez t\u0119 metod\u0119 por\u00f3wnuje si\u0119 z referencyjnym. Wa\u017cne jest, aby por\u00f3wnanie wyniku referencyjnego z uzyskanym odbywa\u0142o si\u0119 za pomoc\u0105 standardowych metod utPLSQL.<\/p>\n<p>W te\u015bcie jednostkowym mo\u017ce by\u0107 dowolna liczba sprawdze\u0144. Jak wida\u0107 w przyk\u0142adzie, wykonujemy cztery sekwencyjne wywo\u0142ania testowanej metody normalizacji numeru telefonu i po ka\u017cdym wywo\u0142aniu oceniamy wynik. Podczas pisania testu jednostkowego nale\u017cy mie\u0107 na uwadze, \u017ce s\u0105 sprawdzenia, kt\u00f3re w \u017caden spos\u00f3b nie wp\u0142ywaj\u0105 na system, natomiast po niekt\u00f3rych nale\u017cy przywraca\u0107 stan pocz\u0105tkowy systemu. <br \/>\nNa przyk\u0142ad w przedstawionym te\u015bcie jednostkowym po prostu formatujemy wej\u015bciowy numer telefonu, co w \u017caden spos\u00f3b nie wp\u0142ywa na system lojalno\u015bciowy. <\/p>\n<p>A je\u015bli piszemy testy jednostkowe dla metody tworzenia nowego klienta, to po ka\u017cdym sprawdzeniu w systemie zostanie stworzony nowy klient, co mo\u017ce wp\u0142yn\u0105\u0107 na kolejne uruchomienie testu.<\/p>\n<p><img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/7d649b354776c15d8a70a0d9a05363b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak uruchamiane s\u0105 testy jednostkowe. Akceptowalne s\u0105 dwa sposoby uruchamiania: uruchomienie wszystkich test\u00f3w jednostkowych z konkretnego pakietu lub uruchomienie konkretnego testu jednostkowego w danym pakiecie.<\/p>\n<p><img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/46628b60eb0fe0d20df822ddca914947.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOto jak wygl\u0105da przyk\u0142ad wewn\u0119trznego systemu raportowania. Na podstawie wynik\u00f3w dzia\u0142ania testu jednostkowego utPLSQL generuje ma\u0142y raport. W nim widzimy wyniki dla ka\u017cdego konkretnego sprawdzenia oraz og\u00f3lny wynik wykonania testu jednostkowego. <\/p>\n<h2>6 zasad autotest\u00f3w<\/h2>\n<p>\nZanim przyst\u0105pili\u015bmy do tworzenia nowego systemu automatycznego testowania systemu lojalno\u015bciowego, wsp\u00f3lnie z kierownictwem okre\u015blili\u015bmy zasady, kt\u00f3rym nasze przysz\u0142e autotesty powinny odpowiada\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Testy jednostkowe w DBMS \u2013 jak robimy to w Sportmasterze, cz\u0119\u015b\u0107 pierwsza\" src=\"\/wp-content\/uploads\/2019\/08\/84be59663203abb373e7074b9a6cd4e4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Automatyczne testy musz\u0105 by\u0107 skuteczne i przynosi\u0107 korzy\u015bci. Mamy wspania\u0142ych programist\u00f3w, o kt\u00f3rych warto wspomnie\u0107, poniewa\u017c z pewno\u015bci\u0105 kto\u015b z nich zobaczy ten raport, a oni pisz\u0105 doskona\u0142y kod. Mimo to, nawet ich wspania\u0142y kod nie jest doskona\u0142y i zawiera\u0142, zawiera i b\u0119dzie zawiera\u0107 b\u0142\u0119dy. Automatyczne testy musz\u0105 je znajdowa\u0107. Je\u015bli tak nie jest, to albo piszemy z\u0142e automatyczne testy, albo trafili\u015bmy do martwego obszaru, kt\u00f3ry de facto nie jest rozwijany. W obu przypadkach robimy co\u015b \u017ale, a nasze podej\u015bcie jest po prostu bezsensowne.<\/li>\n<li>Automatyczne testy powinny by\u0107 u\u017cywane. Nie ma sensu trwoni\u0107 mn\u00f3stwo czasu i si\u0142 na napisanie produktu programowego, z\u0142o\u017cenie jego repozytorium i zapomnienie o nim. Testy powinny by\u0107 uruchamiane, a uruchamiane jak najcz\u0119\u015bciej.<\/li>\n<li>Automatyczne testy musz\u0105 dzia\u0142a\u0107 stabilnie. Bez wzgl\u0119du na por\u0119 dnia, \u015brodowisko uruchomieniowe i inne ustawienia systemu, wyniki test\u00f3w powinny by\u0107 zawsze takie same. Zawsze zapewnia to to, \u017ce automatyczne testy dzia\u0142aj\u0105 z u\u017cyciem specjalnych danych testowych oraz ustalonych ustawie\u0144 systemu.<\/li>\n<li>Automatyczne testy musz\u0105 dzia\u0142a\u0107 z akceptowaln\u0105 dla Twojego projektu szybko\u015bci\u0105. Czas ten okre\u015bla si\u0119 indywidualnie dla ka\u017cdego systemu. Kto\u015b mo\u017ce sobie pozwoli\u0107 na dzia\u0142anie przez ca\u0142y dzie\u0144, a dla kogo\u015b innego kluczowe jest zmieszczenie si\u0119 w sekundach. Jakie normy szybko\u015bci osi\u0105gn\u0119li\u015bmy w naszym projekcie, opowiem za chwil\u0119.<\/li>\n<li>Tworzenie automatycznych test\u00f3w musi by\u0107 elastyczne. Niepo\u017c\u0105dane jest rezygnowanie z weryfikacji jakiejkolwiek funkcjonalno\u015bci tylko dlatego, \u017ce wcze\u015bniej tego nie robili\u015bmy lub z innych powod\u00f3w. utPLSQL nie nak\u0142ada \u017cadnych ogranicze\u0144 na rozw\u00f3j, a Oracle w og\u00f3le pozwala na realizacj\u0119 najr\u00f3\u017cniejszych rzeczy. Wi\u0119kszo\u015b\u0107 zada\u0144 ma rozwi\u0105zanie, kwestia tylko czasu i wydanych wysi\u0142k\u00f3w.<\/li>\n<li>Wdra\u017calno\u015b\u0107. Mamy kilka \u015brodowisk, w kt\u00f3rych wymagane jest uruchamianie test\u00f3w. Na ka\u017cdym z tych \u015brodowisk w ka\u017cdej chwili mo\u017ce by\u0107 zaktualizowany zrzut danych. Nale\u017cy prowadzi\u0107 projekt z automatycznymi testami w taki spos\u00f3b, aby mie\u0107 mo\u017cliwo\u015b\u0107 bezproblemowego przeprowadzenia jego pe\u0142nej lub cz\u0119\u015bciowej instalacji.<\/li>\n<\/ol>\n<p>A w drugim po\u015bcie za kilka dni opowiem, co zrobili\u015bmy i jakie osi\u0105gn\u0119li\u015bmy wyniki.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 4 \u0433\u043e\u0434\u0430, \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0421\u0423\u0411\u0414. \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u044f \u0441\u043e\u0441\u0442\u043e\u044e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043e\u0434\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28136,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u0421\u0423\u0411\u0414 \u2014 \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Testy jednostkowe w DBMS \u2014 jak to robimy w Sportmasterze, cz\u0119\u015b\u0107 pierwsza | ProHoster","description":"Cze\u015b\u0107, Habr! Nazywam si\u0119 Maksym Ponomarenko i jestem programist\u0105 w Sportmasterze. Mam 10-letnie do\u015bwiadczenie w bran\u017cy IT. Karier\u0119 zaczyna\u0142em w obszarze testowania manualnego, a potem przeszed\u0142em do tworzenia baz danych.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u0421\u0423\u0411\u0414 \u2014 \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:57+00:00","article:modified_time":"2019-10-31T19:17:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37495","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:25:27","updated":"2026-01-23 18:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=37495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/28136"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=37495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=37495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=37495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}