ThoughtWorks暑期特訓(xùn)——任務(wù)五 ·學(xué)習(xí)筆記

一 校哎、編程精進(jìn)之法

“敏捷”之TDD

TDD(全稱(chēng)Test Driven Development)測(cè)試驅(qū)動(dòng)開(kāi)發(fā),是一種軟件開(kāi)發(fā)的流程瞳步,其由敏捷的“極限編程”引入闷哆。
開(kāi)發(fā)過(guò)程是從功能需求的測(cè)試用例開(kāi)始,先添加一個(gè)測(cè)試用例谚攒,然后運(yùn)行所有的測(cè)試用例看是否有問(wèn)題阳准,再實(shí)現(xiàn)測(cè)試用例所要測(cè)試的功能,然后再運(yùn)行測(cè)試用例馏臭,查看是否有case失敗野蝇,然后重構(gòu)代碼,再重復(fù)以上步驟括儒。

其理念主要是兩件事:

  • 確保所有的需求都能被照顧到绕沈。
  • 在代碼不斷增加和重構(gòu)的過(guò)程中,可以檢查所有的功能是否正確帮寻。
“敏捷”之BDD

BDD:行為驅(qū)動(dòng)開(kāi)發(fā)(Behavior Driven Development)
行為驅(qū)動(dòng)開(kāi)發(fā)是一種敏捷軟件開(kāi)發(fā)的技術(shù)乍狐,它鼓勵(lì)軟件項(xiàng)目中的開(kāi)發(fā)者、QA和非技術(shù)人員或商業(yè)參與者之間的協(xié)作固逗。主要是從用戶(hù)的需求出發(fā)浅蚪,強(qiáng)調(diào)系統(tǒng)行為。BDD包括驗(yàn)收測(cè)試和客戶(hù)測(cè)試驅(qū)動(dòng)等的極限編程的實(shí)踐烫罩,作為對(duì)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的回應(yīng)惜傲。

“敏捷”之ATDD

ATDD:驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Acceptance Test Driven Development)
TDD 是開(kāi)發(fā)人員的職責(zé),通過(guò)單元測(cè)試用例來(lái)驅(qū)動(dòng)功能代碼的實(shí)現(xiàn)贝攒。
在準(zhǔn)備實(shí)施一個(gè)功能或特性之前盗誊,首先團(tuán)隊(duì)需要定義出期望的質(zhì)量標(biāo)準(zhǔn)和驗(yàn)收細(xì)則,以明確而且達(dá)成共識(shí)的驗(yàn)收測(cè)試計(jì)劃(包含一系列測(cè)試場(chǎng)景)來(lái)驅(qū)動(dòng)開(kāi)發(fā)人員的TDD實(shí)踐和測(cè)試人員的測(cè)試腳本開(kāi)發(fā)隘弊。面向開(kāi)發(fā)人員哈踱,強(qiáng)調(diào)如何實(shí)現(xiàn)系統(tǒng)以及如何檢驗(yàn)。

保證編程質(zhì)量梨熙,提高編程效率

任務(wù)列表法+PDCA

  • 任務(wù)列表法:使任務(wù) 完全窮盡 與 各自獨(dú)立
  • PDCA是Plan-Do-Check-Action四個(gè)詞的組合开镣。是著名的戴明環(huán)。從計(jì)劃開(kāi)始咽扇,經(jīng)過(guò)實(shí)踐邪财,再反思舅列,產(chǎn)生的改進(jìn)行動(dòng)再納入下一輪計(jì)劃的持續(xù)改進(jìn)過(guò)程。

plan:任務(wù)列表法(預(yù)估時(shí)間)

do:做可以check的事情(計(jì)時(shí)完成任務(wù))

check:反思計(jì)劃與實(shí)際的差距(對(duì)比時(shí)間卧蜓,反思)

action:在反思后采取改進(jìn)措施(針對(duì)反思要采取的措施)

二 、像機(jī)器一樣思考

Analytical Thinking(按照輸入輸出 對(duì)問(wèn)題進(jìn)行分解)

思考過(guò)程:

  • 分解問(wèn)題
  • 找到子問(wèn)題之間的關(guān)聯(lián)(通過(guò)輸入輸出關(guān)聯(lián)起來(lái))
  • 找到問(wèn)題的邊界把敞,明確假設(shè)與結(jié)果
數(shù)據(jù)類(lèi)型與結(jié)構(gòu)

類(lèi)的結(jié)構(gòu)表達(dá)對(duì)比:
JS

{
  name: String,
  age: Number,
  children: [{
    name: String,
    age: Number
  }]
}

JAVA

Person {
  name: String,
  age: Number,
  children: [Person]
}

分析問(wèn)題的基本原則:完全窮盡弥奸,各自獨(dú)立

各自獨(dú)立奋早,是指盛霎,在劃分任務(wù)的過(guò)程中,每一個(gè)任務(wù)都對(duì)應(yīng)一個(gè) 代碼塊 或一個(gè) 函數(shù) 耽装,這些代碼塊和函數(shù)愤炸,是互相不包含的(不是不依賴(lài),Exclusive不是Independent)

