软件设计任务 从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统结构。

Slides:



Advertisements
Similar presentations
作業一 : USING DBMS ( 使用 DB2 及 SQL 基本練習 ) 報告人:學生楊群期 學號: 課程 : 高等資料庫 講師 : 楊維邦教授.
Advertisements

2.1 算法与程序 2.2 结构化程序设计方法简介 2.3 结构化程序的描述 2.4 简单程序分析.
数据库原理及应用(ORACLE)实用教程
广州宜家选址分析 0连锁 李若谷 陈玉风 黄小飞 蓝柔盈.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
二十世紀 1940年 組員: 李宛倫 蔡佩君 李致柔 陳佩宜.
软件工程 第四章 结构化分析与设计 制作者 程丽.
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
An Introduction to Database Systems
山东建筑大学 国家级虚拟仿真实验教学中心 (建筑工程及装备) 申报及建设情况汇报
第二章 可行性研究.
第八章 信息系统开发概述.
数据结构(C语言版) Data Structure
D、結構化技術 主要的結構化技術 結構化程式設計 (Structured Programming)
国家和我省禽业发展政策 和扶持项目解读 安徽省畜牧兽医局
第6章 软件编码 6.1 程序设计语言 6.2 编码风格及软件效率 6.3 程序复杂度的概念及度量方法 6.4 小结.
HSPICE 基本操作.
软件工程 咸阳师范学院 信息工程学院.
第6章 系统分析 6.1 概述 6.2 逻辑模型 6.3 逻辑结构分析 6.4 用例分析 6.5 概念类分析.
新世代計算機概論 第14章 程式語言.
第一章 引论 1.1操作系统的概念 计算机系统: 计算机硬件 计算机软件 计算机硬件:运算器、控制器、存储器、输入设备和 输出设备
初中獨立專題探究(文字模式) 課程規劃與教學經驗分享
晶体化学的发展及简单晶体的制作 组长:赵荣超 组员:邱静雯 叶奕琳 李晓芳 李展铨 区淑娴 梁雪莹.
Chapter 7 Search.
標準作業流程(SOP)的編製 --以楊梅高中「註冊組」之實作為例--
Chapter 4 歸納(Induction)與遞迴(Recursion)
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第 7 章 陣列 (Array).
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
Transact-SQL 語言設計教學.
第5章 結構化分析與設計-流程塑模.
MIS原理与应用 第七讲 系统需求分析之 逻辑模型
資訊系統文件化工具 東吳大學會計學系 謝 永 明.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
第六章 : 資料模型之繪製 1. 前言 資料流程圖 ( DFD ) 及 處理邏輯工具
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
软件工程 Software Engineering
第五章 详细设计.
軟體工程:如何開發軟體? 把它看成是一件工程。 那麼就會有一些工具、技術、方法,也有管理的議題。
A、資訊系統開發概論與課程簡介 何謂資訊系統? 為何需要系統分析師? 需要瞭解哪些知識? 領域知識? 資訊科技? 開發方法與技術? 課程簡介.
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
B+ Tree.
第二章 词法分析4 词法分析程序实现 构造词法分析器步骤 单词的形式化描述 词法分析程序的实现.
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
证书发放工作要点及流程 学院办公室.
软件工程 第四章 软件设计 软件过程设计技术与工具.
梁文新 办公室:综合楼108 电 话: 软件工程导论 梁文新 办公室:综合楼108 电 话:
梁文新 办公室:综合楼108 电 话: 软件工程导论 梁文新 办公室:综合楼108 电 话:
信息系统开发 信息系统开发的组织工作 第一阶段 系统规划 第二阶段 系统分析.
第15章 系統分析與設計.
信息系统开发 信息系统开发的组织工作 第一阶段 系统规划 第二阶段 系统分析 第三阶段 系统设计 第四阶段 系统实施.
銘傳大學 商品設計學系 副教授兼系主任 衛 萬 里 博士 最高學歷 國立台灣科技大學設計研究所 設計學博士 教學研究
第5章 软件详细设计 本章内容结构 本章引言 学习目标 教学内容 本章小结 思考和练习 课堂讨论 2019年4月26日.
機率論 研究自然律的重要工具之一 解決日常生活中的簡單問題。  . 機率論 研究自然律的重要工具之一 解決日常生活中的簡單問題。  
單元名稱:結構化程式設計 報告人 劉洲溶.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
第八章 工作設計與工作衡量 工作設計(方法工程)與工作衡量(時間研究)是對工作系統做有系統的研究(又稱為工作研究),其目的在發展一個較好的系統及方法,能以較低的成本與較高的效率圓滿完成工作。 接著將此一新的系統及方法標準化,爾後訓練作業員執行工作時均按此一較好的系統及方法,因此工作設計與工作衡量所得的結果可做為獎工制度訂定的重要依據。
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
第七章 软件测试 Software Testing
第6章 详细设计 Detailed Design
C#快速導讀 流程控制.
看圆如何七十二变 微建筑早课.
11/22 DSD Project Team Leader Report
第十章 : 系統建置與運轉 1. 前言 讓系統順利運轉之三類工作 : a) 轉換設計文件成為軟體 : 程式撰寫、軟體測試 、系統安裝
第七章 結構化企業流程塑模個案.
Presentation transcript:

软件设计任务 从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统结构。 详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。

第一章 软件和软件工程 软 件 工 程 ---第6章 详细设计

引言: 详细设计的任务 (Program Design  Coding) 为SC图的每一个模块确定使用的算法和数据结构 §1. 详细设计的任务 引言: 详细设计的任务 (Program Design  Coding) 为SC图的每一个模块确定使用的算法和数据结构 ⑴ 确定模块内算法,用某种工具来表达 ⑵ 确定模块内的数据结构 ⑶ 确定模块间的接口细节 ⑷ 为每个模块设计测试

引言:详细设计的任务 进行详细设计的原则 ⑴ 在保证正确可靠的前提下,尽量提高算法的可读性 ⑵ 结构化设计方法 ① 自顶向下逐步求精; §6. 详细设计的任务 引言:详细设计的任务 进行详细设计的原则 ⑴ 在保证正确可靠的前提下,尽量提高算法的可读性 ⑵ 结构化设计方法 ① 自顶向下逐步求精; ② 具有单入、单出的控制结构(取消GOTO语句) ⑶ 用工具来描述模块算法

引言:详细设计(过程设计、模块设计) 主要任务:编写详细设计说明书 为此,设计人员应: (1)确定每个模块的算法,用工具 表达算法的过程,写出模块的 详细过程性描述。 (2)确定每一模块的数据结构。 (3)确定模块接口细节。 详细设计是编码的先导。

6.1 结构化程序设计(SP)方法 传统的设计技术和旧观念: 新的设计思想和风格: 强调设计的随意性,具有浓厚的个人色彩. 追求程序效率和个人设计技巧 新的设计思想和风格: 清晰第一 使用标准的、规范的控制结构 逐步细化

结构程序设计原则 程序的读者有二个:计算机和人,人们测试、维护、诊断和修改程序都必须读懂程序 衡量程序质量不仅要看逻辑是否正确,性能是否良好,还要看它是否容易阅读和理解 程序的质量与GOTO语句数量成反比 只用3种或几种基本结构来构造程序 每个程序应是单入口和单出口 结构程序设计是一种使程序容易阅读、理解的编程方法,自顶向下,逐步求精,用3种基本结构构造程序

§2. 设计工具 §2. 设计工具 在详细设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。表达过程规格说明的工具叫做详细设计工具,它可以分为以下三类: 图形工具 表格工具 语言工具

1、程序流程图(Program Flow Chart) §2. 设计工具 1、程序流程图(Program Flow Chart) 程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:

§2. 设计工具

示例 §2. 设计工具

§2. 设计工具 程序流程图的标准符号

§2. 设计工具 循环的标准符号 注解的使用

§2. 设计工具 多出口判断

 优点:容易掌握,且历史“悠久”,使用广泛。 §2. 设计工具  任何复杂的程序流程图都应由以上五种基本结构组合而成。  优点:容易掌握,且历史“悠久”,使用广泛。  缺点:本质上不具备逐步求精的特点,对于提高 大型系统的可理解性作用甚微; 不易表示数据结构; 转移控制太方便。  趋势:仃止使用

§2. 设计工具 2、N-S图 N-S图也叫做盒图(Box Diagram) 。五种基本控制结构由五种图形构件表示。

§2. 设计工具 示例

§2. 设计工具 N-S图的嵌套定义形式

