「軟體需求分析與塑模」- 流程與活動

本文收錄於 我的電子書「軟體需求分析與塑模 – 第一章、需求分析概觀」。

實現企業層級系統功能的主要組成元素是「人」,也就是多個不同角色的內部工作者 (internal worker) 在不同的時間點合作接續以完成所屬職掌的工作。

當為了履行一個企業需求,可能需一連串的活動 (activities) 循序接力達成。當然活動的執行需要有特定的參與人員,也就是會有多種不同角色 (role) 或組織 (organization) 參與。這一連串的活動即構成作業流程 (business process)。

Jacobson 為企業流程 (business process) 作了一個簡單的定義:

Put simply, a business process is the set of internal activities performed to serve a customer.
Object Advantage》, Ivar Jacobson, 1994
(簡單地說,企業流程就是要能夠服務客戶的一連串企業內部的活動)

而關於「活動 (activity)」的定義 (from Wiki):

Activity is a major task that must take place in order to fulfill an operation contract.
(活動是一個必須履行的主要工作,為以滿足一個操作上的契約。)

參考下圖範例係利用 UML 活動圖 (activity diagram) 繪製傳統人工「訂購-出貨」作業流程。從該案例可以得知,這一連串從訂購到出貨的活動,會有多個不同組織部門的工作人員參與。當完成這一連串活動後,即滿足主要的企業需求-「訂購商品」。

圖例、傳統人工訂購-出貨作業流程

「軟體需求分析與塑模」- 什麼是系統功能

本文收錄於 我的電子書「軟體需求分析與塑模 – 第一章、需求分析概觀」。

系統 (system) 是由一組互動 (interacting) 或獨立的元件 (component) 所組成的整合體 (integrated whole)。

系統功能 (system functions),即為某一整合體所提供給外界 (參與者或外部系統)的一連串服務 (services)。

把企業 (business) 當成一個整合體,並藉以分析該整合體所提供的功能需求,以及組成該整合體的組成元素。這樣以企業為標的的分析塑模方式,稱為「企業塑模 (business modeling)」。

把資訊系統 (information system) 當成一個整合體,並藉以分析該整合體所提供的系統功能,以及組合該整合體的結構元素。這樣以資訊系統為標的的分析塑模方式,稱為「資訊系統塑模 (information system modeling)」。

把企業或資訊系統當為一個整合體,便可以採用相同的手法,如利用 UML (Unified Modeling Language) 語法,來分析系統需求。

「企業」與「資訊系統」兩者的關係即為,「資訊系統」為組成「企業」內部結構的其中之一的元素 (element)。而當把焦點轉移至資訊系統,探究其中所提供的系統需求 (系統功能)時,則再將「資訊系統」這個結構元素放大,並從「外」的需求分析,與「內」的結構設計來看待資訊系統的分析、設計,乃至於實作了。

參考上節範例,「診療服務」為企業的系統需求,如果企業架構師規劃了三個資訊系統 (組成元素) 的支援,參考如下圖,架構師可以利用 UML 使用案例圖表 (use case diagram) 規劃每一個資訊系統各有其需實現的系統功能,以及資訊系統之間的關係是透過介面 (interface)的連接達成所謂的「SOA (service-oriented architecture)」架構。

圖例、表達資訊系統的系統功能

至於資訊系統是如何實現系統功能,又如何連接其它外部系統,那就是所謂的系統 (這裡就是指資訊系統了) 結構設計與實作的議題了。

「軟體需求分析與塑模」– 企業需求源自於企業價值

本文收錄於 我的電子書「軟體需求分析與塑模 – 第一章、需求分析概觀」。

企業需求要能提供價值 (value),如此才得以讓企業有獲利行為而能永續經營。

「價值」的呈現取決於在創新、成本、效率等因子的調和。這些因子經常是由內部工作者 (internal-worker)、產品、系統、軟體與流程 (process)等所提供並滿足其需求。最終目的當然在於讓企業創造「利潤 (profit)」。

例如,「仁心慈善醫院」是一家企業 (business),其中最主要的核心價值係提供 「醫療」的服務 (service)。為了提供「醫療」這個主要服務,企業內部必然會有多個內部工作者的協同合作,包括「醫師」、「護士」、「藥劑師」、「行政人員」… 等;涵蓋的作業流程可能有「掛號」、「看診」、「住出院」、「領藥」… 等;且為了增進處理效率與節省人力,會導入由 產品/軟硬體 所組成的資訊系統 (information system),成為工作者的協力夥伴。

除了文字陳述紀錄外,可以藉由視覺化的圖形塑模 (visualization diagram modeling),更容易表達焦點。

