KTPM hàm 3

By Duy Nguyen Thanh, Vy Tien

getOrderMessage

namespace App\Enums\OrderStatus;

1. static public function getMessage($orderStatus){

2.   switch ($orderStatus) {

3.           case 'pending':

4.              $status = __('pending');

                $details = __('pending_details');

                break;

5.          case 'out_for_delivery':

6.              $status = __('out_for_delivery');

                $details = __('out_for_delivery_details');

                break;

  

7.          case 'delivered':

8.               $status = __('delivered');

                $details = __('delivered_details');

                break;

  

9.        case 'canceled':

10.             $status = __('canceled');

                $details = __('canceled_details');

                break;


        }

11.   return [

            'status' => $status,

            'details' => $details,

        ];

12.    }

1. Vẽ đồ thị luồng điều khiển.

flowchart TD
idstart((Start)) 
--> id1((1))
--> id2((2))
--> id3((3)) & id5((5)) & id7((7)) & id9((9)) 
id3 -->id4(4)
id5-->id6((6))
id7-->id8((8))
id9-->id10((10))

id4((4)) & id6((6))  & id8((8)) & id10  & id2
-->id13((11))
-->id100((12))
-->idend((end))

2. Tính độ phức tạp Cyclomatic của đồ thị.

V(G) = e - n + 2 * P = 15-12 + 2 * 1 = 5

3. Xác định tập các đường cơ sở.

  • 1->2->3->4->11->12
  • 1->2->5->6->11->12
  • 1->2->7->8->11->12
  • 1->2->9->10->11->12
  • 1->2->11->12

4. 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.

Test case 1:

public  function  testTestCaseOne():  void
{
	$orderStatus =  "pending";
	$result =  OrderStatus::getMessage($orderStatus);
	$this->assertTrue($result ==  array('status'  =>  __('pending'),
	'details'  =>  __('pending_details')));
}

Path

  • 1->2->3->4->11->12

Test case 2:

public  function  testTestCaseTwo():  void
{
$orderStatus =  "processed_and_ready_to_ship";
$result =  OrderStatus::getMessage($orderStatus);
$this->assertTrue($result ==  array('status'  =>  __('processed_and_ready_to_ship'),
'details'  =>  __('processed_and_ready_to_ship_details')));
}

Path

  • 1->2->5->6->11->12

Test case 3:

public  function  testTestCaseThree():  void
{
	$orderStatus =  "out_for_delivery";
	$result =  OrderStatus::getMessage($orderStatus);
	$this->assertTrue($result ==  array('status'  =>  __('out_for_delivery'),
	'details'  =>  __('out_for_delivery_details')));
}

Path

  • 1->2->7->8->11->12

Test case 4:

public  function  testTestCaseFour():  void
{
	$orderStatus =  "canceled";
	$result =  OrderStatus::getMessage($orderStatus);
	$this->assertTrue($result ==  array('status'  =>  __('canceled'),
	'details'  =>  __('canceled_details')));
}

Path

  • 1->2->9->10->11->12

5. 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->4->11->12
  • 1->2->5->6->11->12
  • 1->2->7->8->11->12
  • 1->2->9->10->11->12
  • 1->2->11->12

6. 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->4->13->14
  • 1->2->5->6->13->14
  • 1->2->7->8->13->14
  • 1->2->9->10->13->14
  • 1->2->11->12->13->14

7. Á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 $orderStatus

flowchart TD
idstart((Start)) 
--> id1(("1. d($orderStatus)"))
--> id2(("2. u($orderStatus)"))
--> id3((3)) & id5((5)) & id7((7)) & id9((9)) 
id3 -->id4(4)
id5-->id6((6))
id7-->id8((8))
id9-->id10((10))



id4((4)) & id6((6))  & id8((8)) & id10  & id2
-->id13((11))
-->id100(("12. k(all)"))
-->idend((end))

P1: ~duk P2: ~duk P3: ~duk P4: ~duk P5: ~duk Cả 5 đường trên đều không chứa cặp đôi nào bất thuờng. ⇒ Không có bất thường.

Xét biến $status

flowchart TD
idstart((Start)) 
--> id1(("1"))
--> id2(("2"))
--> id3((3)) & id5((5)) & id7((7)) & id9((9)) 
id3 -->id4(4)
id5-->id6((6))
id7-->id8((8))
id9-->id10(("10. d($status)"))
id4(("4. d($status)")) & id6(("6. d($status)"))  & id8(("8. d($status)")) & id10  & id2
-->id13(("11. u($status)"))
-->id100(("12. k(all)"))
-->idend((end))

P1: ~duk P2: ~duk P3: ~duk P4: ~duk P5: ~duk Cả 5 đường trên đều không chứa cặp đôi nào bất thuờng. ⇒ Không có bất thường.

