迭代在于我們明確的承認(rèn)信息和知識(shí)的不完備性, 不可完備性. 而項(xiàng)目的成功, 需要某種程度的完備性.
這種認(rèn)知的局限與成功的條件之間的矛盾, 促成了人們解決這類問題的通用方法: 漸進(jìn)的試錯(cuò)法
試錯(cuò)法參考一: http://en.wikipedia.org/wiki/Trial_and_error.
試錯(cuò)法參考二: http://zh.wikipedia.org/wiki/%E8%AF%95%E9%94%99%E6%B3%95: 是解決問題、獲得知識(shí)常用的方法,即根據(jù)已有經(jīng)驗(yàn),采取系統(tǒng)或隨機(jī)的方式,去嘗試各種可能的答案。當(dāng)問題相對(duì)來說比較簡(jiǎn)單或范圍比較有限時(shí),試錯(cuò)的方法有 一定效果。在試錯(cuò)的時(shí)候,可以選擇一個(gè)可能的答案應(yīng)用在待解問題上,如果沒有效就選擇另外一個(gè)可能的答案接著嘗試。整個(gè)過程在出現(xiàn)一個(gè)合適的可能性時(shí)結(jié)束
試錯(cuò)法參考三: http://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%C2%B7%E6%B3%A2%E6%99%AE%E5%B0%94#.E8.AF.81.E4.BC.AA.E5.8E.9F.E5.88.99: 證偽主義應(yīng)采用試錯(cuò)法。這是指人們應(yīng)該大膽地提出假說和猜測(cè),然后去尋找和這一假說不符合的事例。根據(jù)事例對(duì)假說進(jìn)行修正,不斷重復(fù)這一過程,乃至將最初 的假說全盤否定。試錯(cuò)法對(duì)理論的修改和完善是沒有止境的,試錯(cuò)法的結(jié)果只能是一個(gè)較好的假說,但不是最好的假說。最好的假說是終極真理的代名詞,和科學(xué)精 神相悖
試錯(cuò)法廣泛的應(yīng)用于自然科學(xué)領(lǐng)域. 迭代開發(fā)就是試錯(cuò)法在軟件開發(fā)過程方面的應(yīng)用
不完備的信息和知識(shí), 至少包括以下幾個(gè)方面:
-
客戶真正的意圖
-
客戶業(yè)務(wù)真正的規(guī)則
-
客戶項(xiàng)目所面臨的約束
-
所采用解決方案的合理性
-
所采用技術(shù)架構(gòu)的合理性
-
所采用技術(shù)的缺陷
-
不可預(yù)知的變化, 包括業(yè)務(wù)規(guī)則的變化, 以及外界環(huán)境的變化, 等等
我們只能針對(duì)當(dāng)前對(duì)以上問題的理解, 給出一個(gè)初步的解決方案, 然后所有人, 包括客戶和開發(fā)者, 根據(jù)這個(gè)方案的運(yùn)行情況, 對(duì)方案進(jìn)行批評(píng), 提出其無法滿足的約束或需求, 而回頭重新修正這個(gè)方案. 如此循環(huán)往復(fù), 直到某個(gè)可接受的錯(cuò)誤水平. (對(duì)于上面最后一條, 迭代采用的是短周期來減少變化帶來的浪費(fèi).)
迭代的核心就暫且止于此.
其它的一些問題, 都是目前的迭代實(shí)踐所規(guī)定的一些額外性質(zhì)造成的, 比如"固定的迭代周期", 引起的問題是: 時(shí)間盒迭代刪減任務(wù)會(huì)不會(huì)導(dǎo)致完不成原定開發(fā)計(jì)劃?
這個(gè)問題是從太極敏捷派的FAQ中摘錄的. 對(duì)于這個(gè)問題, 太極敏捷的解釋并沒有觸及如下迭代的本質(zhì):
-
迭代的開發(fā)方式中, "原定的開發(fā)計(jì)劃"并不是不變的. 隨著信息和知識(shí)的逐漸完備, 我們會(huì)相應(yīng)的調(diào)整"原定的開發(fā)計(jì)劃". (太極的解釋提及了計(jì)劃的不確定性: "計(jì)劃,與計(jì)劃的實(shí)際執(zhí)行情況,是兩個(gè)不同的概念。決心不同于現(xiàn)實(shí)。所以,我們說,跟蹤、確保計(jì)劃的執(zhí)行比制定完美的計(jì)劃更重要", 其后續(xù)的思路還在確保原定計(jì)劃的實(shí)現(xiàn), 而絲毫沒有考率調(diào)整原定計(jì)劃)
-
一如試錯(cuò)法的結(jié)果, 迭代的最終結(jié)果不必滿足"原定的開發(fā)計(jì)劃", 只要經(jīng)的起客戶的批判即可, 而敏捷開發(fā)有其它的手段來盡可能的保證這一點(diǎn), 比如按照客戶認(rèn)可的規(guī)則安排開發(fā)的優(yōu)先級(jí), 這樣即使最后沒有完成全部特性, 但對(duì)客戶來說優(yōu)先級(jí)高的那些特性早就開始運(yùn)行, 留下一些優(yōu)先級(jí)低的特性甚至可以拋棄了. 太極敏捷居然連這一點(diǎn)都沒有提及, 反映出其對(duì)敏捷/迭代開發(fā)的孤立理解.
另外的一些說法:
-
試錯(cuò), 是為了獲得反饋. 迭代過程中, 要不要做某事, 其中一個(gè)依據(jù)是需不需要那方面的反饋
-
迭代也為"回顧"提供了自然而然的機(jī)會(huì). 試錯(cuò)過程中獲得的信息需要總結(jié)整理歸納抽象, 學(xué)而時(shí)習(xí)之, 溫故而知新
當(dāng)然, 以上的論述建立在試錯(cuò)法之上. 如果這一理論并不適合軟件開發(fā), 那么上面的論述都是沒有意義的. 那么我們就用試錯(cuò)法本身來檢驗(yàn)一下其是否適合軟件開發(fā):
假定其適合, 理由是可以幫助解決以上提到的問題, 如漸進(jìn)的搞清楚"客戶真正的意圖, 客戶業(yè)務(wù)真正的規(guī)則, 客戶項(xiàng)目所面臨的約束, 所采用解決方案的合理性, 所采用技術(shù)架構(gòu)的合理性, 所采用技術(shù)的缺陷"等, 那么請(qǐng)幫忙指出其不適用的地方, 或其本身帶來的問題, 如果可能的話提出更好的解決方案.