例如,我們可以使用 UML「使用案例圖 (use case diagram)」表達企業所提供的主要服務 (企業層級的系統功能),以及使用「業務流程圖 (business process diagram)」表達實現 (realize) 企業系統功能的主要組成元素 (內部工作者、資訊系統、主要作業流程)。

圖例、表達企業提供的主要服務

圖例、表達實現企業需求內部的主要組成元素

關於 UML (unified modeling language) 的基本介紹,以及應用在企業與資訊系統需求面的分析 Know-how,參閱後述的章節內容。

安裝 ArchLinux @Windows 10 子系統 (WSL)

其實 Windows 10 早在去年就已具有可以在 Windows 環境下執行 Ubuntu 的機制,但還很陽春,效能不佳,問題多多。但從 Windows 10 1803 版本釋出後,WSL (Windows Subsystem for Linux) 已修正諸多問題並大幅提昇執行效能,使其執行原生 Linux 系統於 Windows 10 環境下成為可便利運行的方案。

所以,WSL 到底是什麼?這篇 Arch Wiki 上說明得很清楚:

「Windows 10 包含一個模擬 Linux 內核的子系統,使得 windows 可以運行 Linux 原生應用程序。這個子系統有點像反過來的 Wine,但是它比 Wine 更加底層。默認情況下,此子系統使用 Ubuntu 用戶空間,但是它可以被替換成 Arch。你需要使用一個現有的 Arch 安裝去構建一些軟件包。」

我個人是相當偏好 ArchLinux,因為可以高度客製化。安裝 ArchLinux 於 WSL 下相當簡單,因為國外已經有大神整理成安裝執行包,詳見 Github-ArchWSL。安裝該執行包前,需要先啟動 WSL 功能,使用 Administrator 開啟 PowerShell 命令列視窗,執行下列指令:

> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

重新啟動,然後下載上述 ArchWSL 安裝包,解壓縮並置於準備安裝的目錄下 (我是設定於 C:\Linux\ArchLinux 目錄下)。再來依照執行 ARCH.exe,靜待安裝過程 (非常快),然後完成。

閱讀全文 »

[實作筆記] ASP.NET Core Identity 2.1 – 安裝與設定(一)

主要是為了方便授課上講授 TDD.NET 如何應用 Mock 隔離測試的觀念,所以打算藉由 ASP.NET Core Identity 2.1 驗證與授權 (Authentication and Authorization)的機制併整合訂購系統 (核心邏輯/資料庫存取位於另一專案)的案例,來展示 單元測試 (Unit Test)搭配 Mock 隔離的程式碼範例。

另外為了測試資料庫方便可攜供學員可以直接使用,所以打算不再使用具名的 SQL Express 檔案 (連線字串問題,多個專案要指定絕對路徑,不方便複製),而只使用 SQL Express LocalDB (預設位於 C:\使用者\使用者帳號目錄內),然後再以 Code First Migration 方式與 Seed Data 方便初始建置資料庫表格與測試資料,這些留待後續系列文章再作說明。

本系列文章並非是完整的 Step by Step 教學文,而僅是一份實作筆記,主要記錄了實作過程中一些重點摘要。同時也提供了一份程式碼範本,供個人以及對相關議題有興趣的讀者參考。

程式碼範本以 Git 版控儲存於 Github 儲庫:kenming/aspdotnet-core-identyity-2dot1-practice-note
每一個階段會標注 Tag 標籤方便提取研究與切換版本。

先簡單說明下 ASP.NET Core Identity,它是微軟所提供被歸為 ASP.NET Web 端的一個「會員 (Membership)」系統,提供給應用系統開發人員方便具有登入 (Login)驗證名稱與密碼的機制。它很明顯是 Client/Server 的 2-tier 分層方式所開發的系統,但還好因為 Login 這類機制係屬於「非功能性 (Non Functional)」需求,所以也不至於會干涉到應用系統關於「功能性需求 (如處理訂購、追蹤訂購等系統功能)」的耦合 (coupling)。未來可以全部抽換掉 Identity 而不影響到應用系統的主結構 (當然還是要稍稍花一些整合設計的心思)。

個人仍覺得 ASP.NET Identity 即便到 2.1 版本,但安裝與設定程序仍嫌繁瑣,而且從 1.X、2.0 到 2.1,每一次的安裝與設定方式大都不一樣,預期後續版本仍會有持續的變動震盪。所以更顯然絕對不要撰寫與問題領域 (problem domain)相關的邏輯在該專案內,這點從個人後續提供的範例就可以看到如何避免。

本篇文章先著重在如何安裝 Core Identity 2.1,然後新增「Scaffold Identity Item」,並修改些預設的登入選項參數 (如密碼長度),然後執行預設的首頁 (index)並選擇註冊 (register)帳號並執行登入 (login)。

閱讀全文 »

闡述軟體架構師素養的絕佳古文-柳宗元「梓人傳」

