复习题
何为软件,画出硬件失效曲线和软件失效曲线示意图并给出解释,P3-P4.
答:软件由程序,数据结构和文档组成。硬件早期有设计缺陷磨损率较高,随着缺陷的修复磨损率趋于平稳,到达一定寿命时间会产生硬件磨损;而软件是逻辑的非物理的,理想情况下下降后不再升高,但实际每次软件更新迭代时会产生新的错误导致曲线陡然提高。
简述软件工程的”通用过程模型”,画出软件过程框架并给出简单解释,P23。
答:过程模型习惯上也称软件开发模型,它是软件开发全部过程->活动->任务的结构框架;每个框架活动由一系列软件工程动作构成,每个软件工程动作由任务集定义,任务集明确了要完成的任务,要产生的产品,需要的质量保证点和表明开发过程状态的里程碑。
请举例4个惯用过程模型名称,并对其中任何一个模型:
(1). 画出示意图
(2).对模型工作流程进行简要说明
(3).简述模型优缺点
答:瀑布模型,V模型,增量模型,螺旋模型;将开发过程中得各个活动分为各个阶段线性链接依次执行,由上至下如同瀑布逐级下落。
优点:(1)强调阶段性,各阶段具有顺序性和依赖性
(2)强调早期调研和需求分析,推迟代码实现的观点
(3)提供了一个指导模板
缺点:(1)必须完成前一阶段才能进入后一阶段,流程单一
(2)测试在后期才引入,对于系统存在重大缺陷
(3)文档驱动,极大的增加了工作量
何为需求工程?有哪几项任务,并对各项的主要内容给出简单解释。P95-P98
答:需求工程是应用工程化的方法来开发和管理软件的需求。包括七项任务:
- 起始:对项目建立基本的理解,包括存在的问题,解决方案等。
- 获取:建立商业目标,产品目标是什么,想要实现什么。
- 细化:核心是开发一个精确的需求模型,来说明软件的功能、特征等各个方面。
- 协商:出现冲突时通过利益相关者的需求排序来协商解决冲突。
- 规格说明:一份文档来指导。
- 确认:对工作产品进行质量评估,保证一致性。
- 需求管理:对变更进行管理。
请画出软件需求获取层次图,并对每个层次进行简要说明(第三次课补充材料)。
业务需求:反应了客户对产品的高层次目标要求,在项目视图与范围文档中予以说明。
用户需求:描述了用户使用产品时能完成的任务和产品应具备的功能,用例文档中说明。
功能需求:开发人员必须实现的软件功能。
何为UML?对给出的UML结构图(第四次课补充材料)
(1).解释各个组成符号的含义;
(2).用你所熟悉的高级语言,写出代码框架
请画出以下三张图得聚合分解图(第10次课补充材料)
从聚合的顶端,画出各类之间的聚合式关联,其次把子类沿着继承线往上移,逐一用子类代替母类,并画出其聚合式关联,结合两者。即看聚合两端,继承上移代替父类再画聚合。
几种需要熟练掌握和使用的UML与JAVA语言互相转换的表示(第四次课补充”第四章UML和JAVA”)
接口<
>,单向关联(实线+箭头),双向关联(实线+双箭头+角色名),自反关联(省略两个类为一个类employee,数组关联),聚合(特殊的单关联,空心菱形+箭头)。
请画出结构化分析模型的组成结构图和面向对象分析模型的组成结构图,再画出所选教材中得需求分析元素图,最后说明三张图的关系(第五次课补充材料,教材P125)。
请画出Yourdon面向对象OOA/OOD模型示意图,同时给出主要符号的一般描述(第六次课补充材料,第一章引论P14、P15)
内边界是类边界,外边界是实例边界;
实例间用无向线段表示连接关系;
消息由从发送者指向接受者的单向箭头表示;
两种结构总体部分结构和泛化结构;
主题用矩形框表示,把该主题中包含的所有对象封闭起来。
何为Yourdon面向对象软件工程方法中得EROI图?对题11图中的EROI图按照Yourdon方法进行描述(第六次课补充材料,第十章引论P97,附录)
标识和描述对象间相互通信的工具,EROI图表明了产生什么消息,哪些对象会接收消息,产生什么响应等。
EROI图水平方向每条垂线都代表了OOA模型中的一个对象-类,垂直方向代表时间,用->代表消息,指向代表消息方向,如果一个消息在另一个消息下即时间上晚于发生。
图一即代表事件NO.1 电梯召唤(summon event) 图二代表 事件NO.2 目的地请求(destination event)
-
三角表示一个schema被用在另一个schema中,tail返回除第一个的n-1,\差,交并,链接序列;这个队列和已用块一一对应的Index,队列移除即自由块增加已用减少
移除块schema:队列至少一项;新已用块=旧的减去已移走的块;新的自由块=旧的自由块+块队列的头;新的队列等于旧队列移走第一个元素。
加入快schema:当前块是已用块的集合;块的集合加入块队列的尾部;已用快和自由块集合不变。
请简要画出Petri图的基本组成符号并说明其含义,解释电梯Petri图的运行过程。
Petri网定义为一个四元组(P,T,I,O),P={p1,p2,…,pn}有穷位置集,T={t1,t2,…,tn}有穷转换集,I输入映射函数,O输出映射函数,黑色实心标记代表令牌分配。
EBf代表楼层f的Elevator的Button,此时EBf有一令牌表示楼层f的按钮已被按下,假定电梯由楼层g驶向f,因为电梯在g层,所以Fg上有一令牌,转换电梯在运行被激发,EBf与Fg的令牌被移去,在Ff上发现一个新令牌,转换的激发使电梯由g层驶向f层。
常见的体系结构风格有哪些?画出一种并作简单解释。
- 数据中心体系结构
- 数据流体系结构
- 调用和返回体系结构
- 面向对象体系结构
- 层次体系结构:定义一系列的层次,每层完成各自的操作,这些操作逐渐接近指令集,比如用户层负责建立用户界面的操作,内层建议操作系统接口,中间层提供各种工具和服务。
请用变换规则将DFD图导出SC图。(第八次课,史济民第五章P95)。
传入部分MA,中心加工MT,传出ME部分,底层Mc控制主模块,每一个模块调用下属两个模块比如C=GetB+BtoC,输入仅ReadA输出WriteV即可,针对控制中心传入传出。
用变换规则导出单输入输出处理程序的SC图。
何为OCP(开闭原则open-closed-principle),举例说明?(第九次课pdf第14章P212)
模块应该对外延具有开放性,对修改具有封闭性,即不修改构件内部结构即可达到扩展功能的目的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Class Book{
public:
String getContent(){
return "很久很久以前...";
}
}
class Mother{
public:
//Mother与Book耦合度太高,若想读其他读物居然要修改高层模块Mother
void narrate(Book book){
print("妈妈开始讲故事");
print(book.getContent);
}
}
class Client{
public:
static void main(){
Mother mother = new Mother();
mother.narrate(new Book());
}
}采用接口实现隔离变化:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32interface IReader{
public String getContent();
}
class Book implements IReader{
public String getContent(){
return "很久很久以前";
}
}
class Newspaper implements IReader{
public String getContent(){
return "读报纸";
}
}
class Mother{
//传递接口实现
//代表高层模块的 Mother 类将负责完成主要的业务逻辑,一旦需要对它进行修改, 引入错误的风险极大。所以遵循依赖倒置原则可以降低类之间的耦合性
public void narrate(IReader reader){
System.out.println("开始讲故事");
System.out.println("reader.getContent");
}
}
public class Client{
public static void main(){
Mother mother = new Mother();
mother.narrate(new book());
mother.narrate(new Newspaper());//不修改内部结构即可扩展功能
}
}
何为设计模式?请:
画出某一设计模式的结构图
给出该设计模式的代码框架
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37//参考:https://segmentfault.com/a/1190000015050674
//1.创建接口,AbstractProduct,所创建的所有对象的父类
public interface Shape{
void draw();
}
//2.创建实现接口的实体类,Product,工厂模式的创建目标
public class Circle implements Shape{
public void draw(){
print("circle draw method");
}
}
public class Square implements Shape{
public void draw(){
print("square draw method");
}
}
public class Rectangle implements Shape{
public void draw(){
print("rectangle draw method");
}
}
//3.创建一个工厂,当给定名称时生成实体对象,即负责实现所有实例的内部逻辑
public class ShapeFactory{
//注意此处返回类型
public static Shape getShape(String shapeType){
if(shapeType == "circle")
return new Circle();
else if(shapeType == "rectangle")
return new Rectangle();
else...
//若添加类还需要加if else,用工厂接口
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//修改为真正的工厂模式
public interface Factory {
public Shape getShape();
}
//实例化放到子类进行,如果添加形状继续继承即可不用修改工厂内部getShape方法
public class CircleFactory implements Factory{
public getShape(){
return new Circle();
}
}
public class RectangleFactory implements Factory{
public getShape(){
return new Rectangle();
}
}
3. 说明该模式的使用场景
- 当我们明确不同条件下需要创建不同实例时,调用者想创建某一对象给出名称即可。
请:(第12次课补充,白盒测试(经典))
(1) 画出19题的流程图
(2) 给出判定覆盖的测试用例
(判定覆盖又叫分支覆盖,它的含义是不仅每个语句必须至少执行一次, 而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。)
能够分别覆盖路径 sacbed 和 sabd 的两组测试数据, 或者可以分别覆盖路径 sacbd 和 sabed 的两组测试数据,都满足判定覆盖标准。例如,用下面两组测试数据就可做到判定覆盖:
I.A=3,B=0,X=3 (覆盖 sacbd)
II.A=2,B=1,X=1 (覆盖 sabed)
- 请根据题20图完成:(第12次课 第23章 测试传统的应用软件 P372-P374)
(1) 依据标注点,画出流图
(2) 给出流图的环路复杂性
- V(G) = 6(域数)
- V(G) = 17(边数) - 13(结点数) + 2 = 6
- V(G) = 5(判定结点数) + 1 = 6
(3) 给出独立路径
解:
等价类测试电话号码
因果图法。
评审技术(第14次课,第20章评审技术P318-P319)
基于功能点的度量(第14课,第30章产品度量P487)
何为边界条件测试法?请给出四种二维边界条件测试法的名称并画出示意图(第12次课补充”软件测试与质量保证05”)
边界条件分析法是对等价类划分方法的扩张,Bug潜伏在角落并在边界处聚集—Boris Beizer