制片人是干什么的| 长期口腔溃疡挂什么科| 孕育是什么意思| 蝉吃什么东西| 凡士林是什么东西| 为什么医院不开金刚藤| 二甲苯是什么| 九月二十五是什么星座| 阴道出血是什么样的| 泡脚有什么好处| 肺肿瘤吃什么好| 网络cp是什么意思| 什么是音调| 闫和阎有什么区别| 脑梗用什么药效果好| 茶水洗脸有什么好处和坏处| 鲷鱼是什么鱼| 酸梅汤不适合什么人喝| 你从什么时候不再爱我| 黄色配什么颜色最搭| 热量是什么| 什么情况下做肠镜| 5月25日什么星座| 瘸子是什么意思| 小孩肠胃感冒吃什么药比较好| 小米是什么| 撇嘴表情什么意思| 腿肿是什么病的前兆| hbv是什么| 史迪奇是什么动物| 6月25是什么星座| 国家穷为什么不多印钱| 沙肝是什么| 隐翅虫咬了用什么药| 肺部结节是什么引起的| 梦到小孩子是什么意思| 一个月的小猫吃什么| 洛阳有什么好吃的| 什么减肥药好使| 梦到和老公离婚了是什么征兆| 普字五行属什么| 阳光是什么颜色| 责任是什么生肖| 社会科学院是干什么的| 自汗吃什么中成药| 痰栓是什么意思| 宇舶手表什么档次| 县副局长是什么级别| longines是什么牌子| 杨枝甘露是什么做的| 狗狗窝咳吃什么药最好| cdr是什么意思| 三个降号是什么调| 十指不沾阳春水什么意思| 阴道里面有个肉球是什么| 格调是什么意思| 开诚布公什么意思| 金福是什么生肖| 香油是什么| 潜血十一是什么意思| 肠易激综合症吃什么药| 1977年属什么生肖| 什么是慢阻肺| ats是什么意思| 十岁女孩喜欢什么礼物| 红痣是什么原因引起的| 内心独白什么意思| 什么是淀粉| 香蕉水是什么| 什么牌子的大米好吃| 黄皮肤适合什么颜色的衣服| 山药为什么煮熟了也麻口| 前庭大腺囊肿是什么原因引起的| 脚底脱皮用什么药膏| 属猪本命佛是什么佛| 柬埔寨为什么叫柬埔寨| avia是什么牌子| 孕妇吃梨有什么好处| 什么是音程| 甘油三酯高挂什么科| 用苦良心是什么意思| 犹太人为什么有钱| 甲亢是什么回事| 张飞为什么不救关羽| 联字五行属什么| 什么是韧性| 橘红是什么东西| 梦见梅花鹿是什么预兆| 阑珊处是什么意思| 白子是什么| 舒服的意思是什么| 7月12是什么星座| 鼻窦炎吃什么药好得快| 卖关子是什么意思| 窝边草是什么意思| 吃了虾不能吃什么| hpv81低危型阳性是什么意思| 益母草长什么样子图片| 米五行属什么| 曱亢有什么症状| 八六年属什么生肖| 玻尿酸面膜有什么功效| 海底有什么生物| array是什么意思| 知觉是什么意思| 怀孕初期有什么表现| 思源名字的寓意是什么| 水瓶男和什么星座最配| 暮光是什么意思| 上唇肿胀是什么原因| 唐氏是什么意思| 女人右眼跳是什么意思| 石加乏念什么| 什么终于什么造句| crp高是什么感染| cmv是什么病毒| 月经黑红色是什么原因| 萎缩性胃炎吃什么水果好| 碳素笔是什么笔| 什么颜色的床单有助于睡眠| 洗发水和洗发露有什么区别| 猫薄荷对猫有什么作用| 打激素有什么副作用| 肠道长息肉是什么原因造成的| 不领情是什么意思| 佝偻病是什么病| 什么情况下需要做胃镜| 彩宝是什么| 为什么要做羊水穿刺检查| 脸发麻是什么原因| 做完肠镜需要注意什么| 吃什么食物可以降低胆固醇| 爽约是什么意思| 尾椎骨疼是什么原因| 胃切除手术后吃什么好| 转移灶是什么意思| 腋毛上有白色附着物是什么| 暴饮暴食是什么意思| 膝关节疼痛吃什么药好| 汗蒸有什么好处和功效| 鹿角粉有什么功效和作用| 缺钾吃什么水果| 贸易壁垒是什么意思| 镁是什么| 人造革是什么材质| 白蛋白低吃什么补得快| 四月28日是什么星座| 鬼斧神工是什么意思| 公假是什么意思| 试纸一深一浅说明什么| 胰腺疼痛吃什么药| bs是什么意思| 芥菜是什么菜| 舌苔黄腻厚是什么原因| 梦到做饭是什么意思| 吃什么治疗湿气重| 减肥不能吃什么东西| 红曲粉是什么东西| 什么时期最容易怀孕| 料酒是什么| 手是什么生肖| 梦见摘水果是什么意思| 有什么汤菜谱大全| 晴空万里什么意思| 焗油和染发有什么区别| 野生天麻长什么样图片| 炎热的夏天风儿像什么| 吃什么补血补气最快| 2003年五行属什么| 女孩子学什么专业| 美国为什么不敢动朝鲜| 尿路感染吃什么药最见效| 寒湿吃什么中成药| 腐叶土是什么土| 脑血管堵塞会有什么后果| 贬低是什么意思| 逝去是什么意思| 为什么会有阴道炎| 棺材中禁止放什么东西| roi是什么| 什么命的人会丧偶| 壬水代表什么| rhubarb是什么意思| 如法炮制是什么意思| 人间炼狱是什么意思| 长生是什么意思| 妊娠期是指什么时候| 姜子牙姓什么| 戒指戴左手中指是什么意思| 用什么泡脚去湿气寒气| 恶性贫血是什么意思| lg手机是什么牌子| 吃什么水果可以护肝| 为什么喉咙总感觉有东西堵着| 肝裂不宽是什么意思| 痛风病人不能吃什么| 皮肤爱出油是什么原因| 发烧41度是什么概念| 孩子咳嗽能吃什么水果| 脂肪肝吃什么食物好| 3月31号什么星座| 果是什么结构的字| 叶公好龙的意思是什么| 胸痛是什么原因| 2034年是什么年| 为什么早上起来眼睛肿| 吃丹参有什么好处| 哥德巴赫猜想是什么| 知我者莫若你什么意思| 头晕流鼻血是什么原因| 眼睛为什么会近视| 经期同房会有什么后果| 狗肉和什么食物相克| 老公不交工资意味什么| 女人下身干燥无水是什么原因| 密度单位是什么| 高梁长什么样子| 全身是宝的动物是什么生肖| 女人梦到蛇预示着什么| 前列腺增生吃什么药见效快| 口腔溃疡补充什么维生素| 垂死病中惊坐起什么意思| 丰年虾是什么| 一起共勉是什么意思| cc是什么单位| 脂蛋白高有什么危害| 龟代表什么生肖| 什么叫次日| 肾虚吃什么| 摆渡是什么意思| 牙齿突然出血是什么原因| 右位主动脉弓是什么意思| 什么秀丽| 大便次数多是什么原因| 吃什么大便能特别通畅| 什么拼音怎么写| 为什么韩国叫棒子国| 即日是什么意思| 什么药可以流产| 醛固酮高吃什么降压药| 蚊子有什么用| 咳嗽有白痰一直不好是什么原因| 普贤菩萨保佑什么生肖| hardly什么意思| 日柱金舆是什么意思| 拜土地公时要念什么好| 低钾血症是什么病| 下巴出汗多是什么原因| 牙套什么年龄戴合适| 铅中毒用什么解毒| 摧枯拉朽是什么意思| hpv检查挂什么科| RH是什么| 什么叫重本大学| preparing是什么意思| 飞机选座位什么位置好| 低血压吃什么可以补| 胃不好早餐吃什么好| 女性尿频尿急吃什么药| 排卵期是什么| 大姨妈来了吃什么水果好| 牙疼吃什么食物能缓解| 卒中中心是干什么的| 砭石是什么东西| 百度Vai al contenuto

