1. Trang chủ
  2. » Luận Văn - Báo Cáo

Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C

96 192 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 96
Dung lượng 2,04 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ý thức được đây là một lĩnh vực nghiên cứu có nhiều triển vọng ứng dụng trong phát triển phần mềm, tôi đã chọn hướng nghiên cứu “ Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chươ

Trang 1

LỜI CẢM ƠN

Trong suốt quá trình học tập và làm luận văn, tôi đã nhận được sự hướng dẫn, giúp đỡ quý báu của quý thầy cô, các anh chị và các bạn Với lòng kính trọng và biết ơn sâu sắc tôi xin được bày tỏ lời cảm ơn chân thành tới:

 Ban giám hiệu, Phòng đào tạo sau đại học trường Đại Học Khoa Học

Tự Nhiên;

 Phó giáo sư - Tiến sĩ Đoàn Văn Ban - người thầy đã hết lòng giúp đỡ,

dạy bảo, động viên và tạo mọi điều kiện thuận lợi cho tôi trong suốt quá trình học tập và hoàn thành luận văn tốt nghiệp

 Cùng tất cả các thầy cô trong khoa, trong trường, các anh chị trong lớp

 Xin chân thành cảm ơn các thầy cô trong hội đồng đã cho tôi những đóng góp quý báu để hoàn chỉnh luận văn này

Tác giả

Phạm Thị Miên

Trang 2

2

MỤC LỤC

LỜI CẢM ƠN 1

MỤC LỤC 2

I) DANH MỤC CÁC TỪ VIẾT TẮT, THUẬT NGỮ 5

II) DANH MỤC CÁC BẢNG BIỂU 5

III) DANH MỤC CÁC HÌNH VẼ 5

LỜI MỞ ĐẦU 6

CHƯƠNG 1 – KHÁI QUÁT VỀ KIỂM THỬ PHẦN MỀM 9

1.1 Khái niệm 9

1.2 Các cấp độ kiểm thử phần mềm 9

1.2.1 Kiểm thử đơn vị (Unit Test) 10

1.2.2 Kiểm thử tích hợp (Integration Test) 10

1.2.3 Kiểm thử hệ thống (System Test) 11

1.2.4 Kiểm thử chấp nhận sản phẩm (Acceptance Test) 13

1.3 Kỹ thuật kiểm thử phần mềm 13

1.3.1 Kỹ thuật kiểm thử hộp đen (Black – box Testing) 13

1.3.1.1 Phân hoạch tương đương 15

1.3.1.2 Phân tích giá trị biên 17

1.3.2 Kỹ thuật kiểm thử hộp trắng (White – box Testing) 18

1.3.2.1 Kiểm thử đường dẫn cơ sở 18

1.3.2.2 Kiểm thử cấu trúc điều khiển 23

1.4 Kết luận 26

CHƯƠNG 2 – KỸ THUẬT KIỂM THỬ ĐỘT BIẾN 27

2.1 Một số khái niệm 27

2.1.1 Kiểm thử đột biến 27

2.1.2 Đột biến 27

2.1.3 Toán tử đột biến 30

2.2 Cơ sở của kiểm thử đột biến 30

2.3 Toán tử đột biến 30

2.4 Quy trình kiểm thử đột biến 32

2.5 Hạn chế của kiểm thử đột biến 34

2.6 Kết luận 35

Trang 3

CHƯƠNG 3 - MỘT SỐ CẢI TIẾN KỸ THUẬT KIỂM THỬ ĐỘT BIẾN 36

3.1 Giảm chi phí tính toán 36

3.1.1 Phương pháp làm ít hơn (A “do fewer” approach) 36

3.1.1.1 Lấy mẫu đột biến (Mutant Sampling) 37

3.1.1.2 Đột biến ràng buộc (Constrained Mutation) 39

3.1.1.3 N - đột biến lựa chọn (N - Selective Mutation) 40

3.1.2 Phương pháp làm nhanh hơn (A “do smarter” approach) 42

3.1.2.1 Phương pháp tạo lược đồ đột biến 43

3.1.2.2 Đột biến yếu (Weak Mutation) 45

3.2 Tăng tự động hóa 48

3.2.1 Tạo dữ liệu thử tự động 48

3.2.2 Xác định các đột biến tương đương tự động 50

3.3 Kết luận 53

CHƯƠNG 4 - ỨNG DỤNG KỸ THUẬT KIỂM THỬ ĐỘT BIẾN ĐỂ KIỂM THỬ CÁC CHƯƠNG TRÌNH C (C – Sharp) 54

4.1 Tìm hiểu về NUnit 55

4.1.1 Định nghĩa 55

4.1.2 Đặc điểm của NUnit 55

4.1.3 Thuộc tính hay dùng trong thư viện NUnit.Framework 55

4.1.4 Phương thức tĩnh hay dùng trong NUnit.Framework.Assert 57

4.1.5 Cài đặt NUnit 59

4.1.6 Cách sử dụng NUnit 61

4.2 Công cụ Nester 69

4.2.1 Điều kiện tiên quyết 69

4.2.2 Giải pháp cho đột biến 69

4.2.3 Chạy Nester 70

4.2.4 Lựa chọn Nester.exe.config 72

4.3 Quy trình ứng dụng kiểm thử đột biến để kiểm thử các chương trình C - Sharp 72

4.3.1 Kiểm thử 73

4.3.2 Tạo đột biến 74

4.4 Kết luận 76

KẾT LUẬN 77

Trang 4

4

PHỤ LỤC 1 82

PHỤ LỤC 2 84

PHỤ LỤC 3 90

PHỤ LỤC 4 94

PHỤ LỤC 5 95

Trang 5

I) DANH MỤC CÁC TỪ VIẾT TẮT, THUẬT NGỮ

- CBT (Constraint Based Testing): Kiểm thử dựa trên ràng buộc

- MSG (Mutation Analysis Using Mutant Schemata): Phương pháp tạo lược đồ đột biến

- PUT (Program Unit Test): Chương trình gốc

II) DANH MỤC CÁC BẢNG BIỂU

Bảng 1.1 Ví dụ các lớp tương đương

Bảng 2.1 22 toán tử chuẩn được sử dụng trong Mothra

Bảng 4.1 Lựa chọn Nester.exe.config

Bảng 4.2 Kết quả chạy NUnit

Bảng 4.3 Chất lượng các trường hợp kiểm thử chương trình cs – money sau khi thực hiện Nester

III) DANH MỤC CÁC HÌNH VẼ

Hình 1.1 Bốn cấp độ cơ bản của kiểm thử phần mềm

Hình 1.2 Đồ thị luồng điều khiển

Hình 1.3 Ví dụ minh hoạ phát sinh các trường hợp kiểm thử theo đường dẫn cơ sở

Trang 6

 Thứ nhất, kiểm thử các hệ thống phức tạp đòi hỏi rất nhiều nguồn tài nguyên và chi phí cao

 Thứ hai, tiến trình phát triển phần mềm luôn trải qua nhiều hoạt động biến đổi thông tin, sự mất mát thông tin trong quá trình biến đổi là yếu tố chính làm cho hoạt động kiểm thử khó khăn

 Thứ ba, kiểm thử chưa được chú trọng trong đào tạo con người

 Cuối cùng, không tồn tại kỹ thuật kiểm thử cho phép khẳng định một phần mềm hoàn toàn đúng đắn hay không chứa lỗi

Với mục đích phát hiện lỗi, kiểm thử phần mềm thường phải trải qua các bước: tạo dữ liệu thử, thực thi phần mềm trên dữ liệu thử và quan sát kết quả nhận được Trong các bước này, bước tạo dữ liệu đóng vai trò quan trọng nhất, bởi vì chúng ta không thể tạo ra mọi dữ liệu từ miền vào của chương trình, mà chúng ta chỉ có thể tạo ra các dữ liệu thử có khả năng phát hiện lỗi cao nhất Vấn đề đặt ra là làm thế nào để đánh giá được khả năng phát hiện lỗi của một

bộ dữ liệu thử?

Một kinh nghiệm để giúp giải quyết vấn đề này, đó là sử dụng khái niệm

chất lượng bộ dữ liệu thử như là một phương tiện để đánh giá bộ dữ liệu thử

như thế nào là “tốt” khi kiểm thử chương trình Ở đây, “tốt” được đánh giá

Trang 7

liên quan đến tiêu chuẩn chất lượng được định trước, thường là một số dấu hiệu bao phủ chương trình Ví dụ, tiêu chuẩn bao phủ dòng lệnh đòi hỏi bộ dữ liệu thử thực hiện mọi dòng lệnh trong chương trình ít nhất một lần Nếu bộ

dữ liệu thử được tìm thấy không chất lượng liên quan đến tiêu chuẩn (tức là không phải tất cả các câu lệnh đều được thực hiện ít nhất một lần), thì kiểm thử nữa là bắt buộc Do đó, mục tiêu là tạo ra một tập các kiểm thử thực hiện đầy đủ tiêu chuẩn chất lượng

Tiêu chuẩn chất lượng tiêu biểu như bao phủ câu lệnh và kiểm thử quyết định (thực hiện tất cả các đường dẫn đúng và sai qua chương trình) dựa vào việc thực hiện chương trình với số lượng kiểm thử tăng dần để nâng cao độ tin cậy của chương trình đó Tuy nhiên, chúng không tập trung vào nguyên nhân thất bại của chương trình - được gọi là lỗi Kiểm thử đột biến là một tiêu chuẩn như vậy Tiêu chuẩn này tạo ra các phiên bản của chương trình có chứa các lỗi đơn giản và sau đó tìm ra các kiểm thử để chỉ ra các dấu hiệu của lỗi Nếu có thể tìm thấy một bộ dữ liệu thử chất lượng làm lộ ra các dấu hiệu này

