軟件工程是近些年來在計算機領域中非;钴S的一個學科。對從事軟件開發的人員來說,“軟件工程”毫無疑問是一個時下出現頻率非常高的字眼,對于我們許多IT人而言,如企業領導者、項目管理負責人,或是其它各種不同職位的軟件技術人員,我們經常都會有意識或無意識地提到與軟件工程相關的許多字眼,諸如RUP、敏捷軟件開發方法、UML,或是CMM等。是!由此可見,在我們的潛意識里,軟件工程不僅很重要,它也的確很Fashion!
當然,時髦歸時髦,時髦大多時候也許是感性的,它不一定會很科學和合理。因此,我們不禁要大聲地反問自己:軟件工程究竟給我們的項目(尤其是那種大型的軟件項目)開發和實施,帶來了多大的變化呢?例如,它能夠給我們的項目節約了多少成本?對我們軟件產品質量的提高起到了多大的作用?還有就是,它又能夠規避了多少項目的風險等?
在實踐中,也許我們的許多項目對上述問題的回答并不值得樂觀;甚至很多時候,軟件工程對我們項目的影響還會是負面的。那么,這里又不禁要問:為什么在軟件開發領域中應用工程化管理方法后,就不能夠像許多其它工業領域中那樣應用工程化管理方法之后,能夠發揮出更大更積極的作用呢?
對于上述問題,也許我們每一個人都可以輕松得出一個大概一致性的結論:這是由于軟件開發是屬于高技術含量的產品研發過程,它不同于其它一些比較普通的工業產品在開發過程那菀捉鋅刂坪凸芾恚歡彝恢擲嘈偷牟飛鞒桃埠莧菀妝揮行У馗粗剖褂謾6砑返目,有写夃其纂E淼囊恍┨厥廡,染U芏嗷方詼際譴叢煨緣鬧橇投,俞呬唯一性,袟栿不容移澐定,或袟栿经常更换太繑倘特点?lt;/DIV>
客觀的說,上述的結論基本上闡述出了問題的實質。但是本人認為這樣的結論太過于籠統,或者說,它沒有闡述到問題的具體關鍵點上。因此在本文接下來的內容中,我試圖,也可以說是膽大妄為地,來闡述出自己對此的一些獨到理解和觀點。也許這其中的諸多觀點可能會有些偏頗,值得大家來進一步商榷。這是因為我本人既沒有對軟件工程進行過系統的研究,不是自稱為是這方面的專家,也沒有一籮筐又一籮筐對軟件工程的實踐,更不是具備那種與生俱來杰出天賦之人。但是,我相信我會有屬于自己的一份的自信,再外加上一份自己特有的成長、教育、學習和工作經歷 —— 在農村長大,后進入城市學習和工作,在屬于事業單位性質的醫院實習過一年,后又在處于改革風口浪尖的國企工作過6年,近5年又漂泊在異鄉為處于市場機制下運行的私企和外企給辛苦地打工;做過推銷藥品的業務員,也曾在辦公室里安安靜靜地工作過,還從事過會計;雖在校所學是藥學專業,后決定毅然轉行,系統地自考過經濟學專業課程,最后居然完全靠自學,而進入了計算機軟件開發行業內工作,并保持到至今;喜歡哲學,勤于思考,酷愛動手,常常莫名地擁有“打破沙鍋問到底”的那一股韌勁。所以,憑著這獨特的一份人生閱歷作為背景,我在這里主要從經濟學和軟件技術的視角,來對當前軟件工程應用不甚理想的狀況展開了幾點深入的思考,真誠地希望能對我們以后的軟件業發展有點參考價值,或能給大家一些有用的啟發。當然,如下文中的某些觀點能獲得更多的有識之士認同,或能夠產生一些共鳴,那將是本人的最大榮幸。
毫無疑問!“工程化”不是軟件開發行業所獨有的,它是工業革命(或者說產業革命)的產物。軟件開發行業引進工程化的管理方法,也即軟件工程,它當初的目的是為了解決軟件危機。而造成軟件危機的主要原因是由于軟件項目的規模日益快速擴大,而規模宏大的軟件項目必定會需要更多、更多的人來齊心協力的共同參與。因此從本質上說,軟件工程研究的內容其實很簡單 —— 那就是,軟件開發人員如何更好地在一起協同工作,以便能夠共同完成某一項規模宏大的軟件產品的開發任務。就好像蜜蜂協同建蜂巢那樣,這當中需要科學的方法和科學的管理,以及很好的協同和分工。因此軟件工程實際上必然會包括很多很具體的一些東西,如任務的分工和協作、開發過程方法、計劃與進度控制、質量保證、成本控制與資源分配等等。在這里,我本人不太感興趣對這些具體的東西展開過多討論,而是重點圍繞在工業化革命中,對工程化管理思想帶來革命性進步的一項技術方法 —— 產品的流水線作業展開分析討論。
我個人執著的認為:“如果沒有流水線作業技術,根本就沒有后來的如此發達的工業社會文明”。這樣說其實一點也為不過分。我們也許不敢說流水線作業技術是最好的分工和協作方式,但是毫無疑問,它卻是至今為止最為行之有效的一種分工和協作方式。它把無論多么復雜的制作過程進行拆分,一步一步的,直至它很簡單為止。這樣,流水線作業技術就使人類自身獲得了較徹底的解放,一個人再也不用去掌握那么多的技能。這不僅是提高了效率,也更提高了產品的質量。而且這樣被拆分后的每一個簡單工作任務,可以很容易地讓機器去代替完成,從而大幅提高生產效率并降低生產成本。同時,對復雜過程進行最大程度上的細分后,能有效的實施無關聯步驟的并行開發活動,從而大幅縮短每件產品開發所需的時間。
如果我們從一個更廣義的視角來審視軟件工程;那么軟件工程其實可以被理解為,是對軟件的開發活動,如何來實施流水線作業化的拆分過程。這個流水線作業化如果實施得好,那么可以說對這個軟件項目的工程化,肯定也是實施得很成功的。80年代盛行的結構化分析和設計方法中的瀑布模型,它基本是遵循完全線性化的工作拆分流程,和其它的工業產品的生產流程類似,前一個“工序”沒有被完成并審核通過,后一個任務流程是不會啟動的。當然,后來發現,這樣僵硬死板的軟件工程化開發流程,其實對許多項目并不適合,尤其是那些需求從一開始很難確定的項目,或是需求變化太快的一些項目。因此,后來在軟件工程領域中,出現了許多其它的一些軟件開發方法,諸如原型法、迭代法、螺旋法、演進法等等。
上面的這些不同的軟件工程化開發方法,這些都是由于軟件開發這一領域的本身獨特性所致,前面也闡述過這一點。但是真正導致當前軟件工程應用不甚理想的原因,就僅僅是因為如此嗎?就完全是因為軟件開發其自身根本不適合采用工程化的思想來管理嗎?不!本人決不贊成這種觀點,雖然我也認為,由于軟件開發領域中每一個工作任務都需要很大的創新性等諸多特點,它會很大程度上影響軟件工程化的實施難度;但是,這一點我們通過不斷的實踐,不斷的改進,以及軟件技術本身的發展,其實我們是可以有效地克服這些困難的,后面會進一步闡述與此相關的一些技術的演進過程。而我認為,更為關鍵的原因是我們社會,或者說是我們人類自己的一些缺點所導致的,是我們的思想文化上的狹隘和片面追求利益之上的情結所造成軟件工程很難突飛猛進。為何這么說呢?
試問!其它的工業產品在其完整生產周期過程中,會只有一個廠家參與某個產品生產的全過程嗎?很明顯,絕對不是這個樣子的。我們知道除了原材料之外,中間還有許許多多的中間產品(半成品)環節。試想!如果一個房產建筑商在承建某一棟大樓時,所有的東西,所有的任務都由它一家公司來做,這可能嗎?它又要去生產鋼筋,又要去生產水泥,它還有能力去造樓嗎?所以這就需要社會分工。而“流水線作業”,也絕對不是狹隘僅指,你某個公司內部有很好的流水線作業管理就能夠行得通!而是一個某行業的、甚至是全社會的合理分工和協作。
但目前的軟件行業卻并非如此,看看那些個軟件巨頭們!它們幾乎都是獨成一個體系,什么軟件包都是自己做,很少去依賴于別人。當然,在此也許大家會覺得不以為然,實際不是這個樣子呀!軟件開發廠商之間也有很多的合作呀!而且對于應用軟件系統的開發商或集成商,它們會覺得有許多開發平臺,以及很多很多的可復用的開發庫可以利用。這些“開發庫”不就是相當于其它工業產品中的半成品嗎?
本人不敢茍同上述的這種意見!因為這些所謂的“開發庫”是完全封閉的、并受某個廠商單向控制并壟斷的。所以它有很大的不確定性,例如,對這些庫的整體結構設計,或者某個接口的設計,作為使用者你,你有權去修改它嗎?可能連建議權也沒有吧!另外還有就是,當開發庫在升級時,你的應用程序很可能存在由于接口不一致性所帶來的巨大風險!也許又有朋友認為,你可以使用那些開源項目的開發庫呀!那么我又請問?此時你的軟件產品質量由誰來保證,如果某個庫中的某個bug導致了你系統的崩潰,你能及時找得到誰是真兇嗎?即使你找到了真兇,你還能找得到某人或某軟件開發商來為此來負責嗎?
所以說,現在的軟件開發領域,它這里缺乏一個很好的產業鏈環境。缺乏像其它工業產品中的“半成品”式的復用,雖然我們曾經對組件的搭積木開發方式寄予過很美好的希望,還有ActiveX控件等。究其原因,就是由于各個軟件公司為追求利益最大化,夢想自己壟斷并主宰整個(或某類)軟件產品的全部規范及開發過程;其結果導致軟件工程的思想很難全面實施,最終也必將影響各個軟件企業間的合作,并影響軟件產品的開發效率。這里我們再舉一個例子。兩個企業廠商,一個從事PC的組裝生產,而另一個從事企業應用軟件的集成(EAI),您認為,這兩個企業所從事的工作,那一個更容易、更簡單呢?我們不能說PC機的里面的構造會很簡單吧!它里面那么多電路板和那么多精密元件,但是由于它的任務分工很好,模塊化程度很高!所以最后做組裝和集成的時候,就很容易進行。而從事EAI的工作任務時,本來這毫無疑問是很簡單的一件事,但是由于各個應用之間缺乏規范和合作,使得本來很輕而易舉的一件事,未必就會那么被輕易地搞定。
在文章最后的一段內容中,我不想在這里再過多評論現在的軟件工程技術的一些是是非非,而是給出一個俺本人認為較為理想的軟件工程實施模型,也許這個模型過于理想化,甚至是很不成熟。但是我會執著地認為,我們的軟件工程應該朝這個方向去努力。
要想軟件工程真正能夠像其它產業中的工程化應用那樣發揮出更多更好的作用。那么,首先就一定要注意培育出一個好的、健康的軟件開發的產業鏈環境。只有這個產業鏈環境健康了,成熟了,各個軟件企業才會有更多的資源去關注屬于自己擅長的那一塊工作任務,也才可能把屬于自己的工作任務真正地去完成好。當然,這樣各自的軟件企業在這個大的軟件產業鏈環境中,必定會找到并實現自己的最大利益。
文章來源于領測軟件測試網 http://www.kjueaiud.com/