Бартарафсозии ғайридавлатӣ муайян дар Санҷишҳо

захираҳо : https://martinfowler.com/articles/nonDeterminism.html

Як пакети регрессияи автоматии метавонанд нақши муҳим оид ба лоиҳаи барномавӣ, арзишманд ҳам барои паст намудани камбудиҳои дар истеҳсолот ва зарурӣ барои тарҳрезии эволютсионӣ мебозанд. Озмоишҳо, ки баъзан мегузаранд ва баъзан хилоф – Дар сӯҳбат бо дастаҳои рушди Ман кардам аксар вақт дар бораи мушкилоти санҷишҳои ғайридавлатӣ deterministic шунид. Беназорати, санҷишҳои ғайридавлатӣ deterministic чап пурра метавонад арзиши як пакети регрессияи автоматии ҳалок кунанд. Дар ин мақола ман муайян, ки чӣ тавр ба мубориза бо озмоишҳо ғайридавлатӣ deterministic. Сараввал карантини кӯмак ба паст кардани зарар ба озмоишҳои дигар, вале шумо то ҳол доранд, ба онҳо ислоҳ наздикӣ. Бинобар ин ман муҳокима табобат барои сабабҳои умумӣ барои риоя накардани determinism: набудани бунбасти, рафтори асинхронӣ, хизматрасонии дурдаст, замон ва ихроҷ захираҳои.

Ман мушоҳида ThoughtWorks ҳалли бисёре аз барномаҳои корхона душвор, кашидани тањвили муваффақ ба бисёре аз муштариён, ки аҳёнан муваффақ дида маъқул кардам. таҷрибаи мо нишон бузург аст, ки усулҳои захмгирифта, хеле баҳснок ва нохуш, вақте ки мо ба Манифести даҳ сол пеш навишта буд, метавонад бомуваффақият истифода бурда шудааст.

вуҷуд бисёре аз мошинмебошад, рушди захмгирифта аз он ҷо, балки дар мо чӣ кор мекунем нақши марказиро барои санҷиши автоматии аст. Муфассалтар худкори равиши аслӣ ба Барномасозӣ Extreme аз ибтидо буд, ва фалсафа дорад, бузургтарин ваҳй ба кори захмгирифта мо буд. Барои ҳамин, мо бисёр таҷрибаи дар истифодаи тестӣ автоматӣ ҳамчун қисми асосии таҳияи нармафзор даст кардам.

Муфассалтар худкори метавонед назар осон вақте ки дар як китоби матн супорид. Ва, албатта, ба ғояҳои асосӣ дар асл хеле оддӣ. Аммо дар фишори-cooker лоиҳаи расонидани, озмоишҳо омад, то ки аксаран диққати қадар дар матнҳои дода нашуд. Тавре ки ман низ хуб медонам, муаллифон, ки одати дар skimming бар ҷузъиёти зиёде дар ба даст овардани нуқтаи аслӣ дар саросари. Дар сӯҳбат бо дастаҳои таҳвили мо, яке аз мушкилоти Ташрифорӣ, ки мо ба кор кардам, ки озмоишҳо беэътимод табдил аст, то нодуруст, ки ба одамон диққати зиёд оё мегузарад пардохт нашудаанд ва ё нобуд кард. Як роҳи асосии ин unreliability он аст, ки баъзе аз санҷишҳои табдил ғайридавлатӣ deterministic.

Як санҷиши ғайридавлатӣ deterministic аст, вақте ки аз он баъзан мегузарад ва баъзан наояд, бе ягон тағйирот намоён дар коди, санҷишҳо, ё муҳити зист. Чунин санҷишҳо хилоф, пас ба шумо аз нав идора ба онҳо ва онҳо мегузаранд. нокомиҳо Санҷиши барои чунин озмоишҳо паноҳгоҳ тасодуфӣ мебошанд.

Non-determinism метавонад ҳар гуна санҷиш азият, вале он, махсусан моил ба таъсир санҷишҳои бо доираи васеи, ба монанди қабул ва ё санҷишҳои функсионалии.


Чаро санҷишҳои ғайридавлатӣ deterministic мушкилот доранд

санҷишҳои Non-deterministic ду мушкилоти, аввалан онҳо бефоида мебошад, сониян онҳо сирояти virulent, ки метавонад пурра кӯшид тамоми пакети озмоиши шумо ҳастанд. Дар натиҷа онҳо лозим аст, ки бо зудтар ба шумо метавонед ҳал карда мешавад, ки пеш аз тамоми лулаи густариши худ осеб аст.

Ман бо тавсеаи оид ба uselessness худ оғоз. Ба манфиати асосии дорои санҷишҳои автоматӣ аст, ки онҳо таъмин механизми муайянкунии ишколи ҷониби сифати санҷиши регрессияи . Вақте ки як санҷиши регрессияи сурх меравад, шумо медонед, ки шумо проблемаи фаврӣ кардам, аксаран аз сабаби он ки ишколи дорад, ба низоми бе шумо дарк даромадаанд.