② 每个矩形框(Case中条件取值例外)都是一个功能域(即一个特定结构的作用域),结构表示明确; §2. 设计工具 特点: ① 没有箭头,不允许随意转移控制; ② 每个矩形框(Case中条件取值例外)都是一个功能域(即一个特定结构的作用域),结构表示明确; ③ 局部及全程数据的作用域易见; ④ 易表现嵌套关系(embedded structure)以及模块的层次结构。

3、PAD图(Problem Analysis Diagram):日立公司,1973 §2. 设计工具 3、PAD图(Problem Analysis Diagram):日立公司,1973 A B Sequential While P S Until P Loops P A B THEN ELSE Selective P = A1 A2 Case An 1 2 n … Statement Index def Definition

例:N-S图与PAD的转换 §2. 设计工具 x4 i g h f k x1 b a j x2 c d e k : Do-Until x6 Do-While x3 2 3 d e k :

§2. 设计工具 a j Until x5 i Until x6 b x1 k f x4 g h k x2 d e While x3 c 开始  结束  a j Until x5 i Until x6 b x1 k f x4 g h def k x2 d e 1 2 3 While x3 c

③ 容易将PAD自动转换为高级语言源程序。 §2. 设计工具 特点: ① 结构清晰,层次分明,易读; ② 支持逐步求精的设计思想; ③ 容易将PAD自动转换为高级语言源程序。

4 判定表 当算法中包含多重嵌套的条件选择时,用程序流程图、 N-S图或PAD都不易清楚地描述。这时可以用判定表或判定树来描述这些复杂的条件。判定表与判定树除了在详细 设计阶段使用外,在需求分析阶段也经常使用。 判定表一般由4部分组成:左上半部分列出所有条件、左下半部分列出所有动作、右上半部分列出各种条件组合,右下半部分列出和每组条件取值组合对应的动作。其结构下图所示:

图3.33 判定表结构示意图 判定表的优点是能够简洁,无二义性的描述所有的处理规则。缺点是它所表示的是静态逻辑,是在某种条件组合情况下可能的结果,它不能表达加工的顺序,也不能表达循环结构。因此,判定表不能成为一种通用的设计工具, 一般作为辅助工具配合其他工具一起使用。

例 某“订货单处理程序”的处理逻辑描述如下: “如果订货金额不足500元且未过期,则向客户发出批准单和提货单,已过期的,什么也不发;如果订货金额超过500元但不足1000元,则发出批准单和提货单,对已过期的,还要发过期通知单;如果订货金额超过1000元,不论是否过期,都要发出批准单和提货单。” 试用判定表表示出该逻辑。 判定表如表3.2所示:

表3.2 判定表实例 动 作 条 件 1 2 3 4 金额<500 金额>1000 过期 F T 500<金额<1000 发过期通知单 √   1 2 3 4 条 件 过期 F T 金额<500 500<金额<1000 金额>1000 动 作 发过期通知单 √ 发批准单 发提货单

判定树实质上是判定表的一种变形,本质上是一样的。 判定树的优点是形式简单、比较直观、易于掌握和使用。 5.判定树(Decision Tree) 判定树实质上是判定表的一种变形,本质上是一样的。 判定树的优点是形式简单、比较直观、易于掌握和使用。 缺点是不如判定表简洁。对于例3.3的描述可用判定树表示成如图3.34所示的形式: 图3.34 判定树实例

6、PDL语言(Program Design Language):又称 Pseudocode. §2. 设计工具 6、PDL语言(Program Design Language):又称 Pseudocode. 例: PROCEDURE spell_check IS BEGIN Split document into single words Look up words in dictionary Display words which are not in dictionary Create a new dictionary END spell_check External statements Internal

TYPE number IS STRING LENGTH (12) §2. 设计工具 应具备以下特点: ① 有固定的外语法(keyword); ② 内语法用自然语言描述; ③ 有数据说明,例如: TYPE number IS STRING LENGTH (12) TYPE table IS INSTANCE OF symbol_table 抽象类型 ④有子程序定义与调用机制,例如: PROCEDURE <子程序名> <属性:内部\外部,编程语言等等> INTERFACE <参数表:I\O等等> pseudocode lines  END 调用时可用:PERFORM <子程序名> USING<参数表>

优点:易于实现由PDL到源代码的自动转换。 缺点:不够直观。 §2. 设计工具 优点:易于实现由PDL到源代码的自动转换。 缺点:不够直观。

