- 1. Vẽ đồ thị luồng điều khiển.
- 2. Tính độ phức tạp Cyclomatic của đồ thị.
- 3. Xác định tập các đường cơ sở.
- 4. Cần bao nhiêu test để 100% bao phủ câu lệnh
- 5. Cần bao nhiêu test đối với 100% bao phủ bao phủ nhánh
- 6. Cần bao nhiêu test đối với 100% bao phủ bao phủ quyết định
- 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.
- 8. 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
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.