軟體架構師 (Architect) 一詞,雖是源自於國外建築產業的關鍵術語,甚而建築業大師 Christopher Alexander 的著作:「The Timeless Way of Building」(國內翻譯書為「建築的永恆之道」」,更是被軟體業界奉為設計模式 (Design Pattern)之父。不過,關於軟體架構師應具有的素養,卻是更早可以從「古文觀止」其中一篇:柳宗元所著「梓人傳」,早已道盡成為軟體架構師所需的技能為何。

這裡節錄此篇古文,並引用國內 C++ 大師早已所翻譯部份文言為白話,可以確實好好品味欣賞、一讀再讀反覆玩味思考的。

裴封叔之第,在光德里。有梓人款其門,願傭隙宇而處焉。所職,尋、引、規、矩、繩、墨,家不居礱斲之器。問其能,曰:「吾善度材。視棟宇之制,高深圓方短長之宜,吾指使而群工役焉。舍我,眾莫能就一宇。故食於官府,吾受祿三倍;作於私家,吾收其宜大半焉。」

他日,入其室,其床闕足而不能理,曰:「將求他工。」餘甚笑之,謂其無能而貪祿嗜貨者。

其後,京兆尹將飾官署,餘往過焉。委群材,會群工,或執斧斤,或執刀鋸,皆環立向之。梓人左持引,右執杖,而中處焉。量棟宇之任,視木之能舉,揮其杖,曰:「斧!」彼執斧者奔而右;顧而指曰:「鋸!」彼執鋸者趨而左。俄而,斤者斲,刀者削,皆視其色,俟其言,莫敢自斷者。其不勝任者,怒而退之,亦莫敢慍焉。畫宮於堵,盈尺而曲盡其制,計其毫釐而構大廈,無進退焉。既成,書於上棟曰:「某年某月某日某建」。則其姓字也。凡執用之工不在列。餘圜視大駭,然後知其術之工大矣。

繼而嘆曰:彼將舍其手藝,專其心智,而能知體要者歟!吾聞勞心者役人,勞力者役於人。彼其勞心者歟!能者用而智者謀,彼其智者歟!是足為佐天子,相天下法矣。物莫近乎此也。彼為天下者本於人。其執役者為徒隸,為鄉師、裡胥;其上為下士;又其上為中士,為上士;又其上為大夫,為卿,為公。離而為六職,判而為百役。外薄四海,有方伯、連率。郡有守,邑有宰,皆有佐政;其下有胥吏,又其下皆有嗇夫、版尹以就役焉,猶眾工之各有執伎以食力也。

彼佐天子相天下者,舉而加焉,指而使焉,條其綱紀而盈縮焉,齊其法制而整頓焉;猶梓人之有規、矩、繩、墨以定制也。擇天下之士,使稱其職;居天下之人,使安其業。視都知野,視野知國,視國知天下,其遠邇細大,可手據其圖而究焉,猶梓人畫宮於堵,而績於成也。能者進而由之,使無所德;不能者退而休之,亦莫敢慍。不炫能,不矜名,不親小勞,不侵眾官,日與天下之英纔,討論其大經,猶梓人之善運眾工而不伐藝也。夫然後相道得而萬國理矣。

相道既得,萬國既理,天下舉首而望曰:「吾相之功也!」後之人循跡而慕曰:「彼相之纔也!」士或談殷、周之理者,曰:「伊、傅、周、召。」其百執事之勤勞,而不得紀焉;猶梓人自名其功,而執用者不列也。大哉相乎!通是道者,所謂相而已矣。其不知體要者反此;以恪勤為公,以簿書為尊,炫能矜名,親小勞,侵眾官,竊取六職、百役之事,聽聽於府庭,而遺其大者遠者焉,所謂不通是道者也。猶梓人而不知繩墨之曲直,規矩之方圓,尋引之短長,姑奪眾工之斧斤刀鋸以佐其藝,又不能備其工,以至敗績,用而無所成也,不亦謬歟!

或曰:「彼主為室者,儻或發其私智,牽制梓人之慮,奪其世守,而道謀是用。雖不能成功,豈其罪耶?亦在任之而已!」

餘曰:「不然!夫繩墨誠陳,規矩誠設,高者不可抑而下也,狹者不可張而廣也。由我則固,不由我則圮。彼將樂去固而就圮也,則卷其術,默其智,悠爾而去。不屈吾道,是誠良梓人耳!其或嗜其貨利,忍而不能舍也,喪其制量,屈而不能守也,棟橈屋壞,則曰:「『非我罪也』!可乎哉?可乎哉?」

餘謂梓人之道類於相,故書而藏之。梓人,蓋古之審曲面勢者,今謂之「都料匠」雲。餘所遇者,楊氏,潛其名。

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal