(2019春)软件构造:雨课堂试卷(一)

文章目录

    • 0-1 试一试Java
            • 单选题 第1题 1分
            • 单选题 第2题 1分
            • 单选题 第3题 1分
            • 单选题 第4题 1分
            • 单选题 第5题 1分
    • 1.1 软件构造的多维度视图
            • 单选题 第1题 1分
            • 单选题 第2题 1分
            • 单选题 第3题 1分
            • 多选题 第4题 2分
            • 多选题 第6题 2分
    • 1.2 软件构造的质量指标
            • 多选题 第1题 2分
            • 单选题 第2题 1分
            • 多选题 第3题 1分
            • 单选题 第4题 1分
            • 多选题 第5题 2分
    • 2.1 软件过程与配置管理
            • 多选题 第1题 2分
            • 单选题 第2题 1分
            • 单选题 第3题 1分
            • 填空题 第4题 2分
            • 多选题 第5题 2分
            • 多选题 第6题 2分
            • 单选题 第7题 1分
    • 2.2 软件构造工具
            • 单选题 第1题 1分
            • 单选题 第2题 1分
            • 单选题 第3题 1分
            • 单选题 第4题 1分
            • 多选题 第5题 2分
            • 多选题 第6题 1分
    • 7.5 Testing
            • 多选题 第1题 2分
            • 多选题 第2题 2分
            • 多选题 第3题 2分
            • 单选题 第4题 1分
            • 多选题 第5题 1分
            • 多选题 第6题 2分
            • 单选题 第7题 1分

0-1 试一试Java

单选题 第1题 1分
Integer a = new Integer(3);
Integer b = 3;
int c = 3;
System.out.println(a == b);
System.out.println(a == c);

控制台输出结果是?

A False; True
B False; False
C True; False
D True; False

正确答案:A
答案解析:

针对第四行,a和b是两个不同的object,在heap 中指向不同的地址,“==”判定对象等价性(将在3.5节继续讨论)。

这对第五行,a作为一个Integer对象,将会首先被auto-unboxing为一个int,然后再跟c比较。针对int类型的==,比较的是值。

单选题 第2题 1分
String a = "c";
String b = "c";
System.out.println("a and b: " + a == b);

控制台输出结果是?

A a and b: True
B a and b: False
C True
D False

正确答案:D
答案解析:

+的优先级比==要高,先计算两个字符串+,然后再跟b比较。

单选题 第3题 1分
public static void
	main(String args[]) {
		System.out.println(2.00 - 1.10);
}

控制台输出结果是?

A 0.9
B 0.90
C 不一定
D 以上都不是

正确答案:D
答案解析:

0.8999999999999999

自己查一下资料了解一下Java里如何处理double类型的数值

单选题 第4题 1分
List list = new Arraylist<>();
for (int i = -3; i < 3; i++)
	list.add(i);
for (int i = 0; i < 3; i++)
	list.remove(i);
System.out.println(list);

A [-3, -2, -1]
B [-2, 0, 2]
C Throws exception
D 以上都不是

正确答案:B

单选题 第5题 1分
String s = " Hello";
s += " World";
s.trim();
System.out.println(s);

A " Hello"
B "Hello"
C " Hello World"
D "Hello World"

正确答案:C

1.1 软件构造的多维度视图

单选题 第1题 1分

Memory dump属于软件三维度视图的____

A Build-time和code-level view
B Run-time和moment view
C Run-time和moment view
D Moment和component-level view

正确答案:C

单选题 第2题 1分

Execution stack trace和code snapshot在软件三维度视图中的共性特征是____

A 都是moment view
B 都是component-level
C 都是run-time view
D 无共性

正确答案:C

单选题 第3题 1分

Code Churn 和 AST分别是____的视图

A Code-level, Run-time
B Build-time, Period
C Component-level, Code-level
D Period, Build-time

正确答案:D

多选题 第4题 2分

Static linking和Dynamic linking的区别在于____

A 前者发生在构造阶段,后者发生在运行阶段
B 前者的软件运行时需要库文件,后者不需要
C 同样的源代码,经过前者产生的代码尺寸比后者的要小
D 二者都是试图把外部库文化和开发者的代码链接在一起形成可执行文件

正确答案:A

多选题 第6题 2分

以下说法正确的是____

A Code static analysis是发生在build-time
B Deployment是把build-time的软件转换为run-time的软件的手段之一
C Files随时间发生变化,产生各个不同版本,按时间连起来形成period view
D 对软件的profiling和tracing均发生在run-time

正确答案:ABCD

1.2 软件构造的质量指标

多选题 第1题 2分

以下___是软件构造的external quality factors?

A Correctness 正确性
B Extendibility 可扩展性
C Reusability 可复用性
D Ease of use 易用性
E Complexity 代码复杂度
F Understandability 代码可理解性

正确答案:ABCD

单选题 第2题 1分

关于软件构造的质量指标,以下说法不正确的是____

A 健壮性刻画了软件能够恰当的处理spec范围之外的各类异常情况的能力
B 各项质量指标的优先级是等价的,在软件构造过程中要对它们做出全面优化
C 代码行数LoC是内部质量指标之一,但它可能对多项外部质量指标产生影响
D 程序的可复用性与程序的开发代价/运行效率直接存在折中

正确答案:B

多选题 第3题 1分

Correctness和Robustness的区别在于___

A 前者针对“需求”的正确实现,后者针对“需求”之外的其他情况的恰当实现
B 如果某函数输入参数应该是(0,100]范围的整数,当用户输入-1时,此为前者应考虑的内容。
C 如果某函数的返回值应该是(0,100]范围的整数,当程序输出-1时,此为后者应考虑的内容。
D 一个100%正确的程序一定是100%健壮,反之亦然。

正确答案:A

单选题 第4题 1分

说法不正确的是___

A LoC和code complexity很高,并不代表一定有很差的reusability和extendibility
B 对代码的时间/空间复杂度进行优化,可能带来其他external quality factors的降低
C 每向软件里增加一点功能,都要确保其他质量属性不受到损失
D 健壮性是唯一不能与其他质量指标进行tradeoff的质量指标

正确答案:D

多选题 第5题 2分

HIT CS32207 关注的软件构造质量指标包括___

A Ready to change
B Safe from bugs
C Easy to understand
D Efficient to run
E Cheap for develop
F Easy to extend

正确答案:ABCDEF

2.1 软件过程与配置管理

多选题 第1题 2分

以下__不是agile development敏捷开发过程的特征

A 线性过程
B 增量式过程
C 迭代过程
D 测试驱动开发(Test-Driven)
E 持续集成、持续交付
F V字模型(确认/验证)

正确答案:A

单选题 第2题 1分

关于软件配置管理SCM的说法,不正确的是___

A 用于追踪和控制软件开发过程中的变化
B 其基本管理单元是软件配置项SCI,即开发过程中发生变化的基本单元
C 版本是为软件处于特定时刻(moment)的形态指派一个唯一的编号
D Git是一种典型的集中式版本控制系统

正确答案:D
答案解析:

Git是分布式版本控制系统

单选题 第3题 1分

以下关于软件配置管理SCM和Git的说法,不正确的是___

A 软件配置项SCI是软件演化过程中发生变化和SCM管理变化的基本单元,不需再细分
B Git中在本地机器上的.git目录对应于SCM中的配置管理数据库CMDB
C Git中的SCI是“文件”,它有三种形态:已修改(modified)、已暂存(staged)、已提交(committed)
D Git中两次相邻提交v1和v2,若后者提交时间晚于前者,那么Git仓库中只记录v2中的文件相对于v1中的文件发生变化的代码行(增加和删除的代码行)

正确答案:D

填空题 第4题 2分

用于将GitHub上的某个Git仓库设置为本地仓库的远程仓库的指令是 [填空1]

用于将当前staging area中的文件写入Git仓库的指令是 [填空2]

只需要填写指令,仓库的具体名字等参数无需输入。

正确答案:
git remote add;git commit

多选题 第5题 2分

针对Git仓库的object graph,以下不正确的说法是__

A 它是一个有向图,边的方向指向产生时间较晚的commit节点
B 一个commit节点可以有0个、1个、2个、多个parent节点
C 一个branch(分支)本质上相对于一个指向特定commit节点的“指针”
D 可以有两个不同的branch指向同一个commit节点
E git commit指令相当于在object graph当前分支HEAD指向的commit基础上,派生出一个新的commit节点。

正确答案:AB

多选题 第6题 2分

针对Git中commit节点的数据结构,说法不正确的是____

A 包含一个tree,tree中包含了一组指针,分别指向本次commit所修改的每一个文件。
B 若某commit相比其parent来说,某文件f未发生变化,则f在.git中不会重复存储。
C 如果文件f在前后两个commit中相比只增加了一行代码,那么.git只需要存储f的这一行的变化代码即可。
D 如果某个commit节点仅存在于远程服务器的object graph,那么当本地向远程git push的时候,会出现错误提示。

正确答案:AC
答案解析:

选项A比较隐藏:tree中包含的指针指向了本次commit中包含的所有文件,而非仅仅本次修改的文件。即使某文件未被修改,它也有一个对应的指针,只不过指向的就是其parent的对应文件。这其实就是选修B所描述的内容。

D选项相信大家在Lab1中已经有过体验了:当远程仓库比较“新”的时候,本地仓库不能直接push,会出错,必须先fetch下来,再跟本地的更新merge起来,统一push到远程仓库。

单选题 第7题 1分

如果使用https://xx.yy/zz.git作为本地Git仓库的远程仓库,其别名叫origin,若本地git仓库当前正在master分支上工作,那么以下能够最恰当的将本地仓库中的master分支的最新提交推送至远程仓库的指令是___

A git push origin master
B git pull origin master
C git fetch origin master;
git merge;
git push origin master
D git commit -m “fix bugs”;
git pull origin master

正确答案:C
答案解析:

这就是上一题D选项所描述的现象

2.2 软件构造工具

单选题 第1题 1分

以下___用于在软件设计阶段描述设计思想和设计结果?

A Programming languages (e.g., C, C++, Java, Python)
B Modeling languages (e.g., UML)
C Configuration languages (e.g., JSON)
D Build languages (e.g., XML)

正确答案:B

单选题 第2题 1分

以下关于软件构造过程各阶段的说法,不正确的有____

A Profiling是static code analysis的一种典型形式
B Code review的目的是发现代码中的潜在错误
C Refactoring是在不改变代码功能的前提下重写代码,以消除bug,提高质量
D Build是将软件从开发态转化为可运行状态的过程

正确答案:A

单选题 第3题 1分

以下___环节无需执行正在开发的软件?

A Code review
B Dynamic code analysis
C Debug
D Testing

正确答案:A

单选题 第4题 1分

Dynamic code analysis / profiling解决不了的问题是___

A 发现程序运行过程中的内存分配和占用情况
B 发现程序运行过程中每个类被实例化的数目,及其所占用的内存
C 发现程序潜在的性能瓶颈
D 发现程序中潜在的重复代码以便于抽取出来形成可复用函数/类

正确答案:D

多选题 第5题 2分

以下___可纳入自动化build的过程?

A Compiling .java into .class
B Executing JUnit test cases
C Using Checkstyle tool to check if code follows Google’s Java code style
D Packaging .class files into .jar file and deploying it to a remote server

正确答案:ABCD

多选题 第6题 1分

以下说法,不正确的是___

A 常规的构造次序是:coding ->refactoring-> testing -> code review-> debugging ->build ->dynamic profiling
B 通过code review和profiling找出可能的bug,通过testing找出真实的bug,通过debug找出bug的根源
C 想嗯弘毅spec构造完备的测试用例,后续对代码的任何修改,都应重新运行测试用例
D Build脚本是由配置语言书写,告知build工具如何一步一步完成自动化build任务

正确答案:A

7.5 Testing

多选题 第1题 2分

你要为某个方法A m(int b, String c)构造黑盒测试用例,那么设计和实现JUnit测试用例不需要依据的内容为___

A m()的pre-condition(注:pre-condition是该方法输入参数应满足的条件)
B m()的post-condition(注:post-condition是该方法执行后返回值应满足的条件)
C m()的内部实现代码
D 类A的等价性判断方法A.equals()

正确答案:C

多选题 第2题 2分

关于测试的说法,不正确的是___

A 再好的测试也无法证明代码里100%不存在bug
B 测试用例的数量越多,则越容易发现潜在的bug
C 设计测试用例时,需要给出输入数据和期望的输出结果
D 测试用例具有优先级,应将最容易发现错误的用例先执行
E TDD的思想是:先设计方法的spec,然后根据spec设计测试用例,然后再写代码并确保代码通过测试

正确答案:B

多选题 第3题 2分

Which of the following are good time to re-run all your JUnit tests?

A Before doing git add/commit/push
B After rewriting a function to make it faster
C When using a code coverage tool such as EclEmma
D After you think you fixed a bug

正确答案:ABCD

单选题 第4题 1分

在使用等价类划分方法进行测试用例设计时,错误的是___

A 如果输入参数a在spec中仅被规定a>10且未说明a<=10应该如何,那么无需测试a<=10的情况
B 如果输入参数a在spec中仅被规定a>10,那么仍然需要为a<=10的情况设计测试用例
C 采用笛卡尔积“全覆盖”策略进行测试用例设计,会导致用例数量多,测试代价高
D 采用“覆盖每个取值”的策略进行用例设计,测试代价低,但测试覆盖度可能较差

正确答案:B

多选题 第5题 1分

Which of these techniques are useful for choosing test cases in test-first programming, before any code is written?

A Black box
B Regression
C Static typing
D Partitioning 等价类划分
E Boundaries 边界值
F White box
G Code coverage 代码覆盖度

正确答案:ADE

多选题 第6题 2分

以下说法不正确的是___

A 如果发现了一个新bug,需要返回到版本仓库中对之前的各个版本进行测试,已确认该bug最早是在哪个历史版本中引入的
B 如果某个bug已被正确修复并已通过测试,那么为了降低后续测试的代价,应将该bug对应的测试用例从测试库中删除
C 代码覆盖度code coverage是指所有测试用例执行后有多大百分比覆盖了被测程序的所有代码行
D 可以从被测代码中寻找依据来设计处于“边界”上的测试用例。

正确答案:B

单选题 第7题 1分

以下关于JUnit的说法,不正确的是___

A 眸仿佛前标注着@Test,意味着它是一个测试方法。@Test是Java中的annotation
B 如果未通过测试,方法中的assertXXX()将抛出AssertionError
C 一个Java测试类可以定义全局属性并在@Before方法中对属性进行数据准备,在@Test方法中使用数据
D 如果一个Java测试类定义了多个@Test方法,那么它们按照在代码中出现的先后次序加以执行。

正确答案:D
答案解析:

D这个选项是一个很有意思的问题,请查阅Junit相关资料了解一下在同一个Java测试类中多个@Test方法的执行次序。

另外,@Before和@After方法与各个@Test方法的执行次序如何,也请了解一下。

你可能感兴趣的:(软件构造)