超越競爭對手的祕密武器-技術重用

國外軟件技術水平 VS 國內軟件技術水平

微軟的Office,我想無人不曉吧?Office的VBA不知道了解的人是否多?n年前我第一次知道這個VBA的時候,我覺得非常震驚, 我們利用VBA可以低成本地做很多開發,直接利用Office的全部功能。同時我很佩服微軟,Office中幾乎所有的產品,都包含VBA這個“組件”,這個小小的組件讓所有應用這個組件的產品增值不少。

幾年前我玩過一個國產的RPG電腦遊戲,覺得非常經常好玩。數月後,該公司再次發佈了一款新遊戲,號稱繼承了之前那個遊戲的精華,我非常激動,購買了這個遊戲,誰知道讓我非常失望,新款遊戲的基本上就是用原來遊戲的模子倒出來的,只是把故事情節、場景換掉。這裏倒不是想說這個遊戲沒有什麼新意,而是想說這個公司把重用發揮到極致,遊戲的情節引擎、戰鬥引擎等都不需要換掉,他們甚至利用開發團隊內部使用的“情節編輯器”和“場景編輯器”等工具,就可以“配置”出一款新的遊戲軟件出來。姑且不論這個公司遊戲創意方面的考慮,這個公司利用軟件重用,生產遊戲的速度得到了很大的提高,並且可以很好地保證質量,因爲這些重用的組件之前已經經過充分測試了。

國外軟件技術比起國內來,領先了很多個“馬位”,軟件重用方面的考慮在國外大公司來說已經是“家常便飯”的事情了,而國內真正考慮軟件重用的公司並不多。

國內的很多系統和軟件,基本上是做數據庫的“四輪馬車”的工作。

很多項目的名字都類似於“某某管理系統”,什麼ERP、MIS等系統,其實背後做的都是數據庫的增加、修改、查詢和刪除的操作,技術含量並不高,僅是工作量大而已。這些龐大的系統,經常會把一些軟件公司拖死。難道就沒有辦法用快速、高質的辦法來完成這些項目嗎?

過程VS技術

爲了更好的控制需求,爲了做好需求開發工作,爲了提高生產力,很多人想到了改進過程,很多公司也競相去過CMMI多少級。從過程來改進生產力無疑是一個好方法,但能不能從技術來改進呢?很多時候從技術來改進生產力比從過程入手來得更直接更有效。

在做一些信息管理系統的時候,經常會遇到客戶需要修改業務對象屬性的情況,這時我們常常要給相應的數據表增加一些字段,並要修改界面層到數據庫操作層的代碼。難道沒有一種好的技術辦法來解決這種需求變更嗎?

我們用微軟的SharePoint作爲我們公司的內部辦公平臺,SharePoint最大的優點就是能“隨需而變”,能隨時增加、修改、刪除字段,而不需要編寫任何的代碼,也不需要要求微軟提供任何支持服務。我們爲之感到驚歎,微軟的技術也太牛了!我們學習了SharePoint這個特點,對自己的產品進行改造,使之具備類似於SharePoint的特點,能隨時增加、修改、刪除業務對象的屬性,而不需要修改任何代碼,並且我們把這個技術幾乎重用到我們全部的產品上,極大提高了我們產品的競爭力。

業務對象的屬性發生變化,這是常見的事情,我們完全沒有必要埋怨客戶的“無理”變更,當你成爲客戶的時候,你也會有這樣的需求變化要求。如果我們的軟件在技術上能做到“隨需而變”,那麼你還會害怕什麼需求變更呢?IBM的廣告詞之一就是“隨需而變”,如果沒有強大的技術做後盾,誰敢打出這樣的廣告呢?

當然,技術改進與過程改進是密不可分的,技術改進也需要配合相應的過程來支持,我們在考慮改進的時候,不妨同時從過程和技術兩個角度來考慮。


老調重彈——重用的好處

網上說軟件重用的好處的文章特別多,這裏只介紹幾點。

l        讓生產軟件的速度更快。

讓那些以重用設計要花更多時間而不原意進行重用設計的人滾一邊去吧,軟件重用的目的之一就是讓軟件生產更快。如果貴公司每做一個項目,有50%是重用以前的組件的時候,貴公司的軟件生產速度會比你的競爭對手快多少?磨刀不負砍柴功,這個道理誰都懂,但一到現實工作中,還是有很多人直接拿鈍刀就去砍大樹了。很多軟件公司生產了軟件多年,還是沒有一點技術積累,自己的類庫、組件庫、共享代碼庫爲零,如果還不立下痛心來改變現狀,那就等着被被人淘汰吧。