卡里路计算

Da Wikipedia, l'enciclopedia libera.
百度 这看似有理,却似是而非。

In informatica, nello sviluppo software, il test-driven development (abbreviato in TDD), in italiano sviluppo guidato dai test[1] o sviluppo guidato dalle verifiche[2] è un modello di sviluppo del software che prevede che la stesura dei test automatici avvenga prima di quella del software che deve essere sottoposto a test, e che lo sviluppo del software applicativo sia orientato esclusivamente all'obiettivo di passare i test automatici precedentemente predisposti.

Più in dettaglio, il TDD prevede la ripetizione di un breve ciclo di sviluppo in tre fasi, detto "ciclo TDD". Nella prima fase (detta "fase rossa"), il programmatore scrive un test automatico per la nuova funzione da sviluppare, che deve fallire in quanto la funzione non è stata ancora realizzata. Nella seconda fase (detta "fase verde"), il programmatore sviluppa la quantità minima di codice necessaria per passare il test. Nella terza fase (detta "fase grigia" o di refactoring), il programmatore esegue il refactoring del codice per adeguarlo a determinati standard di qualità.[3]

L'invenzione del metodo (o la sua riscoperta[4]) si deve a Kent Beck, uno dei padri dell'extreme programming (XP) e delle metodologie agili. Il TDD è una delle 12 regole base dell'XP, ma viene anche usato indipendentemente da questa metodologia;[5] la sua applicazione è anche parte fondamentale dello sviluppo agile del software.[6]

