• 沒有找到結果。

第二章、 背景知識與相關研究

2.1 軟體知識管理

軟體的發展是一項知識不斷創新的過程,每天都有新的問題被解決、新的知 識被創造出來,使得軟體的知識呈現多樣化且快速的成長。Ioana Rus等人曾說明 知識管理對於軟體工程的重要性包括[11]:

• 記錄與分享流程(Process)以及產物(Product)知識:軟體發展的流程與 產物會隨目標與內容的不同而有所差異,單一的發展模式無法滿足所有專案 的需要,因此發展者須不斷的藉由專案的過程來累積知識與經驗。然而有些 發展團隊卻常忽略這些工作經驗,以至於未能有效運用之前專案的成果而造 成許多時間的浪費。而知識管理強調的知識捕捉(Capture)與分享正是解決 的良方。

• 了解專門領域知識(Domain Knowledge):軟體發展過程常需要瞭解問題領 域的相關知識,搜尋與學習這些知識往往要花上許多時間,但這些知識會散

在不同的成員身上,其效用有限,知識管理技術可幫助組織將這些專門知識

(Expertise)予以確認(Identify)、包裹(Package),進而供團隊共享,以提 升整體能力。

• 獲得新技術、資訊:軟體是一個不容易掌握且發展快速的領域,科技不斷地 推陳出新,也許使軟體的能力更加強大了,但也是發展人員的夢魘,除了穩 定性、相容性外,也讓評估變的更加困難,需要花時間去適應與學習。知識 管理旨在促進組織分享的文化,透過溝通與實踐來縮短共同學習的曲線。

• 分享所在環境的知識(Local Policy):成功的軟體組織應該擁有許多軟體經 驗,而發展團隊的程式風格或一些慣例通常存在較有經驗的發展者腦中,且 常透過較非正式的溝通來傳承給新進人員。知識管理除了協助溝通,也試著 去捕捉日常生活中較非正式的知識分享,讓更多需要的人能夠受益。

• 了解有誰知道什麼(Who Knows What):有許多的知識可以被紀錄下來,但 不可否認的,也有許多隱性的知識存在員工的腦中,對每個人所知道的知識 做管理可減少成員尋找專家幫忙解決問題的時間,甚至有成員離開時,也可 當作找尋替補人選的參考。

• 遠距離的合作:由於全球化的趨勢,團隊的成員可能身處在不同的地方,因 此遠距的溝通、協調與合作就愈發顯出其重要性,透過知識分享,才能提升 整合效率。

所謂軟體知識是指在軟體發展過程中所有需要、產生、應用以及參考到的各 項顯性與隱性的知識,我們即可稱之為「軟體知識」。一般而言,參與人員需要 軟體工程知識(Software Engineering Knowledge)、產品領域知識(Product Domain Knowledge)、產品知識(Product Knowledge)、相關電腦科學知識(Computer Science Knowledge)等類的軟體知識。將上述知識與軟體發展人員的關係關連在 一起,則軟體知識模型便如圖 2 - 1 所示:[2]

圖 2 - 1 軟體知識模型

至於知識的創造是一項連續不斷的過程,透過內隱知識與外顯知識彼此的交 互作用,由個人、團體慢慢向外擴張至整個組織結構,結合新的概念和既有的知 識,進而發展出新的知識,此一反覆遞增的過程,即為知識的螺旋(Spiral of Knowledge)[12]。知識的螺旋包含社會化、外化、整合、內化四種知識的轉換 模式,而軟體發展的過程本身也符合知識螺旋的特性。根據這四類轉換在軟體知 識管理所扮演的角色與軟體發展者在各項轉換中所必須執行的活動,可整理軟體 知識管理模型如圖 2 - 2 所示[2]:

圖 2 - 2 軟體知識管理模型

由上圖可知,軟體知識管理的主要活動包括:

• 創造(Create):創造新的、有價值的知識是知識管理主要的目的之一,但並非 所有創新都是無中生有,許多知識是透過合併或更改舊有的知識,進而賦予 其新的意義與價值。因此在創造的過程中首要的步驟是確認(Identify)欲得到的 知識是什麼,並具體詳細地加以指明(Specify)。

• 搜尋(Search):在目前知識爆炸的時代,要精確的從數以萬計的資料中找出所 要的知識並不容易,因此搜尋的機制也是非常重要的一環。關於搜尋的研究 與作法很多,但主要的想法是根據想要找的條件,選擇(Choose)適合的分類,

再搜尋現有的知識庫,並從搜尋的結果中挑選出(Select)需要的部分。

• 調適(Adapt):從前一步驟搜尋得到的知識通常與發展者實際所想要的知識,

不管在內容或者形式上都可能會有些落差,因此在不破壞原來知識的情況 下,先將之取出複製(Copy)一份,再經過適當的修改(Modify)或合併以符合實 際的情境所需。

• 使用(Use):知識的使用可說是知識循環中最重要的部分,各項步驟的最終目 的就是希望讓知識能被有效的應用(Apply)到實際狀況中,進而發揮知識的價 值。

• 收集(Collect):擷取(Acquire)發展過程中可再應用的產物、相關文件、經驗等 知識,整理成特定的適當形式(Formalize),抽出(Extract)並儲存至知識庫中。

• 分類(Classify):組織(Organize)知識,放入適當的分類與索引(Index),並合併 (Integrate)其中相似的部分。同時在分類過程中也可能需要動態適時的進行知 識結構的調整。

• 共享(Share):透過分派(Distribute)與出版(Publish)的機制來擴散知識,進而達 成知識的共享。其中又可分為動態的散佈,主動地將重要的知識即時傳遞給

需要的人員;以及靜態的陳列,讓發展者有需求的時候再去尋找。這兩種方 式的差別在於時間、對象與知識內容的取捨。

• 評估(Evaluate):透過使用者的討論、評分、測量、回饋等方式對知識進行分 析與估價(Assess),以便瞭解知識使用和分佈的情形,淘汰其中過時以及無用 的部分,並將重要或使用率高的知識擺在明顯、容易取得的位置。

在這些軟體活動中,收集(Collect)、分類(Classify)與共享(Share)是軟 體知識庫的主要工作,而這些工作的效率又與軟體知識分類方法有極大的關聯,

故軟體知識分類方法是決定軟體知識庫效率的重要關鍵,亦是本研究所探討的主 題。