- 1. Đồ thị luồng điều khiển
- 2. Độ phức tạp
- 3. Danh sách đường cơ sở:
- 4. Cần 2 test case để 100% bao phủ câu lệnh:
- 5. Cần 3 test case để 100% bao phủ nhánh:
- 6. Cần 1 test case để 100% 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
- KTPM requirements:
namespace App\Http\Services\GateService;
// normalize name route to restful API : index,update, show, store, delete
1. static function getGateDefineFromRouteName(string $nameRoute): string
2.{
//route admin.category.index
3. $last_word_start = strrpos($nameRoute, '.');
// +1 so we don't include the space in our result
$last_word = substr($nameRoute, $last_word_start+1); // $last_word = PHP.
$nameRoute = substr_replace($nameRoute, '', $last_word_start);
//route admin.category
4. switch ($last_word) {
5. case 'change-status':
case 'edit':
6. $nameRoute = substr_replace($nameRoute, '.update', $last_word_start);
break;
7. case 'create':
8. $nameRoute = substr_replace($nameRoute, '.store', $last_word_start);
break;
}
9. return $nameRoute;
10.}
1. Đồ thị luồng điều khiển
flowchart TD
p0(("Start"))
p1(("1"))
p2(("2"))
p3(("3"))
p4(("4"))
p5(("5"))
p6(("6"))
p7(("7"))
p8(("8"))
p9(("9"))
p10(("10"))
pe(("End"))
p0-->p1-->p2-->p3-->p4
p4-->p5-->p6
p4-->p7-->p8
p6-->p9
p8-->p9
p4-->p9
p9-->p10
p10-->pe
e = 11
n = 10
p = 1
2. Độ phức tạp
V(G) = e - n + 2P = 11 - 10 + 2 * 1 = 3
3. Danh sách đường cơ sở:
- 1->2->3->4->9->10
- 1->2->3->4->5->6->9->10
- 1->2->3->4->7->8->9->10
4. Cần 2 test case để 100% bao phủ câu lệnh:
Test case 1:
public function testTestCaseOne(): void
{
$result = GateService::getGateDefineFromRouteName("admin.category.edit");
$this->assertTrue($result == "admin.category.update");
}
Path
- 1->2->3->4->5->6->9->10
Test case 2:
public function testTestCaseTwo(): void { $result = GateService::getGateDefineFromRouteName("admin.category.create"); $this->assertTrue($result == "admin.category.store"); }
Path
- 1->2->3->4->7->8->9->10
5. Cần 3 test case để 100% bao phủ nhánh:
- 1->2->3->4->5->6->9->10
- 1->2->3->4->7->8->9->10
- 1->2->3->4->9->10
6. Cần 1 test case để 100% bao phủ quyết định:
- 1->2->3->4->9->10
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 $last_word_start
flowchart TD
p0(("Start"))
p1(("1"))
p2(("2"))
p3(("3. d($last_word_start),
u($last_word_start),
u($last_word_start)"))
p4(("4"))
p5(("5"))
p6(("6. u($last_word_start)"))
p7(("7"))
p8(("8. u($last_word_start)"))
p9(("9"))
p10(("10"))
pe(("End. k(all)"))
p0-->p1-->p2-->p3-->p4
p4-->p5-->p6
p4-->p7-->p8
p6-->p9
p8-->p9
p4-->p9
p9-->p10
p10-->pe
P1: ~duuuk P2: ~duuuk P3: ~duuk Cả 3 đườ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 $last_word
flowchart TD
p0(("Start"))
p1(("1"))
p2(("2"))
p3(("3. d($last_word)"))
p4(("4. u($last_word)"))
p5(("5"))
p6(("6"))
p7(("7"))
p8(("8"))
p9(("9"))
p10(("10"))
pe(("End. k(all)"))
p0-->p1-->p2-->p3-->p4
p4-->p5-->p6
p4-->p7-->p8
p6-->p9
p8-->p9
p4-->p9
p9-->p10
p10-->pe
P1: ~duk P2: ~duk P3 ~duk Cả 3 đườ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 $nameRoute
flowchart TD
p0(("Start"))
p1(("1. d($nameRoute)"))
p2(("2"))
p3(("3. u($nameRoute),
u($nameRoute),
d($nameRoute),
u($nameRoute)"))
p4(("4"))
p5(("5"))
p6(("6. d($nameRoute),
u($nameRoute)"))
p7(("7"))
p8(("8. d($nameRoute),
u($nameRoute)"))
p9(("9. u($nameRoute)"))
p10(("10"))
pe(("End. k(all)"))
p0-->p1-->p2-->p3-->p4
p4-->p5-->p6
p4-->p7-->p8
p6-->p9
p8-->p9
p4-->p9
p9-->p10
p10-->pe
P1: ~duududuuk P2: ~duududuuk P3: ~duuduuk Cả 3 đường trên đều không chứa cặp đôi nào bất thuờng. ⇒ Không có bất thường.
Đoạn chương trình được đánh số sau trả lời cho câu 8:
// normalize name route to restful API : index,update, show, store, delete
1. static function getGateDefineFromRouteName(string $nameRoute): string
{
//route admin.category.index
2. $last_word_start = strrpos($nameRoute, '.');
// +1 so we don't include the space in our result
3. $last_word = substr($nameRoute, $last_word_start); // $last_word = PHP.
4. $nameRoute = substr_replace($nameRoute, '', $last_word_start);
//route admin.category
5. switch ($last_word) {
case 'change-status':
case 'edit':
6. $nameRoute = substr_replace($nameRoute, 'update', $last_word_start);
break;
case 'create':
7. $nameRoute = substr_replace($nameRoute, 'store', $last_word_start);
break;
}
8. return $nameRoute;
}
.
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 $nameRoute: 1
Dòng 2:
- def của $last_word_start: 2
- c-use của $nameRoute: 2
Dòng 3:
- def của $last_word: 3
- c-use của $nameRoute: 3
- c-use của $last_word_start: 3
Dòng 4:
- def của $nameRoute: 4
- c-use của $nameRoute: 4
- c-use của $last_word_start: 4
Dòng 5:
- p-use của $last_word: 5
Dòng 6:
- def của $nameRoute: 6
- c-use của $nameRoute: 6
- c-use của $last_word_start: 6
Dòng 7:
- def của $nameRoute: 7
- c-use của $nameRoute: 7
- c-use của $last_word_start: 7
Dòng 8: def của $nameRoute: 8
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: $nameRoute, $last_word_start, $last_word
Xét biến $nameRoute
- Tập def của $nameRoute: {1, 3, 6, 8}
- Tập use của $nameRoute: {3, 6, 8, 9}
- Từ đỉnh 1 đến đỉnh 3 tồn tại cặp def-use (1,3).
- Path: (1,2,3,4,9,10)
Xét biến $last_word_start
- Tập def của $last_word_start: {3}
- Tập use của $last_word_start: {3, 6, 8}
- Từ đỉnh 3 đến đỉnh 6 tồn tại cặp def-use (3, 6).
- Path: (1,2,3,4,5,6,9,10)
Xét biến $last_word
- Tập def của $last_word: {3}
- Tập use của $last_word: {4}
- Từ đỉnh 3 đến đỉnh 4 tồn tại cặp def-use (3, 4)
- Path: (1,2,3,4,9,10)
⇒ Thoả điều kiện All defs-coverage
All-uses coverage
Xét biến $nameRoute
- Từ d1($ nameRoute) đến u3($ nameRoute)
- Từ d3($ nameRoute) đến u3($ nameRoute)
- Từ d6($ nameRoute) đến u6($ nameRoute)
- Từ d8($ nameRoute) đến u8($ nameRoute)
- Từ d3($ nameRoute) đến u9($ nameRoute)
- Từ d6($ nameRoute) đến u9($ nameRoute)
- Từ d8($ nameRoute) đến u9($ nameRoute)
Cặp def use và def clear path của biến này:
- (1,3): [1,3]
- (3,3): [3]
- (6,6): [6]
- (8,8): [8]
- (3,9): [3,4,9]
- (6,9): [6,9]
- (8,9): [8,9]
Xét biến $last_word_start
- Từ d3($ last_word_start) đến u3($ last_word_start)
- Từ d3($ last_word_start) đến u6($ last_word_start)
- Từ d3($ last_word_start) đến u8($ last_word_start)
Cặp def use và def clear path của biến này:
- (3,3): [3]
- (3,6): [3,4,5,6]
- (3,8): [3,4,7,8]
Xét biến $last_word
- Từ d3($ last_word) đến u4($ last_word)
Cặp def use và def clear path của biến này:
- (3,4): [3,4]
⇒ Path của cả 3 biến:
- [1,2,3,4,5,6,9,10]
- [1,2,3,4,7,8,9,10]
- [1,2,3,4,9,10]
⇒ Thoả điều kiện All-uses coverage
All-Du-Paths Coverage
Xét biến $nameRoute
- Tất cả d1($ nameRoute) đến u3($ nameRoute): [1,2,3]
- Tất cả d3($ nameRoute) đến u3($ nameRoute): [3]
- Tất cả d6($ nameRoute) đến u6($ nameRoute): [6]
- Tất cả d8($ nameRoute) đến u8($ nameRoute): [8]
- Tất cả d3($ nameRoute) đến u9($ nameRoute): [3,4,9]
- Tất cả d6($ nameRoute) đến u9($ nameRoute): [6,9]
- Tất cả d8($ nameRoute) đến u9($ nameRoute): [8,9]
Các đường dẫn thoả yêu cầu:
- [1,2,3,4,5,6,9,10]
- [1,2,3,4,7,8,9,10]
- [1,2,3,4,9,10]
Xét biến $last_word_start
- Từ d3($ last_word_start) đến u3($ last_word_start): [3]
- Từ d3($ last_word_start) đến u6($ last_word_start): [3,4,5,6]
- Từ d3($ last_word_start) đến u8($ last_word_start): [3,4,7,8]
Các đường dẫn thoả yêu cầu
- [1,2,3,4,5,6,9,10]
- [1,2,3,4,7,8,9,10]
Xét biến $last_word
- Từ d3($ last_word) đến u4($ last_word)
Các đường dẫn thoả yêu cầu:
- [1,2,3,4,5,6,9,10]
- [1,2,3,4,7,8,9,10]
- [1,2,3,4,9,10]
⇒ Thoả điều kiện All-Du-Paths Coverage
KTPM requirements:
- Vẽ đồ thị luồng điều khiển.
- Tính độ phức tạp Cyclomatic của đồ thị.
- Xác định tập các đường cơ sở.
- 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ầ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ầ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
- Á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ác định def,c-use, p-use của các biến trong chương trình
- Kiểm thử luồng dữ liệu bằng phủ All defs-coverage,
All-uses coverage, All- Du- Paths Coverage
Written with StackEdit.