ở tất cả các phiên bản bị lỗi, thì sự tin tưởng vào tính đúng đắn của chương trình sẽ tăng Kiểm thử đột biến đã được áp dụng cho nhiều ngôn ngữ lập trình như là một kỹ thuật kiểm thử hộp trắng

Ý thức được đây là một lĩnh vực nghiên cứu có nhiều triển vọng ứng

dụng trong phát triển phần mềm, tôi đã chọn hướng nghiên cứu “ Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C” cho đề tài

luận văn của mình

Luận văn được tổ chức thành 4 chương như sau:

 Chương 1 – Trình bày khái quát về kiểm thử phần mềm như khái

niệm kiểm thử phần mềm, mục đích, mục tiêu và các mức kiểm thử phần mềm Chương này cũng đề cập đến việc sử dụng các kỹ thuật kiểm thử hộp trắng và hộp đen để thiết kế dữ liệu thử

Trang 8

8

 Chương 2 - Mô tả chi tiết các thành phần chính của kỹ thuật kiểm thử

đột biến, giới thiệu các giả thuyết cơ bản cần thiết để thực hiện phương pháp này Chương này còn cung cấp quy trình để phân tích đột biến, từ đó rút ra được những vấn đề còn hạn chế đối với kỹ thuật kiểm thử đột biến, được cải tiến ở chương 3

 Chương 3 – Giới thiệu một số phương pháp cải tiến kỹ thuật kiểm thử đột biến nhằm giảm chi phí tính toán và tăng tự động hóa

 Chương 4 – Tập trung vào ứng dụng kỹ thuật kiểm thử đột biến

Phần đầu giới thiệu hai công cụ mã nguồn mở miễn phí là NUnit dùng

để kiểm thử đơn vị của chương trình C#, và Nester với chức năng phân tích và tạo đột biến Tiếp đó là ứng dụng kỹ thuật kiểm thử đột

biến để kiểm thử các chương trình C# sử dụng hai công cụ trên

Trang 9

CHƯƠNG 1 – KHÁI QUÁT VỀ

KIỂM THỬ PHẦN MỀM 1.1 Khái niệm

Kiểm thử phần mềm là quá trình thực thi một hệ thống phần mềm để xác định xem phần mềm có đúng với đặc tả không và thực hiện trong môi trường như mong đợi hay không

Mục đích của kiểm thử phần mềm là tìm ra lỗi chưa được phát hiện, tìm một cách sớm nhất và bảo đảm rằng lỗi sẽ được sửa

Mục tiêu của kiểm thử phần mềm là thiết kế tài liệu kiểm thử một cách

có hệ thống và thực hiện nó sao cho có hiệu quả, nhưng tiết kiệm được thời gian, công sức và chi phí

Kiểm thử mức hệ thống, sau khi tích hợp (System test)

Kiểm thử để chấp nhận sản phẩm (Acceptance test)

Các bộ phận đơn lẻ

Trang 10

1.2.1 Kiểm thử đơn vị (Unit Test)

Một đơn vị (Unit) là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được, ví dụ: các hàm (Function), thủ tục (Procedure), lớp (Class), hoặc các phương thức (Method)

Kiểm thử đơn vị thường do lập trình viên thực hiện Công đoạn này cần được thực hiện càng sớm càng tốt trong giai đoạn viết code và xuyên suốt chu

kỳ phát triển phần mềm

Mục đích của kiểm thử đơn vị là bảo đảm thông tin được xử lý và kết xuất (khỏi Unit) là chính xác, trong mối tương quan với dữ liệu nhập và chức năng xử lý của Unit Điều này thường đòi hỏi tất cả các nhánh bên trong Unit đều phải được kiểm tra để phát hiện nhánh phát sinh lỗi

Cũng như các mức kiểm thử khác, kiểm thử đơn vị cũng đòi hỏi phải chuẩn bị trước các ca kiểm thử (hay trường hợp kiểm thử) (test case) hoặc kịch bản (test script), trong đó chỉ định rõ dữ liệu vào, các bước thực hiện và

dữ liệu mong muốn sẽ xuất ra Các test case và test script được giữ lại để sử dụng sau này

1.2.2 Kiểm thử tích hợp (Integration Test)

Kiểm thử tích hợp kết hợp các thành phần của một ứng dụng và kiểm thử như một ứng dụng đã hoàn thành Trong khi kiểm thử đơn vị kiểm tra các thành phần và Unit riêng lẻ thì kiểm thử tích hợp kết hợp chúng lại với nhau

và kiểm tra sự giao tiếp giữa chúng

Kiểm thử tích hợp có hai mục tiêu chính là:

 Phát hiện lỗi giao tiếp xảy ra giữa các Unit

 Tích hợp các Unit đơn lẻ thành các hệ thống con (gọi là subsystem)

và cuối cùng là nguyên hệ thống hoàn chỉnh chuẩn bị cho kiểm thử ở mức hệ thống (system test)

Có 4 loại kiểm thử trong kiểm thử tích hợp như sau:

Trang 11

 Kiểm thử cấu trúc (Structure test): Kiểm thử nhằm bảo đảm các thành phần bên trong của một chương trình chạy đúng, chú trọng đến hoạt động của các thành phần cấu trúc nội tại của chương trình, chẳng hạn các lệnh và nhánh bên trong

 Kiểm thử chức năng (Functional test): Kiểm thử chỉ chú trọng đến chức năng của chương trình, không quan tâm đến cấu trúc bên trong, chỉ khảo sát chức năng của chương trình theo yêu cầu kỹ thuật

 Kiểm thử hiệu năng (Performance test): Kiểm thử việc vận hành của

hệ thống

 Kiểm thử khả năng chịu tải (Stress test): Kiểm thử các giới hạn của hệ thống

1.2.3 Kiểm thử hệ thống (System Test)

Mục đích của kiểm thử hệ thống là kiểm thử xem thiết kế và toàn bộ hệ thống (sau khi tích hợp) có thỏa mãn yêu cầu đặt ra hay không

Kiểm thử hệ thống kiểm tra cả các hành vi chức năng của phần mềm lẫn các yêu cầu về chất lượng như độ tin cậy, tính tiện lợi khi sử dụng, hiệu năng

sự tin cậy và các yêu cầu khác liên quan đến chất lượng của toàn hệ thống

Điểm khác nhau then chốt giữa kiểm thử tích hợp và kiểm thử hệ thống

là kiểm thử hệ thống chú trọng các hành vi và lỗi trên toàn hệ thống, còn kiểm thử tích hợp chú trọng sự giao tiếp giữa các đơn thể hoặc đối tượng khi chúng

Trang 12

Đòi hỏi nhiều công sức, thời gian và tính chính xác, khách quan, kiểm thử hệ thống được thực hiện bởi một nhóm kiểm tra viên hoàn toàn độc lập với nhóm phát triển dự án để đảm bảo tính chính xác và khách quan

Kiểm thử hệ thống thường có các loại kiểm thử sau:

 Kiểm thử chức năng (Functional test): Bảo đảm các hành vi của hệ thống thỏa mãn đúng yêu cầu thiết kế

 Kiểm thử khả năng vận hành (Performance test): Bảo đảm tối ưu việc phân bổ tài nguyên hệ thống (ví dụ bộ nhớ) nhằm đạt các chỉ tiêu như thời gian xử lý hay đáp ứng câu truy vấn,

 Kiểm thử khả năng chịu tải (Stress test hay Load test): Bảo đảm hệ thống vận hành đúng dưới áp lực cao (ví dụ nhiều người truy xuất cùng lúc) Stress test tập trung vào các trạng thái tới hạn, các "điểm chết", các tình huống bất thường như đang giao dịch thì ngắt kết nối (xuất hiện nhiều trong test thiết bị như POS, ATM),

 Kiểm thử cấu hình (Configuration test): Đảm bảo hệ thống hoạt động tương thích với các loại phần cứng khác nhau

 Kiểm thử khả năng bảo mật (Security test): Bảo đảm tính toàn vẹn, bảo mật của dữ liệu và của hệ thống

 Kiểm thử khả năng phục hồi (Recovery test): Bảo đảm hệ thống có khả năng khôi phục trạng thái ổn định trước đó trong tình huống mất

Trang 13

tài nguyên hoặc dữ liệu; đặc biệt quan trọng đối với các hệ thống giao dịch như ngân hàng trực tuyến

1.2.4 Kiểm thử chấp nhận sản phẩm (Acceptance Test)

Mục đích của kiểm thử chấp nhận là kiểm thử khả năng chấp nhận cuối cùng để chắc chắn rằng sản phẩm là phù hợp và thỏa mãn các yêu cầu của khách hàng và khách hàng chấp nhận sản phẩm

Trong giai đoạn kiểm thử chấp nhận thì người kiểm tra là khách hàng Khách hàng sẽ đánh giá phần mềm với mong đợi theo những thao tác sử dụng quen thuộc của họ Việc kiểm tra ở giai đoạn này có ý nghĩa hết sức quan trọng tránh cho việc hiểu sai yêu cầu cũng như sự mong đợi của khách hàng

