流图G的环形复杂度V(G)=E-N+1,其中,E是流图中边的条数,N是结点数。对还是错
时间: 2024-04-04 18:36:10 浏览: 96
这个答案是正确的。流图G的环形复杂度V(G)=E-N+1,其中,E是流图中边的条数,N是结点数。流图是一种图形化表示程序流程的工具,它可以用来描述程序的控制流程、数据流程等。流图中的结点代表程序中的基本块(basic block),边代表基本块之间的控制流程。环形复杂度是衡量程序复杂度的一个重要指标,它反映了程序中的循环结构的数量和嵌套程度。环形复杂度越高,程序的复杂度就越大,也就越难以维护和修改。因此,在程序设计和测试中,环形复杂度是一个非常重要的指标,需要对程序的环形复杂度进行评估和控制。
相关问题
使用基本路径测试方法,设计测试下面列出的伪码程序的测试用例。 1: START INPUT (A,B,C,D) 2: IF(A>0)AND (B>0) 4: THEN X=A+B 5: ELSE X=A-B 6: END 7: IF(C>A) OR(D<B) 8: THEN Y=C-D 9: ELSE Y=C+D 10: END 11: PRINT (X,Y) 12: STOP (1) 画出控制流图并计算上述程序的环形复杂度V(G)。 (2)若使用基本路径覆盖法设计基本路径的基本路径集合? (3)给出基路径集合下的测试用例。
(1) 控制流图如下:
![控制流图](https://i.imgur.com/9N8tUqo.png)
根据控制流图,可以计算环形复杂度 V(G) = E - N + 2 = 10 - 8 + 2 = 4。
(2) 基本路径覆盖法可以得到以下基本路径集合:
- 1-2-4-5-7-8-11
- 1-2-4-5-7-9-11
- 1-2-4-6-7-8-11
- 1-2-4-6-7-9-11
- 1-2-5-7-8-11
- 1-2-5-7-9-11
- 1-2-6-7-8-11
- 1-2-6-7-9-11
(3) 基于以上基本路径集合,可以设计以下测试用例:
- (A=1, B=1, C=1, D=1) :覆盖基本路径 1-2-5-7-8-11
- (A=1, B=-1, C=1, D=1) :覆盖基本路径 1-2-5-7-9-11
- (A=1, B=1, C=5, D=1) :覆盖基本路径 1-2-4-6-7-8-11
- (A=1, B=1, C=1, D=5) :覆盖基本路径 1-2-4-6-7-9-11
- (A=-1, B=1, C=1, D=1) :覆盖基本路径 1-2-4-5-7-8-11
- (A=-1, B=-1, C=1, D=1) :覆盖基本路径 1-2-4-5-7-9-11
- (A=-1, B=1, C=5, D=1) :覆盖基本路径 1-2-6-7-8-11
- (A=-1, B=1, C=1, D=5) :覆盖基本路径 1-2-6-7-9-11
给定如下程序: public ArrayList<Map<String, String>> queryForList(String sql) { ArrayList<Map<String, String>> results = null; stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(sql); if (rs != null) { results = new ArrayList<Map<String, String>>(); while (rs.next()) { Map<String, String> result = new HashMap<String, String>(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); for (int i = 1; i <= columnCount; i++) { String fieldName = rsmd.getColumnName(i).toLowerCase(); String fieldValue = rs.getString(i); result.put(fieldName, fieldValue); } results.add(result); } } return results; } 要求:(1)绘制该程序相应的流图;(50分) (2)计算流图的环形复杂度,要有具体的计算过程及计算方法;(10分) (3)确定线性独立路径的基本集合;(40分)
1. 绘制流程图
```
+------------------------+
| |
| queryForList |
| |
+------------------------+
|
v
+------------------------+
| |
| stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); |
| |
+------------------------+
|
v
+------------------------+
| |
| rs = stmt.executeQuery(sql); |
| |
+------------------------+
|
v
+------------------------+
| |
| if (rs != null) { |
| |
+------------------------+
|
v
+------------------------+
| |
| results = new ArrayList<Map<String, String>>(); |
| |
+------------------------+
|
v
+------------------------+
| |
| while (rs.next()) { |
| |
+------------------------+
|
v
+------------------------+
| |
| Map<String, String> result = new HashMap<String, String>(); |
| |
+------------------------+
|
v
+------------------------+
| |
| ResultSetMetaData rsmd = rs.getMetaData(); |
| |
+------------------------+
|
v
+------------------------+
| |
| int columnCount = rsmd.getColumnCount(); |
| |
+------------------------+
|
v
+------------------------+
| |
| for (int i = 1; i <= columnCount; i++) { |
| |
+------------------------+
|
v
+------------------------+
| |
| String fieldName = rsmd.getColumnName(i).toLowerCase(); |
| |
+------------------------+
|
v
+------------------------+
| |
| String fieldValue = rs.getString(i); |
| |
+------------------------+
|
v
+------------------------+
| |
| result.put(fieldName, fieldValue); |
| |
+------------------------+
|
v
+------------------------+
| |
| results.add(result); |
| |
+------------------------+
|
v
+------------------------+
| |
| } |
| |
+------------------------+
|
v
+------------------------+
| |
| return results; |
| |
+------------------------+
```
2. 计算环形复杂度
根据流程图,可以列出以下控制流语句:
- stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
- rs = stmt.executeQuery(sql);
- if (rs != null) {
- results = new ArrayList<Map<String, String>>();
- while (rs.next()) {
- Map<String, String> result = new HashMap<String, String>();
- ResultSetMetaData rsmd = rs.getMetaData();
- int columnCount = rsmd.getColumnCount();
- for (int i = 1; i <= columnCount; i++) {
- String fieldName = rsmd.getColumnName(i).toLowerCase();
- String fieldValue = rs.getString(i);
- result.put(fieldName, fieldValue);
- }
- results.add(result);
- }
- return results;
根据这些控制流语句,可以得到以下决策点:
- D1: if (rs != null)
因此,环形复杂度 V(G) = E - N + 2P = 12 - 10 + 2*1 = 4。
3. 确定线性独立路径的基本集合
根据流程图,可以得到以下路径:
- 1 -> 2 -> 3 -> 4 -> 5a -> 5b -> 6 -> 7
- 1 -> 2 -> 3 -> 4 -> 5a -> 5b -> 6 -> 8
因此,线性独立路径的基本集合为:
- {1, 2, 3, 4, 5a, 5b, 6, 7}
- {1, 2, 3, 4, 5a, 5b, 6, 8}
阅读全文