Xét biến $details

flowchart TD
idstart((Start)) 
--> id1(("1"))
--> id2(("2"))
--> id3((3)) & id5((5)) & id7((7)) & id9((9)) 
id3 -->id4(4)
id5-->id6((6))
id7-->id8((8))
id9-->id10(("10. d($details)"))
id4(("4. d($details)")) & id6(("6. d($details)"))  & id8(("8. d($details)")) & id10  & id2
-->id13(("11. u($details)"))
-->id100(("12. k(all)"))
-->idend((end))

P1: ~duk P2: ~duk P3: ~duk P4: ~duk P5: ~duk Cả 5 đường trên đều không chứa cặp đôi nào bất thuờng. ⇒ Không có bất thường.

8. Xác định def,c-use, p-use của các biến trong chương trình

Dòng 1:

  • def của $orderStatus: 1

Dòng 2:

  • c-use của $orderStatus: 2

Dòng 3,5,7,9:

  • p-use của $orderStatus: 3,5,7,9

Dòng 4,6,8,10:

  • d-use của $status: 4,6,8,10
  • d-use của $details : 4,6,8,10

Dòng 11:

  • c-use của $status: 11
  • c-use của $details : 11

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ác định các biến: $orderStatus, $status, $details

Xét biến $orderStatus:

  • Tập def của $orderStatus: {1}
  • Tập use của $orderStatus: {2}
  • Từ đỉnh 1 đến đỉnh 2 tồn tại cặp def-use (1,2)
  • Path: [1,2,11,12]

Xét biến $status:

  • Tập def của $status: {4,6,8,10}
  • Tập use của $status: {11}
  • Từ đỉnh 4 đến đỉnh 11 tồn tại cặp def-use (4,11)
  • Path: [1,2,3,4,11,12]

Xét biến $details:

  • Tập def của $details: {4,6,8,10}
  • Tập use của $details: {11}
  • Từ đỉnh 4 đến đỉnh 11 tồn tại cặp def-use (4,11)
  • Path: [1,2,3,4,11,12]

⇒ Thoả điều kiện của all defs-coverage

All-uses coverage

Xét biến $orderStatus:

  • Từ d1($ orderStatus) đến u2($ orderStatus) Cặp def use và def clear path của biến này:
  • (1,2): [1,2]

Xét biến $status:

  • Từ d4($ status) đến u11($ status)
  • Từ d6($ status) đến u11($ status)
  • Từ d8($ status) đến u11($ status)
  • Từ d10($ status) đến u11($ status) Cặp def use và def clear path của biến này:
  • (4,11): [4,11]
  • (6,11): [6,11]
  • (8,11): [8,11]
  • (10,11): [10,11]

Xét biến $details:

  • Từ d4($ details) đến u11($ details)
  • Từ d6($ details) đến u11($ details)
  • Từ d8($ details) đến u11($ details)
  • Từ d10($ details) đến u11($ details) Cặp def use và def clear path của biến này:
  • (4,11): [4,11]
  • (6,11): [6,11]
  • (8,11): [8,11]
  • (10,11): [10,11]

⇒ Thoả điều kiện của all use-coverage

All-Du-Paths Coverage

Xét biến $orderStatus:

  • Tất cả d1($ orderStatus) đến u2($ orderStatus): [1,2] Các đường dẫn thoả yêu cầu:
  • [1,2,3,4,11,12]
  • [1,2,5,6,11,12]
  • [1,2,7,8,11,12]
  • [1,2,9,10,11,12]
  • [1,2,11,12]

Xét biến $status:

  • Tất cả d4($ status) đến u11($ status): [4,11]
  • Tất cả d6($ status) đến u11($ status): [6,11]
  • Tất cả d8($ status) đến u11($ status): [8,11]
  • Tất cả d10($ status) đến u11($ status): [10,11] Các đường dẫn thoả yêu cầu:
  • [1,2,3,4,11,12]
  • [1,2,5,6,11,12]
  • [1,2,7,8,11,12]
  • [1,2,9,10,11,12]

Xét biến $details:

  • Tất cả d4($ details) đến u11($ details): [4,11]
  • Tất cả d6($ details) đến u11($ details): [6,11]
  • Tất cả d8($ details) đến u11($ details): [8,11]
  • Tất cả d10($ details) đến u11($ details): [10,11] Các đường dẫn thoả yêu cầu:
  • [1,2,3,4,11,12]
  • [1,2,5,6,11,12]
  • [1,2,7,8,11,12]
  • [1,2,9,10,11,12]

⇒ Thoả điều kiện của all-du-paths coverage

Written with StackEdit.

Tags: ktpm
Share: Twitter Facebook LinkedIn