- array_override
- 9. Kiểm thử luồng dữ liệu bằng phủ All defs-coverage, All-uses coverage, All- Du- Paths Coverage
array_override
1. public static function array_override( $default, $override ) {
2. if(is_array($override)){
3. for( $i=0;
4. $i<count(array);
5. ++$i ){
6. if( isset( $override[arrayKeys($default)[$i]] ) )
7. $default[arrayKeys($default)[$i]] = $override[arrayKeys($default)[$i]];
}
}
8. return $default;
}
- Vẽ đồ thị luồng điều khiển.
flowchart TD
idstart((Start))
--> id1((1))
--> id2((2))
--> id3((3))
--> id4((4))
--> id6((6))
--> id7((7)) & id5((5))
id7-->id5
id5-->id4
id4 & id2 -->id8(("8 ")) -->idend((end))
- Tính độ phức tạp Cyclomatic của đồ thị.
V(G) = e - n + 2*P = 11 - 8+2 * 1 = 4
- Xác định tập các đường cơ sở.
- 1->2 -> 8
- 1->2->3 -> 4->8
- 1->2->3->4->6->7->5->4->8
- 1->2->3->4->6->5->4->8
- Cần bao nhiêu test để 100% bao phủ câu lệnh
– chưa (Statement coverage - SC). Xác định các đường dẫn tương ứng.
Cần 1 testcase:
các đường dẫn tương ứng
- 1->2->3->4->6->7->5->4->6->5->4->8 Testcase 1: $default = [“title”=>”caphe”] $override =[“title”=>”override”]
- Cần bao nhiêu test đối với 100% bao phủ bao phủ nhánh
(Branch coverage - BC). Xác định các đường dẫn tương ứng.
các đường dẫn tương ứng
- 1->2->3->4->6->7->5->4->6->5->4->8
- 1->2->8 Testcase 1: $default = [“title”=>”caphe”] $override =[“title”=>”override”] Testcase 2: $default = [“title”=>”caphe”] $override = “not array”
- Cần bao nhiêu test đối với 100% bao phủ bao phủ quyết định
(Decision coverage - DC). Xác định các đường dẫn tương ứng
các đường dẫn tương ứng- 1->2->3->4->6->7->5->4->6->5->4->8
- 1->2->8 Testcase 1: $default = [“title”=>”caphe”] $override =[“title”=>”override”] Testcase 2: $default = [“title”=>”caphe”] $override = “not array”
- Áp dụng luồng dữ liệu trạng thái để xác định các bất thường của
các biến.xét biến $default
flowchart TD
idstart((Start))
--> id1(("1. d($default)"))
--> id2((2))
--> id3((3))
--> id4(("4. u($default)"))
--> id6(("6. u($default)"))
--> id7(("7. u($default), d($default)")) & id5((5))
id7-->id5
id5-->id4
id4 & id2 -->id8(("8. u($default) ")) -->idend(("end. k(all)"))
P1: ~duk P2: ~duuk P3: ~duuuduuk P4: ~duuuuk Cả 3 đường trên đều không chứa cặp đôi nào bất thường. ⇒ Không có bất thường
Xét biến $override
flowchart TD
idstart((Start))
--> id1(("1. d($override)"))
--> id2((2))
--> id3((3))
--> id4(("4"))
--> id6(("6. u($override)"))
--> id7(("7. u($override)")) & id5((5))
id7-->id5
id5-->id4
id4 & id2 -->id8(("8 ")) -->idend(("end. k(all)"))
Xét biến $i
flowchart TD
idstart((Start))
--> id1(("1"))
--> id2((2))
--> id3(("3.d($i)"))
--> id4(("4.u($i)"))
--> id6(("6. u($i)"))
--> id7(("7. u($i)")) & id5(("5.d($i)"))
id7-->id5
id5-->id4
id4 & id2 -->id8(("8")) -->idend(("end. k(all)"))
- Xác định def,c-use, p-use của các biến trong chương trình
9. Kiểm thử luồng dữ liệu bằng phủ All defs-coverage, All-uses coverage, All- Du- Paths Coverage
All defs-coverage
Xét biến $default
- Tập def của $default: {1,7}
- Tập use của $default: {4,6,7,8}
- Từ đỉnh 1 đến đỉnh 4 tồn tại cặp def-use (1,4)
- Path: [1,2,3,4]
Xét biến $override
- Tập def của $override: {1}
- Tập use của $override: {6,7}
- Từ đỉnh 1 đến đỉnh 6 tồn tại cặp def-use (1,6)
- Path: [1,2,3,4,6]
Xét biến $i
- Tập def của $i: {3,5}
- Tập use của $i: {4,6,7}
- Từ đỉnh 3 đến đỉnh 4 tồn tại cặp def-use (3,4)
- Path: [3,4]
⇒ Thoả điều kiện All-defs-coverage
All-uses coverage
Xét biến $default
- Từ d1($ default) đến u4($ default)
- Từ d1($ default) đến u6($ default)
- Từ d1($ default) đến u7($ default)
- Từ d1($ default) đến u8($ default)
- Từ d7($ default) đến u4($ default)
- Từ d7($ default) đến u6($ default)
- Từ d7($ default) đến u8($ default) Cặp def use và def clear path của biến này:
- (1,4): [1,2,3,4]
- (1,6): [1,2,3,4,6]
- (1,7): [1,2,3,4,6,7]
- (1,8): [1,2,3,4,6,7,5,4,8]
- (7,4): [7,5,4]
- (7,6): [7,5,4,6]
- (7,8): [7,5,4,8]
Xét biến $override
- Từ d1($ override) đến u6($ override)
- Từ d1($ override) đến u7($ override) Cặp def use và def clear path của biến này:
- (1,6): [1,2,3,4,6]
- (1,7): [1,2,3,4,6,7]
Xét biến $i
- Từ d3($ override) đến u4($ override)
- Từ d3($ override) đến u6($ override)
- Từ d3($ override) đến u7($ override)
- Từ d5($ override) đến u4($ override)
- Từ d5($ override) đến u6($ override)
- Từ d5($ override) đến u7($ override) Cặp def use và def clear path của biến này:
- (3,4): [3,4]
- (3,6): [3,4,6]
- (3,7): [3,4,6,7]
- (5,4): [5,4]
- (5,6): [5,4,6]
- (5,7): [5,4,6,7]
⇒ Thoả điều kiện All-uses coverage
All-Du-Paths Coverage
Xét biến $default
- Tất cả d1($ default) đến u4($ default): [1,2,3,4]
- Tất cả d1($ default) đến u6($ default): [1,2,3,4,6]
- Tất cả d1($ default) đến u7($ default): [1,2,3,4,6,7]
- Tất cả d1($ default) đến u8($ default): [1,2,3,4,6,7,5,4,8]
- Tất cả d7($ default) đến u4($ default): [7,5,4]
- Tất cả d7($ default) đến u6($ default): [7,5,4,6]
- Tất cả d7($ default) đến u8($ default): [7,5,4,8] Các đường dẫn thoả yêu cầu:
- [1,2,3,4,8]
- [1,2,3,4,6,5,4,8]
- [1,2,3,4,6,7,5,4,8]
- [1,2,3,4,6,7,5,4,6,5,4,8]
- [1,2,3,4,6,7,5,4,6,7,5,4,8]
Xét biến $override
- Tất cả d1($ override) đến u6($ override): [1,2,3,4,6]
- Tất cả d1($ override) đến u7($ override): [1,2,3,4,6,7] Các đường dẫn thoả yêu cầu:
- [1,2,3,4,6,5,4,8]
- [1,2,3,4,6,7,5,4,8]
Xét biến $i
- Tất cả d3($ override) đến u4($ override): [3,4]
- Tất cả d3($ override) đến u6($ override): [3,4,6]
- Tất cả d3($ override) đến u7($ override): [3,4,6,7]
- Tất cả d5($ override) đến u4($ override): [5,4]
- Tất cả d5($ override) đến u6($ override): [5,4,6]
- Tất cả d5($ override) đến u7($ override): [5,4,6,7] Các đường dẫn thoả yêu cầu:
- [1,2,3,4,8]
- [1,2,3,4.6,5,4,8]
- [1,2,3,4,6,7,5,4,8]
- [1,2,3,4,6,7,5,4,6,5,4,8]
- [1,2,3,4,6,7,5,4,6,7,5,4,8]
⇒ Thoả điều kiện All-Du-Paths Coverage