第 7章 应用软件设计与开发技术
7.1 软件工程概述
7.2 结构化分析方法
7.3 结构化设计方法
7.4 测试与调试基本技术
7.1 软件工程概述
7.1.1 软件工程的概念
软件工程是指采用工程的概念、原理、技
术和方法指导软件的开发与维护。
软件工程学的主要研究对象包括软件开发
与维护的技术、方法、工具和管理等方面。在软
件研制开发过程中,若能严格遵循软件工程的方
法论,便可提高软件开发的成功率,减少软件开
发和维护中出现的问题。
7.1.2 软件生命周期
某一软件从被提出并着手开始实
现,直到软件完成其使命为止的全过
程被划分为一些阶段,并称这一全过
程为软件生命周期。
通常,软件生命周期包括八个阶
段:问题定义、可行性研究、需求分
析、系统设计、详细设计、编码、测
试和运行维护。
为使各时期的任务更明确,又可以分
为以下三个时期:
1.软件定义期
( 1)问题定义
( 2)可行性研究
可行性研究的目的是进一步研究上一
阶段所定义的问题是否可解。
( 3)需求分析
在这个阶段中,根据可行性研究阶段
提交的文档,特别是从数据流图出发,对
目标系统提出清晰、准确和具体的要求,
即要明确系统必须做什么。
2.软件开发期
( 1)系统设计
这一阶段任务是划分出构成系统的各
物理元素以及设计出软件的结构 。
( 2)详细设计
详细设计的任务是对系统作出精确的
描述,以便在编码阶段可直接将这一描述
用程序设计语言编制成程序。
( 3)编码
编码是将系统设计与详细设计阶段
中的结果翻译成用某种程序设计语言书
写的程序。
( 4)测试
测试的目的是要尽量发现程序中的
错误,但绝不能证明程序的正确性。
3.软件维护期
7.1.3 应用软件开发的原则和方法
1,应用软件开发的基本原则
( 1)自顶向下的系统结构开发原则
( 2)模块化结构开发原则
2.应用软件的开发方法
( 1)非自动形式的开发方法
① 系统流程图法
② 结构化分析方法
③ 结构化设计方法
④ 数据结构法
⑤ 层次输入 — 处理 — 输出方法
( 2)半自动形式的开发方法
① 软件需求工程法
② 问题说明语言 /分析器
3.自动形式的系统开发方法
7.2 结构化分析方法
7.2.1 SA方法的特点
1.分解和抽象
2.文档的规范化
3.面向用户
4.系统的逻辑设计和物理
设计分开进行
7.2.2 数据流程图
1.数据流程图的概念
图 7.2所示的是一个描述研究生从入学
到毕业的业务活动的数据流程图。
2.数据流程图的组成符号
一般来说,数据流程图由四种基本成
分构成:数据流、数据处理、数据存储和
外部实体。
它们的符号如图 7.3所示。
3.画数据流程图的方法
( 1)自顶向下逐层分解方法
( 2)由外向里逐渐深化方法
7.2.3 数据字典
数据字典是结构化分析方法的另
一个重要工具。
数据字典主要是给数据流程图中
的每一个数据流名、文件名以及处理
名建立一个条目,在这些条目中给出
各名字的定义。
在数据字典中,通常有四种类型的条目。
1.基本数据项条目
2.数据流条目
3.文件条目
4.加工条目
(即数据处理条目)
7.2.4 功能说明
功能说明又称为“小说明”,它是对
数据流程图中每个加工的详细描述,从而
也是结构化分析的主要工具之一。
1.结构化语言
结构化语言是介于形式语言与自
然语言之间的一种语言。
在结构化语言中,使用顺序结构、
选择结构和循环结构来描述加工处理
中的各种功能操作。
2.判定树
判定树又称决策树,它是一种图形工
具。在判定树中,树根在最左边,它是判
定的起点;后面依次是各个分支,每一个
分支中包括表示问题的条件和根据该条件
所做的行动。
例如,图 7.4所示的是组织春游活动的
一棵判定树,它根据天气情况以及交通工
具来决定春游地点。
3.判定表
判定表是判定树的表格形式。
例如,图 7.4所示的判定树用判定表表
示,如图 7.5所示。
4.三种表达方式的比较
表 7.1是这三种表达工具的比较。
7.3 结构化设计方法
7.3.1 SD方法的特点
结构化设计( Structured Design,SD)
方法采取“分解”的手段来控制系统的复
杂性,即把一个大型系统分解成若干个相
对独立、功能单一的模块。
7.3.2 结构图
1.结构图
结构图( Structured Chart,SC)的
基本元素是模块,一般用矩形框表示。
结构图将一个系统分解为若干个模块,
每个模块可以看成一个“黑盒”,在图中
表示它的层次、构成和相互之间的关系。
一般来说,结构图包括以下四种成
分。
( 1)模块
模块用矩形框表示,矩形框中标明
模块的名称,它反映该模块的功能。
( 2)调用
在结构图中,用带有箭头的连线表
示模块之间的调用关系。
( 3)模块间信息传递
在结构图中,用一些带有圆圈的
小箭头来表示模块之间的通信,即模
块调用时数据或控制信息的传递,箭
头的方向表示传递的方向。
( 4)辅助符号
在结构图中,有时还要用到一些
辅助符号。
2.由数据流程图导出结构图
SD方法实际上是面向数据流程图的,
即它的工作对象实际上是在 SA方法中形成
的数据流程图。
因此,可以由数据流程图来导出结构
图。
( 1)变换型
( 2)事务型
7.3.3 模块独立性的评价
评价模块独立性的主要标准有两个:
一是模块之间的耦合,它表明两个模块之
间互相独立的程度;二是模块内部之间的
关系是否紧密,称为内聚。
( 1)耦合
耦合模块之间的耦合反映了模块的独
立性,也反映了系统分解后的复杂程度。
① 数据耦合
② 同构耦合
③ 控制耦合
④ 公用耦合
⑤ 内容耦合
( 2)内聚
内聚是对一个模块内部元素之间功
能上相互联系强度的测量。
① 功能内聚
② 序列内聚
③ 通信内聚
④ 过程内聚
⑤ 时间内聚
⑥ 逻辑内聚
⑦ 偶然内聚
7.4 测试与调试基本技术
7.4.1 测试
1.测试的基本概念
软件测试的目标是在精心控制的环境
下执行程序,以发现程序中的错误,给出
程序可靠性的鉴定。
测试具有以下三个重要特征。
( 1)测试的挑剔性
( 2)完全测试的不可能性
( 3)测试的经济性
2.测试的过程
程序的测试一般按三种方式进行:静
态分析,动态测试和自动测试。
( 1)程序的静态分析
静态分析指不执行程序,而只人工对
程序文本进行检查,通过阅读和讨论,分
析和发现程序中的错误。
( 2)程序的动态分析
程序的动态分析是使用测试用例在计
算机上运行程序,使程序在运行过程中暴
露错误。
( 3)自动测试工具
自动测试工具实际上是人们编制的用
于测试的软件,并用它来代替人工测试。
3.测试的层次
( 1)模块测试
模块测试又称单元测试。
模块测试的目标是发现局部模块的逻
辑与功能上的错误和缺陷。
它主要对以下几个方面进行测试。
① 模块接口
② 局部数据结构
③ 重要路径
④ 错误处理的能力
⑤ I/O错
( 2)整体测试
整体测试的目标是尽量暴露模块
测试时不能暴露的结构错误,如一个
模块是否破坏了另一个模块的功能,
数据通过接口时是否会丢失,能否产
生主功能以及误差是否有积累等。
整体测试可分为渐增式与非渐增
式两种。
非渐增式的整体测试是将经过单独测
试的所有模块连接到一起进行测试。
渐增式的整体测试往往是与模块测试
同步进行的,即在对模块逐步装配的过程
中同时进行。
①,自顶向下”渐增式测试
②,自底向上”渐增式测试
( 3)高级测试
① 功能测试
② 系统测试
③ 验收测试
④ 安装测试
4.测试的方法
对程序进行测试需要使用一些数据,
每进行一次测试,就需要一组测试数据,
这些测试数据通常称为测试用例。
( 1)白箱法
白箱测试是根据对程序内部逻辑结构
的分析来选取测试用例。
① 语句覆盖
语句覆盖准则是企图用足够多的测试
用例,使程序中的每个语句都执行一遍,
以便尽可能多地发现程序中的错误。
② 分支覆盖
分支覆盖准则也称为判定覆盖准则。
③ 条件覆盖
条件覆盖准则是通过执行足够多的测
试用例,使每个判定中的每个条件都能取
得两种不同的结果(“真”与“假”)。
④ 组合条件覆盖
组合条件覆盖准则要求通过足够多的
测试用例,使每个判定中各条件的各种可
能组合至少出现一次。
( 2)黑箱法
黑箱测试方法完全不考虑程序的内部
结构和内部特征,而只是根据程序功能导
出测试用例。
① 等价分类法
等价分类法是把所有可能的输入数据
(有效的和无效的)划分成若干等价类,
使每一类中的一个典型数据在测试中的作
用与这一类中所有其他数据的作用相同。
② 边值分析法
边值分析着眼于使该等价类的边界情
况成为测试的主要目标来选取测试用例。
③ 因果图法
因果图法是设计测试用例的一种系统
方法,有助于测试人员系统地选择高效的
测试用例。
④ 错误推测法
错误推测法也称猜错法,它无一定之
规可循,在很大程度上是凭经验或直觉推
测程序中可能存在的各种错误,从而有针
对性地编写测试用例。
( 3)综合策略
7.4.2 调试
调试也称排错 。
一般的调试过程分为错误侦查、错误
诊断和改正错误。
1.调试技术
常用的调试技术有以下五种。
( 1)输出存储器内容。
( 2)在程序中插入调试语句。
( 3)利用调试用例,迫使程序逐个
通过所有可能出现的执行路径,系统地排
除“无错”的程序分支,逐步缩小检查的
范围。
( 4)经静态分析、动态测试或自动
测试,都会得到大量与程序错误有关的信
息,这些信息都可在调试时加以利用。
( 5)借助调试工具。
2.调试策略
( 1)试探法
( 2)回溯法
( 3)对分查找法
( 4)归纳法
( 5)演绎法
7.5 软件开发新技术
7.5.1 原型方法
原型法将软件开发过程分为以下四个步骤。
( 1)确定用户的基本要求
( 2)开发初始原型
( 3)实现并运行原型
( 4)修改并完善原型
7.5.2 瀑布模型
瀑布模型规定了整个软件生命周
期内的各项软件工程活动,并且还规
定了这些活动自上而下、相互衔接的
顺序,如图 7.13所示。
7.5.3 面向对象技术
1.面向对象技术的基本概念
( 1)对象
( 2)类
( 3)方法
( 4)消息
( 5)继承
( 6)封装
对象具有以下一些基本特征。
( 1)模块性
( 2)继承性和类比性
( 3)动态连接性
( 4)易维护性
2.面向对象技术的特点
( 1)可重用性
( 2)可维护性
( 3)表示方法的一致性
7.1 软件工程概述
7.2 结构化分析方法
7.3 结构化设计方法
7.4 测试与调试基本技术
7.1 软件工程概述
7.1.1 软件工程的概念
软件工程是指采用工程的概念、原理、技
术和方法指导软件的开发与维护。
软件工程学的主要研究对象包括软件开发
与维护的技术、方法、工具和管理等方面。在软
件研制开发过程中,若能严格遵循软件工程的方
法论,便可提高软件开发的成功率,减少软件开
发和维护中出现的问题。
7.1.2 软件生命周期
某一软件从被提出并着手开始实
现,直到软件完成其使命为止的全过
程被划分为一些阶段,并称这一全过
程为软件生命周期。
通常,软件生命周期包括八个阶
段:问题定义、可行性研究、需求分
析、系统设计、详细设计、编码、测
试和运行维护。
为使各时期的任务更明确,又可以分
为以下三个时期:
1.软件定义期
( 1)问题定义
( 2)可行性研究
可行性研究的目的是进一步研究上一
阶段所定义的问题是否可解。
( 3)需求分析
在这个阶段中,根据可行性研究阶段
提交的文档,特别是从数据流图出发,对
目标系统提出清晰、准确和具体的要求,
即要明确系统必须做什么。
2.软件开发期
( 1)系统设计
这一阶段任务是划分出构成系统的各
物理元素以及设计出软件的结构 。
( 2)详细设计
详细设计的任务是对系统作出精确的
描述,以便在编码阶段可直接将这一描述
用程序设计语言编制成程序。
( 3)编码
编码是将系统设计与详细设计阶段
中的结果翻译成用某种程序设计语言书
写的程序。
( 4)测试
测试的目的是要尽量发现程序中的
错误,但绝不能证明程序的正确性。
3.软件维护期
7.1.3 应用软件开发的原则和方法
1,应用软件开发的基本原则
( 1)自顶向下的系统结构开发原则
( 2)模块化结构开发原则
2.应用软件的开发方法
( 1)非自动形式的开发方法
① 系统流程图法
② 结构化分析方法
③ 结构化设计方法
④ 数据结构法
⑤ 层次输入 — 处理 — 输出方法
( 2)半自动形式的开发方法
① 软件需求工程法
② 问题说明语言 /分析器
3.自动形式的系统开发方法
7.2 结构化分析方法
7.2.1 SA方法的特点
1.分解和抽象
2.文档的规范化
3.面向用户
4.系统的逻辑设计和物理
设计分开进行
7.2.2 数据流程图
1.数据流程图的概念
图 7.2所示的是一个描述研究生从入学
到毕业的业务活动的数据流程图。
2.数据流程图的组成符号
一般来说,数据流程图由四种基本成
分构成:数据流、数据处理、数据存储和
外部实体。
它们的符号如图 7.3所示。
3.画数据流程图的方法
( 1)自顶向下逐层分解方法
( 2)由外向里逐渐深化方法
7.2.3 数据字典
数据字典是结构化分析方法的另
一个重要工具。
数据字典主要是给数据流程图中
的每一个数据流名、文件名以及处理
名建立一个条目,在这些条目中给出
各名字的定义。
在数据字典中,通常有四种类型的条目。
1.基本数据项条目
2.数据流条目
3.文件条目
4.加工条目
(即数据处理条目)
7.2.4 功能说明
功能说明又称为“小说明”,它是对
数据流程图中每个加工的详细描述,从而
也是结构化分析的主要工具之一。
1.结构化语言
结构化语言是介于形式语言与自
然语言之间的一种语言。
在结构化语言中,使用顺序结构、
选择结构和循环结构来描述加工处理
中的各种功能操作。
2.判定树
判定树又称决策树,它是一种图形工
具。在判定树中,树根在最左边,它是判
定的起点;后面依次是各个分支,每一个
分支中包括表示问题的条件和根据该条件
所做的行动。
例如,图 7.4所示的是组织春游活动的
一棵判定树,它根据天气情况以及交通工
具来决定春游地点。
3.判定表
判定表是判定树的表格形式。
例如,图 7.4所示的判定树用判定表表
示,如图 7.5所示。
4.三种表达方式的比较
表 7.1是这三种表达工具的比较。
7.3 结构化设计方法
7.3.1 SD方法的特点
结构化设计( Structured Design,SD)
方法采取“分解”的手段来控制系统的复
杂性,即把一个大型系统分解成若干个相
对独立、功能单一的模块。
7.3.2 结构图
1.结构图
结构图( Structured Chart,SC)的
基本元素是模块,一般用矩形框表示。
结构图将一个系统分解为若干个模块,
每个模块可以看成一个“黑盒”,在图中
表示它的层次、构成和相互之间的关系。
一般来说,结构图包括以下四种成
分。
( 1)模块
模块用矩形框表示,矩形框中标明
模块的名称,它反映该模块的功能。
( 2)调用
在结构图中,用带有箭头的连线表
示模块之间的调用关系。
( 3)模块间信息传递
在结构图中,用一些带有圆圈的
小箭头来表示模块之间的通信,即模
块调用时数据或控制信息的传递,箭
头的方向表示传递的方向。
( 4)辅助符号
在结构图中,有时还要用到一些
辅助符号。
2.由数据流程图导出结构图
SD方法实际上是面向数据流程图的,
即它的工作对象实际上是在 SA方法中形成
的数据流程图。
因此,可以由数据流程图来导出结构
图。
( 1)变换型
( 2)事务型
7.3.3 模块独立性的评价
评价模块独立性的主要标准有两个:
一是模块之间的耦合,它表明两个模块之
间互相独立的程度;二是模块内部之间的
关系是否紧密,称为内聚。
( 1)耦合
耦合模块之间的耦合反映了模块的独
立性,也反映了系统分解后的复杂程度。
① 数据耦合
② 同构耦合
③ 控制耦合
④ 公用耦合
⑤ 内容耦合
( 2)内聚
内聚是对一个模块内部元素之间功
能上相互联系强度的测量。
① 功能内聚
② 序列内聚
③ 通信内聚
④ 过程内聚
⑤ 时间内聚
⑥ 逻辑内聚
⑦ 偶然内聚
7.4 测试与调试基本技术
7.4.1 测试
1.测试的基本概念
软件测试的目标是在精心控制的环境
下执行程序,以发现程序中的错误,给出
程序可靠性的鉴定。
测试具有以下三个重要特征。
( 1)测试的挑剔性
( 2)完全测试的不可能性
( 3)测试的经济性
2.测试的过程
程序的测试一般按三种方式进行:静
态分析,动态测试和自动测试。
( 1)程序的静态分析
静态分析指不执行程序,而只人工对
程序文本进行检查,通过阅读和讨论,分
析和发现程序中的错误。
( 2)程序的动态分析
程序的动态分析是使用测试用例在计
算机上运行程序,使程序在运行过程中暴
露错误。
( 3)自动测试工具
自动测试工具实际上是人们编制的用
于测试的软件,并用它来代替人工测试。
3.测试的层次
( 1)模块测试
模块测试又称单元测试。
模块测试的目标是发现局部模块的逻
辑与功能上的错误和缺陷。
它主要对以下几个方面进行测试。
① 模块接口
② 局部数据结构
③ 重要路径
④ 错误处理的能力
⑤ I/O错
( 2)整体测试
整体测试的目标是尽量暴露模块
测试时不能暴露的结构错误,如一个
模块是否破坏了另一个模块的功能,
数据通过接口时是否会丢失,能否产
生主功能以及误差是否有积累等。
整体测试可分为渐增式与非渐增
式两种。
非渐增式的整体测试是将经过单独测
试的所有模块连接到一起进行测试。
渐增式的整体测试往往是与模块测试
同步进行的,即在对模块逐步装配的过程
中同时进行。
①,自顶向下”渐增式测试
②,自底向上”渐增式测试
( 3)高级测试
① 功能测试
② 系统测试
③ 验收测试
④ 安装测试
4.测试的方法
对程序进行测试需要使用一些数据,
每进行一次测试,就需要一组测试数据,
这些测试数据通常称为测试用例。
( 1)白箱法
白箱测试是根据对程序内部逻辑结构
的分析来选取测试用例。
① 语句覆盖
语句覆盖准则是企图用足够多的测试
用例,使程序中的每个语句都执行一遍,
以便尽可能多地发现程序中的错误。
② 分支覆盖
分支覆盖准则也称为判定覆盖准则。
③ 条件覆盖
条件覆盖准则是通过执行足够多的测
试用例,使每个判定中的每个条件都能取
得两种不同的结果(“真”与“假”)。
④ 组合条件覆盖
组合条件覆盖准则要求通过足够多的
测试用例,使每个判定中各条件的各种可
能组合至少出现一次。
( 2)黑箱法
黑箱测试方法完全不考虑程序的内部
结构和内部特征,而只是根据程序功能导
出测试用例。
① 等价分类法
等价分类法是把所有可能的输入数据
(有效的和无效的)划分成若干等价类,
使每一类中的一个典型数据在测试中的作
用与这一类中所有其他数据的作用相同。
② 边值分析法
边值分析着眼于使该等价类的边界情
况成为测试的主要目标来选取测试用例。
③ 因果图法
因果图法是设计测试用例的一种系统
方法,有助于测试人员系统地选择高效的
测试用例。
④ 错误推测法
错误推测法也称猜错法,它无一定之
规可循,在很大程度上是凭经验或直觉推
测程序中可能存在的各种错误,从而有针
对性地编写测试用例。
( 3)综合策略
7.4.2 调试
调试也称排错 。
一般的调试过程分为错误侦查、错误
诊断和改正错误。
1.调试技术
常用的调试技术有以下五种。
( 1)输出存储器内容。
( 2)在程序中插入调试语句。
( 3)利用调试用例,迫使程序逐个
通过所有可能出现的执行路径,系统地排
除“无错”的程序分支,逐步缩小检查的
范围。
( 4)经静态分析、动态测试或自动
测试,都会得到大量与程序错误有关的信
息,这些信息都可在调试时加以利用。
( 5)借助调试工具。
2.调试策略
( 1)试探法
( 2)回溯法
( 3)对分查找法
( 4)归纳法
( 5)演绎法
7.5 软件开发新技术
7.5.1 原型方法
原型法将软件开发过程分为以下四个步骤。
( 1)确定用户的基本要求
( 2)开发初始原型
( 3)实现并运行原型
( 4)修改并完善原型
7.5.2 瀑布模型
瀑布模型规定了整个软件生命周
期内的各项软件工程活动,并且还规
定了这些活动自上而下、相互衔接的
顺序,如图 7.13所示。
7.5.3 面向对象技术
1.面向对象技术的基本概念
( 1)对象
( 2)类
( 3)方法
( 4)消息
( 5)继承
( 6)封装
对象具有以下一些基本特征。
( 1)模块性
( 2)继承性和类比性
( 3)动态连接性
( 4)易维护性
2.面向对象技术的特点
( 1)可重用性
( 2)可维护性
( 3)表示方法的一致性