第三章、 「問題–解法」軟體知識分類法之設計構想
3.1 軟體技術知識的本質
3.1.3 書本知識本質
書本知識對軟體開發者而言也是非常重要的知識來源。由於書本知識通常是 一般性介紹,故書本知識的產生是在相關議題技術論文發表到一定程度之後才會 出現,並非最前瞻的知識,其探討的內容也不會像技術報告或技術論文那樣深 入,相反地是側重介紹及教學的功能,這對想要了解或學習特定主題的軟體工程 師而言特別有幫助,一般人對一個不熟悉的領域通常都是透過書本知識來學習 的。分析書本知識的特性將能夠幫助想要學習的軟體工程師快速找到所需的教 材。
以知識產生的目的來看,書本知識是以介紹及教學為主要目的。各個主題都 會有所謂的入門書籍,若此主題的知識較繁多,則可能會有進階書籍。無論是入
門書籍或進階書籍,書本知識都是偏向介紹性質的。也因此,書本知識不會針對
(Table of Content)、序言(Preface)、簡介(Introduction)、章節內容(Chapters)
以及索引(Index)。序言(Preface)的內容通常只是說明此書著作的背景以及適 當哪些讀者,並不適合用來描述書本知識的內容。簡介(Introduction)部份是對 此主題做一簡單描述,適合對此主題沒概念的使用者閱讀,但並不適合用來描述 此書的內容架構。章節內容(Chapters)則是書本知識的主體,這項特性有助於 我們對書本知識架構的理解;但由於章節的定義並沒有制式的規範,因此我們需 要更佳的表示方法。索引(Index)其實可以看成是書本知識的關鍵字(Keyword), 但因為索引也是缺乏定義及關聯性,因此一本書出現了特定的關鍵字(比如 compiler optimization),其內容仍無法預測,比如此書可能是介紹 compiler optimization 有哪些方法,也可能是在談 computer architecture 的時候提到 compiler optimization 的重要性等。
書本知識是圍繞在一特定主題(subject)之上,一般而言這個主題都會是書 名,例如Software Engineering、System Programming 等。在主題之下便是此書所 介紹的議題(topic),依不同的書本特性,一本書可能以一個章節(chapter)或 數個章節來討論此議題,一個議題下的內容依其本質可分為三類:
(1) 介紹此議題的章節內容:在討論介紹的過程中,一個議題可能會分成數 個 子 議 題 ( sub-topic ), 子 議 題 又 可 能 再 細 分 為 更 小 的 議 題
(sub-sub-topic),這些內容具有階層架構的特性,例如 Roger Pressman 的 Software Engineering[38],針對 Project Management 這個議題寫了四
章 , 這 四 章 可 分 為 四 個 子 議 題 , 分 別 是 Project Metrics 、 Risk Management、Project Planning、Project Scheduling 等。又如 Richard Johnsonbaugh 與 Martin Kalin 的 Object-Oriented Programming in
C++[39] 一 書 , 在 Inheritance 這 個 議 題 上 提 到 了 四 個 子 議 題 : Constructor、Polymorphism & Virtual Function、Destructor、Multiple Inheritance 等。
(2) 對特定議題的解法或方法:某些議題的介紹並不是分為子議題,而是針 對此議題介紹各種不同解法或方法。這種類型的內容與前兩節討論的技 術論文、技術報告雖然有些不同,但其本質仍屬「問題導向」,因此可 採用上述的問題與解法來加以描述。在這裡問題即是書本討論的議題,
而解法則是書本談到的解法或方法。例如 Hafedh Mili 等的 Reuse-based Software Engineering [40]一書中對 Domain Analysis 提出了如下的方 法:Feature-Oriented Domain Analysis(FODA)、Organization Domain Modeling(ODM)、Join Object-Oriented Domain Analysis(JODA)、Reuse Library Process Model(RLPM)、Domain Analysis and Design Process
(DADP)、Domain-Specific Software Architecture(DSSA),又或者演算 法的書對排序方法介紹了如下的方法:Bubble Sort、Insertion Sort、Binary Sort、Quick Sort、Shell Sort 等。
(3) 介紹此議題所提供的範例:由於書本知識是以介紹為主要目的,因此在
(1) 主題(Subject):主題即是一本書所探討的主要內容,通常會是書名。
主題可以籍由一良好的分類架構將軟體技術知識的主題分類,使其定義 標準化。
(2) 議題(Topic):一本書的主題下會包含幾個主要的議題。這些議題下可 能又可細分為子議題,由於這些子議題的內容組成主要議題,故亦可看 成主要議題包含數個子議題。書本知識的議題間可能會有閱讀上的順序 關係,例如閱讀Object-oriented analysis 跟 Object-oriented design 之前應 先閱讀Object-oriented concept,因此他們會有依存的關係。
(3) 解法(Approach):如前所述,某些議題的介紹並不是分為子議題,而 是針對此議題介紹各種不同解法或方法,這類型便以「解法」定義。
書後的索引(Index)雖然也具有相當的參考價值,但由於索引實在太過龐 雜,若索引中的每個字都做為書本的關鍵字,反而在描述上增加許多困難,且看 不出書本內容的重點。而上述的三項關鍵字分類係依書本知識的架構得來,故以 此三類關鍵字便能對書本知識做有效率的描述,書本知識關鍵字可以圖 3 - 6 表 示:
Subject
Topic Topic Topic
Topic Topic Topic Topic Topic
Topic Topic Approach
Approach
圖 3 - 6 書本關鍵字示意圖
以 Roger Pressman 的 Sof 針對Project Management
tware Engineering 一書中
議題的內容以上述的方式分類,便可得到如圖 3 - 7 的結果:
圖 3 - 7 書本關鍵字表示法範例(software engineering)
件可能因為討論的主題(Subject)相同,因而會在知識庫中分在同一類型中。
此時知識庫必須整合這些書本知識提供給使用者選擇。在主題之下有書本的議題
(Topic),故多本書的議題可以整合後取其聯集,讓使用者了解此主題下有哪些 議題,例如介紹Data Structure 的書,有的書提到 List、Queue、Stack、Hash Table,
有的書提到Tree、Hash Table 等,則知識庫可整合這些議題供使用者參考,若多 本 書 談 到 了 同 一 議 題 , 則 知 識 庫 可 列 出 各 書 在 此 議 題 下 的 子 議 題 或 解 法
(Approach)供使用者比較。這樣做對使用者來說非常方便,因為他可以快速掌 握多本書的概略內容,找出有興趣的議題,進而取得適合的知識。
本知識視為具有「問題」與「解答」特性的知識。因為對書本知識而言,使
Project Management
Project Metrics Risk Management Project Planning Project Scheduling
Software Scope Project Estimation Make/Buy Decision
Problem-based Estimation FP-based Estimation
Software Engineering
Top
Top pic Topic
ic
Approach proac p
ic
ic To
Topic
Subject
Topic Topic Top
Ap h A proach
LOC-based Estimation
用者的問題通常就是:特定主題應看哪本書?特定議題的介紹?特定議題有哪些
傳統的知識分類方法大都依知識所談到的內容加以分類(如 Taxonomy、
Face
依上一節所分析的,技術論文及技術報告皆是「問題導向」的知識,其目的 是為
讓使用者快速掌握書本知識的內容,並可對特定主題、特定議題的書本知識 進行概略的比較,增進書本知識的效率。
ted Classification)或描述(如 Case-based Reasoning、Ontology),但鮮少依 知識特性及使用者的需求考慮。因此當知識量累積過多時,常常讓使用者無法快