兵者,國之大事,不可不察也?!獙O武
戰(zhàn)
爭是一個復雜的系統(tǒng)工程,需要多兵種的協(xié)同,即便是在冷兵器時代,也不能依靠單一兵種完成某場戰(zhàn)役,現(xiàn)代戰(zhàn)爭更是需要不同專業(yè)士兵的配合。我們經(jīng)常可以在
影視劇中看到這樣的情景:兩軍對壘,最前面是盾牌兵,接下來是弓箭兵、長槍兵、騎兵、樸刀兵。首先弓箭兵在盾牌兵的掩護下放箭,一通亂射之后,然后盾牌兵
和長槍兵沖鋒,弓箭兵掩護,快接近敵軍時,盾牌兵后撤,弓箭兵停止射箭,騎兵和樸刀兵沖鋒。這種配合看似教條,實際是有一定意義的,它是從實踐中總結(jié)出來
的,從某種程度上反應(yīng)了冷兵器時代多兵種協(xié)同作戰(zhàn)的重要性。
軟
件開發(fā)也是一個復雜的系統(tǒng)工程,需要各種專業(yè)的技術(shù)人員配合。通常我們簡單的把這些技術(shù)人員分成需求、開發(fā)和測試,相應(yīng)的也把整個過程分為需求階段、開發(fā)
階段、測試階段。這種劃分積極的意義是區(qū)分了不同專業(yè)方向,將整個過程流水化,負面的意義是將各個階段和各個專業(yè)團隊割裂開,各自為政,失去了劃分專業(yè)的
本意,形式替代了目的。結(jié)果需求人員的目的變成了寫出一份需求,然后封閉意見;開發(fā)人員按照需求寫出代碼,改正bug;測試人員挖掘bug,監(jiān)督開發(fā)人員改正,然后寫一份報告。整體的目的蕩然無存。當然無法否認這種流水作業(yè)的正確性以及必要性,我這里要說的只是它的負面問題。
當
作戰(zhàn)室只要指定一份作戰(zhàn)計劃,作戰(zhàn)部隊只要沖鋒殺敵,后勤部隊只要做飯埋尸體;空軍只管按線路圖投彈,炮兵只要向指定坐標開炮時。如果沒有一個正確的、偉
大的、英明的將軍,這場戰(zhàn)爭只能在一個貌似嚴格符合教科書的方式開始,以一個不可思議的方式失敗。因為除了這位將軍,所有人都沒有帶著腦袋去打仗,他想的
對不對,直接影響到結(jié)局。
可
惜的是,我們沒有這樣的將軍指揮軟件開發(fā),也不存在這樣的將軍。我們都長著腦袋,都要去思考。從另外一個角度,我們并不嚴格類似軍隊,我們更像一個自治的
團體。那么自我協(xié)同就成了一個現(xiàn)實問題。需求、開發(fā)和測試人員如何協(xié)同完成一個產(chǎn)品呢?首先我們要把他們看做一個整體,他們所有人工作的目的只有一個:完
成一個產(chǎn)品。需求階段、開發(fā)階段和測試階段只是這個目的的一個階段,不是某個人工作的終極目的。我們已經(jīng)認識到這點,但我們做的遠遠不夠。
在
需求階段,需求人員應(yīng)該統(tǒng)領(lǐng)全局,向開發(fā)和測試人員介紹產(chǎn)品構(gòu)想,解釋需求,輔助開發(fā)和測試人員完成后續(xù)階段的計劃和方案;在開發(fā)階段,開發(fā)人員要重新整
合所有資源,由開發(fā)人員沖鋒,需求人員提供支持,測試人員監(jiān)督開發(fā)過程,糾正開發(fā)失誤;而在測試階段,測試人員才是指揮中心,他們要檢查軟件,需求人員配
合診斷,開發(fā)人員按測試計劃解決故障并封閉。不同的階段只是中心成員不同,決策人員不同,而不是責任不同,目的不同。
可
能說的太隱晦了,舉兩個例子來說明。一個還是打仗的例子,比如現(xiàn)在我們需要讓弓箭兵上馬,去追殺敵軍。弓箭兵老大可能反對并提出幾個原因,第一,并非職責
范圍,弓箭兵的職責是遠距離造成敵軍傷亡,沒有追逃的責任,這是騎兵的責任。第二,技術(shù)能力不足,弓箭兵都不善于騎馬,而且馬上射箭難度較大,沒法實現(xiàn)。
第三,如果敵人反撲,由于不善近戰(zhàn),可能會造成大量傷亡。的確有道理,可是如果我們真的需要這樣做來表現(xiàn)我們的戰(zhàn)略意圖,怎么辦?
再
舉一個身邊的例子來說明,前幾天有這樣的爭執(zhí),關(guān)于需求應(yīng)不應(yīng)該明確界面限制導致選項不生效,然后切換界面取消限制,選項應(yīng)如何的問題。需求人員的意見是
這樣的,第一,選項最終是什么不重要。第二,強行限制,會使需求工作量變大,同時開發(fā)和測試的工作量也增大(因為不同的地方,自然結(jié)果必然不同,強行一致
會導致不自然的處理,同時測試需要關(guān)注測試)。第三,不利于平臺化建設(shè),這種限制會導致需求過分依賴于產(chǎn)品,無法在不同產(chǎn)品間共用。都很有道理。但是我認
為,提出這個問題是無可厚非的,需求的意見也是中肯的,解決的辦法是,我們要看看我們的終極目標,以此來判斷是否需要這樣做。首先,如果不限制造成不一
致,對我們的產(chǎn)品有沒有影響,其次,如果不一致,會不會造成后續(xù)工作的阻滯。對于這個問題的本身,我覺的對于無關(guān)緊要的選項,需求可以不寫,開發(fā)可以順其
自然,測試不必關(guān)注。而對于比較重要的選項,需求必須明確,開發(fā)必須處理,測試要注意關(guān)注。不可一概而論,非左即右。