Доштани чунин детектори ишколи дорад, манфиатҳои бузург. Аксари баръало ин маънои онро дорад, ки шумо метавонед пайдо ва ислоҳ иштибоҳ танҳо баъд аз онҳо љорї карда шуд. На танҳо ин ба шумо fuzzies гарм диҳад, зеро хатоҳои шуморо ба қатл зуд, он низ осонтар ба онҳо хориҷ аз шумо медонед, ишколи бо охирин маҷмӯи тағйирот, ки тару тоза дар ҳуши ту ҳастанд шуданд. Дар натиҷа шумо медонед, ки барои ишколи, аст, ки бештар аз нисфи ҷанг дар squashing он назар андозад.

Дар сатҳи дуюми фоидаи он аст, ки чунон ки шумо даст боварии детектори ишколи худ, шумо далерӣ ба дигаргуниҳои калон медонед, ки вақте ки шумо goof, детектори ишколро хомӯш хоҳад рафт намоям ва шумо метавонед ба хато зуд ислоҳ.  Бидуни ин дастаҳои ҳарос ба тағйирот рамзи бояд ба хотири тоза нигоҳ дошта шавад, ки боиси rotting пойгоҳи Рамзи ва plummeting суръати рушд мебошанд.

Дар душворӣ бо озмоишҳо ғайридавлатӣ deterministic он аст, ки вақте ки онҳо рафта, сурх, шуморо ҳеҷ фикри оё сабаби он ба ишколи, ё танҳо қисми рафтори ғайри deterministic. Одатан, бо ин озмоишҳои як нокомии ғайридавлатӣ deterministic нисбатан маъмул аст, то ки шумо то хотима shrugging китфи шумо, вақте ки ба чунин озмоишҳои рафта сурх. Пас шумо шурӯъ накардани як нокомии озмоиши баргашт, он гоҳ, ки ба озмоиш бефоида аст, ва шумо инчунин, то он бипартоед дур.

Дар ҳақиқат шумо дар ҳақиқат бояд бияфканед озмоиши ғайридавлатӣ deterministic дур, зеро агар шумо намедонед он дорои сифати сироятї. Агар шумо як пакети 100 санҷишҳои бо 10 озмоиши ғайридавлатӣ deterministic дар онҳо, аз он ки пакети аксаран хилоф мекунад. Дар аввал одамон дар гузориши нокомии назар ва пай мебаранд, ки камбудиҳо дар озмоишҳои ғайридавлатӣ deterministic доранд, вале ба зудӣ онҳо дар онҷо интизоми даст ба кор, ки. Пас, ки интизом аз даст аст, он гоҳ як нокомии дар санҷишҳои deterministic солим даст ҳам аҳамият намедиҳанд. Дар ин бора ба шумо тамоми бозӣ гум кардам ва шояд инчунин даст аз ҳама санҷишҳои халос.


карантин

Ҳадафи асосии ман дар ин мақола аст, ки ба муайян њолатњои умумии санҷишҳои ғайридавлатӣ deterministic ва чӣ тавр ба бартараф накардани determinism. Вале пеш аз он ки ман он ҷо ки ман пешниҳод як порае аз маслиҳати муҳим: карантини санҷишҳои ғайридавлатӣ deterministic кунед. Агар шумо санҷишҳои ғайридавлатӣ deterministic онҳо дар пакети озмоиши гуногун ба озмоишҳои солим худ вафо кунед. Ҳамин тавр, шумо мефахмед, ки шумо метавонед минбаъд низ ба диққати ба чӣ мегузарад, бо озмоишҳои солим худ ва ба даст фикру хуб аз онҳо.

Ҷойгир ҳар гуна озмоишҳо ғайридавлатӣ deterministic дар соҳаи карантини. (Аммо ислоҳ озмоишҳо зуд карантини.)

Сипас суол ин аст, ки чӣ кор бо сюитҳо озмоиши карантини. Онҳо намеояд, чуноне ки санҷишҳои баргашт, аммо онҳо кор доранд оянда ҳамчун адад кор барои тоза кард. Шумо бояд чунин озмоишҳо тарк намекунад, зеро ҳеҷ озмоиши шумо дар карантини доранд, бо фарогирии регрессияи шумо кӯмак нест.