Gắn liền với giai đoạn kiểm thử chấp nhận thường là một nhóm những dịch vụ và tài liệu đi kèm, phổ biến như hướng dẫn cài đặt, sử dụng, v.v…Tất

cả tài liệu đi kèm phải được cập nhật và kiểm tra chặt chẽ

1.3 Kỹ thuật kiểm thử phần mềm

Mục tiêu của kiểm thử là phải thiết kế các trường hợp kiểm thử có khả năng cao nhất trong việc phát hiện nhiều lỗi với thời gian và công sức tối thiểu Do đó có thể chia các kỹ thuật kiểm thử thành hai loại:

 Kỹ thuật kiểm thử hộp đen (Black – box Testing) hay còn gọi là kỹ thuật kiểm thử chức năng (Functional Testing)

 Kỹ thuật kiểm thử hộp trắng (White – box Testing) hay còn gọi là kỹ thuật kiểm thử cấu trúc (Structural Testing)

1.3.1 Kỹ thuật kiểm thử hộp đen (Black – box Testing)

Kiểm thử hộp đen còn được gọi là kiểm thử hướng dữ liệu (data - driven) hay là kiểm thử hướng vào/ra (input/output driven)

Trong kỹ thuật này, người kiểm thử xem phần mềm như là một hộp đen

Trang 14

của chương trình Người kiểm thử chỉ cần quan tâm đến việc tìm các hiện tượng mà phần mềm không hành xử theo đúng đặc tả của nó Do đó, dữ liệu kiểm thử sẽ xuất phát từ đặc tả

Như vậy, cách tiếp cận kiểm thử hộp đen tập trung vào các yêu cầu chức năng của phần mềm Kiểm thử hộp đen cho phép người kiểm thử xây dựng các nhóm giá trị đầu vào sẽ thực thi đầy đủ tất cả các yêu cầu chức năng của chương trình Kiểm thử hộp đen không thay thế kỹ thuật kiểm thử hộp trắng, nhưng nó bổ sung khả năng phát hiện các lớp lỗi khác với các phương pháp hộp trắng

Kiểm thử hộp đen cố gắng tìm các loại lỗi sau:

 Các chức năng thiếu hoặc không đúng

 Các lỗi giao diện

 Các lỗi cấu trúc dữ liệu trong truy cập cơ sở dữ liệu bên ngoài

phân hoạch tương đương, phân tích giá trị biên

Trang 15

1.3.1.1 Phân hoạch tương đương

Do việc kiểm thử tất cả các đầu vào của chương trình là không thể Vì thế, khi kiểm thử chương trình nên giới hạn một tập con tất cả các trường hợp

đầu vào có thể có, sao cho có xác suất tìm ra được nhiều lỗi nhất

Một tập con như vậy cần có hai tính chất sau:

 Mỗi trường hợp kiểm thử nên gồm nhiều điều kiện đầu vào khác nhau

có thể để giảm thiểu tổng số các trường hợp cần thiết

 Cố gắng phân hoạch các miền đầu vào của một chương trình thành một số xác định các lớp tương đương, sao cho có thể giả định hợp lý rằng việc kiểm thử một giá trị đại diện của mỗi lớp là tương đương với việc kiểm thử với một giá trị bất kỳ trong cùng lớp

Thiết kế các trường hợp kiểm thử bằng phân hoạch tương đương được xử

lý theo hai bước: Phân hoạch các miền đầu vào/ra thành các lớp tương đương,

và thiết kế các trường hợp kiểm thử đại diện cho mỗi lớp

a) Xác định các lớp tương đương

Các lớp tương đương được nhận dạng bằng cách lấy mỗi điều kiện đầu vào (thông thường là một câu lệnh hoặc một cụm từ trong đặc tả) và phân hoạch nó thành hai hay nhiều nhóm Các lớp tương đương bao gồm một tập các trạng thái hợp lệ hoặc không hợp lệ cho điều kiện đầu vào Điều kiện đầu vào là giá trị số xác định, hoặc là miền giá trị, tập giá trị có liên quan, hoặc điều kiện logic Để làm điều này, chúng ta sử dụng bảng liệt kê các lớp tương đương

Các lớp tương đương có thể được định nghĩa theo nguyên tắc sau:

1 Nếu điều kiện đầu vào xác định một khoảng giá trị [a,b], thì phân hoạch thành một lớp tương đương hợp lệ và hai lớp tương đương không hợp lệ Chẳng hạn, nếu đầu vào x nằm trong khoảng [1,999], lớp hợp lệ là: 1 <= x < = 999, các lớp không hợp lệ là x < 1 và x >

Trang 16

2 Nếu điều kiện đầu vào yêu cầu một giá trị xác định, phân hoạch thành một lớp tương đương hợp lệ và hai lớp tương đương không hợp lệ Chẳng hạn, nếu đầu vào x = 3, thì lớp hợp lệ là x = 3, các lớp không hợp lệ là x < 3 và x > 3

3 Nếu điều kiện đầu vào xác định một phần tử của tập hợp, thì phân

hoạch thành một lớp tương đương hợp lệ và một lớp tương đương không hợp lệ

4 Nếu điều kiện đầu vào là Boolean, thì phân hoạch thành một lớp tương đương hợp lệ và một lớp tương đương không hợp lệ tương ứng với hai trạng thái true và false

Ngoài ra, một nguyên tắc thứ năm được bổ sung là sử dụng khả năng phán đoán, kinh nghiệm và trực giác của người kiểm thử

hợp lệ

Các lớp tương đương không hợp lệ

Số ID của sinh viên Các thuộc tính khóa Không phải thuộc tính khóa

Tên sinh viên Ký tự chữ cái

Không rỗng

Không phải chữ cái Rỗng

Giới tính sinh viên Ký tự chữ cái, “M’ hoặc “F” Không phải chữ cái

Không phải “M” hoặc “F”

Điểm của sinh viên Số

1 Gán một giá trị duy nhất cho mỗi lớp tương đương

Trang 17

2 Đến khi tất cả các lớp tương đương hợp lệ được phủ bởi các trường hợp kiểm thử thì viết một trường hợp kiểm thử mới phủ nhiều nhất có thể các lớp tương đương hợp lệ chưa được phủ

3 Đến khi tất cả các lớp tương đương không hợp lệ được phủ bởi các trường hợp kiểm thử thì hãy viết các trường hợp kiểm thử mới sao cho mỗi trường hợp kiểm thử mới chỉ phủ duy nhất một lớp tương đương không hợp lệ chưa được phủ

1.3.1.2 Phân tích giá trị biên

Khi thực hiện kiểm thử phần mềm theo dữ liệu, chúng ta kiểm tra xem đầu vào của người dùng, kết quả nhận được và kết quả tạm thời bên trong có được xử lý chính xác hay không

Các điều kiện biên là tình trạng trực tiếp ở phía trên và dưới của lớp tương đương đầu vào và lớp đương đương đầu ra Việc phân tích các giá trị biên khác với phân hoạch tương đương theo hai điểm:

 Từ mỗi lớp tương đương, phân hoạch tương đương sẽ chọn phần tử bất kỳ làm phần tử đại diện, trong khi việc phân tích giá trị biên sử dụng một hoặc một số phần tử Như vậy, mỗi biên của lớp tương đương chính là đích kiểm thử

 Không chỉ chú ý tập trung những điều kiện đầu vào, các trường hợp kiểm thử cũng được suy ra từ việc xem xét các kết quả ra (tức là các lớp tương đương đầu ra)

Có một số nguyên tắc phân tích giá trị biên như sau:

1 Nếu điều kiện đầu vào xác định một khoảng giá trị giữa a và b, các trường hợp kiểm thử sẽ được thiết kế với giá trị a và b, các giá trị sát trên và sát dưới a và b

2 Nếu một điều kiện đầu vào xác định một số các giá trị, các trường hợp kiểm thử sẽ được phát triển để thực hiện tại các giá trị cực đại, cực

Trang 18

tiểu Các giá trị sát trên và dưới giá trị cực đại, cực tiểu cũng được kiểm thử

3 Nguyên tắc 1 và 2 được áp dụng cho các điều kiện đầu ra

4 Nếu cấu trúc dữ liệu chương trình bên trong được qui định các biên (chẳng hạn, mảng được định nghĩa giới hạn 100 mục), tập trung thiết

kế trường hợp kiểm thử để thực thi cấu trúc dữ liệu tại biên của nó Ngoài ra, người kiểm thử có thể sử dụng sự suy đoán và sáng tạo của mình để tìm các điều kiện biên

Tóm lại, chúng ta phải kiểm thử mỗi biên của một lớp tương đương về tất cả các phía Một chương trình nếu vượt qua những trường hợp kiểm thử đó

có thể vượt qua các kiểm thử khác từ lớp đó

1.3.2 Kỹ thuật kiểm thử hộp trắng (White – box Testing)

Kiểm thử hộp trắng hay còn gọi là kiểm thử hướng logic, cho phép kiểm tra cấu trúc bên trong của phần mềm với mục đích bảo đảm rằng tất cả các câu lệnh và điều kiện sẽ được thực hiện ít nhất một lần Người kiểm thử truy nhập vào mã nguồn chương trình và có thể kiểm tra nó, lấy đó làm cơ sở để

hỗ trợ việc kiểm thử

1.3.2.1 Kiểm thử đường dẫn cơ sở

Kiểm thử đường dẫn cơ sở là một kỹ thuật kiểm thử hộp trắng do Tom McCabe đề xuất Phương pháp đường dẫn cơ sở cho phép người thiết kế trường hợp kiểm thử thực hiện phép đo độ phức tạp logic của thiết kế thủ tục

