《徐昊-TDD項(xiàng)目實(shí)戰(zhàn)70講》學(xué)習(xí)筆記 -- Day 3

01|TDD演示(1):任務(wù)分解法與整體工作流程

測試驅(qū)動開發(fā)秘蛇,顧名思義咪奖,就是將軟件需求轉(zhuǎn)化為一組自動化測試,然后再根據(jù)測試描繪的場景格郁,逐步實(shí)現(xiàn)軟件功能的開發(fā)方法。

TDD 的基本原則

為了讓我的演示更有針對性独悴,有些基本原則你需要先了解一下例书。TDD 的創(chuàng)始人 Kent Beck,在他的傳世大作 Test-Driven Development by Example 的開篇中給出了 TDD 的基本原則:

  1. 當(dāng)且僅當(dāng)存在失敗的自動化測試時(shí)刻炒,才開始編寫生產(chǎn)代碼决采;
  1. 消除重復(fù)。

不過在今時(shí)今日坟奥,我認(rèn)為第二條應(yīng)該改為“消除壞味道(Bad Smell)”织狐。畢竟重復(fù)僅僅是一種壞味道,還有很多不是重復(fù)的壞味道筏勒。

那么根據(jù) TDD 的基本原則移迫,Kent Beck 將開發(fā)工作分成了三步,也就是后世廣為流傳的測試驅(qū)動開發(fā)咒語——紅 / 綠 / 重構(gòu)(Red/Green/Refactoring):

  1. 紅:編寫一個(gè)失敗的小測試管行,甚至可以是無法編譯的測試厨埋;

  2. 綠:讓這個(gè)測試快速通過,甚至不惜犯下任何罪惡捐顷;

  3. 重構(gòu):消除上一步中產(chǎn)生的所有重復(fù)(壞味道)荡陷。

然而紅 / 綠 / 重構(gòu)循環(huán)僅僅關(guān)注單個(gè)測試這個(gè)層面雨效,它沒有回答測試從何而來。于是很多嘗試采用 TDD 的人都卡在了第零步:我該寫哪些測試废赞?于是在 2006 年前后我總結(jié)了任務(wù)分解法徽龟,將任務(wù)列表作為 TDD 的核心要素。

任務(wù)分解法的步驟如下:

  1. 大致構(gòu)思軟件被使用的方式唉地,把握對外接口的方向据悔;

  2. 大致構(gòu)思功能的實(shí)現(xiàn)方式,劃分所需的組件(Component)以及組件間的關(guān)系(所謂的架構(gòu))耘沼。當(dāng)然极颓,如果沒思路,也可以不劃分群嗤;

  3. 根據(jù)需求的功能描述拆分功能點(diǎn)菠隆,功能點(diǎn)要考慮正確路徑(Happy Path)和邊界條件(Sad Path);

  4. 依照組件以及組件間的關(guān)系狂秘,將功能拆分到對應(yīng)組件骇径;

  5. 針對拆分的結(jié)果編寫測試,進(jìn)入紅 / 綠 / 重構(gòu)循環(huán)者春。

那么 TDD 的整體工作流程如下圖所示:

1f67315c9b8db5649d4216a5c9f3b4bf.jpeg

命令行參數(shù)解析

我們中的大多數(shù)人都不得不時(shí)不時(shí)地解析一下命令行參數(shù)破衔。如果我們沒有一個(gè)方便的工具,那么我們就簡單地處理一下傳入 main 函數(shù)的字符串?dāng)?shù)組碧查。有很多開源工具可以完成這個(gè)任務(wù)运敢,但它們可能并不能完全滿足我們的要求。所以我們再寫一個(gè)吧忠售。

傳遞給程序的參數(shù)由標(biāo)志和值組成传惠。標(biāo)志應(yīng)該是一個(gè)字符,前面有一個(gè)減號稻扬。每個(gè)標(biāo)志都應(yīng)該有零個(gè)或多個(gè)與之相關(guān)的值卦方。例如:

-l -p 8080 -d /usr/logs

“l(fā)”(日志)沒有相關(guān)的值,它是一個(gè)布爾標(biāo)志泰佳,如果存在則為 true盼砍,不存在則為 false。

“p”(端口)有一個(gè)整數(shù)值逝她,“d”(目錄)有一個(gè)字符串值浇坐。標(biāo)志后面如果存在多個(gè)值,則該標(biāo)志表示一個(gè)列表:

-g this is a list -d 1 2 -3 5

"g"表示一個(gè)字符串列表[“this”, “is”, “a”, “l(fā)ist”]黔宛,“d"標(biāo)志表示一個(gè)整數(shù)列表[1, 2, -3, 5]近刘。

如果參數(shù)中沒有指定某個(gè)標(biāo)志,那么解析器應(yīng)該指定一個(gè)默認(rèn)值。例如觉渴,false 代表布爾值介劫,0 代表數(shù)字,”"代表字符串案淋,[]代表列表座韵。如果給出的參數(shù)與模式不匹配,重要的是給出一個(gè)好的錯誤信息踢京,準(zhǔn)確地解釋什么是錯誤的誉碴。

確保你的代碼是可擴(kuò)展的,即如何增加新的數(shù)值類型是直接和明顯的漱挚。

API 構(gòu)思與組件劃分

利用Options注解來簡化設(shè)計(jì)翔烁,API風(fēng)格更加友好渺氧,有點(diǎn)門檻旨涝。我查一下Go語言是怎么支持的。

這并不像很多原教旨主義 TDD 實(shí)踐者所推崇的那樣侣背,完全依賴重構(gòu)而不去做設(shè)計(jì)白华。然而以我二十年來實(shí)踐 TDD 的經(jīng)驗(yàn)來看,理解需求贩耐,并通過測試構(gòu)成高效的節(jié)奏弧腥,是有效實(shí)施 TDD 的前提。特別是在有其他團(tuán)隊(duì)成員的情況下(結(jié)對或項(xiàng)目組)潮太,更需要如此管搪。

內(nèi)容來源:極客時(shí)間《徐昊 · TDD 項(xiàng)目實(shí)戰(zhàn) 70 講」》https://time.geekbang.org/column/article/494207

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铡买,隨后出現(xiàn)的幾起案子更鲁,更是在濱河造成了極大的恐慌,老刑警劉巖奇钞,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澡为,死亡現(xiàn)場離奇詭異,居然都是意外死亡景埃,警方通過查閱死者的電腦和手機(jī)媒至,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谷徙,“玉大人拒啰,你說我怎么就攤上這事⊥昊郏” “怎么了谋旦?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我蛤织,道長赴叹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任指蚜,我火速辦了婚禮乞巧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摊鸡。我一直安慰自己绽媒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布免猾。 她就那樣靜靜地躺著是辕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猎提。 梳的紋絲不亂的頭發(fā)上获三,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音锨苏,去河邊找鬼疙教。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伞租,可吹牛的內(nèi)容都是我干的贞谓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼葵诈,長吁一口氣:“原來是場噩夢啊……” “哼裸弦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起作喘,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤理疙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后徊都,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沪斟,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年暇矫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了主之。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡李根,死狀恐怖槽奕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情房轿,我是刑警寧澤粤攒,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布所森,位于F島的核電站,受9級特大地震影響夯接,放射性物質(zhì)發(fā)生泄漏焕济。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一盔几、第九天 我趴在偏房一處隱蔽的房頂上張望晴弃。 院中可真熱鬧,春花似錦逊拍、人聲如沸上鞠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芍阎。三九已至,卻和暖如春缨恒,著一層夾襖步出監(jiān)牢的瞬間谴咸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工肿轨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寿冕,地道東北人蕊程。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓椒袍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藻茂。 傳聞我的和親對象是個(gè)殘疾皇子驹暑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容