A хатар дар ин ҷо он аст, ки озмоишҳои диққатамонро даст ба карантини андохта ва фаромӯш, ки маънои онро дорад, системаи муайянкунии ишколи худ аст, коста. Дар натиҷаи он арзанда дошта механизми ки кафолат медиҳад, ки озмоишҳои Оё дар карантини мондан на он қадар дароз. Ман дар саросари тарзи гуногун ба ин кор омада кардам. Яке аз меъёри оддӣ, рақам аст: масалан, имконият дод танҳо 8 санҷиши дар карантини. Пас шумо мезананд мўҳлати шумо бояд вақт тоза кардани ҳамаи санҷишҳои берун сарф мекунад. Ин дорои бартарии batching, то шуморо озмоиш-тоза, агар, ки чӣ тавр ба шумо маъқул ба корҳои. Масири дигаре аст, ки ба гузошта як мўњлати дароз дар бораи чӣ гуна озмоиши метавонад дар карантини бошад, ба монанди на бештар аз як ҳафта.

Ба муносибати умумӣ бо карантин аст, ки санҷишҳои карантини аз лӯлаи густариши асосии, то ки шумо ба ҳар ҳол раванди сохтани мунтазам худ даст. Вале дастаи хуб метавонад хашмгин бештар. Мо бирӯяд дастаи пакети карантини баъд аз санҷишҳои солим он мегузорад, ба лӯлаи ҷобаҷогузории як марҳилаи. Ин роҳи он метавонад ба фикру аз санҷишҳои солим, балки даст аст, низ маҷбур ба таъмини он навъҳои берун санҷишҳои карантини зуд.


Набудани хоси

Бо мақсади ба даст озмоишҳо ба кор боэътимод, шумо бояд назорати равшан бар муҳите ки дар он онҳо давида дошта бошад, пас шумо як давлати маъруф дар оғози санҷиши. Агар яке аз санҷиш баъзе маълумот дар базаи меофаринад ва тарк он паҳлӯӣ, он метавонад фасод медаванд озмоиш дигар, ки метавонанд дар бораи давлат базаи гуногуни такя.

Бинобар ин пайдо кардани он дар ҳақиқат муҳим, ки диққататонро ба нигоҳ доштани санҷишҳои ҷудо карданд. Дуруст санҷишҳои алоҳида мумкин аст дар ҳар гуна пайдарпаии давида. Вақте ки шумо ба доираи калони фаврии санҷишҳои функсионалии даст, он меорад тадриҷан сахттар нигоҳ санҷишҳои ҷудо карданд. Вақте, ки шумо пайгирии поён як ғайридавлатӣ determinism, набудани бунбасти як роҳи умумӣ ва рӯҳафтода аст.

Нигоҳ санҷишҳои худро ҷудо аз якдигар, ба тавре, ки иҷрои як озмоиши ягон дигарон таъсир намерасонад.

Як ҷуфти ҳамсарон аз роҳҳои ба даст бунбасти вуҷуд дорад – ё ҳамеша давлатӣ оғоз худро аз сифр аз нав ё таъмини ки ҳар як санҷиш, пок месозад, то дуруст баъд аз худ. Дар маҷмӯъ ман бартарӣ собиқ, ки он вақт осонтар – ва аз ҷумла, осонтар ба пайдо кардани сарчашмаи мушкилоти. Агар озмоиши наояд, зеро он бино накардаӣ, то давлати ибтидоии дуруст, Пас аз он осон аст барои дидани он озмоиши дорои ишколи. Бо пок-то, вале як санҷиши хоҳад дорои ирода, вале озмоиши якдигар хилоф мекунад – то он сахт ба пайдо кардани мушкилоти воқеӣ.

Шурўъ аз давлати холӣ аст, одатан бо озмоишҳо воҳиди осон, вале мумкин аст хеле душвор аст, бо озмоишҳои функсионалї – махсусан агар шумо зиёде доранд, маълумот дар базаи, ки бояд вуҷуд дошта бошад. Бовариро махзани ҳар вақт метавонад бисёр вақт ба санҷидани медавад илова, то ки барои ҷидол гузариш ба стратегияи пок-то.

Яке аз ҳиллаест, ки муқимӣ, вақте ки шумо бо истифода аз базаи, аст, ки ба гузаронидани санҷишҳои худро дар дохили як амалиёти, ва он гоҳ ба Rollback амалиёти дар охири санҷиши. Ин роҳ мудири муомила пок барои шумо, кам кардани имкони хатоҳои .

Равиши дигар аст, ки ба кор дар як бино ягонаи як асбоб ибтидої асосан-immutable пеш аз корандозӣ кардани гурӯҳи санҷишҳои. Сипас таъмини он, ки санҷишҳои мекунем, ки дар давлати ибтидоии, дигаргун накунад (ё, агар ба коре, ки онҳо ба тағйирот дар ашкро поён бо бозгашт). Ин борҳои зиёд гумроҳӣ-дучори аз барқарор кардани асбоб барои ҳар як санҷиш аст, аммо шояд арзанда ҶБФ мегирад ҳам барои сохтани асбоб ҳар вақт.