và sử dụng phép đo này như một chỉ dẫn cho việc thiết kế một tập cơ sở các đường dẫn thực hiện Những trường hợp kiểm thử được suy diễn để thực hiện tập cơ sở Các trường hợp kiểm thử đó được đảm bảo để thực hiện mỗi lệnh trong chương trình ít nhất một lần trong quá trình kiểm thử

a) Đồ thị luồng điều khiển

Trang 19

Trong thực tế, phương pháp đường dẫn cơ sở có thể được dùng không cần sử dụng đồ thị luồng điều khiển Tuy nhiên, đồ thị luồng điều khiển (minh họa ở hình 1.2) là một công cụ hữu ích để hiểu các luồng điều khiển và minh họa cho phương pháp này Cấu trúc của đồ thị luồng điều khiển bao gồm:

 Mỗi đỉnh (hình tròn) biểu thị một đoạn các câu lệnh thực hiện một cách tuần tự, có thể kết thúc bằng một lệnh rẽ nhánh

 Mỗi cạnh (cung) biểu diễn dòng điều khiển nối hai nút với nhau

 Phần được bao bởi các cung và các đỉnh gọi là miền

b) Độ phức tạp chu trình

Độ phức tạp chu trình là một thước đo phần mềm, cung cấp các phép đo định lượng độ phức tạp của chương trình Khi được sử dụng trong ngữ cảnh của phương pháp đường dẫn cơ sở, giá trị được xác định cho độ phức tạp chu trình cho biết số lượng đường dẫn độc lập trong một tập cơ sở của chương trình và cung cấp cho chúng ta một giới hạn trên số lượng kiểm thử bắt buộc

để đảm bảo rằng tất cả các câu lệnh được thực hiện ít nhất một lần

Cung

Đỉnh điều kiện Miền

Hình 1.2 - Đồ thị luồng điều khiển

Trang 20

Việc tính toán độ phức tạp chu trình sẽ cho chúng ta biết có bao nhiêu đường dẫn cần tìm Cho đồ thị luồng điều khiển G, độ phức tạp chu trình V(G) được tính theo một trong 3 công thức sau:

1 V(G) = R, trong đó R là số miền của đồ thị G

2 V(G) = P + 1, trong đó P là số đỉnh điều kiện có trong đồ thị G

3 V(G) = E – N + 2, trong đó E là số cung và N là số đỉnh của đồ thị G Đối chiếu với đồ thị luồng điều khiển trong hình 1.2, độ phức tạp chu trình V(G) được tính như sau:

c) Phát sinh các trường hợp kiểm thử theo đường dẫn cơ sở

Phương pháp kiểm thử đường dẫn cơ sở có thể áp dụng để kiểm thử thủ tục chi tiết hoặc cho mã nguồn bao gồm các bước sau:

 Bước 1: Sử dụng mã nguồn hoặc thiết kế để xây dựng đồ thị luồng điều khiển tương ứng

 Bước 2: Tính toán độ phức tạp chu trình V(G)

 Bước 3: Xác định tập cơ sở của các đường dẫn độc lập (một đường

dẫn được gọi là độc lập với các đường dẫn khác nếu nó có ít nhất một cạnh không xuất hiện trong các đường dẫn khác)

 Bước 4: Chuẩn bị các trường hợp kiểm thử có khả năng thực hiện mỗi đường dẫn trong tập cơ sở

Chúng ta dùng hàm tính giá trị trung bình cộng của các số, average trong

C như hình 1.3 để làm ví dụ minh họa cho mỗi bước thiết kế các trường hợp

kiểm thử Hàm average là một thuật toán đơn giản có chứa các tổ hợp và

vòng lặp, trong đó chương trình tính giá trị trung bình của 100 hoặc một vài

Trang 21

số trong mảng values nằm trong khoảng của biên trên (max) và biên dưới (min) Đầu vào được kết thúc bằng giá trị -999

Bước 1: Vẽ đồ thị luồng điều khiển (như hình 1.3)

Trang 22

 Trường hợp kiểm thử đường dẫn 1

Đầu vào: Values = {3, 5, 11, -999}, min = 0, max = 100

Đầu ra mong muốn: Average = (3 + 5 + 11) / 3

Mục đích: Để kiểm thử việc tính giá trị trung bình chính xác

Lưu ý: Đường dẫn 1 không thể kiểm thử một mình, mà phải được kiểm

thử như là một phần của các kiểm thử đường dẫn 4, 5 và 6

 Trường hợp kiểm thử đường dẫn 2

Đầu vào: Values = {-999}, min = 0, max = 0

Đầu ra mong muốn: Average = -999

Mục đích: Để tạo ra Average = -999

 Trường hợp kiểm thử đường dẫn 3

Đầu vào: Values = {2, 6, 7, …, 120} (101 số), min = 0, max = 100 Đầu ra mong muốn: Trung bình của 100 số đầu tiên

Mục đích: Chỉ tính trung bình cho 100 số hợp lệ đầu tiên

 Trường hợp kiểm thử đường dẫn 4

Đầu vào: Values = {67, -2, 12, 23, -999}, min = 0, max = 100

Đầu ra mong muốn: Average = (67 + 12 + 23) / 3

Mục đích: Kiểm thử biên dưới (Values[i] > min, i < 100)

 Trường hợp kiểm thử đường dẫn 5

Đầu vào: Values = {7, 32, 102, 23, 68, 2, -999}, min = 0, max = 100 Đầu ra mong muốn: Average = (7 + 32 + 23 + 68 + 2) / 5

Mục đích: Kiểm thử biên trên (Values[i] < max, i < 100)

 Trường hợp kiểm thử đường dẫn 6

Đầu vào: Values = {3, 4, 12, 15, 16, 2, -999}, min = 0, max = 100 Đầu ra mong muốn: Average = (3 + 4 + 12 + 15 + 16 + 2) / 6

Mục đích: Việc tính giá trị trung bình là đúng

Phương pháp đường dẫn cơ sở tập trung trên “giá trị đại diện” của mỗi đường dẫn độc lập Cần có các trường hợp kiểm thử bổ sung (ngoài các

Trang 23

trường hợp kiểm thử đường dẫn cơ sở), nhất là để thực hiện các điều kiện biên

1.3.2.2 Kiểm thử cấu trúc điều khiển

Phương pháp kiểm thử đường dẫn cơ sở là phương pháp kiểm thử đơn giản và hiệu quả nhưng chưa đủ Chúng ta sẽ xem xét các biến thể trên kiểm thử cấu trúc điều khiển mà phủ kiểm thử mở rộng và hoàn thiện chất lượng của phương pháp kiểm thử hộp trắng

a) Kiểm thử điều kiện

Kiểm thử điều kiện là phương pháp thiết kế trường hợp kiểm thử thực thi các điều kiện logic trong module chương trình Mục đích là để xác định các lỗi điều kiện và cả các lỗi khác trong chương trình Một số phương pháp kiểm thử điều kiện như sau:

 Kiểm thử nhánh (Branch Testing): Là phương pháp kiểm thử điều

kiện đơn giản nhất Thiết kế các trường hợp kiểm thử sao cho với mỗi điều kiện rẽ nhánh phức hợp C, các nhánh true và false của C

và mỗi điều kiện đơn giản trong C cần phải được thực thi ít nhất một lần

 Kiểm thử miền (Domain Testing): Cần 3 hoặc 4 trường hợp kiểm

thử cho biểu thức quan hệ Với một biểu thức quan hệ có dạng E1

<op> E2, cần có 3 trường hợp kiểm thử được thiết kế cho E1 == E2, E1 > E2, E1 < E2

b) Kiểm thử luồng dữ liệu

Phương pháp kiểm thử luồng dữ liệu lựa chọn các đường dẫn kiểm thử của chương trình dựa vào vị trí khai báo và sử dụng các biến trong chương trình Với kiểm thử luồng dữ liệu, mỗi câu lệnh trong chương trình được gán

số hiệu lệnh duy nhất và mỗi hàm không thay đổi tham số của nó và biến toàn cục Cho một lệnh với S là số hiệu câu lệnh Ta định nghĩa:

Trang 24

USE(S) = là tập các biến được sử dụng trong S

Một chiến lược kiểm thử luồng dữ liệu cơ bản là chiến lược mà mỗi chuỗi DU được phủ ít nhất một lần Chiến lược này được gọi là chiến lược kiểm thử DU Kiểm thử DU không đảm bảo phủ hết tất cả các nhánh của một chương trình; tuy nhiên, một nhánh không đảm bảo được phủ bởi kiểm thử

DU chỉ trong rất ít tình huống như cấu trúc if – then – else mà trong đó phần then không có một khai báo biến nào và có dạng khuyết (không tồn tại phần else) Trong tình huống đó, nhánh else của lệnh if là không cần thiết phải phủ

bằng kiểm thử DU

c) Kiểm thử vòng lặp

Là phương pháp tập trung vào tính hợp lệ của các cấu trúc vòng lặp Có

4 kiểu vòng lặp khác nhau được mô tả bằng sơ đồ khối như sau:

Vòng lặp đơn Vòng lặp nối tiếp Vòng lồng nhau Vòng lặp phi cấu trúc

Hình 1.4 –Các kiểu vòng lặp

Trang 25

 Các bước cần kiểm tra cho vòng lặp đơn giản

Trong đó n là số lần lặp tối đa của vòng lặp

 Các bước cần kiểm tra cho vòng lặp dạng lồng nhau

+ Khởi đầu với vòng lặp nằm bên trong nhất Thiết lập các tham số lặp cho các vòng lặp bên ngoài về giá trị nhỏ nhất

+ Kiểm tra với tham số min + 1, 1 giá trị tiêu biểu, max - 1 và max cho vòng lặp bên trong nhất trong khi các tham số lặp của các vòng lặp bên ngoài là nhỏ nhất

+ Tiếp tục tương tự với các vòng lặp liền ngoài tiếp theo cho đến khi tất cả vòng lặp bên ngoài được kiểm tra

 Các bước cần kiểm tra cho vòng lặp nối tiếp

Nếu các vòng lặp là độc lập với nhau thì kiểm tra như trường các vòng lặp dạng đơn giản, nếu không thì kiểm tra như trường hợp các vòng lặp lồng nhau

 Các bước cần kiểm tra cho vòng lặp phi cấu trúc

Nếu gặp các lớp vòng lặp này chúng ta sẽ không kiểm thử, mà sẽ thiết

kế lại tương ứng với sử dụng việc xây dựng chương trình có cấu trúc

Trang 26

1.4 Kết luận

Trong chương 1 đã nêu tổng quan về các cấp độ và loại kiểm thử phần mềm cơ bản Kiểm thử hộp trắng xem xét chương trình ở mức độ chi tiết và phù hợp khi kiểm tra các môđun nhỏ Tuy nhiên, kiểm thử hộp trắng có thể không đầy đủ vì kiểm thử hết các lệnh không chứng tỏ là chúng ta đã kiểm thử hết các trường hợp có thể Ngoài ra chúng ta không thể kiểm thử hết các đường đi đối với các vòng lặp lớn

Kiểm thử hộp đen chú trọng vào việc kiểm tra các quan hệ vào ra và những chức năng giao diện bên ngoài, nó thích hợp hơn cho các hệ thống phần mềm lớn hay các thành phần quan trọng của chúng Nhưng chỉ sử dụng kiểm thử hộp đen là chưa đủ Bởi vì, kiểm thử chức năng chỉ dựa trên đặc tả của môđun nên không thể kiểm thử được các trường hợp không được khai báo trong đặc tả Ngoài ra, do không phân tích mã nguồn nên không thể biết được môđun nào của chương trình đã hay chưa được kiểm thử, khi đó phải kiểm thử lại hay bỏ qua những lỗi tiềm ẩn trong gói phần mềm

Phương pháp kiểm thử hộp trắng và kiểm thử hộp đen là hai phương pháp cơ bản có vai trò rất quan trọng trong quá trình phát triển phần mềm, nếu chúng ta biết kết hợp chúng để bổ sung khiếm khuyết lẫn nhau

Trang 27

CHƯƠNG 2 – KỸ THUẬT KIỂM THỬ ĐỘT BIẾN

Với mục đích phát hiện lỗi, kiểm thử phần mềm thường phải trải qua

các bước: tạo dữ liệu thử, thực thi phần mềm trên dữ liệu thử và quan sát kết quả nhận được Trong các bước này, bước tạo dữ liệu đóng vai trò

quan trọng nhất, bởi vì chúng ta không thể tạo ra mọi dữ liệu từ miền vào của chương trình, mà chúng ta chỉ có thể tạo ra các dữ liệu thử có khả năng phát hiện lỗi cao nhất Vấn đề đặt ra là làm sao để đánh giá được khả năng phát hiện lỗi của một bộ dữ liệu thử? Chính kỹ thuật kiểm thử đột biến là câu trả lời Kỹ thuật này cho phép đánh giá chất lượng (khả năng phát hiện lỗi) của một bộ dữ liệu thử

2.1 Một số khái niệm

2.1.1 Kiểm thử đột biến

Kiểm thử đột biến được đề xuất đầu tiên vào năm 1979 bởi DeMillo và đồng nghiệp [13] Nó cung cấp một phương tiện để đánh giá và cải tiến chất lượng dữ liệu thử cho chương trình được kiểm thử (PUT)

Kiểm thử đột biến tập trung vào việc đánh giá khả năng phát hiện lỗi của dữ liệu dùng để kiểm thử Kiểm thử đột biến được dùng kết hợp với các kỹ thuật kiểm thử thông thường nhưng không thể được dùng để thay thế cho các kỹ thuật kiểm thử thông thường đó

2.1.2 Đột biến

Kiểm thử đột biến bao gồm việc tạo ra các phiên bản lỗi của chương trình gốc được kiểm thử nhờ vào các toán tử đột biến Các phiên bản lỗi đó

được gọi là các đột biến (mutant)

Khi tiến hành thực thi kiểm thử lần lượt chương trình gốc P và đột biến P’ của P với một dữ liệu kiểm thử T, sẽ có hai kịch bản khác nhau có thể xảy

Trang 28

- Một là, đột biến P’ được gọi là bị diệt bởi dữ liệu kiểm thử T

- Hai là, chương trình gốc P và đột biến P’ cho ra kết quả hoàn toàn

giống nhau, đột biến P’ được cho là còn sống

Các đột biến tương đương (equivalent mutant) là các đột biến của

chương trình gốc nhưng hoạt động hoàn toàn giống với chương trình gốc và cho ra kết quả giống với chương trình gốc trong mọi trường hợp kiểm thử

(Đột biến P’ là đột biến tương đương của PUT vì dữ liệu thử sẽ không thể phát hiện ra lỗi trong chương trình P do giá trị của z luôn luôn bằng 4)

Tỷ số MS = 100 * D/(N - E) được gọi là tỷ lệ đột biến (Mutation Score - MS) Trong đó, D là đột biến đã bị diệt; N là tổng số các đột biến;

E là số đột biến tương đương Tỷ lệ đột biến cho phép đánh giá chất lượng

bộ dữ liệu thử

Ví dụ: Toán tử đột biến quan hệ sẽ tạo ra một số các đột biến trong đó

mỗi đột biến có sự xuất hiện của một toán tử quan hệ được thay thế bởi toán

tử quan hệ khác Hình 2.1 là một ví dụ về hai đột biến của PUT được tạo ra bởi toán tử đột biến toán tử quan hệ

if (x = = 2 && y = = 2)

z = x * y;

- Chương trình PUT gốc Đột biến P’

Hình 2.1 – Ví dụ về đột biến tương đương

Trang 29

Dựa trên tiêu chuẩn chất lượng đột biến, các đột biến được thực hiện với một bộ dữ liệu thử để xác định có bao nhiêu đột biến thất bại (tức là cung cấp đầu ra không đúng cho đầu vào kiểm thử đó) Thất bại càng nhiều, càng lớn thì bộ dữ liệu thử càng chất lượng Mục đích của kiểm thử viên là tạo ra dữ liệu thử mới để cải tiến chất lượng của các dữ liệu thử hiện có Một kết quả khá hữu ích của phương pháp này là việc cải tiến chất lượng của dữ liệu thử

sẽ cải thiện sự tin tưởng của kiểm thử viên vào tính đúng đắn của PUT Có thể nói rằng, sự tin tưởng của kiểm thử viên vào chương trình càng nhiều, thì càng nhiều kiểm thử tốt hơn sẽ được sử dụng

Ngoài ra, kiểm thử đột biến là phương pháp để cải tiến chất lượng dữ liệu thử cung cấp nhiều hỗ trợ quan trọng Nếu một lỗi làm cho đột biến của PUT thất bại khi thực hiện với một số dữ liệu thử và PUT thành công, thì chính PUT không thể chứa lỗi đó (tức là PUT là phiên bản đúng của chương trình đối với lỗi đó) Kiểm thử mọi đột biến có thể có giúp kiểm thử biết rằng

Trang 30

không có các lỗi đó xuất hiện trong PUT Phát triển dữ liệu thử theo cách này cho phép kiểm thử viên tăng sự tin tưởng của họ vào tính đúng đắn của PUT

2.1.3 Toán tử đột biến

Toán tử đột biến (mutation operator) là một luật được áp dụng vào

chương trình gốc để tạo ra các đột biến Các toán tử đột biến được xác định bởi ngôn ngữ của chương trình được kiểm thử và hệ thống đột biến được dùng để kiểm thử

2.2 Cơ sở của kiểm thử đột biến

Kiểm thử đột biến là một kỹ thuật kiểm thử hộp trắng hay kiểm thử cấu trúc, được xây dựng dựa vào hai g iả thuyết cơ bản [13]:

- Giả thuyết “lập trình viên giỏi” (competent programmer)

- Giả thuyết “ hiệu ứng liên kết” (coupling effect)

Giả thuyết “lập trình viên giỏi” giả thiết rằng lập trình viên chỉ phạm những lỗi đơn giản do sơ suất Giả thuyết “hiệu ứng liên kết” giả thuyết rằng, nếu

dữ liệu thử phát hiện được các lỗi đơn giản thì dữ liệu đó cũng cho phép phát hiện các lỗi phức tạp

2.3 Toán tử đột biến

Phần lớn các nghiên cứu về kiểm thử đột biến chủ yếu dựa trên các chương trình Fortran do tính sẵn có và dễ sử dụng của hệ thống đột biến Mothra [14] Mothra (hệ thống đột biến cho Fortran) sử dụng 22 toán tử đột biến để tạo ra các đột biến cho 77 chương trình Fortran [5], được biểu diễn bảng 2.1 Các toán tử này đã được phát triển và chọn lọc cách đây hơn 20 năm, ngày nay vẫn còn nhiều toán tử được sử dụng dưới một số hình thức chẳng hạn như sử dụng toán tử thay thế toán tử logic và một số toán tử tương tự như các toán tử LCR và SDL của Mothra

Trang 31

Toán tử đột biến Mô Tả

AAR Thay thế tham chiếu mảng cho tham chiếu mảng ABS Thêm giá trị tuyệt đối

ACR Thay thế tham chiếu mảng cho hằng số AOR Thay thế toán tử số học

ASR Thay thế tham chiếu mảng cho biến vô hướng CAR Thay thế hằng số cho tham chiếu mảng

CNR Thay thế tên mảng tương đương

CSR Thay thế hằng cho biến vô hướng DER Thay thế kết thúc câu lệnh DO DSA Thay đổi câu lệnh DATA

LCR Thay thế kết nối logic ROR Thay thế toán tử logic RSR Thay thế câu lệnh RETURN SAN Phân tích câu lệnh

SAR Thay thế biến vô hướng cho tham chiếu mảng SCR Thay thế vô hướng cho hằng

SRC Thay thế hằng số nguồn SVR Thay thế biến vô hướng UOI Thêm toán tử nhị nguyên

Bảng 2.1- 22 toán tử đột biến chuẩn được sử dụng trong Mothra

Các toán tử đột biến được thiết kế để làm lộ ra các lỗi trong PUT khi

thực hiện Ví dụ, toán tử thay thế toán tử quan hệ ROR Đột biến tạo ra từ toán

Trang 32

một toán tử quan hệ khác, chẳng hạn như câu lệnh x < y sẽ được thay thế bằng x  y với mục đích để kiểm tra xem trong trường hợp < này, toán tử quan hệ có sử dụng đúng hay không

Nếu PUT thực sự là đúng thì nó có thể tìm thấy các dữ liệu thử tạo ra các kết quả đầu ra không đúng cho tất cả các phiên bản toán tử quan hệ không tương đương, do đó loại bỏ những đột biến đó để được phiên bản đúng của chương trình Tuy nhiên, trước khi kiểm thử, chúng ta không biết được liệu PUT là đúng hay không Thay vào đó, PUT phải được giả sử là đúng, trừ khi một dữ liệu thử có thể chứng minh khác Trong tình huống đó, tỷ lệ các đột biến không tương đương bị diệt bởi bộ dữ liệu thử là thước đo cho chất lượng của bộ dữ liệu thử và thước đo của sự tin tưởng vào tính đúng đắn của PUT Gần đây, nghiên cứu về kiểm thử đột biến đã tập trung phát triển các toán

tử đột biến mới, đặc biệt cho các môi trường hướng đối tượng như C, C++, C_Sharp,… Nghiên cứu này tập trung kiểm thử các chương trình đơn giản, hầu hết các toán tử đột biến truyền thống vẫn còn hiệu quả

2.4 Quy trình kiểm thử đột biến

Kiểm thử đột biến là một quy trình được lặp đi lặp lại để cải tiến dữ liệu thử đối với một chương trình và được chia thành các bước cơ bản [13] sau:

Bước 1: Sản sinh đột biến (dùng công cụ sản sinh tự động hoặc

sản sinh thủ công) từ chương trình gốc

Bước 2: Sản sinh các dữ liệu kiểm thử

Bước 3: Thực hiện từng dữ liệu kiểm thử với chương trình gốc

Bước 3.1: Nếu kết quả không đúng, phải chỉnh sửa l ạ i

chương trình và kiểm thử lại

Bước 3.2: Nếu kết quả đúng, thực hiện bước tiếp theo

Bước 4: Thực hiện từng dữ liệu kiểm thử với từng đột biến còn sống

Trang 33

Bước 4.1: Nếu kết quả ra của đột biến khác với chương

trình gốc, chương trình đột biến được xem là không

đúng và bị diệt Hoàn thành kiểm thử

Bước 4.2: Nếu đột biến sống sót được (qua kiểm thử): phân

tích các đột biến còn sống Có hai khả năng xảy ra:

- Hoặc các đột biến là đột biến tương đương: không thể

bị diệt

- Hoặc có thể diệt các đột biến được nhưng các dữ liệu kiểm thử không đủ mạnh để diệt đột biến Do đó phải tạo ra các dữ liệu kiểm thử khác và lặp lại bước 1

Từ các bước của thuật toán đã được tóm tắt thành sơ đồ [7] như hình sau:

Tất cả các đột biến

Chạy T trên P

P(T) đúng ? Sửa P

Chạy test cases trên từng đột biến còn sống

Phân tích và đánh dấu các đột biến tương đương Kết thúc

Cập nhật T

Các toán tử đột biến

Hình 2.3 – Quy trình kiểm thử đột biến

Trang 34

2.5 Hạn chế của kiểm thử đột biến

Mặc dù được xem là một kỹ thuật kiểm thử đơn vị mạnh, tuy nhiên kiểm thử đột biến gặp phải một số vấn đề khó khăn trong ngành công nghiệp phần

mềm Các vần đề này có thể được phân loại thành hai nhóm: chi phí tính toán – tốn rất nhiều thời gian và công sức để thực hiện kiểm thử đột biến, và tự động hóa – để giảm công sức của kiểm thử viên

Kiểm thử đột biến thì tốn kém vì số lượng lớn các chương trình đột biến cần được tạo ra và thực hiện Do đó, các nhà nghiên cứu tiến hành nghiên cứu bằng thực nghiệm với kiểm thử đột biến thường chỉ sử dụng chương trình nhỏ

để hạn chế số lượng đột biến được tạo ra Trong khi đó, hạn chế này là chấp nhận được ở các trường (đại học, học viện, …), nó không dành cho công nghiệp thường mong muốn được kiểm thử các chương trình lớn hơn, phức tạp hơn Vì tính phức tạp gia tăng, do thời gian thực hiện cho một chương trình và các phiên bản đột biến của nó, do đó làm tăng toàn bộ thời gian chạy cho kiểm thử đột biến

Các vấn đề trầm trọng hơn nữa là rất khó khăn trong việc tự động hoá toàn bộ quá trình kiểm thử đột biến Mặc dù, một phần lớn quá trình có khả năng tự động được dễ dàng, các công việc như xác định các đột biến tương đương và kiểm tra tính đúng đắn của kết quả đầu ra thường được thực hiện một cách thủ công Mặc dù, việc thực hiện những công việc này bằng thủ công cho phép chương trình được xem xét kỹ lưỡng hơn, nhưng dễ bị lỗi Vì vậy, làm tăng thời gian kiểm thử ở một giai đoạn trong vòng đời phát triển phần mềm, khi thời gian kiểm thử thường là rất quan trọng

Trang 35

2.6 Kết luận

Kiểm thử đột biến được giới thiệu để cung cấp một phương tiện để đánh giá và cải tiến chất lượng các bộ dữ liệu thử Nó được xây dựng dựa trên hai giả thuyết cơ bản: giả thuyết lập trình viên giỏi, hiệu ứng liên kết Do đó, kiểm thử đột biến chỉ tập trung vào các lỗi đơn giản của chương trình (ví dụ:

sự khác biệt một từ đơn hoặc thay thế tên biến sai)

Tuy nhiên, chi phí để thực hiện kiểm thử đột biến khá cao vì một số lượng lớn các chương trình đột biến cần phải được thực hiện bởi ít nhất một

dữ liệu thử và khó khăn để tự động hóa vì các dữ liệu thử mạnh cần phải được tạo ra, đột biến tương đương cần được loại bỏ, và kết quả đầu ra của PUT cần được kiểm thử tính đúng đắn Vì vậy, chương 3 sẽ đề cập một số phương pháp cải tiến kỹ thuật kiểm thử đột biến để khắc phục các vần đề trên

Trang 36

CHƯƠNG 3 - MỘT SỐ CẢI TIẾN KỸ THUẬT

KIỂM THỬ ĐỘT BIẾN 3.1 Giảm chi phí tính toán

Các hệ thống kiểm thử đột biến truyền thống tạo ra số lượng lớn các chương trình đột biến Ví dụ, có 385 đột biến được tạo ra cho thủ tục tìm nghiệm theo phương pháp NiuTơn gồm 18 dòng lệnh Phân tích cho thấy rằng

số lượng các đột biến tạo ra xấp xỉ bằng tích của số các tham chiếu dữ liệu và

số các đối tượng dữ liệu Do đó, số lượng đột biến sẽ làm tăng tính phức tạp của chương trình Điều này làm tăng chi phí thực thi do mỗi đột biến phải thực thi với ít nhất một trường hợp kiểm thử Như vậy, chi phí là chấp nhận được cho nghiên cứu ở các trường (đại học, học viện, …) với các ràng buộc

về thời gian có thể linh hoạt, nhưng trong công nghiệp sự lãng phí này là không thể

Mặt khác, các hệ thống truyền thống phải thông dịch các chương trình đột biến nên thực tế thời gian chạy sẽ lâu hơn Điều này gây ra nhiều bất tiện,

nó làm cho các hệ thống thực hiện chậm và rất khó để mô phỏng môi trường hoạt động Để khắc phục những chi phí liên quan với đột biến, các nghiên cứu

hầu hết đã tập trung vào một số phương pháp: làm ít hơn, làm nhanh hơn mà

không làm giảm khả năng phát hiện lỗi

3.1.1 Phương pháp làm ít hơn (A “do fewer” approach)

Muốn giảm chi phí kiểm thử đột biến thì phải giảm số lượng các chương trình đột biến thực thi Để làm được điều này, chúng ta sử dụng một

trong số các phương pháp: Lấy mẫu đột biến (Mutant Sampling), đột biến ràng buộc (Constrained Mutation), và N - đột biến lựa chọn (N - Selective

Mutation), mà không làm giảm các khả năng tìm kiếm lỗi

Trang 37

3.1.1.1 Lấy mẫu đột biến (Mutant Sampling)

Lấy mẫu đột biến là một phương pháp đơn giản lựa chọn ngẫu nhiên một tập con nhỏ các đột biến từ tập toàn bộ các đột biến Ý tưởng này được đề xuất đầu tiên bởi Acree và Budd [19, 7] Trong phương pháp lấy mẫu đột biến, đầu tiên tất cả các đột biến có thể có được tạo ra như trong kiểm thử đột biến truyền thống Sau đó, x% của những đột biến này được lựa chọn ngẫu nhiên

để phân tích đột biến và các đột biến còn lại được bỏ đi

Đã có nhiều nghiên cứu thực nghiệm về phương pháp này Vấn đề chính

là về việc chọn tỷ lệ lựa chọn ngẫu nhiên (x) còn được gọi là tỷ lệ lấy mẫu x% Các nghiên cứu của Acree và Budd đề nghị rằng tỷ lệ lấy mẫu 10% có thể xác định trên 99% tất cả đột biến không tương đương trong khi cung cấp tiết kiệm chi phí đáng kể Wong [23] tiếp tục nghiên cứu các lợi ích về chi phí của lấy mẫu đột biến bằng cách thay đổi tỷ lệ lấy mẫu từ 10% đến 40% Ngay cả ở mức thấp nhất, các kết quả của Wong cho thấy lẫy mẫu đột biến là một chiến lược cắt giảm chi phí hiệu quả cung cấp các tập dữ liệu thử có khả năng xác định ít nhất 96,14% tất cả các đột biến nhưng chỉ phải kiểm tra 9,8% đột biến Một điểm nổi bật hơn nữa trong [23] là đối với các tập dữ liệu thử chất lượng dựa vào lấy mẫu, một tỷ lệ lấy mẫu cao không có nghĩa là sẽ tạo ra tỷ lệ đột biến cao hơn tỷ lệ lấy mẫu thấp Ban đầu, điều này có vẻ không hợp lý Một trong những mong chờ đó là các dữ liệu thử được tạo ra từ tỷ lệ lấy mẫu lớn thì sẽ chất lượng hơn trong việc xác định đột biến còn lại so với từ tỷ lệ lấy mẫu nhỏ Tuy nhiên, các kết quả của Wong cho thấy; đối với hàm TEXTFMT, tỷ lệ lấy mẫu 25% đạt được tỷ lệ đột biến 98,92% so với 99,01% cho tỷ lệ lấy mẫu 10% Các kết quả này cho thấy rằng số lượng đột biến được kiểm tra không phải là chỉ báo rõ ràng về tỷ lệ đột biến (ngoại trừ kiểm tra tất

cả các đột biến), nhưng thay vào đó, dấu hiệu là các dữ liệu thử có khả năng

xác định đột biến nhiều hơn những dấu hiệu khác Trong trường hợp này, việc

Trang 38

dữ liệu thử để diệt nó - TW và S chưa có dữ liệu thử diệt được nó - TS Có ba tình huống có thể xảy ra được minh họa ở hình 3.1:

1 TS  TW Tập dữ liệu thử diệt đột biến mạnh hơn là tập con của tập dữ

liệu thử diệt các đột biến yếu hơn– hình 3.3(a)

2 (TS  TW)  (TS  TW  ) TS không phải là tập con của TW nhưng

hai tập giao nhau – hình3.3 (b)

3 TS TW =  Hai tập dữ liệu thử rời nhau – hình 3.3 (c)

Nếu tình huống 1 xảy ra, thì chọn đột biến mạnh hơn trong quá trình lấy mẫu sẽ đảm bảo dữ liệu thử được tạo ra diệt đột biến yếu hơn- tức là dữ liệu thử được tạo ra trong cả TS và TW Tuy nhiên, nếu đột biến yếu hơn được lựa chọn, thì cơ hội dữ liệu thử được tạo ra diệt được đột biến mạnh hơn sẽ bị giảm - tức là dữ liệu thử ở trong TW nhưng có thể hoặc không thể ở trong TS

Hình 3.1- Ba kịch bản có thể có cho quan hệ giữa các tập dữ

liệu thử diệt đột biến yếu và mạnh

Trang 39

Nếu tình huống 3 xảy ra, thì việc lựa chọn đột biến trong lấy mẫu sẽ chỉ tạo ra

dữ liệu thử có khả năng diệt đột biến đặc biệt Tình huống 2 là sự kết hợp của hai loại Lựa chọn đột biến mạnh hơn sẽ tạo ra dữ liệu thử có thể hoặc không thể diệt được đột biến yếu hơn và ngược lại Nói chung, kích thước của TW có thể sẽ lớn hơn kích thước của TS, dữ liệu thử từ TW giao nhau với TS có thể sẽ nhỏ hơn so với dữ liệu thử từ TS giao nhau với TW Ví dụ, cho một dữ liệu thử

x là giao với hai tập |TW| = 20 và |TS| = 5 Nếu dữ liệu thử được tạo ra để diệt đột biến yếu hơn (nghĩa là dữ liệu thử thuộc TW) thì tỷ lệ của x là 1/20 Nếu

dữ liệu thử được tạo ra để diệt đột biến mạnh hơn (nghĩa là dữ liệu thử thuộc

TS) thì tỷ lệ của x là 1/5

Ba tình huống trên cho thấy rằng, đột biến được chọn trong quá trình lấy mẫu sẽ ảnh hưởng đến các dữ liệu thử được tạo ra Hơn nữa, chúng cho thấy rằng lựa chọn các đột biến mạnh hơn cải thiện cơ hội diệt các đột biến yếu hơn và vì vậy kích thước của lấy mẫu đột biến là không quan trọng, nhưng đó vẫn là sự lựa chọn đột biến Lấy mẫu từ đột biến mạnh hơn với tỷ lệ thấp hơn

có thể tạo ra tỷ lệ đột biến cao hơn lấy mẫu từ đột biến yếu hơn với tỷ lệ cao hơn

3.1.1.2 Đột biến ràng buộc (Constrained Mutation)

Giảm số lượng các đột biến cũng có thể đạt được bằng cách giảm số lượng các toán tử đột biến được áp dụng Đây là ý tưởng cơ bản làm nền tảng cho đột biến ràng buộc được đề xuất bởi Mathur [4], bằng cách lựa chọn một tập con các toán tử đột biến tạo ra một tập con tất cả các đột biến có thể có mà không mất tính hiệu quả của kiểm thử đột biến

Các kiểm tra dựa trên kinh nghiệm thu được các kết quả khá thuyết phục khi sử dụng đột biến ràng buộc Nhìn chung, các kết quả của Wong cho thấy rằng các tỷ lệ đột biến trung bình từ các tập dữ liệu thử chất lượng dựa trên ràng buộc bằng cách sử dụng chỉ hai toán tử ABS và ROR đạt trên 95% trong

Trang 40

3.1.1.3 N - đột biến lựa chọn (N - Selective Mutation)

Offutt và đồng nghiệp [9, 10] mở rộng nghiên cứu đột biến ràng buộc của Mathur bằng cách sử dụng tất cả các toán tử đột biến trừ đi hai toán tử tạo

ra hầu hết các đột biến (được gọi là phương pháp 2 - đột biến lựa chọn) Giả

thuyết phương pháp N – đột biến lựa chọn, trong đó N là số toán tử đột biến tạo ra nhiều đột biến nhất được loại bỏ Ban đầu, 28 chương trình đã được kiểm tra để xác định tỷ lệ đột biến được tạo ra bởi mỗi toán tử đột biến, như thể hiện trong hình 3.2 Dựa trên đó, họ đề xuất loại bỏ hai toán tử SVR và ASR cho 2 - đột biến lựa chọn, cùng với SCR và CSR cho 4 - đột biến lựa chọn, kết hợp với ACR và SRC cho 6 - đột biến lựa chọn

Đối với mỗi phương pháp lựa chọn, bộ tạo dữ liệu thử tự động Godzilla được dùng để tạo ra dữ liệu thử chất lượng dựa trên đột biến lựa chọn Sau đó, các tập dữ liệu thử này được thực hiện với tất cả các đột biến để xác định hiệu quả của chúng đối với tất cả các đột biến - tức là tỷ lệ đột biến của chúng Các kết quả mang lại nhiều hứa hẹn Phương pháp 2 - đột biến lựa chọn cho kết quả tỷ lệ đột biến 99,99% và tiết kiệm 23,98% số lượng đột biến không phải kiểm tra Đối với 4 - đột biến lựa chọn thu được những số liệu tương ứng này

là 99,84% và 41,36%, và 6 - đột biến lựa chọn là 99,71% và 60,56%

Ngày đăng: 18/06/2016, 09:20

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Xuân Huy (1994), Công nghệ phần mềm, Trường Đại học Tổng hợp TP.HCM Sách, tạp chí
Tiêu đề: Công nghệ phần mềm
Tác giả: Nguyễn Xuân Huy
Năm: 1994
[2] Lê Văn Tường Lân (2004), Giáo trình công nghệ phần mềm, Trường Đại học Khoa học Huế - Đại học Huế Sách, tạp chí
Tiêu đề: Giáo trình công nghệ phần mềm
Tác giả: Lê Văn Tường Lân
Năm: 2004
[4] A.P. Mathur (1991), Performance, effectiveness and reliability issues in software testing, Tokyo, Japan Sách, tạp chí
Tiêu đề: Performance, effectiveness and reliability issues in software testing
Tác giả: A.P. Mathur
Năm: 1991
[5] A.J.Offutt and K.N.King, “A Fortran 77 interpreter for mutation analysis”, in 1987 Symposium on Interpreters and Interpretive Techniqes, pp. 177-188, ACM SIGPLAN, June 1987 Sách, tạp chí
Tiêu đề: A Fortran 77 interpreter for mutation analysis”, "in 1987 Symposium on Interpreters and Interpretive Techniqes
[6] A.J. Offutt and W.M. Craft, “Using compiler optimization techniques to detect equivalent mutants,” The Journal of Softwave Testing, Verification, and Reliability, vol.4, pp. 131-154, September 1994 Sách, tạp chí
Tiêu đề: Using compiler optimization techniques to detect equivalent mutants,” "The Journal of Softwave Testing, Verification, and Reliability
[7] A.T. Acree, T.A. Budd, R.A. DeMillo, R.J. Lipton, and F.G. Sayward, “Mutation Analysis”, Georgia Institute of Technology, Technical Report, GIT – ICS – 79/08, 1979 Sách, tạp chí
Tiêu đề: Mutation Analysis”, Georgia Institute of Technology, "Technical Report
[8] A.T.Acree, On Mutation, PhD thesis, Georgia Institute of Technology, Atlanta GA, 1980 Sách, tạp chí
Tiêu đề: On Mutation
[9] Jeff Offutt, Ammei Lee, Gregg Rothermel, Roland H. Untch, and Christian Zapf (1996), An Experimental Determination of Sufficient Mutant Operators, George Mason University Sách, tạp chí
Tiêu đề: An Experimental Determination of Sufficient Mutant Operators
Tác giả: Jeff Offutt, Ammei Lee, Gregg Rothermel, Roland H. Untch, and Christian Zapf
Năm: 1996
[11] K.S.H.T.Wah, “Fault coupling in finite bijecttive functions,” the Journal of Softwave testing Verification, and Reliability, vol.5, pp.3-47, March 1995 Sách, tạp chí
Tiêu đề: Fault coupling in finite bijecttive functions,” "the Journal of Softwave testing Verification, and Reliability
[12] Mark Harman and Rob Hierons (2006), “An Overview of Mutation Testing”, Genetic Algorithms for Mutation Testing, Brunel University, London Sách, tạp chí
Tiêu đề: An Overview of Mutation Testing”, "Genetic Algorithms for Mutation Testing
Tác giả: Mark Harman and Rob Hierons
Năm: 2006
[13] R.A. DeMillo and A.J. Offutt (1993), Experimental results from an automatic test case generator, ACM transactions on Softwar Engineering Methodology, 2(2) pages 109-127 Sách, tạp chí
Tiêu đề: Experimental results from an automatic test case generator
Tác giả: R.A. DeMillo and A.J. Offutt
Năm: 1993
[14] R.A. DeMillo, D.S. Guindi, K.N.King, W.M.Mc Cracken and A.J.Offutt, “An extended overview of the Mothra Softwave testing environment,” in Proceeding of the Second wrokshop on Softwave Testing, Verification, and Anlysis, (Banff Alberta) pp. 142-151, IEEE Computer Society Press, July 1988 Sách, tạp chí
Tiêu đề: An extended overview of the Mothra Softwave testing environment,” "in Proceeding of the Second wrokshop on Softwave Testing, Verification, and Anlysis
[15] R.Geist, A.J.Offutt, and F. Harris, “Estimation and endhancement of real-time softwave reliability through mutation analysis,” IEEE Transactions on Computers, vol.41, pp. 550-558, May 1992. Special Issue on Fault – Tolerant Computing Sách, tạp chí
Tiêu đề: Estimation and endhancement of real-time softwave reliability through mutation analysis,” "IEEE Transactions on Computers
[16] R.Untch (1992), “Mutation-based software testing using program schemata”, Proceedings of 30th ACM Southeast Regional Conference, Raleigh, NC Sách, tạp chí
Tiêu đề: Mutation-based software testing using program schemata”, "Proceedings of 30th ACM Southeast Regional Conference
Tác giả: R.Untch
Năm: 1992
[17] R.J.Lipton and F.G. Sayward, “the status of reseach on program mutation,” in Digest for the Workshop on Softwave Testing and Test Documentation, pp. 355-373, December 1978 Sách, tạp chí
Tiêu đề: the status of reseach on program mutation,” "in Digest for the Workshop on Softwave Testing and Test Documentation
[18] R. Untch, A.J. Offutt and M.J. Harold (1993), Mutation Analysis using program schemate, pages 139-148, Cambridge, MA Sách, tạp chí
Tiêu đề: Mutation Analysis using program schemate
Tác giả: R. Untch, A.J. Offutt and M.J. Harold
Năm: 1993
[19] T.A. Budd (1980), Mutation Analysis of Program Test Data, Ph.D Thesis, Yale University, New Haven CT Sách, tạp chí
Tiêu đề: Mutation Analysis of Program Test Data
Tác giả: T.A. Budd
Năm: 1980
[20] Nguyen Thanh Binh, C. Robach (2001), “Mutation Testing Applied to Hardware: the Mutants Genenration”, Proceedings of the 11th IFIP International Conference on Very Large Scale Integration,118-- 123, Montpellier, France Sách, tạp chí
Tiêu đề: Mutation Testing Applied to Hardware: the Mutants Genenration”, "Proceedings of the 11th IFIP International Conference on Very Large Scale Integration
Tác giả: Nguyen Thanh Binh, C. Robach
Năm: 2001
[21] W.E. Howden (1982), Weak mutation testing and completeness of test sets, IEEE Transactions on Software Engineering, 8(4) pages 371-379 Sách, tạp chí
Tiêu đề: IEEE Transactions on Software Engineering
Tác giả: W.E. Howden
Năm: 1982
[22] W.Wong, J.Maldonado, an M.Delamaro Peducing the cost of regression test by using selective mutation. In 8 th CITS – International Conference on Softwave Technology, pages 11 – 13, Curitiba, PR, June 1997 Sách, tạp chí
Tiêu đề: the cost of regression test by using selective mutation

HÌNH ẢNH LIÊN QUAN

Hình 1.1- Bốn cấp độ cơ bản của kiểm thử phần mềm - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 1.1 Bốn cấp độ cơ bản của kiểm thử phần mềm (Trang 9)
Bảng 1.1 – Ví dụ các lớp tương đương  b)  Xác định các trường hợp  kiểm thử - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Bảng 1.1 – Ví dụ các lớp tương đương b) Xác định các trường hợp kiểm thử (Trang 16)
Hình 1.4 –Các kiểu vòng lặp - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 1.4 –Các kiểu vòng lặp (Trang 24)
Hình 2.1 – Ví dụ về đột biến tương đương - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 2.1 – Ví dụ về đột biến tương đương (Trang 28)
Hình 2.2 – Ví dụ về đột biến - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 2.2 – Ví dụ về đột biến (Trang 29)
Bảng 2.1- 22 toán tử đột biến chuẩn được sử dụng trong Mothra - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Bảng 2.1 22 toán tử đột biến chuẩn được sử dụng trong Mothra (Trang 31)
Hình 2.3 – Quy trình kiểm thử đột biến - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 2.3 – Quy trình kiểm thử đột biến (Trang 33)
Hình 3.1- Ba kịch bản có thể có cho quan hệ giữa các tập dữ - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 3.1 Ba kịch bản có thể có cho quan hệ giữa các tập dữ (Trang 38)
Hình 3.2 - Phân bố đột biến bằng toán tử đột biến cho Mothra - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 3.2 Phân bố đột biến bằng toán tử đột biến cho Mothra (Trang 41)
Hình 3.4- Phiên bản đột biến của PUT gốc hình 3.3 - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 3.4 Phiên bản đột biến của PUT gốc hình 3.3 (Trang 44)
Được biểu diễn ở dòng 2- hình 3.4. ROR:op() có ký hiệu:  ROR:op(int lhs; int  rhs; int mutantNumber) - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
c biểu diễn ở dòng 2- hình 3.4. ROR:op() có ký hiệu: ROR:op(int lhs; int rhs; int mutantNumber) (Trang 44)
Hình 4.1. Quy trình ứng dụng kỹ thuật kiểm thử đột biến trong C-Sharp - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Hình 4.1. Quy trình ứng dụng kỹ thuật kiểm thử đột biến trong C-Sharp (Trang 54)
Bảng 4.1. Lựa chọn Nester.exe.config - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Bảng 4.1. Lựa chọn Nester.exe.config (Trang 72)
Bảng 4.2. Kết quả chạy NUnit - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Bảng 4.2. Kết quả chạy NUnit (Trang 73)
Bảng 4.3 – Chất lượng các trường hợp kiểm thử chương trình cs-money sau - Các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình C
Bảng 4.3 – Chất lượng các trường hợp kiểm thử chương trình cs-money sau (Trang 75)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w