杰克逊系统开发

杰克逊系统开发（）簡稱JSD，是一種線性的程序设计方法学，由及約翰·卡梅倫（John Cameron）在1980年代提出。可視為是杰克逊结构化编程（JSP）的延伸。

杰克逊系统开发包括從設計需求到程式碼的完整軟體開發流程，並且著重在即時系統的應用。也適用於資料處理系統的開發。但此方法不易處理偶然及隨機性的事件，為其缺點。

歷史 
杰克逊系统开发最早是由傑克遜在1982年在其發表的論文《系統開發方法》（A System Development Method）及1983年的《系統開發》（A System Development）中提出。

後來杰克逊系统开发繼續發展，也加了一些新的特徵，在約翰·卡梅倫1989年的論文選集《JSP and JSD》及1992年版的LBMS JSD手冊中都有說明。杰克逊系统开发的發展約在1990年初期告一段落，傑克遜後來轉向的研究。

基本原則 
杰克逊系统开发有以下三個基本的原則：
 在開發初期需要對現實世界的描述及建模，而不是針對系統需要的機能訂定規格或進行結構化。利用杰克逊系统开发產生的系統在尚未處理系統相關機能前，會先模擬現實世界的情形。
 一個有時序真實世界的良好模型應該也是有時間順序的，其主要目的是將真實世界的演變對映模擬現實世界系統的演變。
 實現系統的方式是基於從規格到一組有效率程序的轉換，程序需可以用軟體及硬體執行。

杰克逊系统开发的步驟 
當杰克逊在1982年提出杰克逊系统开发時，此開發方式包括六個步驟

 實體/動作
 基本建模
 互動機能
 資料機能
 系統時序
 系統實現

後來將步驟再加以修改，變成三個階段<ref name="jymx">Decision systems Inc. (2002), [http://www.dsisoft.com/jackson_system_development.html Jackson System Development] . Accessed 24 Nov 2008.</ref>：
 建模階段（分析）：包括實體/動作及實體結構二個步驟。
 網路階段（設計）：包括基本建模、機能及系統時序三個步驟。
 實現階段（實現）：只有實現一個步驟。

 建模階段 
在建模階段會建立實體結構圖（entity structure diagram），並識別系統中的實體、其動作、實體在其生命週期中的動作時序，和實體和其動作的屬性
。實體結構圖會使用傑克遜結構化編程中的「結構圖」來表示，實體結構圖的目的是建立系統及組織架構的完整描述，設計者需決定在系統中哪些部份重要，哪些部份不重要，此階段強調設計者和使用者的溝通。

 網路階段 
在網路階段會建立整個系統的模型，稱為「系統規格圖」（system specification diagram）或網路圖（network diagram），網路圖是呈現程序（以長方形表示）和彼此傳遞資料的方式，資料傳遞可能會用「狀態向量」（以有菱形的連線表示）或者是用「資料流」（以有圓形的連線表示）表示。此階段定義系統的機能．每一個實體都會成為網路圖中的一個程序或程式。外部程式之後會加入網路圖中，其目的是處理輸入、計算輸出並更新實體處理的資料，因此網路圖描述了整個系統，也描述各程序及各程式之間的資料和連接方式。

基本建模步驟處理現實世界的建模，而機能步驟中會加入產生輸出所需要的程序，系統時序步驟處理程序中的同步、並導入限制條件。

 實現階段 
實現階段中抽象的網路模型會轉換為實際的系統，以「系統實現圖」（system implementation diagram）表示，系統實現圖中的系統會呼叫各機能的模組，以實現對應的機能。資料流會以模組之間的呼叫來表示，資料庫的符號表示實體狀態向量的集合，也有特殊符號表示檔案的緩衝區（必需以規劃在不同的時段執行的程序來實現）。

實現階段的主要考量是系統的最佳化，藉由轉換的方式，可以合併程序，減少實際程序的數量。

 相關的圖示 
實體結構圖
實體結構圖表示系統中各實體之間的關係及其動作，包括以下的內容：
 實體：實體是系統中的一個物件。
 動作：此是指實體進行的動作及那些會影響其他實體的動作。
 序列結構：此處的定義和杰克逊结构化编程的定義相同，利用序列結構來表示許多循序執行的動作，由左到右依序執行。
 選擇結構：表示需由二個或二個以上的動作中選擇一個進行，選擇結構方塊的右上角會標示圓圈。
 迭代結構：表示重複執行一個動作，選擇結構方塊的右上角會標示星號，一般迭代結構中只進行一個動作。
 虛無元件：虛無元件表示像類似選擇結構中，某些情形下不需進行任何動作。

網路圖
網路圖（Network Diagram）表示各程序之間的交互關係，有些會稱為系統規格圖（System Specification Diagram），網路圖包括以下的內容：
 程序：程序表示系統的機能，一般程序會和外界的實體藉由資料流連結建立關係。
 資料流連結（datastream connection）：在資料流連結中，程序A（產生資料流的程序）程序主動送出資料給程序B。
 狀態向量連結（state vector cnspection）：在狀態向量連結中，程序B（讀取狀態向量的程序）程序讀取程序A產生的狀態向量資訊。

資料流連結和狀態向量連結的差異在於主動的程序不同：在資料流連結中，產生資料流的程序A是主動程序，程序A依其選定的時間主動將資料傳送給程序B；在狀態向量連結中，產生狀態向量的程序A是被動程序，接收狀態向量的程序B定期去讀取程序A的狀態向量。簡單來說，資料流連結是訊息傳遞的抽象化，狀態向量是輪詢（由一個程序主動定期讀取其他許多程序的資料）的抽象化，狀態向量也是資料庫查詢的抽象化。

 相關條目 
 杰克逊结构化编程
 
 

參考資料

 延伸閱讀 
 John R. Cameron (1989).The Jackson Approach to Software Development, IEEE Computer Society Press, Silver Spring.
 Jackson Software Development Methods  web page
 Michael A. Jackson (1982). A systems development method
 Michael A. Jackson (1983). System development, Prentice Hall, Englewood Cliffs, New Jersey, 1983. (In het Nederlands gepubliceerd in 1989 bij Academec Service onder de titel: Systeemontwikkeling volgens JSD.)
 SmartDraw (2005). ''How to draw Jackson System Development (JSD) Diagrams)

外部連結 
 Jackson Development Methods 
 Tutorial on JSD
软件开发