Introduction to Software Engineering(TE)

Program Design Language

也稱為:偽代碼語言(Pseudo-code Language)

PDL 的同類(或相關替代)

名稱簡介是否代碼結構化
流程圖 (Flowchart)用圖形方式描述處理邏輯?
偽代碼 (Pseudo-code)通用術語,PDL就是一種偽代碼形式?
UML 活動圖建模工具中的一種行為建模方式,用于描述過程流程?
Nassi-Shneiderman圖結構化圖形流程圖(無分支線),適用于結構化編程表示?
結構化英語類似自然語言的方式,但帶有結構化控制詞(如 IF-THEN)?

SC 圖(Structure Chart,結構圖)

  • 結構化程序設計中用于承上啟下的工具

  • 位于概要設計和詳細設計的銜接位置

  • 主要用于:

    • 表示模塊之間的調用關系

    • 表達系統的模塊分解層次結構

    • 指明模塊之間數據流或控制流的方向

所以,SC 圖是概要設計的輸出,同時也是詳細設計的輸入依據,用于指導每個模塊內部的 PAD 圖或偽代碼設計。

DFD 圖(數據流圖)

  • 用于需求分析階段

  • 表示數據在系統中的流動和處理過程

  • 不是用來連接設計階段的工具

PAD 圖(Problem Analysis Diagram)

  • 又稱“問題分析圖”或“過程設計圖”

  • 屬于詳細設計階段的工具

  • 用于描述單個模塊內部的具體實現邏輯

  • 它是SC 圖的下級實現圖,并不用于“銜接”

程序流程圖(Flowchart)

  • 一種早期的通用圖形表示法

  • 表達過程控制邏輯,但缺乏模塊化、結構化設計特征

  • 不適合用于大規模系統設計的層級表達

按照軟件開發階段的邏輯順序如下:

階段圖形工具中文名稱作用說明
1. 需求分析DFD 圖數據流圖分析系統做什么,表達數據如何流動
2. 概要設計SC 圖結構圖把系統分成多個模塊,表達模塊間調用結構
3. 詳細設計PAD 圖過程設計圖描述某個模塊“內部怎么做”
4. 編碼輔助流程圖程序流程圖可選工具,適合小模塊的過程控制邏輯表達

常見耦合類型(由強到弱)

耦合類型英文名簡要說明強弱級別
內容耦合Content Coupling一個模塊直接修改/訪問另一個模塊內部數據或邏輯? 最強(最差)
控制耦合Control Coupling一個模塊控制另一個模塊的執行邏輯(如傳入標志位)較強
公共耦合Common Coupling多個模塊共享全局變量中等
數據耦合Data Coupling模塊間僅通過參數傳遞必要數據,不含控制信息或全局變量? 最弱(最好)

“軟件結構使用的圖形工具

選項圖形工具名稱英文縮寫用途說明
A數據流圖DFD (Data Flow Diagram)用于需求分析階段,描述數據流轉而非結構
B過程設計圖PAD (Problem Analysis Diagram)用于詳細設計階段,描述模塊內部邏輯
? C結構圖SC (Structure Chart)? 用于描述軟件模塊結構和調用關系
D實體-聯系圖ER (Entity-Relationship Diagram)用于數據庫設計,描述實體與關系結構
序號中文名稱英文縮寫簡述
內容耦合Content Coupling直接訪問另一個模塊內部數據或控制其邏輯
公共耦合Common Coupling多模塊共享全局變量
控制耦合Control Coupling一個模塊控制另一個模塊的執行邏輯(如傳標志)
標記耦合Stamp Coupling傳遞的數據結構包含對方不需要的字段
數據耦合Data Coupling只通過必要數據參數進行交互
非直接耦合Non-direct Coupling(非標準)基本上無任何調用關系、數據關系
無耦合No Coupling完全獨立

📌 注:不同教材中“非直接耦合”有時不列入七種之一,而是作為“最低耦合”或“理想情況”補充出現。

  • “問題域對象”即系統要解決的問題空間中真實存在的實體(例如:圖書館系統中的“圖書”、“借閱者”、“借書記錄”)。

  • 識別這些對象,是將現實問題映射到程序世界的第一步。

概念英文縮寫/詞組說明
面向對象分析OOA (Object-Oriented Analysis)識別對象與需求建模
問題域對象Problem Domain Objects分析對象模型的核心內容
面向對象設計OOD (Object-Oriented Design)描述對象結構和交互(設計層面)

面向對象分析過程中常見的三類模型:

模型類型說明代表圖形工具/建模圖
對象模型表示系統中涉及的類、對象、屬性、操作、關系等結構類圖(Class Diagram)
功能模型描述系統要完成的功能與輸入輸出之間的變換關系數據流圖(DFD)、用例圖(Use Case)
動態模型表示對象如何隨時間變化、如何響應事件、狀態如何遷移等狀態圖、時序圖(Statechart / Sequence)
DFDData Flow Diagram功能建模工具之一
UMLUnified Modeling Language通用建模語言(統一建模)

“建模、分析這些活動有沒有標準的先后順序,還是說存在多種流程方法?”

? 既有經典標準順序(常見于傳統模型),也存在多種變體流程(如敏捷、迭代、原型方法)
也就是說,不同的軟件開發方法論中,這些活動的順序可能固定交錯、或者反復回溯

標準的“瀑布模型”順序(最典型的線性流程)

這種是傳統軟件工程中最明確的階段性流程:

階段主要活動常用建模工具/方法
① 可行性研究立項、成本估算、風險分析無建模,主要是文檔+表格
② 需求分析明確系統做什么DFD(數據流圖)、ER圖、用例圖
③ 概要設計系統如何分模塊SC圖(結構圖)、模塊圖
④ 詳細設計每個模塊怎么實現PAD圖、偽代碼、類圖、狀態圖等
⑤ 編碼實現編寫源代碼編程語言 + 編碼規范
⑥ 測試驗證檢查是否滿足需求單元測試、集成測試、驗收測試等
⑦ 部署運維上線并維護日志監控、用戶反饋系統

📌 在這個模型中,每一步都嚴格在前一步完成后進行,所以“建模”通常穿插在第 2–4 階段。

面向對象開發模型中的順序(適配 UML 流程)

UML 方法論中推薦的是一種“逐步細化、結構清晰”的過程,順序如下:

步驟活動內容對應模型/圖形工具
1. 領域建模抽象出問題空間的對象和關系類圖、對象圖
2. 用例建模從用戶視角分析功能需求用例圖(Use Case Diagram)
3. 靜態建模描述系統結構(類、關系、繼承等)類圖、包圖等
4. 動態建模描述行為隨時間變化(狀態/交互)狀態圖、時序圖
5. 交互建模表現對象間如何協作完成用例通信圖、協作圖
6. 實現建模映射到代碼結構部署圖、組件圖

📌 這些建模活動可以并行推進,但通常建議先有靜態結構,再逐步補充行為與交互。

敏捷開發中的建模順序:沒有固定順序,更強調迭代

  • **敏捷開發(Agile)**不強調一次性完成建模或設計,而是:

    • 快速識別最關鍵用例/對象

    • 快速建立最小可行產品(MVP)

    • 不斷從用戶反饋中修正模型與代碼

    • 建模工具以輕量、可溝通為主,比如手繪用例圖或白板類圖

常見的模型構建流程對比總結

方法模型活動順序是否固定是否強調建模特點說明
瀑布模型? 固定順序? 嚴格建模適合需求穩定、流程清晰的項目
統一過程(RUP)? 分階段進行? 全建模面向對象項目的標準流程,強調文檔與模型
敏捷開發? 不固定,可回退? 建模靈活強調快速交付,建模最小化
原型法? 反復迭代驗證? 部分建模快速做出初版原型,邊試邊改

先明確什么是分析建模(Analysis Modeling)?

分析建模是軟件開發中需求分析階段的重要組成部分,其核心目的是:

把模糊的用戶需求,結構化、形式化地表達出來,為后續設計和實現做好準備。

標準分析建模的四個主要目的

  1. 定義可驗證的軟件需求(?)
    → 讓開發人員和客戶都能理解并確認需求是否明確。

  2. 描述客戶需求(?)
    → 用結構化方式表達“系統應該做什么”,便于交流。

  3. 為設計建立邏輯基礎(?)
    → 分析建模輸出的模型是設計階段輸入的依據

  4. 強調系統功能而非實現方式(?)
    → 分析階段不解決“怎么做”,而是“做什么”。

開發一個簡單的問題解決方案

這是設計階段或原型階段的目標,而不是分析建模的目標。

  • 分析建模不提供“解決方案”,它提供“問題的結構化描述”。

  • 它不關心“簡單”或“復雜”,也不會直接提出“怎么解決”。

DFD 中的“加工”(Process)是指對數據進行轉換、處理的操作,圖中用一個圓圈或橢圓表示。

按照數據流圖的定義規范:

  • 每個加工必須有:

    • 至少一個輸入數據流(即有“數據進來”)

    • 至少一個輸出數據流(即有“數據出去”)

? 因為加工是對輸入數據的處理 → 沒有輸入就無數據可處理;沒有輸出就無結果流出

“過程實體”= 軟件中獨立、可識別、可操作的邏輯過程或功能單元。

比如:

  • 登陸驗證功能(一個過程)

  • 商品列表加載(一個過程)

  • 訂單提交(另一個過程)

每個功能,都可以抽象為一個過程實體(Process Entity)。它不是“變量”“類”“對象”,而是某個清晰獨立的過程動作/功能邏輯塊

?為什么叫“實體”?

是因為我們不止是說“功能”這個抽象概念,而是說“這個功能在系統中要成為一個明確的、單獨的、可調度的存在”,就像對象、模塊一樣——所以叫實體。

抽象(Abstraction)是軟件設計的第一步:

它的作用就是:從復雜的現實中,提煉出清晰可控的邏輯單位

比如:

現實中“用戶下單”這個行為很復雜,要處理:

  • 用戶身份

  • 商品庫存

  • 支付接口

  • 收貨地址

但我們可以通過抽象,把它整理成幾個清晰的過程實體

  1. 檢查庫存

  2. 校驗用戶

  3. 創建訂單

  4. 發起支付

這些就是“通過抽象得出的過程實體”。

信息隱藏(Information Hiding)就是:每個模塊只暴露必要的接口,內部怎么做你別管。

比如:

  • 登錄模塊提供一個 verifyLogin() 接口

  • 你傳入用戶名和密碼,它返回結果

  • 但你不知道它內部是數據庫查?Redis查?有沒有日志記錄?你都不知道

這就叫信息隱藏。

🔁 好處:

  • 減少模塊間耦合

  • 方便后期維護、替換、優化

模塊內部有好幾個小功能(步驟),它們按順序執行,而且后面的功能直接吃前面的輸出結果當“輸入”用

就像接力賽跑,第一棒跑完把接力棒交給第二棒,第二棒才能跑。

內聚類型中文含義是否強內聚舉個例子
順序內聚輸出傳給下一個輸入? 中等偏強表單處理、流水線式數據加工
過程內聚按順序執行,但數據無依賴? 偏弱打印、保存、退出一起做,但互不相關
功能內聚所有操作圍繞一個明確目標? 最強登錄模塊、支付模塊
偶然內聚(最差)幾個功能硬塞一起,沒啥關系? 最弱臨時寫了好幾個功能堆一個函數里

通信內聚指:一個模塊中各個處理步驟雖然功能不同,但它們都圍繞“相同的數據”在操作。

比如:

  • 一個模塊負責處理學生成績,它里面有:

    • 統計總分

    • 統計平均分

    • 找出最高分

雖然是三個不同的小功能,但它們都在處理同一個數據結構(如成績數組),這就叫通信內聚。

因為這些功能之間的共同點不是任務順序,也不是功能目標,而是它們都依賴于“同一份信息”,所以也叫信息內聚(Informational Cohesion)。

什么是“功能內聚(Functional Cohesion)”?

是指一個模塊里的所有操作、數據、流程,都只為完成一項明確的功能目標而存在,且每一步都是不可或缺的。

舉個例子:

  • 登錄模塊:校驗用戶名 → 校驗密碼 → 返回結果
    每一部分都是為了“完成登錄”這個目標,且缺一不可。

內聚等級(由弱到強)特征
偶然 → 邏輯 → 時間 → 順序 → 通信 → 功能
功能內聚 ?最純粹、最整潔的單一目標模塊

因為:

  • 模塊結構清晰

  • 只處理一件事

  • 可測試性、可維護性最好

為什么它“耦合最弱”?

因為它自己就能獨立完成一項功能,不依賴其他模塊太多內部信息或控制信號,所以與其他模塊的連接是最少的、最松的。

耦合越弱,模塊之間越獨立,改一個不影響另一個,系統更穩定。

在模塊內聚(Cohesion)的標準分級中,順序內聚確實比通信內聚要弱。這不是拍腦袋定的,而是從模塊的獨立性與關注焦點的集中程度來判斷的。

類型定義說明內聚強度為什么強或弱(關鍵點)
順序內聚一個模塊中多個功能前后相連,后一步依賴前一步的輸出? 中等有數據依賴,但每一步的目標不同,仍然偏“串聯”
通信內聚模塊內所有功能圍繞同一個數據結構進行輸入或輸出操作,功能彼此平行但相關? 稍強雖然功能不同,但關注點統一、數據一致性強