有一款PS2遊戲叫“戰神”,非常受歡迎,我也很喜歡玩,而“戰神2”的面世比其前作快了很多,也比其他大型軟件的開發速度快很多,因爲 “戰神2”重用了前作的圖像引擎。在這個商業社會,不再是大魚吃小魚了,而是快魚吃慢魚。

l        讓軟件質量更高。

項目越臨近發佈,需要加班的機率就越高,開發時間嚴重超出了計劃的時間,而測試的時間不斷被壓縮,甚至有些軟件公司不進行測試了,美名其曰“給客戶測試”!這樣的軟件質量如何讓客戶滿意?如何拋離你的競爭對手?

測試是可以被重用的!如果軟件重用了大量的組件,而這些組件之前是經過充分測試的,那麼軟件的質量就會得到極大的保證,這些組件不需要重複測試,軟件需要測試的時間也會大大減少。

l        讓管理成本更低。

我曾經花了很大的力氣去抓項目的設計過程,但效果甚微,原因是我們沒有足夠多的利害高手,能把每個項目的設計做好。爲了提高大家的設計水平,我們又進行了大量的培訓。當我費勁心思提高我們的設計水平的時候,我們公司的技術副總卻給了我另外一個思路,讓我闊然開朗!

他認爲與其從改進過程和提高大家設計能力的角度來改進,還不如編寫一套生成項目框架的代碼,並要求全部項目使用公司的組件庫,這樣做項目的人不需要很高的水平就能做出滿足架構要求並且質量高的軟件來。

每個公司的技術高手畢竟是少數的,要把這些高手用到刀刃上,並通過軟件重用這個框架,保證高手們的智慧能貫徹到每個項目中去。這樣公司管理過程的成本將會極大地降低,同時公司也不需要招聘大量的高水平的開發人員,把公司的管理重點放到能產生80%價值的20%的員工身上。

l        有利於保護公司的技術祕密。

前段時間我還在笑話一個案例:一名客戶希望某系統能做成虛擬現實的效果,能有三維的場景,能從中取出所需要的物品,當時我的感想是:無言!不過不久前,我在網上瞎逛,居然點進一個三維購物網站,裏面展示了一個類似於三維的場景,能在貨架上取貨還能跟店員談話!我的天啊,太牛了!我覺得非常慚愧,我居然還敢笑話那個客戶,看來該笑話的應該是我!那個三維購物網站雖然還不算很強,但已經接近那個客戶想要的東西了。我想如果好好發展這個技術,該技術很可能會成爲該公司很有競爭力的一個技術!

一個軟件公司要成爲龍頭老大,沒有核心技術是不行的。保護核心技術最好的辦法,就是採用重用技術。有核心技術的公司,一般會有兩套人馬,一套人馬研發該核心技術的,一套人馬使用核心技術的,使用核心技術的人員只能得到編譯後組件,而這些組件常常要給與授權碼才能使用。

保護好這些可重用的核心技術,這些將成爲公司重要的資產。

 

如何做到重用?

l        先做好項目內重用。

不知道你編寫代碼的時候,是不是經常Ctrl+C和Ctrl+V?我曾經見過一些軟件的代碼,相同的代碼到處都是,不要說面向對象了,連基本的結構化代碼都寫不好。相同的內容要抽出來成爲方法,相似的功能可以提取到公共類中。這是最基本的編碼功底,也是最基本的重用要求,如果連這點都做不到,就不要空談什麼軟件重用了。

還有一次,我檢查一個VB寫的Windows程序的缺陷列表,發現一批關於錄入提示不友好的缺陷,後來一問,原來開發人員直接使用VB的InputBox函數來讓用戶錄入數據,開發人員還用一堆InputBox函數不好用的理由來說明這個缺陷是不能解決的。該軟件存在大量的這種類似的錄入窗體,我就問爲什麼不自己做一個錄入窗體,然後在所有地方重用它呢?這樣問題就不存在了,而且用戶感覺更好,何況做這樣的一個錄入窗體時間最多也就是30分鐘的事情。

做自己做起,從項目做起,馬上把軟件重用做好吧!

l        拿來主義——利用開源代碼及共享組件。

n年前,我曾經利用一個共享的軟件,生成其中一個項目的數據操作層的代碼,節省了我們不少時間。類似的這樣的一些共享代碼、組件、軟件在網絡上非常多,大家不妨多去搜索一下。

不過這裏要給大家提個醒,必須測試好這些免費的東西。我曾經吃過虧,我拿了一個網上大家都鼓吹得很厲害的一套開源免費的論壇來做自己的網站,結果發現一堆bug,還有不少是導致網站無法訪問的錯誤。使用免費的東西總是要付出代價的。

另外也要注意大家注意版權問題,很多免費的東西是不能用於商業用途的。

l        項目無可比性,如何做到項目間重用?

當我提到軟件重用時,很多人跟我說,我們公司的項目每次都不一樣的,很難提煉出可重用的東西。於是我回答,不管是什麼項目,很多內容是可以考慮做成可重用的,如:權限管理、配置管理、日誌管理、異常管理(出錯管理)、緩存管理、數據層組件等。

很多共性的東西,只是我們沒有抽取出來。不知道大家是否瞭解過微軟的Enterprise Library,這個Library提供了很多個Block,項目能直接使用這些Block爲項目服務,如:Data Access Application Block能提供數據訪問的API,你無需再開發數據庫訪問的代碼。微軟爲什麼就可以對不同的項目進行抽象,提煉出這麼多可重用的Block,我們是不是應該多動動腦筋?

另外不管你是不是採用.net技術去開發的,也建議去好好研究一下微軟的Enterprise Library,看看他們是如何設計這些Block,好好學習人家的重用設計是怎樣做的!

l        發掘有價值的重用。

項目中可重用的東西實在太多了,平時要好好發掘。

我的測試團隊經常會報這樣的一些缺陷,對錄入數據的合法性沒有做比較全面的判斷,如輸入電話號碼的地方,可以輸入“ABC”,而系統沒有報錯。而我們的開發也經常說這類缺陷沒必要修改,另外要滿足這個要求的話,代碼比較難寫,而且要到處修改。

我比較納悶,如果發現要不斷地處理類似的問題,是不是應該考慮重用設計呢?如果經常要驗證電話號碼的合法性,是不是可以做一個電話號碼控件,併到處重用這個控件呢?當然電話號碼的合法性判斷並不簡單,這段代碼也並不好寫,不過我們有“正則表達式”,現在很多開發包都提供正則表達式引擎,這些不都可以利用嗎?

註釋:正則表達式是一種對錄入數據格式和合法性的定義語言,如錄入電話號碼的要求,完全可以用正則表達式來表達。正則表達式的引擎,可以將正則表達式與輸入值進行比較,判斷輸入值是否符合正則表達式的要求。

我們要有敏銳的觸覺,凡重複的代碼、凡類似的功能、凡經常遇到要解決類似的問題,都可以考慮採用重用設計。重用設計是有一些難度,不要畏懼這個困難,很多情況下可以用簡單的辦法解決的。

 

規劃技術管理路線,打造核心技術

市場、技術、過程可能是軟件公司最重要的三樣東西,具備具有市場價值和競爭力的技術,並且通過軟件過程管理來保持和擴大這種優勢,對軟件公司來說是至關重要的。縱觀各大軟件巨頭,無一不是具備這樣的特點的。中國要成爲軟件強國,也必須走這樣的發展道路,什麼發展外包只是權宜之計。

以前某軟件老闆曾經說過:他們公司不是研究機構,更不是慈善機構,公司存在的目的就是賺錢,所以他們公司沒必要打造核心技術,能賺錢的就做。問題是,如果沒有核心技術,能不能持續地賺錢並且賺大錢呢?n年過後,該老闆的軟件公司也不見得發展了多少,目前還在爲公司生存而奮鬥。

阿里巴巴的發展大家有目共睹,互聯網剛在中國興起的時候,馬雲看中了網上交易的前景,目前阿里巴巴網站已經爲阿里巴巴帶來豐厚的收益,馬雲把B2B的市場拓展到C2C——淘寶網,爲了保障安全的網上交易,開發了支付寶。爲繼續擴大優勢,阿里巴巴併購了中國雅虎,一下子擁有了全球領先的搜索技術。沒有強勁的技術是難以保證持續領先的,一流的軟件公司都在不遺餘力地打造自己的技術優勢。

各軟件公司應該好好分析自己的市場前景,制定相應的技術路線,打造核心技術來支持公司的戰略!而軟件重用將是保持競爭力的殺手鐗!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章