軟體的可重用性一直是軟體工程所追求的目標之一,軟體工程界希望有一天能和其它工業領域一樣,利用標準化的軟體模組快速構建特定的應用系統。事實上,這種努力也取得了相當大的進展,但是與人們所期望的目標還是有不少差距,軟體模組還遠沒有象汽車上的輪胎那樣拆卸、維修、更換方便和簡單。
大多數情況下所討論的軟體可重用性指軟體本身的可重用性,即軟體代碼實現的可重用性。而實際上,軟體的可重用性遠不止這些,軟體開發的全生命週期都有可重用的價值,包括項目的組織、軟體需求、設計、文檔、實現、測試方法和測試案例都是可以被重複利用或借鑒的有效資源。可以說,一個成功的軟體項目的全過程都是寶,就看你會不會利用。
當然,軟體代碼的可重用性是最直觀、最容易想到的部分,也是程式員們最樂意追求和有成就感的部分。但怎樣才能開發可重用的代碼呢?
也許有些程式員會說:這很容易啊,我用C++封裝了很多類,我用Visual Studio開發了很多COM組件,不都是可以重用的嗎?事實是如此嗎?就我所瞭解和經曆過的很多軟體開發項目,很多類和組件都是曇花一現,項目一過就再也沒人提起。很多程式員認為利用C++開發的類或COM組件天然就是應該可重用的,這是錯誤的想法,開發工具只是促進代碼可重用性的工具而不是決定性的因素,決定代碼是否可重用的關鍵還是對於軟體系統所面向的問題域的分解方式,即將一個複雜問題分解成簡單問題或獨立個體的方法和策略。我一直確信,如果一個程式員使用C的時候,不能很好的使用模組化的結構構造一個軟體系統,你就不能期望他能使用C++寫出可重用性很高的類結構。不是開發工具決定了軟體的可重用性,而是如何分解一個複雜問題。無論是分層的軟體思想(TCP/IP協議棧)、模組化的軟體思想(C / Fortran)、還是可重用組件的軟體思想(C++/COM),它們之間並非是矛盾和排斥,而是一個問題的三個方面,是對同一個問題域的不同視角。
還有些程式員可能會說:我們開發的軟體都是針對特定的使用者需求,要求都不一樣,沒有辦法實現軟體的可重用。聽起來似乎也有道理,其實不然,軟體的可重用性也是有應用範圍的,當然不能期望很多程式員能開發放之四海而皆準的通用軟體模組,也許有些程式員永遠也不會去開發這樣的軟體,是不是軟體的可重用性就跟他沒關係了呢?當然不是,可重用性體現在軟體的各個層次,通用的、可複用性高的軟體模組往往已經由作業系統或開發工具提供,如通用庫、標準組件、標準模板庫等,並不需要程式員重新開發。那麼一般的程式員如何開發可重用的軟體呢?而正常情況下,一個軟體企業或軟體小組往往專註於解決某一領域的問題,針對這一領域的軟體項目雖不完全相同,但也有很多共同之處,比如財務或ERP領域的軟體大多需要各種各樣定製的表格和圖表。所以開發軟體時,開發針對某一特定領域或問題域的可重用軟體是大多數程式員需要重點考慮的問題和方向。
那麼在實際開發過程中,程式員們如何提高自己開發可重用軟體的能力呢,我有幾個小小的建議也許會對大家有所協助。
建立開發可重用軟體的意識:
首先建立開發可重用軟體的意識,不管你所開發的軟體有多麼特殊,其中必定含有一些公用的邏輯和功能,將公用的邏輯或模組同真正特定的邏輯分開,學會從一個特定的問題集中抽象出幾個邏輯層次,分開實現。可重用軟體模組將作為一個特定軟體產品的副產品而重放光芒。
保持類或模組的簡單和純粹:
保持類或模組的簡單和純粹,越是簡單、功能純粹的軟體越可能被重用。"越是簡單,越是複雜",就象搭積木,提供的積木越簡單,就越有可能搭建複雜的形狀和物品。
也許有一天,你的一位同事對你說:"嘿,哥們,我剛剛用了你在上一個項目開發的那個模組,挺不錯"。你已經實現了軟體的可重用。