---
# System prepended metadata

title: SA系統分析與設計(Study)

---

# SA系統分析與設計(Study)

https://hackmd.io/@learnik/ByKhCkToq

# 物件導向的模型與技術
* 對於資料庫應用而言，物件導向帶來兩層面影響:
    * 應用系統的資料模型:物件導向可提供較佳的資料描述環境與方法 ex.電腦輔助設計與製造
    * 應用系統的開發:GUI藉由物件導向，使軟體元件的再用率提高，設計圖型化介面時，就可以建立在物件基礎上；所謂「快速應用系統開發RAD」-要靠現有軟體元件堆砌才可達成

# O-O SA流程圖
https://gitmind.com/app/docs/f50o7y2v



## 系統開發方法
* 結構化分析:SDLC，與PM配合
* 物件導向分析:物件用來表示人、物、事件or交易，階段間有較多的互動(O-O)
* 快捷法:密集的分組分工，成員須有較高的技術與溝通能力(JIRA系統的便條貼Dashboard)

## SDLC 系統設計發展週期
### 五階段
Phase1. Planning 規劃
Phase2. Analysis 分析
Phase3. Design 設計
Phase4. Implementation 建置
Phase5. Support & Security 安全與支援
#### Phase 1.規劃
| 說明 |系統請求，找出系統(現有系統分析)/企業流程(企業個案分析)現有問題以及想要調整的方案，
| -------- | -------- 
| 目的 |做出初步調查，評估與IT相關的機會與問題 EX.可能做到甚麼程度、會有甚麼問題
| 可交付成果|初步調查報告  
#### Phase 2.分析
| 說明 |建立新系統的邏輯模型
| -------- | -------- 
| 目的 |理出需求思緒，需求塑模、資料與流程塑模、物件塑模、開發策略，為了了解系統的商業程序
| 可交付成果|系統需求文件SRD，說明客戶需求、成本、效益、策略
| 步驟|2.1需求定義->2.2功能塑模->2.3結構塑模->2.4行為塑模

