KTPM hàm isSameValueArrayAtKey

By Duy Nguyen Thanh, Vy Tien

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.

  1. 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))
  1. Tính độ phức tạp Cyclomatic của đồ thị.
    V(G) = e - n + 2*P = 7-6+2 * 1 = 3
  2. 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
  3. 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”

  1. 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”

  1. 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”

  2. Á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

  1. 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
  1. 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]
Tags: ktpm
Share: Twitter Facebook LinkedIn