Ҳарчанд базаи сабаби асосии барои мушкилоти ҷудо ҳастанд, фаровонӣ аз маротиба шумо метавонед ин дар-хотира ҳам даст нест. Аз ҷумла бо иттилооти статикӣ ва singletons огоҳ. Як намунаи хуб барои ин гуна мушкилоти муҳити мазмун ба монанди айни замон дар истифодабаранда ба система аст.

Агар шумо дорои ашкро поён дақиқ дар як санҷиш, wary намудани истисноҳо, ки дар давоми ашкро поён меоянд бошад. Агар ин ҳолат рӯй озмоиши метавонад гузарон аст, лекин боиси нокомиҳои бунбасти барои санҷишҳои минбаъда. Пас, таъмин, ки агар шумо як масъалаи дар як ашкро-поён, аз он медиҳад, як садои баланд бошад.

Баъзе одамон бартарӣ ба гузошта диќќати камтар бунбасти ва бештар дар бораи муайян кардани dependencies равшан маҷбур озмоишҳои барои давидан дар як тартиби муайян карда мешавад. Ман бартарӣ бунбасти, зеро он ба шумо медиҳад, чандирии бештар дар иҷро subsets санҷишҳои ва parallelizing озмоишҳо.


рафтори асинхронии

Asynchrony бахшад, ки ба шумо имкон медиҳад, ки ба нигоҳ доштани нармафзори ҷавобгӯ ҳангоми гирифтани вазифањои дарозмуддат аст. Зангҳои Ajax имконият медиҳад, ки ба браузери ҷавобгӯ мондан ҳангоми бозгашт ба сервер барои маълумоти бештар, паёми асинхронӣ имконият медиҳад, ки раванди сервери иртибот бо низоми дигар бе ба latency laggardly худ баста.

Аммо дар тестӣ, asynchrony метавонад лаънати. Дар хато маъмул дар ин ҷо аст, ки ба бипартоед дар хоби:

 //pseudo-code
        makeAsyncCall;
        sleep(aWhile);
        readResponse;

Ин метавонад ба шумо ду роҳ газад. Аввалин хомӯш шумо мехохед, ба танзим вақти хоб ба қадар, ки он вақт фаровон ба даст посух медиҳад. Аммо ин маънои онро дорад, ки шумо мефахмед, бисёр вақт биёмезед, мунтазири вокуниш ба харҷ мекунед, ба ин васила суст санҷишҳои кунед. Дар газидани дуюм аст, ки, аммо шумо дароз хоб, баъзан он хоҳад кофӣ. Он ҷо хоҳад буд баъзе аз тағйирот дар муҳити, ки ба сабаби он мегардад, ки шумо ба ақаллан хоб – ва ба шумо нокомии козиб мефахмед даст. Дар натиҷа ман сахт водор ба шумо ҳеҷ гоҳ хоб луч ин истифода баред.

Ҳеҷ гоҳ истифода хуфтааст луч барои посухҳои asynchonous мунтазир истифода дар іолати ё участкавии интихобот.

асосан ду найрангҳои шумо метавонед барои озмоиш вокуниш асинхронӣ кор нест. Дар аввал аст, ки барои хизмати асинхронӣ бигирад іолати, ки он метавонад ба занг вақте, анҷом дода мешавад. Ин беҳтарин аст, чунки ин маънои онро дорад ки шумо ҳеҷ гоҳ мефахмед, ки ба ҳама гуна дигар аз ту бояд интизор . Бузургтарин мушкили аст бо ин он аст, ки ба муҳити зист бояд бошад, ин корро карда метавонам ва он гоҳ бо провайдери хидматрасон бояд ба он кор. Ин яке аз бартариҳои доштани дастаи рушд муттаҳид бо санҷиш аст – агар ки онҳо метавонанд як іолати сипас таъмин хоҳанд кард.

Варианти дуюм аст, ки ба раъй дар ҷавоб. Ин бештар аз танҳо мунтазири як бор, балки мунтазири мунтазам, чизе монанди ин аст,

 //pseudo-code
        makeAsyncCall
        startTime = Time.now;
        while(! responseReceived) {
          if (Time.now - startTime > waitLimit) 
            throw new TestTimeoutException;
          sleep (pollingInterval);
        }
        readResponse

Дар банди ин равиш аст, ки шумо метавонед насб pollingInterval ба арзиши хеле хурд, ва бидонед, ки он маблағи ниҳоии вақти мурдагон шумо мефахмед, ки ба интизори як вокуниш ба даст аст. Ин маънои онро дорад, ки шумо метавонед насб waitLimit хеле баланд, ки имкони номӯътадили, магар он чизе ҷиддӣ рафт нодуруст кам.

Боварӣ ҳосил кунед, ки шумо дар як синф ба истиснои равшан, ки нишон медиҳад, ин санҷиш оғозёбӣ, ки Русия ғайриқаноатбахш аст, истифода баред. Ин кӯмак мекунад, ки онро тоза чӣ нодуруст, бояд аз он рӯй рафта, ва шояд имконият медиҳад, ки фаъолонаи озмоиши пешрафтатарин ба ҳисоби ин иттилоот дар намоиши он.

Дар арзишҳои вақт, аз ҷумла waitLimit , бояд ҳеҷ гоҳ арзишҳои аслӣ бошад. Боварӣ ҳосил кунед, ки онҳо ҳамеша ҳастанд, арзишҳое, ки метавонад ба осонӣ дар ќисми зиёди насб, ё бо истифода аз constants ё маҷмӯи тавассути муҳити runtime аст. Ин роҳ, агар ба шумо лозим аст, ба онҳо tweak (ва шумо) шумо метавонед ҳамаи онҳо ба зудӣ tweak.

Ҳамаи ин маслиҳат муқимӣ барои зангҳои async, ки шумо интизор вокуниш аз провайдери аст, аммо чӣ гуна дар бораи онҳое, ки дар он ҳеҷ вокуниш нест. Ин зангҳо, ки мо ба худоӣ фармони чизе ва интизор аз он ки ба бе ягон эътирофи рӯй доранд. Ин trickiest ҳолат аст, чунки шумо метавонед барои вокуниш ба назар кунед, меозмояд, вале чизе ба кор барои ошкор накардани дигар мӯҳлатҳои-аз он ҷо. Агар провайдери чизе ки шумо обод шумо метавонед ин таъмини провайдери ӯҳдаи аст, амалӣ баъзе аз роҳи нишон медиҳад, ки он ба амал – аслан ягон шакли дар іолати. Ҳатто агар танҳо рамзи тестикунонї онро истифода мебарад, он ба маблағи он – ҳарчанд зуд пайдо мефахмед ин гуна фаъолияти барои мақсадҳои дигар арзишманд аст, хеле  . Агар провайдери кори ягон каси дигар бошад, шумо метавонед таъсир кӯшиш, вале дар акси ҳол метавонад мекашид. Ҳарчанд ин аст, низ парвандаи ҳангоми истифодаи Test ду баробар барои хадамоти дурдаст арзанда (ки ман бештар дар боби оянда муҳокима) аст.

Агар шумо як нокомии умумӣ чизе асинхронӣ, то ин ки он вокуниши на дар ҳамаи, он гоҳ шумо мефахмед, ҳамеша мунтазири timeouts ва пакети озмоиши шумо муддати дароз ба хилоф гирифта шавад. Барои мубориза бо ин ки ин ақида хуб истифода озмоиши дуди ба тафтиш, ки дар хизмати асинхронӣ аст, вокуниш дар ҳама қатъи санҷиши медаванд ҳуқуқ дур, агар он нест, аст.

Шумо инчунин метавонед аксаран тарафгирӣ-зина asynchrony пурра. Жерар Meszaros кард намунаи Объекти фурӯтан мегӯяд, ки вақте, ки шумо баъзе мантиқ, ки дар муҳити сахт-ба-озмоиши аст, ки шумо бояд ба мантиқи шумо лозим аст, ки барои санҷидани аз муҳити зист канор. Дар ин ҳолат, ин маънои онро дорад гузошта бештар аз мантиқ ба шумо лозим аст барои озмудани дар ҷое ки шумо метавонед онро synchronously биёзмояд. Ба рафтори асинхронӣ бояд њадди аќал (фурӯтан) имкон бошад, ки роҳи шумо, ки санҷиши қадар аз он лозим нест.


Хадамоти дурдаст

Баъзан ман хоҳиш дорам, ки агар ThoughtWorks ягон кори ҳамгироӣ, ки ба ҳадде цалатӣ аз Русия базӯр ягон лоиҳаи мо ин корро надорад, каме одилонаи ҳамгироӣ дар бар намегирад нест ёфт. Бо табиати худ, барномаҳои ташкилот ҷалб як созишномаи бузург аз омезиши маълумот аз системаҳои гуногун. Ин системаҳо аз тарафи гурӯҳҳои дигар фаъолият ба ҷадвали худ, дастаҳо, ки аксаран ба муносибати захмгирифта сахт-озмоиши ронда мо истифода фалсафаи нармафзор хеле гуногун нигоњ дошта мешавад.

Озмуданй шуда, бо чунин системаҳо дурдаст меорад як қатор мушкилот, ва ғайридавлатӣ determinism баланд оид ба рӯйхат аст. Аксаран системаи дурдаст Оё низоми санҷиши мо метавонем бихонед, ки маънояш номӯътадили системаи зинда надорад. Агар як низоми санҷиши нест, он шавад, шояд устувор барои таъмини ҷавобҳои deterministic.

Дар ин вазъият аз он хеле муҳим барои таъмини determinism, то он замон барои расидан ба як Double Test – як ҷузъи, ки монанди хадамоти дурдаст, балки дар ҳақиқат танҳо дар як нусхаи вонамуд, ки ба рафтори системаи дурдаст кард аутизмро. Эњтиёљоти дукарата ба сабти, то ки намуди рости вокуниш дар ҳамкорӣ бо низоми мо таъмин мекунад, балки дар як роҳе, ки мо назорат мекунад. Дар ин мазмун, мо метавонем determinism таъмин намояд.

Бо истифода аз дукарата дорад нуқсони, аз ҷумла, вақте ки мо озмоиш дар саросари доираи васеи. ҳосил кунед, ки рафтори дугона дар ҳамон тавр, ки дар ҷои дурдасти система мекунад, чӣ тавр метавонем? Мо метавонем аз ин боз бо истифода аз санҷишҳо, як намуди озмоиш, ки ман даъват ҳал Санҷишҳо шартномаи ҳамгироии . Ин идора ҳамкории ҳамин бо системаи дурдаст ва дучандон, ва санҷед, ки ду бозии. Дар ин ҳолат ‘бозии’ метавонад маънои онро надорад, меояд, то бо натиҷаи ҳамон (бо сабаби ба ғайри determinisms), аммо натиҷаҳои ки мубодила сохтори муҳим ҳамон. Санҷишҳо шартномаи Ҳамгироӣ лозим аст, ки зуд-зуд иҷро мешавад, вале на қисми лӯлаи густариши системаи мо. давида даврии асоси қурби иваз шудани ҷои дурдасти система беҳтар аст, одатан.

Барои навиштани ин намуди баробар санҷиш, Ман як мухлиси калон дорам худидоракунии Initializing Fakes – зеро ин хеле оддӣ барои идора мешавад.

Баъзе одамон бар зидди истифодаи ҳастанд маҳкам Санҷиши ду баробар , дар санҷишҳои функсионалӣ, имон дорад, ки шумо бояд бо пайвасти воқеӣ бо мақсади таъмини рафтори охири-ба-охири биёзмояд. Дар ҳоле, ки ман бо ҳуҷҷаташон мо дилсӯзӣ намояд, санҷишҳои автоматӣ бефоида доранд, агар онҳо ғайридавлатӣ deterministic мебошанд. Пас, ҳеҷ фоидае ба шумо бо гап ба низоми воқеии даст аст бо зарурати барои несту нобуд накардани determinism ғарқ  .


Time

Чанд чизро бештар ғайридавлатӣ deterministic аз занг ба соати система мебошанд. Ҳар вақте, ки шумо ба он мехонед, ба шумо натиҷаи нав даст, ва ҳар гуна озмоишҳо, ки дар он вобаста ба ин васила метавонад тағйир. Барои ҳамаи todos сабаби дар он соати оянда пурсед, ва шумо мунтазам ба даст ҷавоби гуногун .

Аз ҳама чизи муҳиме дар ин ҷо аст, ки шумо ҳамеша бо routines, ки мумкин аст бо арзиши seeded барои санҷиши иваз ба натиҷа соати система. A нопурра соати метавонад ба вақти барпо ва вохуред дар он замон, имкон санҷишҳои худро ба назорати пурраи бар ҷунбишҳои он. Ҳамин тавр, шумо метавонед маълумоти санҷиш ба арзишҳои дар соати seeded ҳамоҳангсозии.

Ҳамеша соати системаи натиҷа, то он метавонад ба осонӣ барои санҷиши иваз кунанд.

Як чизе ба тамошо ба ин аст, ки дар ниҳоят маълумоти санҷиш то оғози мушкиле сабаби он хеле пир, ва шумо муноқишаҳо бо дигар омилҳои вақт дар асоси дар аризаи худ даст. Дар ин ҳолат шумо метавонед маълумот ва тухмиҳои соат худ ба арзишҳои нав ҳаракат. Вақте ки шумо ин корро таъмин менамояд, ки ин ягона чизе, ки шумо мекунед, огоҳ аст. Ҳамин тавр, шумо боварӣ дошта метавонед, ки ҳар гуна озмоишҳоеро, ки хилоф сабаби замон ҳаракати дар маълумоти санҷиш қарор доранд.

минтақаи дигар дар он вақт метавонад як масъала аст, вақте ки шумо рӯи рафтори дигар аз шабонарӯзӣ, такя накунед. Ман як маротиба дидам системаи, ки калидҳои тасодуфӣ тавлидшуда дар асоси арзишҳои шабонарӯзӣ. Ин системаҳои оғоз ғайриқаноатбахш он гоҳ ки ба як мошини тезтар, ки нодири сершумор дар давоми як соат моҳҳоеро ягонаи ҷудо кӯчонида шуд.

Ман мушкилоти бисёр бо сабаби ба зангҳои бевосита ба соати системаи, ки Ман мехоҳам барои дарёфти як роҳи ба истифода таҳлили Рамзи ошкор занг бевосита ба соати система ва ғайриқаноатбахш ба сохтани ҳуқуқи он ҷо баҳс шунида будам. Ҳатто чек regex оддӣ метавонад ба шумо дар як ҷаласаи debugging рӯҳафтода пас аз занги дар соате осиён захира кунед.


ихроҷ захираҳо

Агар ба аризаи худ дорад, баъзе гуна моеъи захираҳо, аз ин ба санҷиши тасодуфӣ ғайриқаноатбахш мерасонад, зеро он танҳо, ки озмоиши боиси ихроҷи манбаъ, ба беш аз як андоза, ки ба меорад нокомии рафта. Ин ҳолат заҳматталаби аст, зеро ҳар гуна озмоишҳо метавон intermittently бо сабаби ба ин масъала хилоф. Агар он аст, ки сурати яке аз санҷиши будан ғайри deterministic нест, пас ихроҷ захираҳои як номзади хуб ба тафтиши.

Бо ихроҷи захираҳо, дар назар дорам ягон манбаи ки ариза дорад, барои идора аз тарафи шудан ва озод. Дар муҳити ғайри хотираи идора, намунаи ошкор хотира аст. Хотира-идоракунии кард зиёд ба хориҷ аз ин мушкилот, балки захираҳои дигари ҳанӯз бояд идора карда шавад, ба монанди пайвастшавии махзани.

Одатан, беҳтарин роҳи аз ӯҳдаи ин гуна захираҳо аст, тавассути як ҳавзи захираҳо . Агар шумо ин корро пас аз як ҳилаи хуб аст, ки ба танзим дароред ҳавзи ба андозаи 1 ва онро мепартоӣ истисно, бояд аз он даст додани ариза барои захираи он гоҳ ки дорад, ҳеҷ яке аз чап ба диҳад. Ин роҳ озмоиши аввал ба дархости захираи пас аз ихроҷи хилоф мекунад – ки он бисёр осонтар барои ёфтани озмоиши мушкилоти.

Манзур аз ин андеша маҳдуд андозаи ҳавзи захираҳо, аст, дар бораи баланд бардоштани маҳдудиятҳои ба хатоҳои бештар ба ҳосилнокии зироат, то дар озмоишҳо. Ин хуб аст, зеро мо мехоҳем, ки хатоҳои зоҳир дар озмоишҳо, то ки мо метавонем ба онҳо пеш аз онҳо худро дар истеҳсоли зоҳир ислоҳ. Ин принсип мумкин аст бо роҳҳои дигар истифода низ. Яке аз достони Ман шунидам, як системаи, ки ба таври тасодуфӣ ба номи файлҳои муваққатӣ тавлид шуд, онҳоро тоза нест, то дуруст, ва суқут дар як бархӯрд. Ин гуна ишколи хеле душвор пайдо мешавад, балки як роҳи ба он аст, ки ба зоҳир нопурра аз randomizer барои санҷиш, то он ҳамеша арзиши ҳамин мегардонад. Ин роҳ шумо метавонед мушкилии зудтар мебарояд.

Эзоҳҳо

1: Бале, ман медонам, бисёре аз ҳомиёни аз TDD чунин мешуморанд, ки онаст асосии санҷиши роҳи меронад талабот ва тарҳи аст. Ман розӣ, ки ин ба манфиати бузург аст, вале ман дида пакети баргашт ба шавад ягонаи бузургтарин фоида, ки ба озмоишҳо автоматӣ ба мо дод. Ҳатто бе озмоишҳои TDD маблағи хароҷоти барои ин мебошанд.

2: Баъзан, албатта, як нокомии санҷиш аст, аз сабаби тағйирот дар чӣ рамзи гумон аст, ба кор, балки озмоиши низ таљдиди назар нагардидаанд инъикос рафтори нав. Ин аст, моҳиятан як ишкол дар санҷишҳо, вале баробар осон ба ислоҳ агар он рост дур бурда.

3: нақши муфид барои санҷишҳои ғайридавлатӣ deterministic вуҷуд дорад. Санҷишҳо seeded аз randomizer кӯмак карда метавонад, водоратон аз ҳолатҳои канори. санҷиши иҷрои ҳамеша баргашта меояд, бо арзишҳои гуногун. Аммо ин намуди санҷишҳои хеле фарқ аз санҷишҳои регрессияи автоматии, ки дар ин ҷо ҳастанд, Маҳалли ман ҳастанд.

4: Дар ин кор, инчунин барои дастаи бирӯяд онҳо моҳирона кофӣ барои пайдо ва ба ислоҳ санҷишҳои ғайридавлатӣ deterministic зуд ва кофӣ муназзам барои таъмини он ба зудӣ бикун мебошанд. Агар сохтани худ шикаста, барои дароз боқӣ мемонад бо сабаби санҷиши карантинӣ худ ғайриқаноатбахш ба шумо хоҳад арзиши ҳамгироии пайваста аз даст медиҳад. Пас, барои аксари дастаҳои Ман мехоҳам панд нигоҳ санҷишҳои карантини аз лӯлаи асосии.