§3. 面向数据结构的设计方法 Jackson System Development(JSD) 与SD的由DFD导出结构设计不同,JSD是以数据结构(data structure)为基础设计每个模块的处理过程。 注意: H中的方框表示模块,而JD中的方框代表几个语句构成的简单操作; H表现调用关系,而JD表现组成关系。 1、Jackson Diagram: A B C A = Bo Co S A = B B* I

2、Jackson方法: 例:(P.91)一个正文文件由若干个记录组成, 每个记录是一个字符串。要求统计每个记录中 空格字符的个数,以及文件中空格字符的总个 数。要求的输出数据格式是:每复制一行输入 字符串之后,另起一行印出这个字符串中的空 格数,最后印出文件中空格的总个数。

第1步:用Jackson图描述 I\O 的数据结构 正文文件 I 字符串* 字符* 空格O 非空格O S 输入 输出表格 表格体 串信息* 字符串 空格数 输出 空格总数 第2步:在两个图中指出有直接因果关系(causality)、可以同时处理的单元(重复的次序,次数均相同)

? ? 输入 输出 正文文件 字符串* 字符* 空格O 非空格O 输出表格 表格体 串信息* 字符串 空格数 空格总数 I 字符串* 字符* 空格O 非空格O S 输入 输出表格 表格体 串信息* 字符串 空格数 输出 空格总数 ? ?  经过程序处理由正文文件得到输出表格。  每处理输入中一个字符串后就得到输出中一个串信息,二者重复次序和次数均相同。  字符不与多字符组成的字符串对应。  单个空格不能决定空格数。

第3步:Data structure Program structure 把有对应关系的单元合为一个处理框,画在相应的层次中(不同层以低层为准) 正文文件 I 字符串* 字符* 空格O 非空格O S 输入 输出表格 表格体 串信息* 字符串 空格数 输出 空格总数 统计空格 程序体 印总数 处理字符串* I 印字符串 印空格数 分析字符* I 分析字符串 分析字符* 处理空格o 处理非空格o S 注:顺序执行的处理中不允许混有重复执行或选择执行的处理。

第4步:列出所有操作条件,并分配到上幅程序结构图中 统计空格 处理字符串* I(1) 程序体 印总数 印字符串 印空格数 分析字符* I 分析字符串 处理空格o 处理非空格o S 2 3 1 4 5 例:(部分列举,详见P.93-93) ⑴打开文件 ⑵读入字符串 ⑶空格总数totalsum=0 ⑷关闭文件 ⑸仃止 I ⑴文件结束 第5步:用Pseudocode 表示程序。(详见P.94 -95)

§4. Warnier方法 Warnier方法又称LCP法(Logically Constructing Program) 例:(P.96)假设要设计一个系统用来定期产生有关顾客帐目的报表,输入文件中每个顾客有一个头记录,后接若干个事务记录。 顾客姓名 顾 客 号 旧余额 活动号 数量 代码 (存/取)

输出报表如下: 顾客号 顾客姓名 活动号 支出数 存入数 新余额 旧余额 支出总数 存入总数

第1步:用Warnier Diagram 描述I\O的数据结构 见P.97 图5.16 第2步:Data Structure  Program Structure 。 见P.97 图 5.17 第3步:将上图对应转换为程序流程图,并将每 个处理框编号。见P.98 图 5.18 第4步:Pseudocode 分类。

例:(部分列举,详见P.98 - 99) 输 入 类 010 — 读 040 — 读 100 — 读 输 入 类 010 — 读 040 — 读 100 — 读 分支准备类:040 — 顾客号送到访问顾客号 分支指令类:010 — 若EOF 030 040 — 若读出的顾客号 =访问的顾客号 060 100 — 若读出的顾客号 =访问的顾客号 070 ………… 计 算 类:040 — 旧余额送到工作区 ………… 输 出 类:040 — 旧余额送到参考区 040 — 编辑顾客标题 040 — 输出并复原打印区

第5步:将前一步分类结果标号排序 Pseudocode. 见 P.99 — 100 辅助技术:当I\O 数据有多个时,借 助判定表

