前不久,看到一篇文章:“軟體的品質是做出來的,而不是測試出來的”,他列舉了很多執行個體,從機械製造到建築行業再到IT行業,說明了軟體“做”的重要性,總之一個中心:只要你精耕細作,一行code 一行code地去推敲,軟體品質就一定能得到充分保證。
看了這篇文章,掩面沉思了很久,總覺得有失偏頗。軟體測試,在軟體開發週期中,是最後一道關口,這道關口固然很很重要,把握得好,產品出廠以後,bug 就少,系統就越穩定。但是軟體,從需求調研、需求分析、概要設計到細部設計到開發到測試,是一個龐大的系統工程,如果忽略了哪一個環節,都將帶來重大的損失,就象一場足球比賽,守門員是球門前最後的守護者,他的份量固然重要,但是片面的強調守門員的重要性,而忽略了前鋒、中路、後衛的配合,再強的守門員可能都無濟於事。一款優秀的軟體也是如此,每一個環節必須充分的交流、溝通和配合,如果片面強調一環,而忽略其它,都不可能“優”起來。當然,這所有的環節,不可能放到天平上去稱量,根據不同性質、不同類型的軟體,它的側重點可能也有所不同,比如,一個球隊,如果這支球隊是防守型的,那麼它球員的選擇、平時的訓練、球場上的技戰術安排,可能都圍繞著防守來展開;反之,如果是一支進攻型的隊伍,一切的重點,可能都是以圍繞進攻為主。就軟體開發的各個過程來講,我認認為“優秀的軟體是設計出來的,而不是做不出來的”。
軟體設計包括:需求調研、需求分析、概要設計、細部設計等方面,從這個範疇來看,它的重要性也不言而喻了,再則,從行業分工、薪酬待遇也可見一斑。
需求調研,說到這裡,可能很多人會納悶,設計與需求調研能搞到一塊兒嗎?請注意我的前提:優秀的軟體,要打造一款優秀的軟體產品,我認為從事需求調研的人員,必須是具有豐富的軟體經驗和熟練的業務的知識,才能把使用者真正想要的的東西,瞭解全、瞭解透,同時把當地的法律法規,行業準則,市場狀況,都溶入到需求之中,這才算是一個完整的需求,這才能給後面的分析、設計人員更充分的資訊,做好構架設計與詳細設計。比如,要做一套財務軟體,如果你不懂財務制度,不瞭解帳戶規則,這款財務軟生產出來的市場前景是難以想象的;再比如,要做一套外貿軟體,國家進出口貿易法,貿易準則,這些也是少不了的;還有一些行業的潛規則,比如財務軟體,很多公司要求能做兩套帳,一套真帳(用於公司管理),一套假帳(用於報關報稅,備查),如果你實現不了,他就不埋單。但是這些在需求調研時,使用者一般是不會告訴你的,需要我們的需求調研人員去瞭解,去挖掘。但是現狀卻不容樂觀,很多項目團隊,沒有充分認識到需求調研的重要性,隨便派一個文秘或者文員去與使用者交流,把使用者說的,一字不漏地帶回來,就算完成了需求調研。其實,這遠遠不夠,很多使用者不知道電腦是怎麼工作,也不知道完成這個功能,需要哪些資訊,所以他告訴你的,可能就是一些瑣碎、零散的東西,很多東西他們還想當然地認為你是知道的,這恰恰是我們不明確的,這個時候,就需求利用我們的技術和經驗去挖掘,去確認。更有勝者,你的經驗夠強,還可以給使用者提出一些指導性的意見,協助他們梳理流程,改正日常工作中的缺點和漏洞,這樣既利於軟體開發,也利於使用者提高,以達到真正雙贏之目的。
需求分析,是把使用者需求變成軟體需求的一個過程,與需求調研這兩個過程是相輔相承的,在調研過程中要分析,在分析的過程中也要再調研。把一個一個的業務模型清楚在搭建出來,商務邏輯,操作流程,都疏理清楚。
架構設計與詳細設計,就不言而喻了,這個環節的負責人員一般都身兼百家之長,熟悉很多語言的精髓,知道軟體發展的趨勢,他們能根據這些特性,規劃新一代產品,做出非常好的產品來。軟硬體環境、開發平台的選擇、子系統的劃分、輸入、輸出、接品及作業流程的規劃,資料庫、用例實現圖、順序圖表、活動圖表都將在這個過程中產生。
而軟體開發,僅僅是將詳細設計出來的功能,一個一個地用既定的語言,在既定的平台上實現出來而已。不需要太多的創新,也不用思考商務邏輯和使用者的操作流程,按需求一步一步地完成就可以了。當然,很多詳細設計可能不夠詳細,程式員還要考慮的就是程式的演算法。除此之外,單元測試也必不可少,要求把那些顯而易見的bug 全部消滅到單元測試階段,這個測試是白盒測試,也最容易發潛在的問題所在,是程式必須履行的職責。就象機械行業要生產一根杆子,要經過粗車、精車、磨等幾個主要工序,操作人員,每完成一道工序,都必須要自已先檢驗一下,是否符合要求了,而不是完全要靠檢驗人員來幫他檢驗。
由此可見,設計在軟體的整個開發週期中,佔據了多大的份量,它決定了一個產品的前景,一個產品的生命力,決定了一個產品適用性、方便性、安全性、穩定性,有很多項目,半途夭折,或者被愕殺在搖籃中,就是因為它的設計沒有做好,前期的準備工作沒有做充分。還有很多公司,從調研、分析、設計、開發到最後的測試,都是一個人完成,這些過程中的文檔,就只有程式源碼,其餘的東西,全都在他的腦子裡,這樣的過程,其實是相當危險的。所以要想軟體“優”起來,要想軟體有生命力、讓使用者滿意,就多用用我們的腦子吧,一切以設計為重。