完全窮盡掉奄,是指规个,需要窮盡這個(gè)代碼塊或函數(shù)里 所有的輸入和輸出 。不能遺漏任何一個(gè)輸入姓建,任何一個(gè)輸出诞仓。每一項(xiàng)的 屬性 也不能有遺漏

一圖抵千言部分

畫(huà)圖的規(guī)則

我們的畫(huà)圖方法受時(shí)序圖啟發(fā)而發(fā)明,具體的規(guī)則如下:
1 圖中基本元素由方塊和帶箭頭的線(xiàn)組成
2 一個(gè)方塊只代表一個(gè)函數(shù)或一個(gè)代碼塊速兔,通常是函數(shù)墅拭,方塊中可以寫(xiě)字,可以表達(dá)函數(shù)是屬于哪個(gè)類(lèi)或哪個(gè)實(shí)例等信息涣狗。
3 指向方塊的線(xiàn)代表該函數(shù)的輸入谍婉,背離方塊的線(xiàn)代表函數(shù)的輸出。
4 數(shù)據(jù)流動(dòng)的時(shí)間軸遵守先從左到右镀钓,再?gòu)纳系较碌捻樞颉?br> 5 每一對(duì)輸入輸出(輸入在上穗熬,輸出在下)加一個(gè)方塊,表達(dá)了一次函數(shù)調(diào)用掸宛。

測(cè)試驅(qū)動(dòng)的任務(wù)切分
按照模塊的分析方法拆分成任務(wù)時(shí)比較復(fù)雜的話(huà)死陆,我們可以按照測(cè)試的角度來(lái)切分成任務(wù)。這個(gè)思維的切換是TDD的核心唧瘾。我們需要按照測(cè)試的視角來(lái)切分任務(wù)措译,從一個(gè)函數(shù)的實(shí)現(xiàn)視角轉(zhuǎn)為一個(gè)函數(shù)的調(diào)用視角。

測(cè)試視角的優(yōu)點(diǎn):

1 封裝復(fù)雜性饰序,按照模塊去拆分的時(shí)候领虹,復(fù)雜性會(huì)變高,思考負(fù)擔(dān)會(huì)加大求豫。而按照測(cè)試的視角來(lái)切分塌衰,復(fù)雜性當(dāng)然不會(huì)消失诉稍,但是被封裝了,方便我們?cè)诜治龅臅r(shí)候減少思考負(fù)擔(dān)最疆。
2 跳出盒子外來(lái)看盒子的視角杯巨。我們?cè)诋?huà)前面的圖的時(shí)候,實(shí)際上是在我們要實(shí)現(xiàn)的這個(gè)程序內(nèi)在看努酸,完全沒(méi)有使用者的視角服爷,也就是所謂的在盒子內(nèi)。當(dāng)我們站在測(cè)試的視角看的時(shí)候获诈,我們就跳出了盒子外仍源,他更容易讓我們發(fā)現(xiàn)哪里可能設(shè)計(jì)上有問(wèn)題,比如設(shè)計(jì)出的接口是不是好用舔涎。
3 在TWs有一個(gè)觀(guān)點(diǎn):叫做任務(wù)不是步驟笼踩。當(dāng)按步驟來(lái)考慮問(wèn)題的時(shí)候,對(duì)怎么算做完這個(gè)問(wèn)題的答案往往是模糊的(往往只落在行為上亡嫌,而不是結(jié)果上)嚎于。只考慮函數(shù)實(shí)現(xiàn)的時(shí)候,也會(huì)有類(lèi)似的問(wèn)題挟冠,因?yàn)橐粋€(gè)數(shù)據(jù)類(lèi)型包含的情況太多了匾旭,想到某種類(lèi)型的數(shù)據(jù)我們就會(huì)停止思考當(dāng)前問(wèn)題轉(zhuǎn)而去想其他問(wèn)題,于是我們很容易漏掉一些情況圃郊,以測(cè)試角度看待任務(wù)會(huì)讓我們更容易看清楚我們的工作是不是真的做完了价涝。