第一章 软件和软件工程 6.5 程序复杂程度的定量度量 详细设计阶段设计出的模块质量如何呢?第5章中曾经讲述了软件设计的基本原理和概念,经过详细设计之后每个模块的内容都非常具体了,因此可以使用这些原理进一步仔细衡量它们的质量。 由于软件工程还是一门很年轻的学科,目前许多定量度量方法还处在研究过程中,本节将要介绍的程序复杂程度定量度量方法是其中比较成熟的一种。

下面着重介绍使用得比较广泛的McCabe方法和Halstead方法。 第一章 软件和软件工程 定量度量程序复杂程度的方法很有价值:把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量,定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;程序的定量的复杂程度可以作为模块规模的精确限度。 下面着重介绍使用得比较广泛的McCabe方法和Halstead方法。

第一章 软件和软件工程 6.5.1 McCabe方法 1. 流图 McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。 为了突出表示程序的控制流,人们通常使用流图(也称为程序图)。所谓流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。

图6.15(见书128页)举例说明把程序流程图映射成流图的方法。 第一章 软件和软件工程 在流图中用圆表示结点,一个圆代表一条或多条语句。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句(实际上相当于一个空语句)。由边和结点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。 图6.15(见书128页)举例说明把程序流程图映射成流图的方法。

用任何方法表示的过程设计结果,都可以翻译成流图。图6.16是用PDL表示的处理过程及与之对应的流图。 第一章 软件和软件工程 用任何方法表示的过程设计结果,都可以翻译成流图。图6.16是用PDL表示的处理过程及与之对应的流图。 当过程设计中包含复合条件时,生成流图的方法稍微复杂一些。所谓复合条件,就是在条件中包含了一个或多个布尔运算符(逻辑OR,AND,NAND,NOR)。在这种情况下,应该把复合条件分解为若干个简单条件,每个简单条件对应流图中一个结点。包含条件的结点称为判定节点,从每个判定结点引出两条或多条边。图6.17是由包含复合条件的PDL片断翻译成的流图。

第一章 软件和软件工程 图6.16 由PDL翻译成的流图 第一章 软件和软件工程 图6.16 由PDL翻译成的流图

第一章 软件和软件工程 图6.17 由包含复合条件的PDL映射成的流图 第一章 软件和软件工程 图6.17 由包含复合条件的PDL映射成的流图

环形复杂度定量度量程序的逻辑复杂度。有了描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度。 第一章 软件和软件工程 2. 计算环形复杂度的方法 环形复杂度定量度量程序的逻辑复杂度。有了描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度。 (1) 流图中的区域数等于环形复杂度。 (2) 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。 (3) 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。

第一章 软件和软件工程 3. 环形复杂度的用途 程序的环形复杂度取决于程序控制流的复杂程度,也即是取决于程序结构的复杂程度。当程序内分支数或循环个数增加时,环形复杂度也随之增加,因此它是对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。 McCabe研究大量程序后发现,环形复杂度高的程序往往是最困难、最容易出问题的程序。实践表明,模块规模以V(G)≤10为宜,也就是说,V(G)=10是模块规模的一个更科学更精确的上限。

多次验证都表明,预测的长度H与实际长度N非常接近。 第一章 软件和软件工程 6.5.2 Halstead方法 Halstead方法是另一个著名的方法,它根据程序中运算符和操作数的总数来度量程序的复杂程度。 令N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序长度N定义为:N=N1+N2 详细设计完成之后,可以知道程序中使用的不同运算符(包括关键字)的个数n1,以及不同操作数(变量和常数)的个数n2。Halstead给出预测程序长度的公式如下:H=n1 log2 n1+n2 log2 n2 多次验证都表明,预测的长度H与实际长度N非常接近。

Halstead还给出了预测程序中包含错误的个数的公式如下:E=N log2 (n1+n2)/3000 第一章 软件和软件工程 Halstead还给出了预测程序中包含错误的个数的公式如下:E=N log2 (n1+n2)/3000 有人曾对从300条到12000条语句范围内的程序核实了上述公式,发现预测的错误数与实际错误数相比误差在8%之内。

小结 软件设计的分析设计方法有面向数据流的分析设计方法、面向数据结构的分析设计方法、面向对象的分析设计方法等 详细设计要对概要设计生成的系统各功能模块进行进一步的细化和描述,进行描述的工具有流程图、NS图、PAD图、PDL语言等  软件设计最后生成一份软件设计说明书,要包括整个系统的结构图SC图,用一种工具描述的各模块细节