|
今天在微博上看到幾位敏捷愛好者(本著討論問題的態度故隱其名)探討敏捷測試和質量保證問題,我忍不住也加入了討論:
Z先生原帖:我剛才看到一個大會演講稿,談到敏捷測試六大指導原則:1. 僅靠測試人員不可能獲得高質量的軟件,質量是整個研發團隊的責任;2. 場景是不可窮舉的,測試活動必須是風險驅動的,關注于高風險的場景;3.分層自動化測試是唯一出路;4. 在正確的位置進行恰當的測試是自動化的關鍵;【待續】
S先生回復:品質在于構建過程。檢驗貫穿構建過程,提供及時反饋。
我回復:什么樣的構建過程才能出Unix這樣的品質呢?迭代?快速反饋?TDD?
S先生回復:據說stroustrup聽到重構時的反應是,我們從七十年代就這樣做了。推薦《UNIX編程環境》,了解大師的編程方式。
我回復:您偷換了概念。不能說大師用了重構,C++和UNIX的品質就是靠重構或某種構建過程得來的。廚師做菜用到了勺子,不等于菜好吃是因為勺子。
S先生回復:我沒有概念。我們看到一個果,就問因是什么。其實是泛因果,無因果,一切是機緣湊巧。
我回復:“品質在于構建過程”難道不是一個明白的因果描述嗎?
S先生回復:品質在于構建的人。我說話時沒因果,你看到了因果。
我回復:歡迎敏捷愛好者圍觀!
很高興幾個回合討論下來S先生修正了先前“品質在于構建過程”的觀點。什么重構、TDD、迭代、快速反饋等等構建過程都不是Unix品質的核心要素。我不但不認同“品質在于構建過程”、“測試是最好的設計方法”這類機械式的觀點,而且也不滿意把軟件優劣歸結于“人是根本”的簡單回答。我們需要探索一個既非機械式的,也非簡單地歸結為某種理念的更深刻的答案。
像Unix這樣優秀的軟件,真正的核心要素到底是什么呢?我的答案是:模型,即人心中的軟件。在看得見、摸得著之前,Unix的品質就已經存在于設計者的心中了,他們不會在Unix誕生后驚訝:“哇,Unix的穩定性這么好,7x24小時運行,從來不藍屏”。模型一定是設計者心中最美最自然的東西,為什么我們閱讀操作系統源代碼會像進入迷宮一般理不清頭緒,而作者自己卻覺得頭頭是道呢?因為作者心中早已依稀看到了那個美麗的作品,我們以為他幾十萬行代碼敲很辛苦,實際上在他自己看來是自然地一步步向她靠近。
模型是軟件的靈魂,存在于設計者的心中,而軟件的構建過程正是心中的世界向現實世界逐漸投影。模型可以是完美的,而現實卻非完美,或許有時候我們很幸運地到達了,或許有時候我們不得不向現實妥協,改變心中的世界。試圖制造燈泡的愛迪生可能會一時找不到熔點極高的發光金屬而止步不前,企圖制造永動機的人則根本無法實現。在不完美的現實中,我們明明想的是a+b,卻敲成了a-b;我們以為某個API可以很快返回,沒想到卻等了5秒鐘,為了不阻塞用戶不得不改成了異步。Review、測試等構建過程在一定程度上彌補了現實的不完美,并對模型給予了反饋,但它卻無法決定軟件的特質。Windows NT內核和Windows 3.1內核的品質差別不在于微軟采用了兩種不同的構建過程,而在于它們采用了不同的內核模型。靈魂與軀體的差別就在于此!雖然對于普通的軟件開發通常有不少成熟的模型供選擇,并不需要總是創造自己的模型,但理解模型間的差異,并在設計時選用恰當的模型仍然比采用某種構建過程更加重要。服務器架構采用Nginx似的異步IO模型,還是采用Apache似的每個請求一個線程的模型遠比開發是否采用了TDD更為重要。
模型的產生是柔性的,主要源于靈感;過程的執行是剛性的,主要源于邏輯。蘋果砸在牛頓的腦袋上能砸出萬有引力模型,砸在我們腦袋上卻只是“哎呦”一聲;但一個蘋果3元錢,兩個蘋果2*3=6元錢卻在牛頓和我們面前是平等的。迷信靈感和迷信邏輯是兩個錯誤的極端,孔子講“天下國家可均也,爵祿可辭也,白刃可蹈也,中庸不可能也”,任何一項技能的高級階段都是關于“度”的藝術。如同光具有波粒二象性,軟件開發也具有藝術創作和工業生產的二象性,它包含了柔性的設計和剛性的過程。越是不成熟的前沿領域越表現出柔性特征;越是成熟的一般領域越表現出工業生產的特征。因此,一個以新產品為主的創業型公司應當更注重設計,更需要畫家、詩人般的創造型人才;而業務成熟產品穩定的大公司應當更注重過程,更需要踏踏實實的生產線工人似的人才。但在當今這個瞬息萬變的信息時代,即使是世界500強的大公司也越來越不穩定,越來越需要創新才能適應,所以即使大公司也不可忽視軟件開發的柔性特征。同時,我們也不能迷信模型,過程同樣可以成為企業的核心競爭力,比如:富士康。虛虛實實,實實虛虛,其妙無窮。老外做Nike品牌(虛),我們做代工生產(實),高額利潤被老外拿走了;我們經營航空公司(虛),老外生產波音飛機(實)高價賣給我們,高額利潤又被老外拿走了。靠虛取勝還是靠實取勝?這是個問題^_^
或許我對于模型的描述不太讓人滿意,人們多習慣于那種有章可循的感覺,即便不是死板的知識,起碼要找個“在某某思想的指導下”才覺得心里有著落。或許還有人說,模型的確重要,那么我們能不能有一個過程、模式或套路來推導出模型呢?比如,現在非常流行的從用戶需求出發的分析模式,即“分析需求,抽象出共性,共性是本質的,本質是穩定的”,這類模式的特點符合人們希望找到套路的心理,一看就明白,容易操作,有成就感。我不否認這類模式的確可以得出可用的軟件設計,沿用成熟的模型也未嘗不可。但我們應該明白,心中的世界遠比現實的世界更廣大更美妙。世界是多元的,現有的東西(用戶需求、成熟模型等)只代表了其中某幾個維度的視圖,設計者心中應當有更多的維度!用戶需要一個文本編輯器,是設計者心中的世界決定了他交出的作品是Vi,還是Emacs,亦或是Notepad。亨利·福特說:“如果你問用戶需要什么,他會告訴你一匹更快的馬”。汽車源于福特心中的世界,這是一個比只有馬的世界更多彩的世界。喬布斯是一個不重視市場調研的人,iPod, iPhone, iPad都不是發個問卷,做個市場調查看看用戶需要什么的結果。Apple是喬布斯心中的世界在現實中的投影!所以,請打破“從用戶需求出發”,“從模式出發”的迷信,釋放你的想象力,讓自己心中的世界去包容現實的世界吧!
每個人心中都有一個屬于自己的世界,牛頓運動定律是牛頓心中的世界,相對論是愛因斯坦心中的世界。哪一個才是本來的世界呢?有沒有本來的世界呢?本來的世界是什么樣子呢?… 老子給我們啟示“道可道,非常道”,說得清,道得明,想得到的都不是永恒的真理,所以真理不可言說,對真理的探索永遠沒有止境……
it知識庫:“品質在于構建過程”嗎?,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。