附 學(xué)習(xí)中遇到的專(zhuān)用詞:

  • migration腳本
    每一個(gè)migrate的類(lèi)都是 ActiveRecord::Migration 的子類(lèi),每一個(gè)migrate都要重寫(xiě)兩個(gè)方法 up 和 down。Migrations提供了一系列的方法來(lái)操作數(shù)據(jù)庫(kù)持舆,這些方法可以替代使用SQL來(lái)操作數(shù)據(jù)庫(kù)色瘩。(總之,是與MySQL數(shù)據(jù)庫(kù)有關(guān)的逸寓, 如何寫(xiě)migration )
  • ORM框架
    目前數(shù)據(jù)庫(kù)是關(guān)系型數(shù)據(jù)庫(kù)居兆,ORM 主要是把數(shù)據(jù)庫(kù)中的關(guān)系數(shù)據(jù)映射為程序中的對(duì)象。
    ORM框架采用元數(shù)據(jù)來(lái)描述對(duì)象一關(guān)系映射細(xì)節(jié)竹伸,元數(shù)據(jù)一般采用XML格式泥栖,并且存放在專(zhuān)門(mén)的對(duì)象一映射文件中。
    只要提供了持久化類(lèi)與表的映射關(guān)系勋篓,ORM框架在運(yùn)行時(shí)就能參照映射文件的信息吧享,把對(duì)象持久化到數(shù)據(jù)庫(kù)中。當(dāng)前ORM框架主要有三種:Hibernate譬嚣,iBATIS钢颂,EclipseLink。
  • Jersey(軟件框架)
    Jersey RESTful 框架是開(kāi)源的RESTful框架, 實(shí)現(xiàn)了JAX-RS (JSR 311 & JSR 339) 規(guī)范拜银。它擴(kuò)展了JAX-RS 參考實(shí)現(xiàn)殊鞭, 提供了更多的特性和工具遭垛, 可以進(jìn)一步地簡(jiǎn)化 RESTful service 和 client 開(kāi)發(fā)。它已經(jīng)是一個(gè)產(chǎn)品級(jí)的 RESTful service 和 client 框架操灿。與Struts類(lèi)似锯仪,它同樣可以和hibernate,spring框架整合。(是Java領(lǐng)域中開(kāi)發(fā)REST式web服務(wù)的工具)
    Jersey框架一:Jersey RESTful WebService框架簡(jiǎn)介
  • SICP
    《計(jì)算機(jī)程序的構(gòu)造和解釋》(Structure and Interpretation of Computer Programs, SICP)是一本關(guān)于計(jì)算機(jī)程序設(shè)計(jì)的總體性觀(guān)念的基礎(chǔ)教科書(shū)趾盐,由 MIT press 與 McGraw-Hill 共同出版營(yíng)銷(xiāo)卵酪。
    書(shū)中使用程序設(shè)計(jì)語(yǔ)言 Lisp 的方言 Scheme 來(lái)解釋計(jì)算機(jī)科學(xué)的核心概念,包括抽象(abstraction)谤碳,遞歸(recursion),解釋器(interpreters)溢豆,以及元語(yǔ)言抽象(metalinguistic abstraction)蜒简。《計(jì)算機(jī)程序的構(gòu)造和解釋?zhuān)⊿ICP)》討論的核心問(wèn)題是什么?
  • Rails
    Rails框架首次提出是在2004年7月漩仙,它的研發(fā)者是26歲的丹麥人David Heinemeier Hansson搓茬。不同于已有復(fù)雜的Web 開(kāi)發(fā)框架,Rails是一個(gè)更符合實(shí)際需要而且更高效的Web開(kāi)發(fā)框架队他。Rails結(jié)合了PHP體系的優(yōu)點(diǎn)(快速開(kāi)發(fā))和Java體系的優(yōu)點(diǎn)(程序規(guī)整)卷仑。Rails基于MVC(模型- 視圖- 控制器)設(shè)計(jì)模式。從視圖中的Ajax應(yīng)用麸折,到控制器中的訪(fǎng)問(wèn)請(qǐng)求和反饋锡凝,到封裝數(shù)據(jù)庫(kù)的模型,Rails 提供純Ruby的開(kāi)發(fā)環(huán)境垢啼。發(fā)布網(wǎng)站時(shí)窜锯,只需要一個(gè)數(shù)據(jù)庫(kù)和一個(gè)網(wǎng)絡(luò)服務(wù)器即可。
  • 強(qiáng)類(lèi)型 弱類(lèi)型
    編程語(yǔ)言分為強(qiáng)類(lèi)型(比如Java芭析,C#锚扎,Scala)和弱類(lèi)型(比如JavaScript,Ruby馁启,Python)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驾孔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惯疙,更是在濱河造成了極大的恐慌翠勉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霉颠,死亡現(xiàn)場(chǎng)離奇詭異眉菱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)掉分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)俭缓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)克伊,“玉大人,你說(shuō)我怎么就攤上這事华坦≡复担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵惜姐,是天一觀(guān)的道長(zhǎng)犁跪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)歹袁,這世上最難降的妖魔是什么坷衍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮条舔,結(jié)果婚禮上枫耳,老公的妹妹穿的比我還像新娘。我一直安慰自己孟抗,他們只是感情好迁杨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著凄硼,像睡著了一般铅协。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摊沉,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天狐史,我揣著相機(jī)與錄音,去河邊找鬼说墨。 笑死预皇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的婉刀。 我是一名探鬼主播吟温,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼突颊!你這毒婦竟也來(lái)了鲁豪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤律秃,失蹤者是張志新(化名)和其女友劉穎爬橡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棒动,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糙申,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了船惨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柜裸。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缕陕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疙挺,到底是詐尸還是另有隱情扛邑,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布铐然,位于F島的核電站蔬崩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搀暑。R本人自食惡果不足惜沥阳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望自点。 院中可真熱鬧桐罕,春花似錦、人聲如沸樟氢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)埠啃。三九已至,卻和暖如春伟恶,著一層夾襖步出監(jiān)牢的瞬間碴开,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工博秫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潦牛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓挡育,卻偏偏與公主長(zhǎng)得像巴碗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子即寒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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