數據庫的設計指數據存儲文件的設計,主要進行的設計方面有:
概念設計 )、( 邏輯設計 )、( 存儲設計

階段英文名稱關注點主要產出舉例
概念設計Conceptual Design現實世界中有哪些實體、屬性、關系概念模型(如ER圖)學生、課程、選課三者的聯系
邏輯設計Logical Design數據庫邏輯結構,如何轉化為表結構邏輯模式(如關系模型)學生表、課程表、選課表,以及字段設計
存儲設計Physical Design如何在磁盤上高效存儲和訪問數據索引、分區、文件結構給“學生ID”加索引,選擇聚簇還是非聚簇

變換型:
輸入 → 處理A → 處理B → 處理C → 輸出 ?
(線性)

事務型:
? ? ? ? ?→ 子流程A → ?
輸入 → 判斷 → 子流程B → 輸出 ?
? ? ? ? ?→ 子流程C →
(分支)
?

變換型:一條線;事務型:分支選。
一個是順序變形流程,一個是按條件選路線

什么是“扇出”和“扇入”?(核心術語)

概念英文含義
扇出Fan-out一個模塊調用的下級模塊個數(你派出多少個子任務)
扇入Fan-in一個模塊被上級模塊調用的次數/個數(你被多少人當作工具調用)

📌 它們都是衡量模塊結構關系的指標,越合理,結構越清晰、系統越好維護。

  • 頂層模塊(像總指揮)負責組織調度,所以扇出高:它要調用很多子模塊

  • 中間層模塊起到橋梁作用,不要太復雜,所以扇出較低:盡量不要它再派任務

  • 底層模塊是“工具模塊”,比如“計算平均數”“輸出到文件”等,所以扇入高:大家都來用它,它自己不再調別人

? ? ? ? ?A(頂層,扇出=3)
? ? ? ? / | \
? ? ? ?B ?C ?D(中層,扇出=1)
? ? ? ?| ? ? |
? ? ? ?E ? ? E(底層,扇入=2)
?

  • 頂層高扇出:利于集中控制、統一分派任務

  • 中層低扇出:避免中間模塊過于復雜,降低耦合

  • 底層高扇入:讓底層模塊復用率高、功能穩定

偶然內聚(Coincidental Cohesion)——最差的一種

  • 定義:模塊中各功能毫無關系,只是“碰巧”被放在一起。

  • 特征

    • 功能不相關

    • 可能是寫代碼時隨手加進來的

  • 例子

    一個模塊里:
    - 顯示歡迎界面
    - 打印用戶日志
    - 初始化一個數組
    

    👉 看起來完全是亂搭在一起,根本沒有邏輯關系。

  • ? 缺點:

    • 難以維護,改一個容易影響無關的地方

    • 不能被復用

邏輯內聚(Logical Cohesion)

  • 定義:模塊中有多個功能,它們屬于同一類邏輯動作,但具體做哪一個要靠傳入的參數來決定

  • 特征

    • 屬于“同類任務”,如:輸入處理、輸出處理、錯誤處理

    • 通過參數控制執行邏輯

  • 例子

    void handleIO(int mode) {if (mode == 0) readFile();else if (mode == 1) writeFile();else if (mode == 2) deleteFile();
    }
    

    👉 雖然都跟“文件操作”相關,但通過 mode 控制行為。

  • ?? 問題:

    • 參數驅動邏輯,結構不清晰

    • 日后新增功能要頻繁改條件判斷

時間內聚(Temporal Cohesion)

  • 定義:模塊中所有操作必須在相同時間點執行,例如程序啟動時或關閉時。

  • 特征

    • 功能有一定時間相關性

    • 通常見于“初始化模塊”“退出清理模塊”

  • 例子

    系統啟動模塊:
    - 初始化數據庫連接
    - 加載配置文件
    - 清屏

    👉 它們雖然做的事情不同,但都必須在“啟動時”發生。

  • ? 比前兩個好一點,但仍然功能不集中

偶然最差純拼湊,邏輯靠參選操作,時間同時起步走。

項目軟件結構圖(Software Structure Chart, SC 圖)數據圖(Data Flow Diagram, DFD)
中文叫法軟件結構圖 / 程序結構圖數據流圖
核心關注點模塊層級結構調用關系(“怎么做”)數據處理流程邏輯功能(“做什么”)
表達的是模塊的控制層次、調用順序、扇入扇出輸入/輸出數據流、加工過程、外部實體、存儲
使用階段結構設計階段(軟件設計中期)需求分析階段(軟件設計前期)
是否體現數據流動? 不強調(偏控制流)? 強調數據流轉與變換
主要用途為程序模塊劃分和代碼結構做準備理解業務流程,定義功能范圍

需求分析 → 數據流圖(DFD) → 功能模塊識別 → 軟件結構圖(SC圖) → 詳細設計 → 編碼
DFD 是“需求建模工具”,分析業務流程和數據流動

SC 圖是“結構設計工具”,組織模塊結構和調用層次

👉 數據圖幫助我們確定有哪些功能,
👉 結構圖幫助我們安排這些功能如何被實現、由誰來做

→ 需求分析(確定“做什么”)
??↓
→ 概要設計 / 高層設計(模塊劃分 + 架構圖)
??↓
→ 詳細設計(寫模塊的“內部結構”)
??↓
→ 編碼實現(根據詳細設計寫代碼)
??↓
→ 測試、部署、維護

? 說明:

  • 概要設計/高層設計:重“結構關系”

  • 詳細設計/低層設計:重“邏輯實現”

什么是結構圖(Structure Chart,SC 圖)?

結構圖軟件結構設計階段最常用的一種圖形工具,用于表示:

模塊之間的控制關系與數據傳遞關系

它是從數據流圖(DFD)演化而來,是在“概要設計”中用于指導模塊實現的圖示。

它重點描述:

  • 系統是由哪些模塊構成的(模塊劃分)

  • 各模塊之間是如何調用/控制的(控制關系)

  • 調用時是否有參數/數據傳遞(數據傳遞)

題目:結構圖中,不是其主要成分的是( C )。

選項是否主要組成解釋
A. 模塊? 是每個框框都是一個模塊,基本單元
B. 模塊間傳遞的數據? 是通常用帶箭頭的線標注參數傳遞
C. 模塊內部數據? 否?結構圖不畫模塊內部細節,只畫模塊之間的關系
D. 模塊的控制關系? 是用線連接上層模塊與下層被調用模塊,表示控制關系

結構圖中的常見符號

  • 矩形框:表示一個模塊

  • 箭頭線:表示控制流(調用關系)

  • 空心/實心圓圈、線段注釋:表示傳遞數據、判斷點(有時)

結構化設計是一種從數據流圖出發,把邏輯功能模塊化、層次化的方法。它的核心工具是:

  • 結構圖(Structure Chart)

  • 搭配內聚、耦合分析

  • 強調模塊化、層次化、信息隱藏

? 對比其他選項為何錯誤:

選項原因
A. 測試用例設計屬于軟件測試階段,與結構化設計無關
B. 軟件概要設計使用的是結構化分析方法(如 DFD),不是結構化“設計”
C. 程序設計太寬泛,可能包括編碼,不是結構化設計特指的階段
? D. 軟件詳細設計? 正確,結構化設計就是這個階段用的核心方法

特征順序內聚(Sequential Cohesion)過程內聚(Procedural Cohesion)
是否有數據依賴(輸入/輸出)? 有:一個功能的輸出是下一個的輸入? 無:各功能順序執行但不共享數據
功能之間的邏輯關系線性傳遞,像流水線順序存在,但無數據耦合,像腳本任務清單
舉例從輸入讀文件 → 處理數據 → 輸出結果打開文件 → 打印標題 → 關閉文件
內聚強度(相對)? 更強較弱
圖示A ? B ? C(A輸出→B輸入)A; B; C(只是順序執行)

偶然 < 邏輯 < 時間 < 過程 < 順序 < 通信 < 功能

結構化設計方法主要用于:
👉 詳細設計階段Low-Level Design

為什么不是“概要設計”階段?

維度概要設計(High-Level Design)詳細設計(Low-Level Design)
方法常用結構化分析方法(Structured Analysis)使用結構化設計方法(Structured Design)
工具DFD(數據流圖)、數據字典、實體關系圖Structure Chart(結構圖)、模塊接口表、偽代碼
關注點系統分為哪些大模塊、數據如何在模塊之間流動每個模塊內部怎么寫、控制流程如何安排、數據如何傳入傳出
抽象程度比較“粗”,確定功能塊和大體結構更“細”,接近代碼實現
輸出物模塊劃分文檔、系統流程圖模塊接口文檔、結構圖、控制流程說明
  • 結構化分析 → 用在概要設計 → 畫 DFD

  • 結構化設計 → 用在詳細設計 → 畫 Structure Chart(結構圖)

SP(Structured Programming)結構化程序設計方法,是一種編寫清晰、易讀、易維護程序的編程規范與思想。它強調:

  • 只使用順序、選擇、循環三種基本控制結構(避免 goto)

  • 程序可以像搭積木一樣由這些結構組合構建

  • 每個模塊只完成一個功能,并嚴格限制內部結構

? 舉個簡單例子說明 SP 風格:

void printPositive(int n) {
? ? if (n > 0) {
? ? ? ? printf("Positive number");
? ? } else {
? ? ? ? printf("Non-positive number");
? ? }
}
這個函數沒有用到 goto,而是使用選擇結構(if-else),就是結構化程序設計的一種體現。

PDL 是用于在詳細設計階段描述模塊內部邏輯的“偽代碼形式”的結構化語言,幫助程序員將自然語言思路過渡到真正的代碼實現。

PDL 的主要用途:

  • 描述一個模塊的算法流程

  • 明確模塊的輸入、輸出、控制結構

  • 是從結構化設計過渡到編碼的中間過渡文本

  • 人看得懂,但機器不能直接執行

MODULE isPrime
INPUT: integer n
OUTPUT: booleanBEGINIF n <= 1 THENRETURN falseFOR i FROM 2 TO sqrt(n) DOIF n MOD i = 0 THENRETURN falseRETURN true
END

你可以看到,它:

  • 用的是偽英語風格的關鍵字(IF, RETURN, FOR)

  • 不涉及任何具體語言語法(比如沒有 C 的 {},也沒有 Python 的縮進規則)

  • 邏輯清晰、便于溝通

  • HIPO(Hierarchy plus Input-Process-Output) 是一種結構化文檔工具,用于表示模塊之間的層次關系與輸入輸出。

  • PDL(Program Design Language) 是結構化偽碼,用于說明模塊內部處理邏輯。

這兩個都是詳細設計階段常用的規格說明手段

  • 結構化設計(Structured Design) 是詳細設計階段的核心方法,強調模塊化、層次化、信息隱藏、內聚與耦合控制。

  • 它配合結構圖、PDL、模塊說明等工具,詳細描述每個模塊的功能與接口。

PDL 并不是代碼注釋,而是設計階段使用的偽代碼說明語言,它通常作為設計文檔的一部分存在,而不是直接嵌入代碼中當注釋使用
而且,即便某些公司允許在注釋中嵌入 PDL 描述,也不是 PDL 的標準定義內容,因此這個說法不準確。

流程圖并不強調“從抽象到具體”的逐步求精過程,反而常常直接給出完整實現邏輯,不具備分層遞進的表達能力。這正是 PAD 圖勝過流程圖的地方。

需求分析 → 概要設計 → ? 詳細設計 → 編碼 → 測試 → 運維
? ? ? ? ? ? ? ? ? ? ? ? ?↑
? ? ? ? ? ? ? 這一步中使用詳細設計工具

工具名稱作用是否圖形化
PDL(程序設計語言)用“偽代碼”描述模塊內部邏輯,接近真實程序結構否(文字描述)
PAD 圖(Problem Analysis Diagram)順序/選擇/循環塊表示流程,強調結構清晰? 是
流程圖(Flowchart)展示操作的順序、分支與循環,容易直觀表現控制邏輯? 是
Nassi-Shneiderman 圖結構化流程圖,每個控制結構一個矩形塊,強制結構化? 是
IPO 圖(輸入-處理-輸出)描述模塊的數據輸入、處理過程和輸出結果? 是
模塊接口說明表列清楚每個模塊的參數、輸入輸出、調用方式否(表格描述)
設計問題詳細設計工具如何幫助解決
模塊怎么實現?用 PDL 或 PAD 圖明確每一步的處理邏輯
數據從哪里來,怎么處理?用 IPO 圖來分析輸入 → 處理 → 輸出關系
模塊內部的控制邏輯是否清晰?用 PAD、流程圖或 Nassi 圖結構化呈現
是否容易轉化為代碼?PDL 是寫代碼前的“半成品”邏輯框架
對比維度Jackson 方法(JSP)PAD 圖(結構化圖)
所屬階段軟件詳細設計(過程設計)軟件詳細設計(過程設計)
表達方式以“輸入數據結構”為出發點,展開控制結構以“控制結構三要素”為核心(順序/選擇/循環)
核心思想程序結構應映射輸入數據結構控制邏輯結構化(結構程序設計三結構)
應用場景文件處理、數據順序結構強的問題任何通用的程序模塊邏輯設計
是否圖形化是,有自己的“Jackson 圖”是,使用專門的 PAD 圖格式
是否強調結構化? 強調結構化程序控制流程? 強調結構化三結構原則


? 結論:

  • 你可以理解為:Jackson 方法和 PAD 是“達到模塊內部結構清晰”的兩種不同技術路線。

  • 就像畫圖時有鉛筆素描法和水彩法,目的都是“表現結構”,但用法和偏好不同。

  • 在實際使用中,不同開發組織可能選用其中之一或混合使用。

An excellent course, yet regrettably one that rarely finds its place beyond academia.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86977.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86977.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86977.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DM8數據庫入門到熟練

1、部署 1.1、下載 用戶在安裝 DM 數據庫之前需要檢查或修改操作系統的配置&#xff0c;以保證 DM 數據庫能夠正確安裝和運行。 操作系統CPU數據庫CentOS7x86_64dm8_20250506_x86_rh7_64.zip 1.2、新建 dmdba 用戶 安裝前必須創建 dmdba 用戶&#xff0c;禁止使用 root 用戶…

VUE3入門很簡單(2)--- 計算屬性

前言 重要提示&#xff1a;文章只適合初學者&#xff0c;不適合專家&#xff01;&#xff01;&#xff01; 為什么需要計算屬性&#xff1f; 想象你在開發一個購物車功能。當用戶選擇商品時&#xff0c;你需要&#xff1a; 計算商品總價根據折扣碼調整價格自動更新免運費狀…

IPV6概述

1. 定義 IPv6&#xff08;Internet Protocol version 6&#xff09;是互聯網協議的第六版&#xff0c;設計用于替代現有的 IPv4 協議。IPv6 提供了更大的地址空間、增強的路由效率、更好的安全性以及自動配置功能&#xff0c;以滿足現代網絡的需求。 1.1 地址空間 IPv6 地址長…

量子機器學習:AI算力突破量子優勢臨界點?

前言 前些天發現了一個巨牛的人工智能免費學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 以下是為您撰寫的第六篇CSDN深度技術解析文章&#xff0c;圍繞前沿命題 《量子機器學習&#xff1a;AI算力突破量子優勢臨界點&…

Kerberos 深入詳解:原理、認證流程與應用場景

目錄 什么是 KerberosKerberos 原理解析Kerberos 認證完整流程Kerberos 應用場景常見問題與最佳實踐參考資料 什么是 Kerberos Kerberos 是一種廣泛應用于計算機網絡中的身份認證協議&#xff0c;它基于對稱密鑰加密思想&#xff0c;核心目標是在不安全的網絡中實現安全的身份…

mac安裝node 實測可行

進入nodejs官網&#xff0c;選擇mac,選擇安裝方式&#xff0c;選擇版本即可獲得安裝命令 直接執行即可 具體腳本 # Download and install nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash# in lieu of restarting the shell \. "…

山石網科談平凡對話中的咒語——提示詞注入攻擊與防御

現場 2026 年 4 月 25 日上午&#xff0c;A市 初春的街道&#xff0c;陽光普照&#xff0c;鳥語花香&#xff0c;V 君中午要與一個重要的客戶見面&#xff0c; 特意預約了人氣正旺的星際咖啡館&#xff0c;他家主打未來科幻風&#xff0c;之前去過幾次&#xff0c; 服務周到、…

SpringMVC系列(五)(響應實驗以及Restful架構風格(上))

0 引言 作者正在學習SpringMVC相關內容&#xff0c;學到了一些知識&#xff0c;希望分享給需要短時間想要了解SpringMVC的讀者朋友們&#xff0c;想用通俗的語言講述其中的知識&#xff0c;希望與諸位共勉&#xff0c;共同進步&#xff01; 本系列會持續更新&#xff01;&…

Windows 環境下設置 RabbitMQ 的 consumer_timeout 參數

在 Windows 環境下設置 RabbitMQ 的 consumer_timeout 參數&#xff0c;可以通過臨時修改或永久修改兩種方式實現。以下是具體操作步驟&#xff1a; 一、臨時修改&#xff08;無需重啟服務&#xff0c;但重啟后失效&#xff09; ?通過命令行動態設置? 打開命令提示符&#xf…

Python 中切換鏡像源

在 Python 中切換鏡像源主要涉及 pip 包管理器 和 conda 環境&#xff08;如 Anaconda、Miniconda&#xff09; 的配置。國內訪問 Python 官方源&#xff08;PyPI&#xff09;可能較慢&#xff0c;因此推薦使用國內鏡像源&#xff08;如阿里云、清華大學、豆瓣等&#xff09;。…

深入解析拓撲排序算法:從原理到C++實現

一、拓撲排序概述 拓撲排序(Topological Sorting)是對有向無環圖(Directed Acyclic Graph&#xff0c;簡稱DAG)的頂點進行排序&#xff0c;得到一個線性序列&#xff0c;使得對于圖中的任意一對頂點u和v&#xff0c;若存在一條從u到v的路徑&#xff0c;則u在排序結果中出現在v…

圖像質量對比感悟

具體任務&#xff1a; 在本次任務中&#xff0c;我需要對比兩張1080p的yuv圖片的清晰度&#xff0c;那么如何判斷呢&#xff1f;主要是進行了主觀判斷和客觀psnr的判斷。 psnr解釋&#xff1a; 定義&#xff1a; PSNR 用于衡量 兩幅圖像之間的差異&#xff08;通常是原始圖像和…

機器學習(ML)-Scikit-Learn--快速入門

專欄:機器學習 個人主頁:云端筑夢獅 一.數據集讀取方法&#xff08;常用功能用熟即可不用背下來&#xff09; 以例子代表需要的知識點和方法。 1. 導入必要的庫 from sklearn.datasets import load_iris import numpy as npload_iris()&#xff1a;用于加載鳶尾花數據集的…

SQL語句四大分類詳解:DDL、DML、DQL、DCL

前言 SQL&#xff08;Structured Query Language&#xff09;是用于管理和操作關系型數據庫的標準語言。無論是開發人員還是數據庫管理員&#xff0c;掌握 SQL 是必不可少的技能。 SQL 根據功能的不同&#xff0c;通常被劃分為 四大類&#xff1a; ? DDL&#xff08;數據定義…

如何將Word里每頁的行數設置成50行

https://www.zhihu.com/question/357856175 本文來自知乎林聽晴 第一步&#xff1a;新建一個Word文檔 打開“頁面布局”&#xff0c;之后點擊圖片圈起來的小圖標&#xff0c;即可出現“頁面設置”頁面。 ? ? 路徑&#xff1a;頁面設置—文檔網絡&#xff0c;可以看到默認行…

純前端本地文件管理器(VSCode風格)(瀏覽器對本地文件增刪改查)

純前端本地文件管理器&#xff08;VSCode風格&#xff09;(瀏覽器對本地文件增刪改查) 簡介 本項目為一個純前端實現的本地文件管理器網頁&#xff08;index.html&#xff09;&#xff0c;可在 Chrome/Edge 瀏覽器中直接打開&#xff0c;具備類似 VSCode 的本地文件夾操作體驗…

windows安裝wsl、Ubuntu、docker desktop

以下是Windows安裝WSL&#xff08;Windows Subsystem for Linux&#xff09;及在Ubuntu中配置使用Docker的完整流程&#xff0c;整合了最新官方方案和常見問題解決方案&#xff1a; &#x1f527; 一、Windows安裝WSL&#xff08;推薦WSL 2&#xff09; &#x1f4cd; 安裝前提…

華為云Flexus+DeepSeek征文|云端智能加持:華為云ModelArts Studio提升Chat2DB的AI數據庫管理效能

華為云FlexusDeepSeek征文&#xff5c;云端智能加持&#xff1a;華為云ModelArts Studio提升Chat2DB的AI數據庫管理效能 前言一、華為云ModelArts Studio平臺介紹1.1 ModelArts Studio介紹1.2 ModelArts Studio主要特點1.3 ModelArts Studio使用場景1.4 ModelArts Studio產品架…

微信小程序封裝loading 修改

1. custom-loading.vue <template><view v-if"visible" class"custom-loading-mask" touchmove.stop.prevent><view class"custom-loading-container"><!-- 動態點點 --><text class"loading-text">{…

Windows環境下Docker容器化的安裝與設置指南

哈嘍&#xff0c;大家好&#xff0c;我是左手python&#xff01; 系統要求與準備工作 在開始安裝和配置 Docker 之前&#xff0c;需要確保您的 Windows 系統滿足以下要求&#xff1a; 操作系統版本&#xff1a;推薦使用 Windows 10 或更高版本&#xff0c;特別是 64 位版本。對…