namespace App\Http\Services;
1. function isSameValueArrayAtKey($valueCheck, $keyCheck, $array){
2. for ($i=0 ;
3. $i< count($array);
4. $i++){
5. if (arrayKeys($array)[$i]==$keyCheck && $array[$i] == $valueCheck) {
6. return true; }
}
7. return false;
8. }
Có 3 biến đầu vào (tham số $valueCheck, $keyCheck, $array) và 1 biến cục bộ $key, $value.
- Vẽ đồ thị luồng điều khiển.
flowchart TD
idstart((Start))
--> id1((1))
--> id2((2))
--> id3((3))
--> id5((5))
--> id4((4))
id4((4)) -->id3
id3-->id((7))-->id100
id5((5)) -->id6((6))-->id100((8))
-->idend((end))
- Tính độ phức tạp Cyclomatic của đồ thị.
V(G) = e - n + 2*P = 7-6+2 * 1 = 3 - Xác định tập các đường cơ sở.
1->2->3->5->4->3->5->6->8 1->2->3->5->6->8 1->2->7->8 - Cần bao nhiêu test để 100% bao phủ câu lệnh
(Statement coverage - SC). Xác định các đường dẫn tương ứng.
Các đường dẫn: 1->2->3->5->4->3->5->6->8 1->2->7->8 Cần 2 testcase để 100% bao phủ câu lệnh :
Testcase 1 : $array=[“test” => 123 \, “test2”=>”456”] , $keycheck=”test2”, $valueCheck= “456” Testcase 2 : $array=[ ] , $keycheck=”test”, $valueCheck= “123”
- 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.
1->2->3->5->4->3->5->6->8 1->2->7->8 Cần 2 testcase để 100% bao phủ nhánh : Testcase 1 : $array=[“test” => 123 \, “test2”=>”456”] , $keycheck=”test2”, $valueCheck= “456” Testcase 2 : $array=[ ] , $keycheck=”test”, $valueCheck= “123”
-
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
1->2->3->5->4->3->5->6->8 1->2->7->8 Cần 2 testcase để 100% bao phủ quyết định : Testcase 1 : $array=[“test” => 123 \, “test2”=>”456”] , $keycheck=”test2”, $valueCheck= “456” Testcase 2 : $array=[ ] , $keycheck=”test”, $valueCheck= “123” -
Á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.
$valueCheck, $keyCheck, $array , $i
Xét biến $valueCheck
flowchart TD
idstart((Start))
--> id1(("1. d($valueCheck)"))
--> id2((2))
--> id3((3))
--> id5(("5. u($valueCheck)"))
--> id4((4))
id4((4)) -->id3
id3-->id((7))-->id100
id5 -->id6((6))-->id100((8))
-->idend((end))
P1:~duuk P2:~duk P3:~dk Chứa cặp đôi bất thường ⇒ Có bất thường
Xét biến $keyCheck
flowchart TD
idstart((Start))
--> id1(("1. d($keyCheck)"))
--> id2((2))
--> id3((3))
--> id5(("5. u($keyCheck)"))
--> id4((4))
id4((4)) -->id3
id3-->id((7))-->id100
id5 -->id6((6))-->id100((8))
-->idend((end))
P1:~duuk P2:~duk P3:~dk Chứa cặp đôi bất thường ⇒ Có bất thường
Xét biến $array
flowchart TD
idstart((Start))
--> id1(("1. d($array)"))
--> id2((2))
--> id3(("3. u($array)"))
--> id5(("5. u($array)"))
--> id4((4))
id4((4)) -->id3
id3-->id((7))-->id100
id5 -->id6((6))-->id100((8))
-->idend((end))
P1:~duuuuk P2:~duuk P3:~duk 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 $i
flowchart TD
idstart((Start))
--> id1(("1"))
--> id2(("2. d($i)"))
--> id3(("3. u($i)"))
--> id5(("5. u($i)"))
--> id4((4))
id4(("4. d($i)")) -->id3
id3-->id((7))-->id100
id5 -->id6((6))-->id100((8))
-->idend((end))
P1:~duuuuuuk P2:~duk P3:~dk Chứa cặp đôi bất thường ⇒ Có bất thường
- Xác định def,c-use, p-use của các biến trong chương trình
1. function isSameValueArrayAtKey($valueCheck, $keyCheck, $array){
2. for ($i=0 ;
3. $i< count($array);
4. $i++){
5. if (arrayKeys($array)[$i]==$keyCheck && $array[$i] == $valueCheck) {
6. return true; }
}
7. return false;
8. }
Dòng 1:
- def của $valueCheck: 1
- def của $keyCheck: 1
- def của $array: 1
Dòng 2:
- def của $i: 2
Dòng 3:
- p-use của $i: 3
Dòng 4 :
- def-use của $i: 4
Dòng 5 :
- c-use $i: 5
- c-use của $array: 5
- p-use của $keyCheck: 3
- p-use của $valueCheck: 3
- 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ác định các biến: $valueCheck, $keyCheck, $array , $i
Xét biến $valueCheck
- Tập def của $valueCheck: {1}
- Tập use của $valueCheck: {5}
- Từ đỉnh 1 đến đỉnh 5 tồn tại cặp def-use (1,5)
- Path: [1,2,3,5]
Xét biến $keyCheck
- Tập def của $keyCheck: {1}
- Tập use của $keyCheck: {5}
- Từ đỉnh 1 đến đỉnh 5 tồn tại cặp def-use (1,5)
- Path: [1,2,3,5]
Xét biến $array
- Tập def của $array: {1}
- Tập use của $array: {3,5}
- Từ đỉnh 1 đến đỉnh 3 tồn tại cặp def-use (1,3)
- Path: [1,2,3]
Xét biến $i
- Tập def của $i: {2}
- Tập use của $i: {3,4,5}
- Từ đỉnh 2 đến đỉnh 3 tồn tại cặp def-use (2,3)
- Path: [2,3]
All-uses coverage
Xét biến $valueCheck
- Từ d1($ valueCheck) đến u5($ valueCheck) Cặp def use và def clear path của biến này:
- (1,5): [1,2,3,5]
Xét biến $keyCheck
- Từ d1($ keyCheck) đến u5($ keyCheck) Cặp def use và def clear path của biến này:
- (1,5): [1,2,3,5]
Xét biến $array
- Từ d1($ array) đến u3($ array)
- Từ d1($ array) đến u5($ array) Cặp def use và def clear path của biến này:
- (1,3): [1,2,3]
- (1,5): [1,2,3,5]
Xét biến $i
- Từ d2($ i) đến u3($ i)
- Từ d2($ i) đến u4($ i)
- Từ d2($ i) đến u5($ i) Cặp def use và def clear path của biến này:
- (2,3): [1,2,3]
- (2,4): [1,2,3,5,4]
- (2,5): [1,2,3,5]
All-Du-Paths Coverage
Xét biến $valueCheck
- Tất cả d1($ valueCheck) đến u5($ valueCheck): [1,2,3,5] Các đường dẫn thoả yêu cầu:
- [1,2,3,5,6,8]
- [1,2,3,5,4,3,7,8]
Xét biến $keyCheck
- Tất cả d1($ keyCheck) đến u5($ keyCheck): [1,2,3,5] Các đường dẫn thoả yêu cầu:
- [1,2,3,5,6,8]
- [1,2,3,5,4,3,7,8]
Xét biến $array
- Tất cả d1($ array) đến u3($ array): [1,2,3]
- Tất cả d1($ array) đến u5($ array): [1,2,3,5] Các đường dẫn thoả yêu cầu:
- [1,2,3,7,8]
- [1,2,3,5,6,8]
- [1,2,3,5,4,3,7,8]
Xét biến $i
- Tất cả d2($ i) đến u3($ i): [2,3]
- Tất cả d2($ i) đến u4($ i): [2,3,5,4]
- Tất cả d2($ i) đến u5($ i): [2,3,5] Các đường dẫn thoả yêu cầu:
- [1,2,3,7,8]
- [1,2,3,5,6,8]
- [1,2,3,5,4,3,7,8]