软件工程复习资料 1.docx
- 文档编号:29500613
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:33
- 大小:386.67KB
软件工程复习资料 1.docx
《软件工程复习资料 1.docx》由会员分享,可在线阅读,更多相关《软件工程复习资料 1.docx(33页珍藏版)》请在冰豆网上搜索。
软件工程复习资料1
第一章概述
1.什么是软件危机?
产生的原因。
是指在计算机软件开发和维护过程中所遇到的一系列严重问题.
原因:
软件本身的特点、软件开发与维护方法不正确
2软件的概念(*):
软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及相关文档的完整集合。
特点:
软件是一种逻辑实体,缺乏“可见性”。
在软件的开发过程中没有明显的制造过程
软件在运行和使用过程期间,没有硬件那样的机械磨损、老化问题。
但维护一般需要修改设计
软件成本相当昂贵。
文档的作用:
描述如何使用这个系统;描述怎么安装和管理这个系统;描述系统需求
3、软件工程原理:
1.用分阶段的生命周期计划严格管理软件开发。
2.坚持进行阶段评审。
3.实行严格的产品版本控制。
4.采用现代程序设计技术。
5.结果应能清楚地审查。
文档要有严格要求。
6.开发小组的成员要少而精。
7.要不断地改进软件工程实践的经验和技术。
4.软件工程方法学(传统方法学、面向对象方法学)三要素:
方法、工具、过程
结构化方法/面向对象方法(4个要点)(*)
●把对象作为融合了数据及在数据上的操作行为的统一的软件构件
●把所有的对象都划分为类
●按照父类和子类的关系,把若干个相关类组成一个层次结构的系统
●对象彼此间仅能通过发送消息互相联系
在分析、设计、实现中用到“对象、类、继承、消息通信”这四个基本概念,就是面向对象的方法
5.软件生存周期各阶段(*)
1.问题定义:
要解决什么问题?
2.可行性研究:
有可行的方法吗?
3.需求分析:
目标系统必须做什么?
4.总体设计:
怎样实现目标系统?
5.详细设计
6.编码和单元测试:
实现
7.综合测试:
系统达到预定目标了吗?
8.软件维护
第二章可行性研究
1.可行性研究的目的:
用最少的代价在最短的时间内确定问题是否能够解决。
任务:
(1)分析和澄清问题
目标、规模、限制、约束
(2)导出系统逻辑模型
(3)探索可供选择的解决方案并研究可行性
技术可行性:
使用现有的技术能实现这个系统吗?
经济可行性:
这个系统的经济效益能超过它的开发成本吗?
操作可行性:
系统的操作方式在这个用户组织内行得通吗?
法律、社会效益可行性:
要开发的项目是否存在侵权、妨碍等社会责任问题。
(4)给出行动方案建议,制定初步项目计划
2.可行性研究过程(*)
(1)确定系统的规模和目标
(2)分析现有系统(3)设计新系统的高层逻辑模型(4)评审系统模型(5)设计和评价解决方案(6)制定行动方案(7)草拟开发计划(8)书写文档提交审查
3.方法和工具
(1)系统流程图符号表示略
(2)数据流图(*)p42例子
(3)数据字典(*)P54.5题
数据字典是关于数据的信息的集合。
数据字典提供关于数据的描述
数据字典内容:
四类元素:
数据流、数据元素、数据存储、处理
定义数据的方法:
对数据进行自顶向下分解,分解为最基本的数据元素。
四种基本组合方式:
顺序+字母字符+数字字符
选择[][字母字符|数字字符]
重复{}2{a}5
可选()(a)
第三章需求分析
1.需求分析的任务和难点书P56
任务:
①画出目标系统的组织结构图与列出各部门的岗位角色表(组织机构模型)②画出目标系统的业务操作流程图③画出目标系统的数据流程图,掌握业务规则,获得初步数据模型。
④列出目标系统的功能点列表(功能模型)⑤列出系统的性能点列表(性能模型)⑥列出目标系统的接口列表(接口模型)⑦确定目标系统的运行环境(环境模型)⑧目标系统的界面约定(界面模型)⑨对目标系统的开发工期、费用、开发进度、系统风险等问题进行分析与评估。
软件工程的两大难点:
软件需求、项目管理
2、需求过程(*)1)需求获取②分析建模③需求说明书④需求验证
3、需求获取方法:
访谈、调查表、学徒、搜集资料、用例分析、原型方法
4、分析建模方法(*)
(1)结构化分析方法(面向数据流分析)(*):
就是面向数据流自顶向下逐步求精进行需求分析的方法。
(2)ER图(*):
实体联系模型是用户对数据和加工的需求用实体联系图(即E-R图)表达出来,明确描述应用系统的概念结构数据模型。
●实体(数据对象):
是对软件必须理解的复合信息的抽象。
复合信息:
具有一系列不同性质和属性的事物。
如:
外部实体、事物(例如单据、报表)、事件(存款)、角色、单位、地点等。
●属性:
定义了实体的性质。
特殊属性-标识符
●联系:
实体之间的关系。
1:
1,1:
M,M:
N联系也可有属性
(3)数据规范化(第一二三范式)
(4)状态图
(5)用例分析
5、《需求规格说明书》与需求验证
▪《软件需求规格说明书》是需求分析阶段的主要文档。
▪通常用自然语言完整、准确、规范、具体地描述系统的功能要求、性能要求、数据要求、约束等。
▪软件设计的输入
▪是验收的依据。
第五章总体设计
1.设计的目标和任务
目标:
软件设计的目标就是构造一个高内聚低耦合的软件模型。
任务:
1)划分出组成系统的物理元素----程序、文件、数据库、人工过程和文档等,但是每个物理元素仍处于黑盒子级,这些黑盒子的具体内容将在以后详细设计。
2)设计软件的结构,也就是要确定系统中每个程序是由那些模块组成的,以及这些模块相互之间的关系。
2、总体设计过程:
1)设想供选择的方案2)选取合理的方案3)推荐最佳方案4)功能分解5)设计软件结构6)设计数据库7)制定测试计划8)书写文档9)审查和复审
3、设计原理(*):
模块化、抽象、逐步求精、信息隐藏和局部化、模块独立(耦合和内聚)
模块化(*):
就是将软件系统划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体。
抽象可分为控制抽象、过程抽象、数据抽象三种。
逐步求精:
为了能够集中精力解决主要问题而尽量推迟对问题细节的考虑。
与抽象互补。
信息隐藏和局部化:
信息隐藏是一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的。
自顶向下逐步求精是进行软件结构设计的常用途径。
局部化是指把一些关系密切的软件元素物理地放得彼此靠近。
局部化有助于实现信息隐藏。
模块化可使软件结构清晰,便于理解,便于修改。
模块化有助于软件开发工程的组织管理。
模块独立是设计的关键模块独立性度量:
耦合和内聚
耦合程度由高到低(模块独立性由弱到强):
内容耦合、公共耦合、控制耦合、数据耦合
内聚性由高到低(模块独立性由强到弱):
功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚
●对于低内聚的模块,可通过重新分解来实现模块的修改与优化,这样提高了模块内部的紧凑性,必然会降低块间联系,确保从整体上提高模块的独立性。
●对于高耦合度的模块,则通过功能重组,将联系紧密的部分组成新的模块,这样可以防止系统僵化,提高模块的可维护性。
4、软件结构优化的启发式规则(*)
▪改进软件结构提高模块独立性
▪模块规模应该适中
▪深度、宽度、扇出和扇入都应适当
▪模块的作用域应该在控制域之内
▪力争降低模块接口的复杂程度
▪设计单入口单出口的模块
▪模块功能应该可以预测
5、总体设计方法和工具
结构化方法指导思想(*)
▪1.改进软件结构提高模块独立性
▪2.模块规模应该适中
▪3.深度、宽度、扇出和扇入都应适当
▪4.模块的作用域应该在控制域之内
▪5.力争降低模块接口的复杂程度
▪6.设计单入口单出口的模块
▪7.模块功能应该可以预测
面向数据流的的设计方法(*)面向数据流的设计方法,即通常所说的结构设计法(简称SD方法),是根据需求阶段对数据流的分析(一般用数据流图和数据字典表示)设计软件结构。
目标是给出设计软件结构的一个系统化的途径。
变换分析步骤1:
复审基本系统模型
▪步骤2:
复审并细化数据流图。
▪步骤3:
确定数据流图中含有变换特征还是事务特征
▪步骤4:
确定输入流和输出流的边界,从而孤立出变换中心。
▪步骤5:
完成第一级分解
▪步骤6:
完成第二级分解
▪为每一个输入模块、输出模块、变换模块设计它们的从属模块
▪步骤7:
利用设计度量和启发式对第一次分割得到的软件结构进一步精化。
事务分析与变换分析设计步骤大部分相同或类似,主要差别仅在于由数据流图得到软件结构的映射方法不同。
▪描述软件结构的工具(可能是绘图题详见课本P102--104)
▪层次图和HIPO图(P102--103)
▪结构图(P103---P104)
第6章详细设计
1、详细设计的目标和任务
答:
主要任务:
为每一模块确定算法;确定每一模块使用的数据结构;确定模块的外部接口和用户界面;为每一模块设计一组测试用例;编写文档:
“详细设计说明书”;
设计的质量目标:
逻辑正确、性能满足要求、易理解、可维护
2、结构程序设计的基本控制结构:
顺序结构选择结构循环结构
3.人机界面设计要解决四个设计问题:
1.系统响应时间2.用户帮助设施3.出错信息处理4.命令交互
人机界面设计指南:
1.一般交互指南2.信息显示指南3.数据输入指南
4.过程设计工具有:
(1)程序流程图:
流程图是用图形化的方式,表示程序中一系列操作及执行的顺序
名称
图例
说明
终结符
表示流程的开始和结束
处理
表示程序的计算步骤或处理过程,在方框内填写处理的名称或程序语句
判断
表示逻辑判断或分支,用于决定执行后续的路径,在菱形框内填写判断的条件
输入/输出
获取待处理的信息(输入),记录或显示已处理的信息(输出)
连线
连接其它的符号,表示执行顺序或数据流向
(2)结构化流程图(NS图):
N-S图是流程图的另一种表达形式,简称N-S图。
与流程图对应的三种结构:
顺序,分支,循环
(3)PAD图—问题分析图
(4)过程设计语言PDL:
程序设计语言也称结构化英语或伪代码,它使用结构化编程语言的风格描述程序算法,但不遵循特定编程语言的语法。
程序设计语言允许你在比源代码更高的层次上进行设计,通常省略与算法无关的细节,例如,交换两个变量的操作。
(5)判定表和判定树(*)决策表用于以紧凑的形式描述复杂的逻辑。
决策表与if-else、switch-case语句类似,将条件判断与执行的动作联系起来。
决策表通常分成四个区域,如右图所示。
条件
条件选择
动作
动作选择
决策树是决策表的图形形式。
例分房问题:
1、一般职工婚后5年可参加分房
2、中级以上职称的职工婚后3年可参加分房
3、符合正常分房条件的职工,若再符合晚婚条件可优先分房
1
2
3
4
5
6
说明
条
件
婚龄
>5年
3-5年
<3年
(-)表示任意
(Y)条件满足
(N)条件不满足
(*)选中的决策
中级职称
-----------
Y
N
-----
晚婚
Y
N
Y
N
----
-----
决
策
优先分房
*
*
正常分房
*
*
不分房
*
*
决策树
5、程序复杂度的度量:
McCabe方法:
流图(程序图)和环形复杂度计算
流图:
把程序流程图映射成流图;由PDL翻译成流图;包含复合条件的PDL
计算环形复杂度的方法
1流图中的区域数
2V(G)=E-N+2,E:
边数N:
结点数
3V(G)=P+1, P:
流图中判定节点的数目
环形复杂度的用途V(G)≦10
第7章实现
1、编码(理解)详见P146--148
编程语言选择的因素:
系统用户的要求;可以使用的编译程序;可以得到的软件工具;工程规模;程序员的知识;软件可移植性要求;软件的应用领域。
编码风格:
逻辑简明清晰、易读易懂。
2、软件测试的目标
–测试是为了发现错误而执行程序的过程
–一个好的测试用例是指很可能找到迄今为至尚未发现的错误的测试用例
–一个成功的测试是指揭示了迄今为至尚未发现的错误的测试
3、软件测试准则(理解)
1.)所有的测试都应可追溯到客户需求
2.)应该在测试工作真正开始前的较长时间就进行测试计划
3.)Pareto原则:
测试中发现的80%的错误可能来自于20%的程序代码
4.)测试应从“小规模”开始,逐步转向“大规模”
5.)穷举测试是不可能的
6.)为了达到最有效的测试,应由独立的第三方来承担测试
其他的测试原则:
1.)在设计测试用例时,应包括合理的输入条件和不合理的输入条件
2.)严格执行测试计划,排除测试的随意性
3.)应当对每一个测试结果做全面检查
4.)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便
5.)检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事
6.)在规划测试时不要设想程序中不会查出错误
4、测试方法分类:
静态/动态,黑盒/白盒,测试用例
1)动态测试:
通过运行程序开展测试工作,即测试人员通过使用软件来找出问题。
2)静态测试:
不通过运行程序来开展测试工作。
这里并不局限于直接阅读、检测代码,还包括阅读和检测文档。
5.测试过程(理解)
答:
单元测试:
测试重点:
模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件
/测试依据:
详细设计描述和源程序清单
常用测试方法:
人工测试和计算机测试,主要使用白盒测试技术
集成测试:
测试重点:
在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响;各个子功能组合起来,能否达到预期要求的父功能;全局数据结构是否有问题; 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度
/测试依据:
要找出集成后的子系统与系统需求规格说明之间的不一致。
/渐增式测试:
首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统;在集成的过程中边连接边测试,以发现连接过程中产生的问题;通过增殖逐步组装成为要求的软件系统。
主要有自顶向下和自底向上两种集成策略。
确认测试:
测试重点:
验证软件的功能和性能及其它特性是否与用户的要求一致
/测试依据:
对软件的功能和性能要求在软件需求规格说明书中已经明确规定。
它包含的信息就是软件确认测试的基础。
/软件配置复查:
软件配置复查的目的是保证软件配置的所有成分都齐全;各方面的质量都符合要求;具有维护阶段所必需的细节;而且已经编排好分类的目录。
应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。
6.白盒测试技术.:
逻辑覆盖(*)/基本路径测试/环形复杂度
答:
逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。
通常希望选择最少的测试用例来满足所需的覆盖标准。
主要的覆盖标准有:
语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖。
语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次。
欲使每个语句都执行一次,只需执行路径L1(sabcde)即可。
判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次)。
欲使每个分支都执行一次,只需执行路径L3(sacde,a为“f”且c为“t”)和L4(sabce,a为“t”且c为“f”)即可。
或者,执行路径L1(sabcde,a为“t”且c为“t”)和L2(sace,a为“f”且c为“f”).满足判定覆盖标准的测试用例也一定满足语句覆盖标准。
条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次。
条件覆盖通常比判定覆盖强,但有时虽然每个条件的所有可能结果都出现过,但判定表达式的某些可能结果并未出现。
判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次。
显然,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、语句覆盖标准。
条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次。
显然,满足条件组合覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、判定/条件覆盖、语句覆盖标准。
条件组合覆盖是上述五种覆盖标准中最强的一种,然而,条件组合覆盖仍不能保证程序中所有可能的路径都被覆盖。
路径覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次)。
路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它未必能覆盖判定中条件结果的各种可能情况。
因此,它是一种比较强的覆盖标准,但不能替代条件覆盖和条件组合覆盖标准。
控制结构测试包括基本路径测试、条件测试、循环测试。
基本路径测试是TomMcCabe提出的一种白盒测试技术,这种方法首先根据程序或设计图画出流图,并计算其区域数,然后确定一组独立的程序执行路径(称为基本路径),最后为每一条基本路径设计一个测试用例。
流图由结点和边组成。
流图中由结点和边组成的闭合部分称为一个区域(region),在计算区域数时,图的外部部分也作为一个区域。
独立路径是指程序中至少引进一个新的处理语句序列或一个新条件的任一路径,在流图中,独立路径至少包含一条在定义该路径之前未曾用到过的边。
在基本路径测试时,独立路径的数目就是流图的区域数。
环形复杂度定量度量程序的逻辑复杂性。
有了描绘程序控制流的流图后,可以用以下方法计算
1流图中的区域数
2V(G)=E-N+2,E:
边数N:
结点数
3V(G)=P+1, P:
流图中判定节点的数目
7.黑盒测试技术:
等价类划分(*)/边界值分析/错误推测
答:
等价类划分方法将所有可能的输入数据划分成若干个等价类,然后在每个等价类中选取一个代表性的数据作为测试用例。
等价类划分方法把输入数据分为有效输入数据和无效输入数据。
在确定输入数据等价类时,常常还要分析输出数据的等价类,以便根据输出数据等价类导出输入数据等价类。
等价类划分设计测试用例的步骤:
确定等价类、设计测试用例。
确定等价类的规则:
(1)如果输入条件规定了取值范围,则可以确定一个有效等价类(输入值在此范围内)和两个无效等价类(输入值小于最小值及大于最大值)
(2)如果输入条件规定了值的个数,则可以确定一个有效等价类(输入值的个数等于规定的个数)和两个无效等价类(输入值的个数小于规定的个数和大于规定的个数)
(3)如果输入条件规定了输入值的集合(即离散值),而且程序对不同的输入值做不同的处理,那么每个允许的值都确定为一个有效等价类,另外还有一个无效等价类(任意一个不允许的值)。
(4)如果输入条件规定了输入值必须遵循的规则,那么可确定一个有效等价类(符合此规则)和若干个无效等价类(从各个不同的角度违反此规则)。
(5)如果输入条件规定输入数据是整型,那么可以确定三个有效等价类(正整数、零、负整数)和一个无效等价类(非整数)。
(6)如果输入条件规定处理的对象是表格,那么可以确定有效等价类(表有一项或多项)和一个无效等价类(空表)。
利用等价类设计测试用例的步骤:
(1)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
(2)为每个无效等价类设计一个新的测试用例。
边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。
针对各种边界情况设计测试用例,其揭露程序中错误的可能性就更大。
由于边值分析方法所设计的测试用例更有可能发现程序中的错误,因此经常把边值分析方法与其它设计测试用例方法结合起来使用。
边界值分析方法选择测试用例的规则如下:
1.如果输入条件规定了值的范围,则选择刚刚达到这个范围的边界的值以及刚刚超出这个范围的边界的值作为测试输入数据。
例如,规定输入的考试成绩在0~100之间,则取0,100,-1,101作为测试输入数据。
2.如果输入条件规定了值的个数,则分别选择最大个数、最小个数、比最大个数多1、比最小个数少1的数据作为测试输入数据。
例如,规定一个运动员的参赛项目至少1项,最多3项,那么,可选择参赛项目分别是1项、3项、0项、4项的测试输入数据。
3.对每个输出条件使用第1条。
例如,输出的金额值大于等于0且小于104,则选择使得输出金额分别为0、9999、-1、10000的输入数据作为测试数据。
4.对每个输出条件使用第2条。
例如,规定输出的一张发票上,至少有1行内容,至多有5行内容,则选择使得输出发票分别有1行、5行、0行、6行内容的输入数据作为测试数据。
5.如果程序的输入或输出是个有序集合,例如,顺序文件、表格,则应把注意力集中在有序集的第1个元素和最后一个元素上。
6.如果程序中定义的内部数据结构有预定义的边界,例如,数组的上界和下界、栈的大小,则应选择使得正好达到该数据结构边界以及刚好超出该数据结构边界的输入数据作为测试数据。
例如,程序中数组A的下界是10,上界是20,则可选择使得A的下标为10、20、9、21的输入数据作为测试数据。
7.发挥你的智慧,找出其他可能的边界条件。
错误推测是一种凭直觉和经验推测某些可能存在的错误,从而针对这些可能存在的错误设计测试用例的方法。
这种方法没有机械的执行步骤,主要依靠直觉和经验。
错误推测法的基本思想是:
列举出程序中所有可能的错误和容易发生错误的特殊情况,然后根据这些猜测设计测试用例。
8、调试(理解)
答:
测试的目的是发现错误,调试(也称排错)的目的是确定错误的原因和准确位置,并加以纠正。
调试方法:
蛮力法、回溯法、原因排除法(可分为归纳法和演绎法)
蛮力法是一种最省脑筋但又最低效的方法。
它通过在程序中设置断点,输出寄存器、存储器的内容,打印有关变量的值等手段,获取大量现场信息,从中找出错误的原因。
这种方法效率低,输出的信息大多是无用的,通常在其他调试方法未能找到错误原因时,才使用这种方法。
可以采用二分法来逐步缩小出错的范围
回溯法是从错误的征兆出发,人工沿着控制流程往回跟踪,直至发现错误的根源。
这种方法适用于小型程序,对大型程序,由于回溯的路径太多,难以彻底回溯。
归纳法是一种从特殊推断一般的系统化思考方法。
其基本思想是:
从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误的原因。
演绎法从一般原理或前提出发,假设所有可能出错的原因,排除不可能正确的假设,最后推导出结论。
9、可靠性:
定义,MTTFMTTR的含义
答:
定义:
软件可靠性是在给定的时间间隔内,按规格说明书的规定成功地运行的概率。
MTTF指软件的平均无故障时间,是一个重要的质量指标,是系统按规格说明书规定成功地运行的平均时间,它主要取决于系统中潜伏的错误的数目,和测试的关系十分密切。
MTTR平均维修时间,是修复一个故障平均需要的时间,它取决于维护人员的技术水平和对系统的熟悉程度,也和系统的可维护性有重要关系。
10、与错误数的关系,测试时间估算(*)
平均无故障时间与单位长度程度中剩余的错误数成反比
MTTF=1/K(ET/IT-EC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程复习资料 软件工程 复习资料