软件工程复习资料.docx
《软件工程复习资料.docx》由会员分享,可在线阅读,更多相关《软件工程复习资料.docx(14页珍藏版)》请在冰豆网上搜索。
![软件工程复习资料.docx](https://file1.bdocx.com/fileroot1/2023-2/21/063cd755-83f0-45b2-8242-1ef392d7c5a1/063cd755-83f0-45b2-8242-1ef392d7c5a11.gif)
软件工程复习资料
一.概述
1.什么是软件?
什么是软件工程?
--软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
软件具有不可见性,是抽象的、形式化和逻辑化的。
--软件会逐渐退化而不会磨损的原因是不断地变更使组件接口之间引起错误。
--软件工程要素:
过程、方法、工具。
--软件工程的基本目标是开发高质量的软件。
2.现代软件工程师关注的问题
开发过程中遇到的各种困扰。
3.软件生存周期模型
--软件生存期由软件定义、软件开发和运行维护3个时期组成,每个时期又可划分若干阶段,即可行性研究、需求分析、概要设计、详细设计、编码、测试、使用与维护。
--软件生存周期模型包括瀑布模型、原型模型、增量模型、螺旋模型。
4.软件开发的各种模型(瀑布、快速原型等)的特点
--瀑布模型:
1)阶段间具有顺序性和依赖性。
2)推迟实现的观点。
3)质量保证的观点。
瀑布模型适用于需求被清晰定义的情况。
--快速原型模型:
适用于客户需求难以清楚定义的情况。
--增量模型:
适用于一种需要快速构造可运行程序的方法。
--螺旋模型:
螺旋模型是瀑布模型、原型模型的有机结合,同时增加了风险分析。
螺旋模型只适合于大规模的软件项目。
--喷泉模型:
喷泉模型是典型的面向对象生命周期模型。
二.需求分析
1.需求分析的目的
--需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作。
需求分析是软件工程中的一个关键过程。
--需求分析中开发人员从用户那里了解软件做什么。
--可行性研究要进行一次“简化的、压缩的”需求分析。
2.主要任务
--获取并理解用户的需求是软件工程师所面对的最困难的任务之一
--发现和分析问题,并分析问题的原因/结果关系;与用户进行各种方式的交流,并使用调查研究方法收集信息;按照三个成分观察问题的不同侧面,即数据、过程、接口;将获取的需求文档化,形式有用例、决策表、需求表等。
3.功能性需求和非功能性需求
--功能性需求:
系统需要提供的服务或功能:
如图书检索;系统对特定输入的处理方式:
如对非法输入的提示;系统在特定环境下的行为:
如长时间无操作时的屏保。
--非功能性需求:
对系统功能或服务附加的质量约束,例如响应时间、容错性、安全性等----客户所关心的(外部质量);从系统开发和维护角度出发的质量属性,例如可理解性、可扩展性、可配置性等----软件开发或维护者所关心的(内部质量、软件所特有)。
4.需求获取的过程
1).开发高层的业务模型2).定义项目范围和高层需求3).识别用户类和用户代表4).获取具体的需求5).确定目标系统的业务工作流6).需求整理与总结。
5.功能建模和数据流图
--功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。
功能模型用数据流图(DataFlowDiagram,DFD)来描述。
--数据流图(DFD):
描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模。
主要图形元素:
加工;外部实体;数据流;
数据存储文件。
--数据流图中的每个数据处理至少需要一个输入流和一个输出流。
--画某系统的DFD时,顶层图有一张。
6.数据字典
--数据流图与数据字典是密不可分的,两者结合起来构成软件的逻辑模型(分析模型)
--数据字典(DataDictionary,DD)由字典条目组成,每个条目描述DFD中的一个元素,包括:
数据流、文件、数据项(组成数据流和文件的数据)、加工、源或宿。
7.判定表、判定树
--判定表:
适用于加工逻辑包含多个条件,而不同的条件组合需做不同的动作。
--判定树:
判定表的变种,它本质上与判定表是相同的,只是表示形式不同。
三.结构化设计和编码
1.模块化设计
--模块(Module)——“模块“又称”构件”一般指用一个名字调用的一段程序。
--模块化设计(modulardesign):
按适当的原则把软件划分为一个个较小的、相关而又相对独立的模块。
2.耦合和内聚
--耦合:
模块之间的相对独立性的度量。
--内聚:
模块功能强度的度量。
--模块内聚性越强,功能独立性越好,对于形成的模块结构有比较好的作用。
要求模块结构达到高内聚,低耦合。
3.面向数据流的设计方法
--结构化设计属于面向数据流的设计方法,任务就是在上述需求分析的基础上,将DFD图映射(Mapping)成软件体系结构。
--基于数据流的设计方法也称为过程驱动的设计方法
4.变换流、事务流
--变换流:
变换型数据处理问题的工作过程大致分为3步,即取得数据,变换数据和给出数据。
--事务流:
数据流沿着输入路径到达一个事务中心,事务中心根据输入数据的类型在若干条动作路径中选择一条来执行。
变换流事务流
5.作用范围和控制范围
--模块的控制范围包括它本身及其所有的从属模块(即供它调用的模块)。
--模块的作用范围是一个与条件判定相关联的所有模块,凡是受这个判定影响的所有模块都属于这个判定的作用范围。
--模块的作用范围应在控制范围之内。
6.程序流程图
程序流程图也称为程序框图,是软件开发者最熟悉的算法表达工具。
7.“结构化”的意义
如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
四.测试
1.黑盒测试和白盒测试
--黑盒测试:
把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
--白盒测试:
对程序模块的所有独立执行路径至少测试一次,对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次。
在循环的边界和运行边界限内执行循环体,测试内部数据结构的有效性。
2.判定覆盖、条件覆盖……
--语句覆盖:
设计若干个测试用例,运行被测程序,使得每一个可执行语句至少执行一次。
--判定覆盖(又称分支覆盖):
设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。
--条件覆盖:
设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
--判定-条件覆盖:
设计若干个测试用例,运行被测程序,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。
--条件组合覆盖:
设计若干个测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。
--路径覆盖:
设计足够的测试用例,覆盖程序中每一条可能的程序执行路径至少测试一次。
3.驱动模块和桩模块
--桩模块:
对顶层或上层模块进行测试时,所编制的替代下层模块的程序,用以模拟被测模块工作过程中所调用的模块。
桩模块由被测试模块调用,代替自顶向下的模块作用。
--驱动模块:
对底层或子层模块进行(单元或集成)测试时所编制的调用被测试模块的程序,用以模拟被测试模块的上级模块。
驱动模块接受测试数据,调用被测模块,在自底向上测试中代替调用模块作用。
4.等价类划分和测试用例
等价类是指某个输入域的子集合在该集合中,各个输入数据对于揭露程序中的错误都是等价的。
五.UML
--用例图、顺序图、状态图、类图……
--顺序图和合作图适于描述单个用例中多个对象的行为。
--状态图适于描述跨越多个用例中单个对象的行为。
--活动图适于描述并发的、较复杂的行为。
六.设计模式
1.策略模式(模拟鸭子的简单应用例子):
针对接口编程,而非针对实现编程,多用组合,少用集成。
2.工厂模式(订购比萨例子):
依赖于抽象,不要依赖于具体类。
--抽象工厂:
抽象工厂模式提供一个接口,创建相关或依赖的对象家族,而不指定具体的类。
3.适配器模式(适配鸭子的火鸡例子):
适配器模式将一个类的接口转换成客户期望的另一个接口。
适配器让原本不兼容的类可以合作无间。
4.观察者模式(气象监控应用系统例子):
也称为发布-订阅模式。
观察者模式在对象之间定义了一个一对多的依赖,如果一个对象改变了状态,就通知依赖于它的其它对象,并自动地更新这些对象。
5.外观模式(家庭影院例子):
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。
外观定义了一个高层接口,让子系统更容易使用。
6.单件模式(巧克力工厂例子):
也叫单例模式。
单件模式确保一个类只有一个实例,并提供一个全局访问点。
七.习题(仅供参考)
1.由于今天个人计算机不断发展壮大,人们不再采用软件团队的开发方式。
(×)
2.由于软件是产品,因此可以应用其他工程制品所用的技术进行生产。
(×)
3.购买大多数计算机系统所需的硬件比软件更昂贵。
(×)
4.大多数软件产品在其生命周期中不需要增强功能。
(√)
5.大多数软件系统是不容易变化的,除非他们在设计时考虑了变化。
(√)
6.软件需求规格说明书在软件开发过程中具有重要作用,是软件可行性分析的依据。
(×)
7.在需求分析过程中,分析员要从用户那里解决的最重要的问题是明确软件做什么。
(√)
8.目前存在一个很普遍的现象,即不同的客户提出的需求是相互矛盾的,但每个人都争辩自己是正确的。
(√)
9.用例图是从程序员角度来描述系统的功能。
(×)
10.活动图和状态图用来描述系统的动态行为。
(√)
11.协作图的一个用途是表示一个类操作的实现。
(√)
12.结构化分析中“结构化”一词的含义是什么?
这个词有其他可可替代的术语吗?
答:
结构化一词应来源于“结构化程序设计”,先有“结构化程序设计”的思想,后有结构化设计及结构化分析,有时称传统的分析方法。
13.指出下面需求描述存在的问题,并进行适当的修改。
1)系统用户界面友好。
答:
问题:
“友好”是不可验证的。
改正:
具有一年计算机使用经验的用户经过3小时的培训就可以学会使用该系统。
2)系统运行时应该占用尽量少的内存空间。
答:
问题:
“尽量少”存在歧义。
改正:
系统所占用的最大内存空间为256MB。
14.数据流图中的文件和数据流的差异是什么?
答:
数据流是暂时的(类似编程时的局部变量),经加工以后数据流就消失了,而文件中的数据是持久性的。
从数据量上讲,数据流只是一组待处理的特定数据,而文件中保护一个完整的数据集合。
15.在需求分析时,用户参加联合小组的应有哪些?
答:
软件系统的利益相关人,软件的操作用户代表,用户公司工厂部门人员,与软件直接相关部门主管或经理。
16.当你“编写”程序时你设计软件吗?
软件设计和编码有什么不同吗?
答:
在“编写”程序时没有设计软件;软件设计包括概要设计和详细设计,编码是将详细设计中的过程描述转换成程序设计语言。
17.将大的软件划分成模块有什么好处?
是不是模块划分得越小越好?
划分模块的依据是什么?
答:
1)将大的软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同的功能或职责。
这种方法有利于将复杂的问题简单化,是分而治之策略的具体表现。
2)尽管模块分解可以简化要解决的问题,但模块分解并不是越小越好。
当模块数目增加时,每个模块的规模将减小,开发单个模块的成本确实减少了;但是,随着模块数目增加,模块之间关系的复杂程度也会增加,设计模块间接口所需要的工作量也将增加。
3)划分模块的依据是,模块只具有单一的功能且其他模块没有太多的联系。
18.对于给定的算法,如何判断它是否是结构化的?
答:
1)使用语言中的顺序、选择、循环等有限的基本控制结构表示程序逻辑。
2)选用的控制结构只准许有一个入口和一个出口。
3)程序语句组成容易识别的块(block),每块只有一个入口和一个出口。
19.某工厂招工,年龄在16-35之间(到1995年6月30日为止),即出生年月不早于1960年7月,不晚于1979年6月,报名具有自检功能等,不合法输入显示“输入无效”和“年龄不合格”,出生年月由6位数字字符表示,划分出生年月等价类表。
答:
输入数据
有效等价类
无效等价类
出生年月
6位有效数字字符
有非数字字符
少于6个数字字符
多于6个数字字符
出生年月对应数值
196007-197906
<196007
>197906
月份对应数值
在1-12之间
=0
>12
测试用例
测试路径
期望结果
197011
158
有效等价类
1970sd
2
无效等价类
19751
3
无效等价类
1965111
4
无效等价类
196005
6
无效等价类
197907
7
无效等价类
196800
9
无效等价类
196913
10
无效等价类
20.变量命名规则如下:
变量名长不多于8个字符,第一个字符必须为英文字母,其他可以是英文字母、数字以及下划线组合,使用等价类写测试用例。
答:
输入条件
有效等价类
无效等价类
长度
长度>1&&长度<8
长度=8
长度>8
第一个字符
英文字母
数字
特殊符号
其他字符
英文、数字以及下划线任意组合
特殊符号
测试用例
测试路径
期望结果
abc123
147
有效等价类
abc_1234
247
有效等价类
abca12345
3
无效等价类
1215afs
5
无效等价类
@afae
6
无效等价类
fe#@t4
8
无效等价类
21.画出打电话的顺序图
答:
22.假设已完成“加衣”、“加洗涤”和“开机”操作,按下列步骤画顺序图。
1)通过进水管向洗涤缸注水2)洗涤缸保持5分钟静止状态3)水注满后停止注水4)洗涤缸往返旋转15分钟5)通过排水管排脏水6)重新注水7)洗涤缸继续旋转洗涤8)停止注水9)通过排水管排脏水10)洗涤缸加速单方向转5分钟11)洗涤缸停转,洗衣过程结束。
答:
23.建立用例图和对象模型
--某报社采用面向对象技术实现报刊征订的计算机管理系统:
报社发行多种刊物,每种刊物通过订单来征订,订单中有代码、名称、订期、单价、份数等项目,订户通过填写订单来订阅报刊;报社下属多个发行站,每个发行站负责收集、登录订单、打印收款凭证等事务;报社负责分类并统计各个发行站送来的各报刊订阅信息。
答:
24.画人事信息管理系统的用例图
--该人事管理系统的用户是公司的人事管理干部,该系统具有人事档案库,保存员工的人事信息,包括姓名,性别,出生年月,健康状况,文化程度,学位,职称,岗位,聘任时间,任期,工资,津贴,奖罚记录,业绩,论著和家庭情况等,系统提供的基本服务有人事信息的管理,包括人事规定的权调动与聘任,职称评定,奖罚等,并且可以按照限查询人事信息,生成与输出统计报表等,该人事系统每月向公司的财务系统提供员工的工资,津贴等数据。
答: