2015年計算機三級信息管理考試要點
在明確了用戶的需求以后,下一步的任務就是對未來的軟件系統進行設計。軟件設計通常可分為概要設計和詳細設計。概要設計的任務是確定軟件系統的結構,進行模塊劃分,確定每個模塊的功能、接口以及模塊間的調用關系。詳細設計的任務是為每個模塊設計實現的細節。此外,在概要設計階段還應對全局數據結構進行設計,詳細設計階段還應對局部數據結構進行設計。有的設計方法不區分概要設計和詳細設計,統稱為軟件設計。
人們在開發過程中,總結出許多軟件設計的概念和原則,這些概念和原則對提高軟件的設計質量有很大的幫助。
1.抽象
抽象是指忽視一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象是認識復雜問題的過程中人類使用的最有力的思維工具,它抽取出事物的本質特性而暫時不考慮它的細節。
軟件工程中從軟件定義到軟件開發要經歷多個階段,在這個過程中每前進一步都可看作是對軟件的抽象層次的一次細化。抽象的最低層次就是實現該軟件的源程序代碼。在進行模塊化設計時可以有多個抽象層次,最高抽象層次的模塊用概括的方式敘述問題的解法,較低抽象層次的模塊是對較高的抽象層次模塊對問題解決描述的細化。過程抽象和數據抽象是常用的兩種主要抽象手段。
過程抽象是指任何一個完成明確功能的操作都可被使用者當作單個的實體看待,盡管這個操作實際上可能由一系列更低級的操作來完成。過程抽象常常也稱為功能/子功能抽象。例如函數、子程序。
數據抽象定義了數據類型和施加于該類型的操作,并限定了對象值的范圍,只能通過使用這些操作修改和觀察這些數據,例如抽象數據類型。
2.模塊化
模塊化是指將一個待開發的軟件分解成若干個小的簡單的部分———模塊,每個模塊可獨立地開發、測試,最后組裝成完整的程序。這是一種復雜問題的“分而治之”的原則,模塊化的目的是使程序的結構清晰,容易閱讀,容易理解,容易測試,容易修改。
模塊是指執行某一特定任務(也可以是實現某一特定的抽象數據類型)的數據結構和程序代碼。一個模塊有它的外部特征和內部特征。外部特征包括模塊的接口(即它的輸入/輸出參數,引用的全局變量和它需調用的其他模塊)和模塊的功能,內部特征包括模塊的局部數據和實現該模塊的程序代碼。調用一個模塊只需知道它的外部特征,而不必了解其內部特征。
3.信息隱蔽
信息隱蔽是開發整體程序結構時使用的法則,即將每個程序的成分隱蔽或封裝在一個單一的設計模塊中,定義每一個模塊時盡可能少地顯露其內部的處理。
在設計時首先列出一些可能發生變化的因素,在劃分模塊時將一個可能發生變化的因素隱蔽在某個模塊的內部,使其他模塊與這個因素無關。在這個因素發生變化時,我們只需修改含有這個因素的模塊,而與其他模塊無關。
隱蔽的對象可以有:什么樣的決策、可能修改的決策、數據結構的內部連接以及對它所做的操作細節、內部特征碼、與計算機硬件有關的細節等。
信息隱蔽原則對提高軟件的可修改性、可測試性和可移植性都有重要的作用。
4.模塊獨立
模塊獨立是指每個模塊完成一個相對獨立的特定子功能,并且與其他模塊之間的聯系簡單。衡量模塊獨立程序的度量標準有兩個:耦合和內聚。耦合是指模塊之間聯系的緊密程度。耦合度越高則模塊的獨立性越差。內聚是指模塊內部各元素之間聯系的緊密程度。例如一個完成多個功能的模塊的內聚度就比完成單一功能的模塊的內聚度低。內聚度越低模塊的獨立性越差。因此,模塊獨立就是希望每個模塊都是高內聚低耦合的。
(1)耦合
兩個模塊之間的耦合方式通常有如下7種,下面按它們的耦合度從低到高的次序依次作介紹。①非直接耦合:非直接耦合是指兩個模塊沒有直接的聯系,它們中的任一個都能不依賴于對方而獨立地工作。
②數據耦合:數據耦合是指兩個模塊借助于參數表傳遞簡單數據。
③標記耦合(stamp coupling):當一個數據結構的一部分(如記錄的一部分)借助于模塊接口被傳遞時就發生標記耦合。
④控制耦合:控制耦合指兩個模塊間傳遞的信息中包含用于控制模塊內部邏輯的控制信息。⑤外部耦合:當模塊與軟件以外的環境有關時就發生外部耦合。例如,輸入/輸出把一個模塊與特定的設備、格式、通信協議耦合在一起。
⑥公共耦合:多個模塊引用一全局數據區的模式稱為公共耦合。例如FORTRAN語言中的COMMON語句、C語言中的external數據類型、一個磁盤文件等都是全局數據區。⑦內容耦合:內容耦合指兩上模塊之間出現了下列情況之一:
·一個模塊訪問另一個模塊的內部數據;
·一個模塊不通過正常入口轉到另一模塊的內部;·兩個模塊有一部分程序代碼重疊;
·一個模塊有多個入口。
(2)內聚
模塊的內聚種類通常可分成7種,下面按內聚度從低到高的次序依次作介紹。
①偶然內聚:如果一個模塊完成一組任務,這組任務彼此間即使有關系,其關系也是很松散的,這個模塊屬于偶然內聚。
②邏輯內聚:如果一個模塊完成邏輯上相關的一組任務,這個模塊是邏輯內聚的。例如,產生與類型無關的全部輸出的模塊。
③瞬時內聚(temporal cohesion):如果一個模塊所包含的任務必須在同一時間間隔內執行,這個模塊屬于瞬時內聚。例如初始化模塊。
④過程內聚:如果一個模塊的處理元素是相關的,而且必須按特定的次序執行,這個模塊屬于過程內聚。
⑤通信內聚:如果一個模塊的所有處理元素集中在一個數據結構的區域上,該模塊屬于通信內聚。例如,一個模塊中的所有處理元素使用同一輸入數據。
⑥順序內聚:如果一個模塊的處理元素是相關的,而且必須順序執行,這個模塊屬于順序內聚。⑦功能內聚:如果一個模塊完成一個單一的功能,模塊中的各部分在此目標下協同工作,而且都是為完成這一功能而不可缺少的,那么這個模塊是功能內聚的。
5.模塊分解時應遵循的準則
(1)滿足信息隱蔽原則。
(2)盡量使得模塊的內聚度高,模塊間的耦合度低。
(3)模塊的大小適中(通常一個模塊以50~100個語句行為適宜)。
(4)模塊的調用深度不宜過大。一個模塊A可以調用另一模塊B,模塊B還可調用模塊C,稱模塊A直接調用模塊B,模塊A間接調用模塊C,被間接調用的模塊還可調其他模塊,這樣可形成一棵調用樹,我們把以某個模塊為根結點的調用樹的深度稱為該模塊的調用深度。
(5)模塊的扇入應盡量大,扇出不宜過大。一個模塊的扇入是指直接調用該模塊的上級模塊個數。一個模塊的扇出是指該模塊直接調用的下級模塊的個數。扇入大表示模塊的復用程度高,扇出大表示模塊的復雜度高。
(6)設計單入口和單出口的模塊。
(7)模塊的作用域應在控制域之內。模塊的作用域是指受該模塊內一個判定影響的所在模塊的集合。模塊的控制域是指該模塊本身以及被該模塊直接或間接調用的所有模塊的集合。在設計時,作用域應是控制域的子集,作用域最好是做出判定的模塊本身以及它的直屬下級模塊(直接調用的模塊)。
(8)模塊的功能應是可以預測的,功能可預測是指對相同的輸入數據能產生相同的輸出。