Rappresentazione tramite diagramma di flusso del ciclo TDD

Il TDD si articola in brevi cicli che constano di tre fasi principali. La descrizione originale dei cicli TDD data da Kent Beck nel libro Test-Driven Development by Example[7] è quella usata universalmente come riferimento:

Nel TDD, lo sviluppo di una nuova funzionalità comincia sempre con la stesura di un test automatico volto a validare quella funzionalità, ovvero verificare se il software la esibisce. Poiché l'implementazione non esiste ancora, la stesura del test è un'attività creativa, in quanto il programmatore deve stabilire in quale forma la funzionalità verrà esibita dal software e comprenderne e definirne i dettagli. Perché il test sia completo, deve essere eseguibile e, quando viene eseguito, produrre un esito negativo. In molti contesti, questo implica che debba essere realizzato una bozza minimale del codice da testare, necessario per garantire la compilazione e l'esecuzione del test. Una volta che il nuovo test è completo e può essere eseguito, dovrebbe fallire. La fase rossa si conclude quando c'è un nuovo test che può essere eseguito e fallisce.

Nella fase successiva, il programmatore deve scrivere la quantità minima di codice necessaria per passare il test che fallisce. Non è richiesto che il codice scritto sia di buona qualità, elegante, o generale; l'unico obiettivo esplicito è che funzioni, ovvero passi il test. In effetti, è esplicitamente vietato dalla pratica del TDD lo sviluppo di parti di codice non strettamente finalizzate al superamento del test. Quando il codice è pronto, il programmatore esegue nuovamente tutti i test disponibili sul software modificato (non solo quello che precedentemente falliva). In questo modo, il programmatore ha modo di rendersi conto immediatamente se la nuova implementazione ha causato fallimenti di test preesistenti, ovvero ha causato regressioni o peggioramenti nel codice. La fase verde termina quando tutti i test vengono passati con successo.

Refactoring o fase grigia

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Refactoring.

Quando il software passa tutti i test, il programmatore dedica una certa quantità di tempo a farne refactoring, ovvero a migliorarne la struttura attraverso un procedimento basato su piccole modifiche controllate volte a eliminare o ridurre difetti oggettivamente riconoscibili nella struttura interna del codice. Esempi tipici di azioni di refactoring includono la scelta di identificatori più espressivi, eliminazione di codice duplicato, semplificazione e razionalizzazione dell'architettura del sorgente (p.es. in termini della sua organizzazione in classi), e così via. La letteratura sul TDD fornisce numerose linee guida sia specifiche che generali sul modo corretto di fare refactoring[8][9] In ogni caso, l'obiettivo del refactoring non è quello di ottenere del codice "perfetto", ma solo di migliorarne la struttura, secondo la cosiddetta "regola dei Boy Scout"[10]: "lascia l'area dove ti sei accampato più pulita di come l'hai trovata". Dopo ciascuna azione di refactoring, i test automatici vengono nuovamente eseguiti per accertarsi che le modifiche eseguite non abbiano introdotto errori.

Stile di sviluppo

[modifica | modifica wikitesto]
?Write new code only if an automated test has failed?
?Only ever write code to fix a failing test?
?We produce well-designed, well-tested, and well-factored code in small, verifiable steps?

Il principio fondamentale del TDD è che lo sviluppo vero e proprio deve avvenire solo allo scopo di passare un test automatico che fallisce. In particolare, questo vincolo è inteso a impedire che il programmatore sviluppi funzionalità non esplicitamente richieste, e che il programmatore introduca complessità eccessiva in un progetto, per esempio perché prevede la necessità di generalizzare l'implementazione in un futuro più o meno prossimo. In questo senso il TDD è in stretta relazione con numerosi principi della programmazione agile e dell'extreme programming, come il principio KISS (Keep It Simple, Stupid), il principio YAGNI (You aren't gonna need it), e il mandato agile di minimizzare il lavoro incompiuto.[11]

I cicli TDD sono intesi come cicli di breve durata, al termine di ciascuno dei quali il programmatore ha realizzato un piccolo incremento di prodotto (con i relativi test automatici), un altro concetto tipico delle metodologie agili.[11] L'applicazione reiterata del refactoring al termine di ogni ciclo ha lo scopo di creare codice di alta qualità e buone architetture in modo incrementale, tenendo però separati l'obiettivo di costruire software funzionante (fase verde) e quello di scrivere "buon codice" (fase grigia). La breve durata dei cicli TDD tende anche a favorire lo sviluppo di componenti di piccole dimensioni e ridotta complessità.

L'applicazione del TDD porta in generale allo sviluppo di un numero maggiore di test, e a una maggiore copertura di test del software prodotto, rispetto alla pratica tradizionale di sviluppare i test dopo l'implementazione.[12] In parte, questo è dovuto al fatto che in contesti non TDD il management tende a spingere i programmatori a passare all'implementazione di nuove funzionalità a scapito del completamento dei test. I programmatori che usano il TDD su progetti nuovi hanno, in genere, meno necessità di usare il debugger, essendo in grado di risolvere più efficacemente eventuali errori annullando immediatamente le modifiche che li hanno causati.[13]

Scrivendo i test prima del codice, si utilizza il programma prima ancora che venga realizzato. Ci si assicura, inoltre, che il codice prodotto sia testabile singolarmente. è dunque obbligatorio avere una visione precisa del modo in cui verrà utilizzato il programma prima ancora d'essere implementato. Così facendo si evitano errori concettuali durante la realizzazione dell'implementazione, senza che si siano definiti gli obiettivi. Inoltre, i test consentono agli sviluppatori di avere maggior fiducia durante il refactoring del codice, in quanto già sanno che i test funzioneranno quando richiesto; pertanto, possono permettersi di effettuare cambiamenti radicali di design, stando certi che alla fine otterranno un programma che si comporterà sempre alla stessa maniera (essendo i test sempre verificati).

L'uso del Test Driven Development permette non solo di costruire il programma assieme ad una serie di test di regressione automatizzabili, ma anche di stimare in maniera più precisa lo stato d'avanzamento dello sviluppo di un progetto.

  1. ^ C. Larman e L. Cabibbo, Applicare UML e i pattern: analisi e progettazione orientata agli oggetti, Prentice-Hall 2005, p. 400
  2. ^ C. Bottiglieri, Test-driven development: un esempio con una web app, Mokabyte n. 192, febbraio 2014 Archiviato il 22 dicembre 2014 in Internet Archive.
  3. ^ K. Beck, Test-Driven Development by Example, Addison Wesley 2003
  4. ^ Why does Kent Beck refer to the "rediscovery" of test-driven development?
  5. ^ Newkirk, JW and Vorontsov, AA. Test-Driven Development in Microsoft .NET, Microsoft Press 2004
  6. ^ TDD, Agile Alliance, su guide.agilealliance.org. URL consultato il 22 dicembre 2014 (archiviato dall'url originale l'8 febbraio 2015).
  7. ^ K. Beck, Test-Driven Development by Example, Addison Wesley 2003
  8. ^ K. Beck, XP Explained, Addison-Wesley 1999
  9. ^ Robert C. Martin, Clean Code
  10. ^ Garry Shutler, The Boy Scout Rule
  11. ^ a b James Shore, Agile Development
  12. ^ H. Erdogmus, On the Effectiveness of Test-first Approach to Programming, su nparc.cisti-icist.nrc-cnrc.gc.ca. URL consultato il 22 dicembre 2014 (archiviato dall'url originale il 22 dicembre 2014).
  13. ^ Stepping Through the Looking Glass: Test-Driven Game Development

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
九月二十号是什么星座 honor是什么牌子的手机 灶性肠化是什么意思 上升星座代表什么 打虫药什么时候吃合适
伯母是什么意思 上山下金是什么字 湿疹吃什么食物 剪不断理还乱什么意思 刚出生的小猫吃什么
堆肥是什么意思 舌头发麻是什么原因 啮齿是什么意思 太原为什么叫龙城 苗子是什么意思
布加综合征是什么病 为什么一直放屁 moo是什么意思 孕初期吃什么对胎儿好 腰椎间盘突出挂什么科室
00年属什么hcv8jop8ns8r.cn 高密度脂蛋白胆固醇偏高什么意思hcv8jop0ns0r.cn 一贫如什么1949doufunao.com myp是什么意思hcv8jop4ns7r.cn 四风是什么hcv9jop6ns0r.cn
北极熊吃什么hcv8jop8ns1r.cn 火龙果是什么颜色hcv8jop6ns0r.cn 98年的属什么hcv7jop9ns5r.cn 猪狗不如是什么意思hcv8jop7ns6r.cn 句号代表什么意思hcv8jop6ns2r.cn
为什么尿黄travellingsim.com 金丝皇菊有什么功效xjhesheng.com 饭后胃疼是什么原因hcv9jop2ns6r.cn 福生无量是什么意思hcv8jop8ns8r.cn 默契的意思是什么hcv9jop3ns9r.cn
梅兰竹菊代表什么生肖hcv9jop5ns7r.cn 什么是地震hcv8jop0ns2r.cn 泡脚有什么好处hcv7jop9ns6r.cn 引渡是什么意思hcv8jop1ns9r.cn 无料案内所是什么意思hcv7jop4ns5r.cn
百度