5: Русия ҳеҷ мафњумњои сахт-ва-рӯза нест ин ҷо, аммо ман бо истифода аз аввали истилоҳоти Барномасозӣ Extreme истифодаи “озмоиши воҳиди” ба маънои чизе ҷарима соҳиберо, ва «озмоиши функсионалӣ» ҳамчун озмоиши, ки беш аз анҷоми-ба-охири ва хусусияти вобаста аст.

6: Яке аз ҷодувон аст, ки ба таъсиси махзани ибтидоӣ ва нусха онро бо истифодаи фармонҳои файл системаи пеш аз кушодани он барои ҳар як санҷиши медаванд. нусхаи системаи File аксаран тезтар аз боркунии маълумот бо истифода аз аҳкоми базаи мебошанд.

7: Албатта ин ҳиллаест, танҳо дар кор, вақте ки шумо метавонед санҷиш бе содир кардани ҳар гуна амалиётро мегузаронанд.

8: Ҳарчанд шумо ба ҳар ҳол лозим а оғозёбӣ дар сурати шумо ҳеҷ посухе ба даст – ва он вақт аз таҳти хатар ҳамин аст, вақте ки шумо ба муҳити гуногун ҳаракат. Хушбахтона, Шумо метавонед, ки дар оғозёбӣ танзим карда хеле баланд, ки имконияти ки газидан шумо кам.

9: Дар ин ҳолат, аммо санҷишҳои иҷро хоҳад хеле суст. Шумо метавонед ба инобат гапдаро тамоми пакети санҷиш агар шумо расидан ба лимити интизор аст.

10: Ва агар рафтори асинхронӣ шумо аз UI андохта, он вақт як интихоби UI хуб ба баъзе нишондиҳанда барои нишон додани амалиёти асинхронӣ дар пешрафти аст. Доштани ин бошад, қисми UI низ кӯмак санҷиш ҳамчун мошиніои талаб бас ин нишондод метавонад чангакҳои ҳамон ошкор вақте ки ба пешрафти мантиқи санҷиш.

11: афзалиятҳо дигар истифода дучандон санҷиш дар чунин шароит, ҳатто агар ҷои дурдасти система deterministic вуҷуд дорад. Аксар вақт вокуниш ба вақти низ суст ба истифода аз низоми дурдаст аст. Агар Шумо фақат метавонед ба системаи зинда гап, он гоҳ озмоишҳо метавонад назаррас, ва қадру, сарборӣ, ки низоми тавлиди.

12: Шумо метавонед datastore Шумо барои ҳар яки санҷиш дар асоси вақти ҷорӣ reseed. Лекин кори зиёде, ва он љињат бо хатогиҳо мӯҳлатҳои эҳтимолӣ аст.

13: Дар ин ҳолат нопурра соата як роҳи маъмул барои шикастани бунбасти, ҳар як санҷиш, ки истифода мебарад, он бояд таъмин он ба таври дуруст аз нав initialized аст.

14: Яке аз ҳамкасбони ман маъқул маҷбур як медаванд санҷиш танҳо пеш ва баъд аз ними шаб ба хотири он сайд, ки озмоишҳо истифода вақти ҷорӣ ва фарз он ҳамон рӯз Русия як ё ду соат дертар. Ин аст, махсусан баъзан худро мисли рӯзи охирини моҳи хуб.

15: Ҳарчанд, албатта, ин аст, на ҳамеша як ишколи ғайридавлатӣ determinism, балки як ки аз сабаби тағйирот дар муҳити зист. Вобаста ба чи кадар Ticks соат ба ҷудо Шиносаи доранд, он метавонад дар рафтори ғайри deterministic оварда расонад.


тасдиыот

Чун ќоида, ман бояд ба шукр бисёр ҳамкорони ThoughtWorks барои мубодилаи таљриба ва ба ин васила таъмин намудани маводи ба гузошта якҷоя ин мақола.

Майкл Dietz, Danilo Sato, Badrinath Janakiraman, Мат дарранда, Krystan Vingrys ва Брэндон Byers мақолаи хонда ва ман баъзе фикру минбаъдаи дод.

Эд Sykes ман дар бораи муносибати бо истифода аз нусхаи файли-системаи файли базаи барои эҷоди базаи ибтидоии барои ҳар як санҷиш хотиррасон кард.

Тибқи тағйироти назаррас

14 апрели соли 2011: Якум нашр

24 марти соли 2011: барои баррасии лоиҳаи Фишка дар дохили ThoughtWorks

16 феврали соли 2011: мақола оғоз