跳去內容

軟件設計

出自維基百科,自由嘅百科全書
(英文) 做軟件設計嗰陣,往往會畫好似噉嘅架構圖,描繪隻軟件內部要點樣運作,諗掂先至實際郁手整。

軟件設計軟件工程上嘅其中一個工序,講緊仲未郁手寫源碼實施或者修改隻軟件,先行對隻軟件嘅運作方式做計劃。軟件設計呢個工序,要產生一套有關隻軟件內部點運作概念結構,通常仲會寫低一啲設計文件,團隊其後想睇返嗰陣就可以參考。[1]

要做軟件設計,要處理軟件架構用家介面設計等嘅問題,要達致抽象化同埋模塊化,目標係設計出能夠正確運行得嚟又易用嘅軟件。呢個工序牽涉到跨層次嘅抽象化同埋用家體驗方面嘅思考。

軟件設計嘅前一步係要確立軟件需求。設計度好咗,下一步就係軟件建造,即係實際製作隻軟件。

基本概念

[編輯]
内文:軟件設計
睇埋:複雜系統

設計本身可以定義為一種計劃構思嘅過程,界定系統或者產品要有咩特性,從而達到使用者想要嘅目的。由工程學角度睇,設計唔淨只係畫圖咁簡單,而係成套方法,用嚟將需求轉化為可以攞去實行嘅方案,具體噉描述個系統或者件產品(最後出嘅 artifact [註 1])要有邊啲結構同埋組件,過程中會產生流程圖虛擬碼、用統一製模語言描述嘅模型... 等等,而且呢啲嘢冚唪唥都會紀錄在案。响呢個過程中,設計者需要平衡效能、成本同埋可用度等嘅多方考量,設計出最啱用嘅軟件系統[2]

做軟件設計,不時要處理一啲棘手問題[註 2],意思係指問題嘅一類,特徵係因為啲需求唔完整、互相矛盾、或者經常改變等... 而難以解決,甚至根本冇可能徹底噉解決,唔會有唯一嘅解決方案。棘手問題之所以難搞,好多時係由於啲嘢之間存在複雜嘅相互依存關係,而且一路解仲可以會揭露出其他之前未諗到嘅問題。對於棘手問題,做設計嘅人往往要靠經驗同埋權衡取捨,唔會有咩簡單方法可以「推理」或者「計」個答案出嚟[3]

唔同軟件嘅設計可以好唔同,但係最基本上都會用到呢啲概念,引導工程師處理複雜嘅難題:

軟件架構

[編輯]
内文:軟件架構

軟件架構係指系統最高層次嘅結構設計,包括元件同埋元件之間有咩關係。喺呢個階段,設計者要界定一啲大體嘅方向。

設計模式[註 3]係指緊針對反覆出現嘅設計問題而諗出嚟嘅通用解法,唔係現成嘅源碼,而係一套可重用嘅設計結構同協作關係。例如原型模式就係一種常用嘅設計模式,重重點係:採用物件導向編程,想建構物件嗰陣唔會由零開始,而係攞某件物件嚟做「板」,透過「複製」噉嘅方法產生新嘅實例。呢種做法喺遊戲程式入便就成日用到,好多時要高速生成相似(但可能稍有差異)嘅物件,諸如係遊戲入便嘅敵人、子彈、或者道具呀噉。原型模式可以避開昂貴嘅初始化,而且容易配合物件導向編程嚟用[4]。原型模式係一種設計模式,而非某一套特定嘅源碼,好多唔同樣嘅源碼都可以係體現緊原型模式,原型模式嘅一個可能嘅虛擬碼例子,可以想像用噉嘅方法產生遊戲入便嘅虛擬敵人:

 # 原型介面
 介面 原型 { 複製(): 原型 }
 
 # 建立「敵人」呢種物件嘅原型
 類 敵人 implements 原型 {
   血量, 速度, 模型, ...
   複製(): 敵人 { 新敵人 = new 敵人(); 新敵人.血量 = 呢個.血量; ...; return 新敵人 }
 }
 
 # 原型登記冊,記住啲「敵人」物件
 類 原型庫 { 儲存; 登記(名, 原型); 產生(名): 原型 = 儲存[名].複製() }
 # 初始化樣板
 原型庫.登記("普通敵人", new 敵人(血量=100, 速度=3, 模型=獸人, ...))
 # 遊戲中生成
 快敵 = 原型庫.產生("普通敵人"); 快敵.速度 = 5; 世界.加入(快敵)

用家介面

[編輯]
典型嘅圖像用家介面選單

用家介面(簡稱 UI)係指用家同電腦系統軟件互動嘅渠道同方式。用家介面負責將系統功能以人類易明同操作嘅形式呈現出嚟,同時亦接收用家俾嘅輸入。用家介面可以包括好多唔同形式,諸如係命令行介面全靠打字同出字嚟同用家互動、圖像用家介面用圖像同 click 等嘅方式嚟同部機互動,而自從二十一世紀起,人工智能愈嚟愈識處理自然語言自然語言用家介面亦應運而生。[5]

用家介面設計有幾個主要挑戰。做用家介面設計,設計師往往會想達致高易用度,但係要做到易用並唔簡單。設計師需要估計用家喺本能上會點樣操作,例如佢哋直覺上會撳咩掣、用咩姿勢,而呢啲資訊好多時都要經過測試先可以確認[6]:Ch 4。設計師又要引導用家,介面要清楚俾提示,畫面唔好太花,等用家能夠一睇就知跟住要撳邊度,嚴防用家迷失或者出錯。要為用家提供即時嘅回饋。然後設計師仲要處理用家多樣性嘅問題:唔同用家喺年齡文化語言、經驗水平以至身體能力... 等方面都有差異,所以設計要兼顧可及度,例如假如介面用到唔同顏色嘅掣,就可能要提供幾款唔同嘅色可以揀,方便色盲嘅用家使用。

設計用家介面嗰陣,可以用到紙本原型

質量評估

[編輯]

做軟件設計,需要進行質量分析同評估,常見嘅評估準則有:

評估過程中會用到認知走查法、製作原型同做測試以及故障樹分析呀噉。

關鍵議題

[編輯]

根據 SWEBOK,軟件設計上嘅重要議題仲有以下呢啲:[7]

等等。

睇埋

[編輯]

註釋

[編輯]
  1. 粵拼粵化口語音aa1 ti4 fek4
  2. 粵音:wicked problems
  3. 英文design pattern

引咗

[編輯]
  1. Ralph, P. and Wand, Y. (2009). A proposal for a formal definition of the design concept. In Lyytinen, K., Loucopoulos, P., Mylopoulos, J., and Robinson, W., editors, Design Requirements Workshop (LNBIP 14), pp. 103–136. Springer-Verlag, p. 109 DOI:10.1007/978-3-540-92966-6_6.
  2. Soegaard, Mads (2018). "What is Design Thinking and Why Is It So Popular?" 計思維係乜?點解咁潮?. The basics of user experience design 家體驗設計入門 (美國英文). Interaction Design Foundation. pp. 10–20.
  3. Johnston, Jane; Gulliver, Robyn (2022). "What are wicked problems?". Commons Social Change Library.
  4. Duell, Michael (July 1997). "Non-Software Examples of Design Patterns". Object Magazine. 7 (5): 54.
  5. H. Washizaki, eds., Guide to the Software Engineering Body of Knowledge (SWEBOK Guide), Version 4.0, IEEE Computer Society, 2024; www.swebok.org. Ch 2.4 User Interface Design
  6. (英文) Soegaard, M. (2018). The basics of user experience design. Interaction Design Foundation,書名粵譯為用家體驗設計嘅基本,屬於入門書。
  7. H. Washizaki, eds., Guide to the Software Engineering Body of Knowledge (SWEBOK Guide), Version 4.0, IEEE Computer Society, 2024; www.swebok.org. Ch 2.2 Key issues

資源

[編輯]

  • (英文) Roger S. Pressman (2001). Software engineering: a practitioner's approach. McGraw-Hill.