软件工程导论期末复习
1.2软件工程
软件工程是指导计算机软件开发与维护的一门工程学科(实用学科)
**软件工程的本质特性
**(1)软件工程关注于大型工程的构造
(2)软件工程的中心课题是控制复杂性
(3)软件经常变化
(4)开发软件的效率非常重要
(5)和谐的合作是开发软件的关键
(6)软件必须有效的支持他的用户
**(7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
瀑布模型
**传统软件工程方法学的软件过长基本可以用瀑布模型来描述。它有以下特点:
1、阶段间具有顺序性和依赖性
这个特点具有两重含义:(1)必须等前一阶段的工作完成后才能开始后一阶段的工作(2)前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段额工作才能获得正确的结果。
2、推迟实现的观点
在编码之前设置了系统分析和系统设计的各个阶段,分析与设计阶段的基本任务规定:主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
3、质量保证的观点
(1)每个阶段必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。(2)每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题
瀑布模型适用:在开发早期阶段软件需求被完整确定
瀑布模型的优点:可强迫开发人员使用规范的方法;严格规定了每个阶段必须提交的文档;要求每个阶段交出的产品都必须经过质量保证小组的仔细验证。
瀑布模型的缺点:瀑布模型是由文档驱动;最终产品不能真正满足客户的需求
快速原型模型
开发人员尽可能快的建造出原型系统,让用户体验,之后提出意见,随之进行修改,再让用户体验,直到用户满意为止,据此写出规格说明文档。
特点:
1、快速原型模型是不带反馈环的,优点:软件产品的开发是线性顺序进行的
2、软件一旦交付给用户,维护便开始了
3、快速原型的本质是快速,开发人员应尽可能快得建造出原型系统,加速软件开发,节约开发成本
4、原型的意图是获知用户真正的需求、一旦需求确定了,原型将被抛弃
增量模型
融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”
优点:
能在较短时间内向用户提交可完成部分工作的产品
逐步增加产品功能,可以使用户有充裕的时间学习和适应新产品,从而减少一个全新的软件可能对用户组织带来的冲击。
缺点:
需要软件具备开放式的体系结构;容易退化为边做边改模型,从而使软件过程中的控制失去整体性;增加系统内部的耦合复杂性。
第二章 可行性研究
**2.1、可行性研究的目的
**可行性研究的目的不是为了解决问题,而是确定问题是否值得去解决
2.2、可行性研究的任务
至少从三个方面研究每种解法的可行性
技术可行性 现有技术能实现这个系统吗
经济可行性 这个系统经济效益能超过它的开发成本吗
操作可行性 系统的操作方式在这个用户组织内行得通吗
必要时还应该从法律、道德、社会效益等方面研究每种解法的可行性
2.3****可行性研究过程
· 复查系统规模和目标
· 研究正在使用的系统
· 导出新系统的高层逻辑模型
· 进一步定义问题
· 导出和评价供选择的解法
· 推荐行动方针
· 草拟开发计划
· 书写文档提交审查
2.4、数据流图
数据流图表示方法:实线表示数据流;虚线表示控制流;圆框代表处理数据的过程;矩形框表示产生与接收数据的对象;平行线表示数据存储区。
订货系统的功能级数据流图:
把处理事务的功能进一步分解后的数据流图:
2.5、数据字典
数据字典是关于数据的信息的集合。也就是说对数据流图中包含的所有元素的定义的集合。
定义数据的方法
例题**:北京某高校可用的电话号码有以下几种分类:校内电话由4位数字组成,第一位数字不是0;校外的电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则借着拨8位数字(第一位不是0),若是外地电话则再拨3位区码再拨8位电话(第一位不是0)**
用定义数据的办法定义上述电话号码:
电话号码 = [校内电话 | 校外电话]
校内电话 = 非零数字 + 3位数字
校外电话 = [本市号码 | 外地号码]
本市号码 = 数字0 + 8位数字
外地号码 = 数字0 + 3位数字 + 8位数字
非零数字 = [1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9]
数字0 = 0
3位数字 = 3 {数字}3
8位数字 = 非零数字 +=7位数字
7位数字 = 7{数字}7
数字 = {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }
3种基本类型
(1) 顺序 即以确定次序连接两个或多个分量
(2) 选择 即以两个或多个可能的元素中取一个
(3) 重复 即把指定的分量重复零次或多次
(4) 可选 即一个分量是可有可无的
第三章 需求分析
(1)确定对系统的综合要求
(2)性能需求
(3)可靠性和可用性分析需求
(4)出错处理需求
(5)接口需求
(6)约束
(7)逆向需求
(8)将来可能提出的要求
实体—联系图
组成:
(1)数据对象(实体)
(2)属性
(3)联系
数据对象彼此之间互相连接的方式称为联系,联系可分为3种类型,一对一(1:1),一对多(1:N),多对多(M:N)
例子:
某校教学管理ER图
层次方框图
层次方框图用树形结构的一系列多层次的矩形描绘数据的层次结构。(区别HIPO图,这里方框间连线表示的是组成关系,而HIPO图表示的是调用关系)
用树形结构的一系列多层次的矩形框描绘数据的层次结构。最顶层矩形框:代表完整的数据结构;下面各层的矩形框代表数据的子集;最底层的矩形框代表实际数据元素
例子:
从哪些方面验证软件需求的准确性
(1)一致性
(2)完整性
(3)现实性
(4)有效性
第五章 总体设计
总体设计****又称为概要设计或初步设计,总体设计阶段的另一项重要任务是设计软件的结构
模块化
模块化就是把程序划分成独立命名并且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户要求。
为什么要模块化
(1)采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。(2)模块化使软件容易测试和调试,因而有助于提高软件的可靠性。(3)模块化能够提高软件的可修改性。(4)模块化也有助于软件开发工程的组织管理。
模块独立的概念是模块化、抽象、信息隐藏、局部化的直接结果。追求高内聚低耦合。
耦合
耦合是一个软件结构内部不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
耦合的分类
数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。数据耦合是低耦合
控制耦合:传递的信息中有控制信息。中等耦合,增加了系统的复杂性
特征耦合:当整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时
公共环境耦合:当两个或多个模块通过一个公共数据环境互相作用时。公共环境可以是全程变量、共享通信区、内存的公共覆盖区、任何存储介质的文件、物理设备等。
内容耦合:如果发生之一就是①一个模块访问另一个模块的内部数据,②一个模块不通过正常入口而转到另一个模块的内部,③两个模块有一部分程序代码重叠,④一个模块有多个入口
**从上至下,耦合性越来越高,功能独立性越来越低。**
设计原则
尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境的耦合的范围,完全不用内容耦合。
内聚
内聚**:标志着一个模块内各个元素彼此之间结合的紧密程度,它是信息隐藏和局部化概念的扩展。**
设计原则:力求高内聚,通过提高模块间的内聚降低耦合从而使模块获得较高的独立性。高内聚意味着低耦合
内聚的优劣评分
功能内聚 10 时间内聚 3
顺序内聚 9 逻辑内聚 1
通信内聚 7 偶然内聚 0
过程内聚 5
HIPO图
层次图和层次方框图相同,但是表现的内容不一样,层次图中的每一个矩形都代表一个模块,方框间的连线表示的是调用关系而不是像层次方框图表示的那样是组成关系。
面向数据流的设计方法**(总体设计)**
面向数据流设计的三要素:交换流、事务流、设计过程。
第六章 详细设计
详细设计阶段的根本目标
根本目标:确定应该怎样具体地实现所要求的系统。
结构程序设计
三种基本控制结构:顺序、选择、循环。
结构程序设计经典定义
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
过程设计的工具:
程序流程图**(看书** P124)
又称程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法。
盒图**(看书** p****125)
特点:****(1)功能域明确(即一个特定控制结构的作用域),可以从合图上一眼就看出来。
(2)不可能任意转移控制
(3)很容易确定局部和全部数据的作用域。
(4)很容易表现嵌套关系,也可以表示模块的层次结构。
判定表**(看书** P****128)
一张判定表由4部分组成,左上部列出了所有条件,左下是所有可能做的动作,右上是表示各种条件组合的一个矩阵,右下是和每种条件组合相对应的动作。例子参考P128。
流图(看书 P****137)
结点:用圆表示,一个圆代表一条或多条语句
边:箭头线称为边,代表控制流
区域:由边和结点围成的面积 称为区域,当计算区域数时应该包括图外未被围起来的区域
判定结点:包含条件的结点
计算环形复杂度的方法
流图中线性无关的区域数等于环形复杂度
流图G的环形复杂度V(G)=E-N+2,其中E是流图中边的条数,N是结点数
流图G的环形复杂度V(G)=P+1,其中P是流图中判定结点的数目
习题
4、图6. 18给出的程序流程图代表一个非结构化的程序,问:(1)为什么说它是非结构化的?(2)设计一个等价的结构化程序。(3)在(2)题的设计中使用附加的标志变量flag了吗?若没有,再设计一个使用flag的程序:若用了,再设计一个不用flag的程序答: (1)图示程序的循环控制结构有两个出口,不符合结构程序的定义,因此是非结构化的程序。****(2)设计的等价结构化程序盒图如下所示:
(3)在第(2)题中没有使用标志变量flag, 设计使用附加的标志变量flag,将上述程序改成等价的结构化程序,如下盒图所示
5、研究下面的伪码程序: LOOP:Set I to(START+FINISH)/2 IF TABLE(D-ITME goto FOUND IF TABLE(DKTTME Set START to (I+1)IF TABLE(I)>TME Set FINSH to (1-1)IF FINSH-START)>1 goto LOOP IF TABLE(START)-ITEM goto FOUNDIF TABLE(FINSH)=ITEM goto FOUND Set FLAG to Goto DONE FOUND: Set FLAG to 1DONE: EXIT要求: (1)画出流程图。
(2)程序是结构化的吗?说明理由。****(3)若此程序是非结构化,设计一个等价的结构化程序并画出流程图。
(4)此程序的功能是什么?它完成预定功能有什么隐含的前提条件吗?
解: (1)该程序流程图如下:
(2)该程序不是结构化的,结构化的程序只有一个入口和一个出口,而该程序的流程途中有两个出口。
(3)等价的结构化程序的流程图如下:
(4)此程序有二分查找的功能,它完成预定功能的隐含前提条件是现有序列为从小到大顺序排好的有序序列。
第七章 实现
软件测试基础
测试的正确定义是“为了发现程序中的错误而执行程序的过程”。
软件测试****准则
测试方法
1、黑盒测试:
黑盒测试也称功能测试**,它着眼于程序的外部特征,而不考虑程序的内部逻辑结构。测试者把测试程序看成一个黑盒,不用关心程序的内部结构,黑盒测试是在程序接口处进行测试,它只检查程序功能是否按照规格说明书的规定正确使用,程序是否能适当的接收输入数据产生正确的输出信息,并且保持外部信息的完整性。**
2、白盒测试:
与黑盒测试相反,它的前提是可以把程序看成一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否按照预定要求正确工作,白盒测试又称为结构测试。
测试**步骤
模块测试(白盒):也称为单元测试。在设计好的软件中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其他模块的功能之间没有相互依赖关系。
子系统测试:把经过单元测试的模块放在一起形成一个子系统来测试。模块相互的协调和通信就是在这个测试过程中的主要问题。
系统测试:把经过子系统测试的子系统装配成一个完整的系统来测试。
验收测试(黑盒):把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似。但是它是在用户积极参与下进行的。
平行运行:也称确认测试/集成测试。同时运行新开发出来的系统和将被它取代的旧系统,yibia比较两个系统的处理结果
单元测试
单元测试集中检测软件设计的最小单元——模块。
测试重点:
模块接口
局部数据结构
重要的执行通路
出错处理通路
边界条件
集成测试
集成测试是测试和组装的系统化技术,由模块组装成程序有两种方法:
非渐增式测试方法:分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
渐增式测试方法:把下一个要测试的模块同已经测试好的模块放在一起结合进行测试,测试完后再把下一个应该测试的模块结合起来测试。
当使用渐增方式把模块结合到程序中去时,有自顶向下和自顶向上两种集成策略。(看书P157)
A****lpha 和 Beta****测试
(1)A****lpha 测试由用户在开发者的场所进行
(2)Beta测试由软件的最终用户在一个或多个客户场所进行**
白盒测试
(1)逻辑覆盖:
所谓逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。
(2)语句覆盖
为了暴露程序中的错误,至少每个语句应该执行一次。语句覆盖的含义是:选择足够多的测试数据,使被测试程序中每个语句至少执行一次。
(3)路径覆盖
选取足够多的数据,使程序中的每条路径都至少执行一次(如果有环,则要求每个环至少经过一次)
(3、4、5、6、7、8 看书 P****164-165)
黑盒测试
(1)等价划分
等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。
(2)边界值分析**:**
使用边界值分析方法设计测试方案应该确定边界情况,这需要经验和创造性,通常输入等价类和输出等价类的边界,就是应该着重测试的程序边界情况。
(3)错误推测**(此处省略n个字** P****176)
习题
(3)设计下列伪码程序的语句覆盖和路径覆盖测式用例:STARTINPUT(A,B,C)FA>5THEN X=10ELSE X=1END IFIFB>10THEN X-20ELSE X=2END IFIF C>15THEN X 30ELSE X=3END IFPRINT (X,Y,Z)STOP答:此程序的语句覆盖用例:①A=5, B 10, C=15;②A=6, B=11, C=16条件覆盖用例为:①A=5,B=10,C=15;②A=6, B =11, C=16.语句覆盖测试用例
第八章 维护
软件维护就是在软件已经交付给使用方后,为了改正错误或满足新的需要而修改软件的过程。
改正性维护
把诊断和改正错误的过程称为改正性维护。
适应性维护
因此,适应性维护,也就是为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。
完善性维护
当一个软件系统顺利地运行时,常常出现第三项维护活动:在使用软件的过程中用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见。为了满足这类要求,需要进行完善性维护。这项维护活动通常占软件维护工作的大部分
预防性维护
文档是影响软件维护的决定性因素****************