声明:本人上课摆烂选手,稍微听了下,答案仅供参考。
————————
1. 考虑下面这个代码,并回答以下的问题。
(a) 请画出上面代码的控制流程图。(20分)
(b) 请画出上面代码的数据流程图。(10分)
(c) 找出每个变量的定义使用对。(10分)
(d) 根据全定义使用覆盖准则,为变量sq_dist_value找出所有覆盖路径。(10分)
GPT给出答案:
一、
(a)控制流程图
+---------------------+
| Initialize variables|
+---------------------+
|
v
+-------------------------+
| Loop i from 0 to n-1 |
+-------------------------+
|
v
+----------------------------------------+
| Compute sq_dist_value and dist_value |
+----------------------------------------+
|
v
+----------------------+
| dist_value < bandwidth|
+----------------------+
/ \
/ \
Yes No
| |
v v
+---------------------------+
| Select kernel type and |
| update density_value |
+---------------------------+
|
v
+------------------+
| Return density_value |
+------------------+
(b) 数据流程图
+--------+
| Input |
| data |
| n |
| bandwidth|
| kernel_type|
+--------+
|
v
+----------------+
| Initialize |
| variables |
+----------------+
|
v
+--------------+
| For loop |
| (i=0 to n-1) |
+--------------+
|
v
+--------------------+
| Compute |
| sq_dist_value |
| dist_value |
+--------------------+
|
v
+---------------------+
| Check bandwidth |
| and update |
| density_value |
+---------------------+
|
v
+--------+
| Output |
| density_value|
+--------+
(c)变量定义使用对
density_value
定义:double density_value = 0
使用:返回值return density_value; 以及在计算过程中 density_value += ...
sq_dist_value
定义:double sq_dist_value;
使用:sq_dist_value = ... 以及在各个核函数计算过程中
dist_value
定义:double dist_value;
使用:dist_value = Math.sqrt(sq_dist_value); 以及在三角形核函数和指数核函数计算中
temp_value
定义:double temp_value;
使用:temp_value = ... 以及在四次核函数计算中
(d) 全定义使用覆盖路径
变量 sq_dist_value 的定义使用覆盖路径:
1.定义:sq_dist_value = (data[i][0] - g[0]) * (data[i][0] - g[0]) + (data[i][1] - g[1]) * (data[i][1] - g[1])
2.使用:
dist_value = Math.sqrt(sq_dist_value)
density_value += ... (根据不同的 kernel_type,有不同的使用形式)
因此,sq_dist_value 的覆盖路径包括:
1.计算 sq_dist_value
2.使用 sq_dist_value 计算 dist_value
3.在每种 kernel_type 的条件下使用 sq_dist_value 更新 density_value
2. 考虑以下的逻辑谓词,判断a、b和c那个是主子句,并给出解释。
(a) p1 = ~a ∧ ~b ∧ c (10分)
(b) p2 = b ∧ (a ^ c) ∧ (a ↔ c) (10分) (备注:在这个问题中,没有解释的答案是 0 分。)
二、
主子句定义:
- 写出逻辑谓词真值表:(1为true,即T;0为false即F)
框柱部分,a和b取值不变,改变c的取值,逻辑谓词随之改变。并且c为真时逻辑谓词为真,c为假时逻辑谓词为假(c决定了逻辑谓词取值),所以c是主子句。
不存在其他主子句。
(2)双条件(↔)运算符:a ↔c 表示 a 和 c必须同时为真或同时为假。
这是个合取范式,需要同时为真,逻辑谓词才会为真。可是第二项a,c异或需要ac相异才能为真,而第三项却要求ac相同。所以整个式子永远为假。所以不存在主子句能决定逻辑谓词取值。
3. 给定了逻辑谓词p = ((a ^ c) ∨ b) ^ d及其主子句a,给出:
(a) 广义有效子句覆盖的测试需求。(10分)
(b) 限制性有效子句覆盖的测试需求。(10分) (
c) 相关性有效子句覆盖的测试需求。 (10分) (备注:在这个问题中,没有步骤(如:没有列出条件和条件对)的答案是0分。)
三:
- 广义有效子句覆盖,只需要先找出主子句,然后根据逻辑谓词不同来任意组合即可:
(5 , 13)和(8 , 16)中a是有效字句。
所以广义有效子句覆盖的测试需求为:
(5,13),(5,16),(8,13),(8,16)
(b)其实上面中(5 , 13)和(8 , 16)就是限制性有效子句覆盖的测试需求。
限制性有效子句覆盖的定义:
(c)相关性有效子句覆盖定义:
根据定义,接着寻找符合的测试需求对。
除了上面的(5,13),(5,16),(8,13),(8,16)
还有(6,14),(7,15),这两项再任意组合:
(6,14),(6,15),(6,15),(7,15)
所以相关性有效子句覆盖的测试需求为:(5,13),(5,16),(8,13),(8,16),
(6,14),(6,15),(6,15),(7,15)