## 標準化物件導向分析程序
![](https://hackmd.io/_uploads/rkHKWDNI2.png)
| 流程 | 說明| 最終文件 |
| -------- | -------- | -------- |
| 2.1需求分析| 了解現有系統與新系統間的差異|系統規劃書/系統分析文件 |
| 2.2功能塑模 | 針對商業程序找出使用案例|1.使用案例圖 2.活動圖 |
| 2.3結構塑模 | 找出基礎類別、類別的屬性、類別間的關係|1.類別圖 2.物件圖 |
| 2.4行為塑模 | 找出類別的行為|1.序列圖 2.溝通圖/互動圖 3.行為狀態機 |

##### 2.1需求分析
* 需求分析的結果就是系統模型system modeling:資料流向圖DFD、語意資料模型Semantic data model
    * 資料流向圖DFD:得知模組之間輸入、輸出的資料
      ![](https://hackmd.io/_uploads/SJ4IvTLO3.png)

    * 語意資料模型Semantic data model:描述資料的型態與資料之間的關係
      ![](https://hackmd.io/_uploads/SkBcDp8O2.png)
* 蒐集需求的技術(現代化方式)
    * 聯合的應用設計(Joint Application Design,JAD):把跟專案相關的分析師、使用者、管理者都找來，由SA主導進行互動跟溝通
        * 選擇參與者->設計JAD議程->準備工作->進行JAD會議->後續的追蹤
    * 群組支援群組(group support system):解決JAD多人會議不敢發言的問題。EX.讓JAD參與者透過電腦匿名地輸入自己的意見
    * CASE工具
    * 雛型化
* 系統規劃書架構:

| 主要內容項目 | 說明 |
| -------- | -------- |
| 工作計畫|擬定專案工作計畫|
| 可行性分析|經濟、技術、組織可行性| 
| 需求定義|列出需求分析所得到的需求定義| 
| 功能模型|使用案例圖、活動圖| 
| 結構模型|CRC卡、類別圖、物件圖| 
| 行為模型|序列圖、溝通圖、行為狀態機、CRUDE陣列| 
| 附錄|問卷調查結果、訪談紀錄、統計資料等| 



##### 2.2功能塑模
![](https://hackmd.io/_uploads/S190xvNI3.png)
* 描述商業程序以及IS與周圍環境之間的互動

##### 2.2.1 使用案例圖 Use case
* 了解需求的過程中一邊建立Use case，記載使用者使用系統的方式
    ![](https://hackmd.io/_uploads/Skp_yMddh.png)
    * 從圖形化使用者介面的雛型來找尋
    * 從目前使用中的軟體系統來找尋
![](https://hackmd.io/_uploads/rJMFgzdd2.png)

![](https://hackmd.io/_uploads/B13vuG_Oh.png)

1. 判斷角色與使用案例:有哪些類型的使用者? 這些使用者分別會使用哪些功能(使用案例)?
2. 繪製系統邊界
3. 找出角色/使用案例的關係
    * (2.1)結合關係:使用者使用某功能，user與use case間就存在結合關係。
        * ![](https://hackmd.io/_uploads/HyXIUf__h.png)
    * (2.2)包含關係:將一use case再切割
        * ![](https://hackmd.io/_uploads/Hkc3IM_On.png)
    * (2.3)延伸關係:延伸功能，通常依附在一個use case裡
        * ![](https://hackmd.io/_uploads/Bkgmvz__n.png)
    * (2.4)一般關係:繼承關係
        * ![](https://hackmd.io/_uploads/HJ7dvGOOh.png)
4. 找出多重性:1對1/1對多/多對多

##### 2.2.2 活動圖
* 擺脫物件的概念，完全以描述商業程序的功能為目標，且有能力描述持續程序的複雜性 EX.同時執行、分岔的條件
![](https://hackmd.io/_uploads/ByDIbUFuh.png)
![](https://hackmd.io/_uploads/HJwXXIF_n.png)
* 控制流:描述執行路徑，只能連結動作或活動
* 物件流:描述物件的流動，一邊連物件一邊連動作/活動
![](https://hackmd.io/_uploads/HyEjQ8Y_3.png)
* 繪製步驟
    1. 選擇商業程序(從案例圖中找程序)
    2. 找出活動
    3. 找出控制流與節點
    4. 找出物件流與節點
    5. 配置內容與繪製

##### 2.2.3 使用案例描述 use-case descriptions
* 詳細描述商業程序的正式文件，涵蓋了原本確認的需求、使用案例圖(Overview)、活動圖(Detail)
![](https://hackmd.io/_uploads/SkzlHOFdn.png)
* 建立流程
    1. 選擇使用案例
    2. 建立概略的描述
    3. 描述正常的事件流程
    4. 檢查事件流程
    5. 確認例外的事件流程
    6. 檢視使用案例描述
    7. 反覆進行上述步驟

##### 2.2.4 功能模型
* 使用案例圖+使用案例描述+活動圖=功能模型
* 規則
    1. 使用案例描述中的事件<-->活動圖的active/activity
    2. 活動的物件會在使用案例描述中說明
    3. 使用案例描述中事件的順序<-->活動圖中的活動順序
    4. 使用案例描述1<-->1使用案例
    5. 使用案例描述的角色都會出現在使用案例圖中
    6. 使用案例描述中敘述的關係應該都有出現在使用案例圖中

###### * BP(Business Progress)企業流程-報價系統
![](https://hackmd.io/_uploads/H1wtGuj43.png)


###### * FDD(Function Decomposition Diagram)功能分解圖
建構商業功能模型，顯示功能之間的上下關係，並進而轉化為應用程式中的程式模組

![](https://hackmd.io/_uploads/HyPoD4s4h.png)
---
![](https://hackmd.io/_uploads/H1bvNEE8h.png)


###### * DFD(Data Flow Diagram, DFD)資料流程圖
參考連結
https://ithelp.ithome.com.tw/m/articles/10267483

##### 2.3 結構塑模
![](https://hackmd.io/_uploads/B1af-v4U3.png)
*

| INPUT|PROCESS|OUTPUT|
| -------- | -------- | -------- |
| 使用案例圖與敘述|文本分析 |找出結構模型所需元素|

* 文本分析
1.普通名稱=物件形成的類別
2.專有名詞=類別的案例
3.動詞=操作
4.Be動詞=物件與類別之間的關係
5.副詞=關係或操作的屬性

---


* 結構模型透過**CRC卡**、**類別圖**、**物件圖**來建立
    * CRC卡:試著找出類別及其相關資訊
    * 類別圖
        * 類別:物件的特徵，分為實體類別和抽象類別
            * 實體類別concrete classes:ex.學校裡的老師、學生
            * 抽象類別abstract classes:ex.用人員類別來集合老師類別與學生類別的共同特性
            * **領域類別domain classes:與應用領域的事物相關的類別(The most important!!!)**(找出類別，以及對類別的屬性、操作加以定義)
            * 使用者介面類別user-interface classes
            * 資料結構類別data structure classes
            * 其他類別:檔案結構類別、作業環境類別、文件類別
        * 關係
           | 分類|說明 | 例子 |
           | -------- | -------- | -------- |
           | 一般關係| a-kind-of，也會衍伸出父類別跟子類別|老師與學生(子類別)都屬於人(父類別/超類別)這個類別|
           | 聚集關係|a-part-of|引擎是車子的一部分|
           | 結合關係|不屬於前者的關係|學生與課程|

    * 物件圖
        * 物件:類別的案例(instance)
* 結構模型描述的重點:系統建立與其使用的**物件**
* 先建領域模型(domain model)->再建成結構模型
    * 領域模型:交付概念式的類別圖，描述軟體系統使用的資料，以邏輯組織的方式來描述
![](https://hackmd.io/_uploads/r1rwdtfc2.png)


##### 2.4行為塑模
![](https://hackmd.io/_uploads/ByxB-P4U2.png)


#### Phase 3.設計
| 說明 |設計使用介面，資料設計(識別Input->Process->Output、內外部控制)
| -------- | -------- 
| 目的 |讓user清楚看到需求具體化，與相關解決方案
| 可交付成果|系統設計規格(讓管理者/user審查)

##### 資料庫設計
###### Step1選擇儲存體的格式
檔案系統/**關聯式資料庫**(廣為使用)/物件關聯式資料庫/物件導向資料庫
###### Step2將問題領域類別對應到關聯式資料庫
###### Step3最佳化儲存體

#### Phase 4.建置
| 說明 |建置新系統，含Coding,Testing,Documented,Installed
| -------- | -------- 
| 目的 |交付一套功能完整、運作正常、文件完整的系統
| 可交付成果|功能齊全的系統、操作手冊
#### Phase 5.安全與支援
| 說明 |進行系統維護、加強、資安、更版
| -------- | -------- 
| 目的 |持續性的維護
| 可交付成果|運行無阻的系統
