# 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行為塑模
## 標準化物件導向分析程序

| 流程 | 說明| 最終文件 |
| -------- | -------- | -------- |
| 2.1需求分析| 了解現有系統與新系統間的差異|系統規劃書/系統分析文件 |
| 2.2功能塑模 | 針對商業程序找出使用案例|1.使用案例圖 2.活動圖 |
| 2.3結構塑模 | 找出基礎類別、類別的屬性、類別間的關係|1.類別圖 2.物件圖 |
| 2.4行為塑模 | 找出類別的行為|1.序列圖 2.溝通圖/互動圖 3.行為狀態機 |
##### 2.1需求分析
* 需求分析的結果就是系統模型system modeling:資料流向圖DFD、語意資料模型Semantic data model
* 資料流向圖DFD:得知模組之間輸入、輸出的資料

* 語意資料模型Semantic data model:描述資料的型態與資料之間的關係

* 蒐集需求的技術(現代化方式)
* 聯合的應用設計(Joint Application Design,JAD):把跟專案相關的分析師、使用者、管理者都找來,由SA主導進行互動跟溝通
* 選擇參與者->設計JAD議程->準備工作->進行JAD會議->後續的追蹤
* 群組支援群組(group support system):解決JAD多人會議不敢發言的問題。EX.讓JAD參與者透過電腦匿名地輸入自己的意見
* CASE工具
* 雛型化
* 系統規劃書架構:
| 主要內容項目 | 說明 |
| -------- | -------- |
| 工作計畫|擬定專案工作計畫|
| 可行性分析|經濟、技術、組織可行性|
| 需求定義|列出需求分析所得到的需求定義|
| 功能模型|使用案例圖、活動圖|
| 結構模型|CRC卡、類別圖、物件圖|
| 行為模型|序列圖、溝通圖、行為狀態機、CRUDE陣列|
| 附錄|問卷調查結果、訪談紀錄、統計資料等|
##### 2.2功能塑模

* 描述商業程序以及IS與周圍環境之間的互動
##### 2.2.1 使用案例圖 Use case
* 了解需求的過程中一邊建立Use case,記載使用者使用系統的方式

* 從圖形化使用者介面的雛型來找尋
* 從目前使用中的軟體系統來找尋


1. 判斷角色與使用案例:有哪些類型的使用者? 這些使用者分別會使用哪些功能(使用案例)?
2. 繪製系統邊界
3. 找出角色/使用案例的關係
* (2.1)結合關係:使用者使用某功能,user與use case間就存在結合關係。
* 
* (2.2)包含關係:將一use case再切割
* 
* (2.3)延伸關係:延伸功能,通常依附在一個use case裡
* 
* (2.4)一般關係:繼承關係
* 
4. 找出多重性:1對1/1對多/多對多
##### 2.2.2 活動圖
* 擺脫物件的概念,完全以描述商業程序的功能為目標,且有能力描述持續程序的複雜性 EX.同時執行、分岔的條件


* 控制流:描述執行路徑,只能連結動作或活動
* 物件流:描述物件的流動,一邊連物件一邊連動作/活動

* 繪製步驟
1. 選擇商業程序(從案例圖中找程序)
2. 找出活動
3. 找出控制流與節點
4. 找出物件流與節點
5. 配置內容與繪製
##### 2.2.3 使用案例描述 use-case descriptions
* 詳細描述商業程序的正式文件,涵蓋了原本確認的需求、使用案例圖(Overview)、活動圖(Detail)

* 建立流程
1. 選擇使用案例
2. 建立概略的描述
3. 描述正常的事件流程
4. 檢查事件流程
5. 確認例外的事件流程
6. 檢視使用案例描述
7. 反覆進行上述步驟
##### 2.2.4 功能模型
* 使用案例圖+使用案例描述+活動圖=功能模型
* 規則
1. 使用案例描述中的事件<-->活動圖的active/activity
2. 活動的物件會在使用案例描述中說明
3. 使用案例描述中事件的順序<-->活動圖中的活動順序
4. 使用案例描述1<-->1使用案例
5. 使用案例描述的角色都會出現在使用案例圖中
6. 使用案例描述中敘述的關係應該都有出現在使用案例圖中
###### * BP(Business Progress)企業流程-報價系統

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

---

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

*
| 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)->再建成結構模型
* 領域模型:交付概念式的類別圖,描述軟體系統使用的資料,以邏輯組織的方式來描述

##### 2.4行為塑模

#### Phase 3.設計
| 說明 |設計使用介面,資料設計(識別Input->Process->Output、內外部控制)
| -------- | --------
| 目的 |讓user清楚看到需求具體化,與相關解決方案
| 可交付成果|系統設計規格(讓管理者/user審查)
##### 資料庫設計
###### Step1選擇儲存體的格式
檔案系統/**關聯式資料庫**(廣為使用)/物件關聯式資料庫/物件導向資料庫
###### Step2將問題領域類別對應到關聯式資料庫
###### Step3最佳化儲存體
#### Phase 4.建置
| 說明 |建置新系統,含Coding,Testing,Documented,Installed
| -------- | --------
| 目的 |交付一套功能完整、運作正常、文件完整的系統
| 可交付成果|功能齊全的系統、操作手冊
#### Phase 5.安全與支援
| 說明 |進行系統維護、加強、資安、更版
| -------- | --------
| 目的 |持續性的維護
| 可交付成果|運行無阻的系統