Luận văn: Phương pháp sinh dữ liệu kiểm thử tự động & ứng dụng chấm bài lập trình Java

Luận văn thạc sĩ: Phương pháp sinh dữ liệu kiểm thử tự động từ mã nguồn. Ứng dụng xây dựng hệ thống chấm bài lập trình hiệu quả. Tìm hiểu ngay!

Chuyên ngành

Kỹ thuật phần mềm

Người đăng

Ẩn danh

Thể loại

Luận văn thạc sĩ

2019

60
1
0

Phí lưu trữ

30 Point

Mục lục chi tiết

MỤC LỤC

LỜI CAM ĐOAN

DANH MỤC THUẬT NGỮ VIẾT TẮT

DANH MỤC HÌNH VẼ

DANH MỤC BẢNG

1. Chương 1: Mở đầu

2. Chương 2: Phương pháp sinh dữ liệu kiểm thử dòng điều khiển

2.1. Tổng quan về kiểm thử dòng điều khiển

2.2. Các tiêu chí kiểm thử

3. Chương 3: Công cụ và thực nghiệm

4. Chương 4: Kết luận

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Sinh Dữ Liệu Kiểm Thử Tự Động Tổng Quan Lợi Ích 55

Việc chấm bài lập trình thủ công tốn thời gian và dễ mắc lỗi. Sinh dữ liệu kiểm thử tự động là giải pháp hiệu quả, giúp giáo viên tiết kiệm thời gian và đảm bảo tính chính xác trong automated code assessment. Phương pháp này sử dụng mã nguồn chuẩn để tạo ra các test case generation tự động, từ đó đánh giá bài làm của học sinh một cách khách quan. Nó giải quyết bài toán chấm bài thủ công, giảm thiểu sai sót và đảm bảo công bằng. Ưu điểm chính của sinh dữ liệu kiểm thử là khả năng bao phủ nhiều trường hợp kiểm thử khác nhau, phát hiện các lỗi tiềm ẩn mà chấm bài thủ công có thể bỏ qua. Tài liệu gốc nhấn mạnh việc kiểm thử tự động hỗ trợ giáo viên trong việc chấm bài, đặc biệt là các trường THPT và THCS, nơi mà số lượng bài lập trình cần chấm là rất lớn. Phương pháp này không chỉ giúp giáo viên tiết kiệm thời gian mà còn đảm bảo tính nhất quán trong quá trình automated evaluation, tránh những sai sót do đánh giá chủ quan. Test driven development (TDD) cũng có thể được áp dụng trong quá trình này để đảm bảo chất lượng mã nguồn.

1.1. Tầm Quan Trọng Của Kiểm Thử Tự Động Trong Giáo Dục

Trong bối cảnh giáo dục hiện đại, việc áp dụng công nghệ vào quá trình dạy và học ngày càng trở nên quan trọng. Kiểm thử tự động không chỉ là một công cụ hỗ trợ chấm bài mà còn là một phương pháp giúp học sinh phát triển tư duy logic và kỹ năng giải quyết vấn đề. Bằng cách sử dụng automated evaluation, giáo viên có thể đánh giá khả năng lập trình của học sinh một cách toàn diện hơn, từ đó đưa ra những điều chỉnh phù hợp trong phương pháp giảng dạy. Hơn nữa, online judge systems, tích hợp auto grading programming assignments, cung cấp một môi trường thực hành lập trình hiệu quả, giúp học sinh rèn luyện kỹ năng một cách chủ động và linh hoạt. Việc sử dụng CI/CD pipeline trong quá trình phát triển các hệ thống automated code assessment giúp đảm bảo tính ổn định và khả năng mở rộng của hệ thống.

1.2. Các Phương Pháp Kiểm Thử Chính Hộp Đen và Hộp Trắng

Có hai phương pháp kiểm thử chính: black box testingwhite box testing. Black box testing tập trung vào chức năng của chương trình mà không cần biết cấu trúc bên trong, trong khi white box testing dựa trên việc phân tích mã nguồn để tạo ra các ca kiểm thử. Sinh dữ liệu kiểm thử tự động thường sử dụng white box testing để đảm bảo độ bao phủ mã nguồn cao. Các kỹ thuật như mutation testing cũng được sử dụng để đánh giá chất lượng của các ca kiểm thử. Static code analysisdynamic code analysis cũng đóng vai trò quan trọng trong việc phát hiện các lỗi tiềm ẩn. Việc kết hợp cả hai phương pháp black box testingwhite box testing giúp đảm bảo tính toàn diện của quá trình kiểm thử.

II. Thách Thức Chấm Bài Lập Trình Giải Pháp 58

Chấm bài lập trình thủ công đối mặt với nhiều thách thức, bao gồm tốn thời gian, dễ sai sót và khó đảm bảo tính công bằng. Giải pháp là sử dụng sinh dữ liệu kiểm thử tự động để tạo ra các ca kiểm thử toàn diện, bao phủ nhiều trường hợp và phát hiện lỗi tiềm ẩn. Việc sử dụng programming assignmentprogramming exercise testing giúp hệ thống đánh giá được nhiều khía cạnh của kỹ năng lập trình, bao gồm cả khả năng giải quyết vấn đề và viết mã nguồn chất lượng. Ngoài ra, các test automation frameworks như JUnit, pytest, Selenium, và TestNG giúp tự động hóa quá trình kiểm thử, giảm thiểu sự can thiệp của con người và đảm bảo tính nhất quán trong quá trình automated evaluation. Phương pháp này cũng giúp đánh giá code qualitycode coverage một cách hiệu quả.

2.1. Vấn Đề Với Chấm Bài Thủ Công và Tính Chủ Quan

Việc chấm bài lập trình thủ công thường mang tính chủ quan, phụ thuộc vào kinh nghiệm và kiến thức của người chấm. Điều này có thể dẫn đến sự thiếu công bằng trong đánh giá, đặc biệt là khi số lượng bài cần chấm lớn. Sinh dữ liệu kiểm thử tự động giúp loại bỏ yếu tố chủ quan này, đảm bảo rằng tất cả các bài làm đều được đánh giá theo cùng một tiêu chuẩn. Các hệ thống online judge cũng giúp tạo ra một môi trường đánh giá khách quan và minh bạch, giúp học sinh nhận được phản hồi chính xác về khả năng lập trình của mình.

2.2. Độ Bao Phủ Kiểm Thử Đảm Bảo Chất Lượng Toàn Diện

Độ bao phủ kiểm thử là một chỉ số quan trọng để đánh giá chất lượng của các ca kiểm thử. Sinh dữ liệu kiểm thử tự động cần đảm bảo độ bao phủ mã nguồn cao, tức là các ca kiểm thử phải bao phủ được hầu hết các nhánh và điều kiện trong mã nguồn. Các kỹ thuật như branch coverage, statement coverage, và condition coverage được sử dụng để đo lường độ bao phủ kiểm thử. Việc sử dụng mutation testing cũng giúp đánh giá khả năng của các ca kiểm thử trong việc phát hiện các lỗi nhỏ trong mã nguồn. Việc đạt được độ bao phủ kiểm thử cao giúp tăng cường sự tin cậy vào kết quả đánh giá.

III. Phương Pháp Sinh Dữ Liệu Kiểm Thử Tự Động Hiệu Quả 60

Phương pháp chính để sinh dữ liệu kiểm thử tự động là phân tích mã nguồn chuẩn, xây dựng đồ thị dòng điều khiển (CFG) và tạo ra các ca kiểm thử dựa trên CFG. Các tiêu chí kiểm thử như phủ câu lệnh, phủ nhánh và phủ điều kiện con được sử dụng để đảm bảo độ bao phủ mã nguồn cao. Các công cụ như JDT (Java Development Tooling) được sử dụng để phân tích mã nguồn Java và xây dựng CFG. Các kỹ thuật như symbolic execution, constraint solving, và fuzzing cũng được sử dụng để tạo ra các ca kiểm thử hiệu quả. Data-driven testing cũng là một phương pháp hiệu quả để tạo ra các ca kiểm thử dựa trên dữ liệu đầu vào.

3.1. Phân Tích Mã Nguồn Xây Dựng Đồ Thị Dòng Điều Khiển CFG

Quá trình sinh dữ liệu kiểm thử tự động bắt đầu bằng việc phân tích mã nguồn chuẩn để xây dựng đồ thị dòng điều khiển (CFG). CFG là một biểu diễn đồ họa của luồng điều khiển trong chương trình, giúp xác định các nhánh và điều kiện cần kiểm thử. Các công cụ như JDT (Java Development Tooling) được sử dụng để phân tích mã nguồn Java và tạo ra CFG. Việc xây dựng CFG chính xác là rất quan trọng để đảm bảo độ bao phủ mã nguồn cao. Các kỹ thuật static code analysis cũng được sử dụng để phân tích mã nguồn và xác định các lỗi tiềm ẩn.

3.2. Sử Dụng Tiêu Chí Kiểm Thử Phủ Câu Lệnh Nhánh Điều Kiện

Các tiêu chí kiểm thử như phủ câu lệnh, phủ nhánh và phủ điều kiện con được sử dụng để đảm bảo độ bao phủ mã nguồn cao. Phủ câu lệnh đảm bảo rằng mỗi câu lệnh trong chương trình được thực thi ít nhất một lần. Phủ nhánh đảm bảo rằng mỗi nhánh trong chương trình được thực thi ít nhất một lần. Phủ điều kiện con đảm bảo rằng mỗi điều kiện con trong chương trình được đánh giá cả đúng và sai. Việc sử dụng các tiêu chí kiểm thử này giúp tạo ra các ca kiểm thử toàn diện và hiệu quả. Boundary value analysisequivalence partitioning cũng là các kỹ thuật quan trọng để tạo ra các ca kiểm thử hiệu quả.

IV. Ứng Dụng AI Machine Learning Trong Kiểm Thử 52

AI-powered testingmachine learning for testing đang ngày càng được ứng dụng rộng rãi trong lĩnh vực kiểm thử phần mềm. Các thuật toán học máy có thể được sử dụng để tạo ra các ca kiểm thử tự động, tối ưu hóa quá trình kiểm thử và phát hiện các lỗi tiềm ẩn. Fuzzing cũng là một kỹ thuật hiệu quả để tìm kiếm các lỗi bảo mật trong chương trình. Machine learning for testing có thể được sử dụng để dự đoán các lỗi tiềm ẩn dựa trên dữ liệu lịch sử và các thuộc tính của mã nguồn.

4.1. Tự Động Tạo Ca Kiểm Thử Bằng Thuật Toán Học Máy

Các thuật toán học máy có thể được sử dụng để tự động tạo ra các ca kiểm thử dựa trên dữ liệu lịch sử và các thuộc tính của mã nguồn. Các thuật toán này có thể học cách tạo ra các ca kiểm thử hiệu quả trong việc phát hiện các lỗi tiềm ẩn. Reinforcement learning cũng là một kỹ thuật tiềm năng để tự động tạo ra các ca kiểm thử. Việc sử dụng AI-powered testing giúp giảm thiểu sự can thiệp của con người và tăng cường hiệu quả của quá trình kiểm thử.

4.2. Dự Đoán Lỗi và Tối Ưu Quá Trình Kiểm Thử

Các thuật toán học máy có thể được sử dụng để dự đoán các lỗi tiềm ẩn dựa trên dữ liệu lịch sử và các thuộc tính của mã nguồn. Các thuật toán này có thể giúp ưu tiên các ca kiểm thử quan trọng và tối ưu hóa quá trình kiểm thử. Việc sử dụng machine learning for testing giúp giảm thiểu chi phí và thời gian kiểm thử, đồng thời tăng cường chất lượng của phần mềm. Code coverage cũng được sử dụng để đánh giá hiệu quả của quá trình kiểm thử.

V. Xây Dựng Hệ Thống Chấm Bài Lập Trình Tự Động 59

Việc xây dựng một hệ thống chấm bài lập trình tự động đòi hỏi sự kết hợp của nhiều kỹ thuật và công cụ khác nhau. Hệ thống cần có khả năng phân tích mã nguồn, tạo ra các ca kiểm thử, thực thi các ca kiểm thử và đánh giá kết quả. Các hệ thống online judge thường được sử dụng để cung cấp một môi trường thực hành lập trình và đánh giá tự động. Việc tích hợp auto grading programming assignments vào hệ thống giúp giảm thiểu thời gian chấm bài và đảm bảo tính công bằng trong đánh giá. CI/CD pipeline cũng giúp tự động hóa quá trình phát triển và triển khai hệ thống.

5.1. Các Thành Phần Chính Của Hệ Thống Chấm Bài

Một hệ thống chấm bài lập trình tự động thường bao gồm các thành phần chính sau: trình phân tích mã nguồn, trình tạo ca kiểm thử, trình thực thi ca kiểm thử và trình đánh giá kết quả. Trình phân tích mã nguồn có trách nhiệm phân tích mã nguồn của học sinh và trích xuất thông tin cần thiết. Trình tạo ca kiểm thử có trách nhiệm tạo ra các ca kiểm thử dựa trên mã nguồn chuẩn. Trình thực thi ca kiểm thử có trách nhiệm thực thi các ca kiểm thử trên mã nguồn của học sinh. Trình đánh giá kết quả có trách nhiệm đánh giá kết quả của các ca kiểm thử và đưa ra điểm số.

5.2. Tích Hợp Công Cụ Khung Kiểm Thử JUnit Pytest

Việc tích hợp các công cụ và khung kiểm thử như JUnit, pytest, Selenium, và TestNG giúp tự động hóa quá trình kiểm thử và giảm thiểu sự can thiệp của con người. Các công cụ này cung cấp các API và thư viện giúp tạo ra các ca kiểm thử, thực thi các ca kiểm thử và đánh giá kết quả. Việc sử dụng các công cụ này giúp tăng cường hiệu quả và độ tin cậy của hệ thống chấm bài. Static code analysisdynamic code analysis cũng được tích hợp vào hệ thống để phát hiện các lỗi tiềm ẩn.

VI. Kết Luận Hướng Phát Triển Tương Lai 50

Sinh dữ liệu kiểm thử tự động là một giải pháp hiệu quả để giải quyết các thách thức trong chấm bài lập trình. Phương pháp này giúp tiết kiệm thời gian, giảm thiểu sai sót và đảm bảo tính công bằng trong đánh giá. Việc ứng dụng AI-powered testingmachine learning for testing hứa hẹn sẽ mang lại những cải tiến đáng kể trong lĩnh vực kiểm thử phần mềm. Các hướng phát triển tương lai bao gồm việc nghiên cứu các thuật toán học máy mới để tạo ra các ca kiểm thử hiệu quả hơn, tối ưu hóa quá trình kiểm thử và phát hiện các lỗi tiềm ẩn.

6.1. Tóm Tắt Ưu Điểm và Hạn Chế Của Phương Pháp

Ưu điểm chính của sinh dữ liệu kiểm thử tự động là khả năng tạo ra các ca kiểm thử toàn diện, bao phủ nhiều trường hợp và phát hiện lỗi tiềm ẩn. Phương pháp này giúp tiết kiệm thời gian và giảm thiểu sai sót trong quá trình chấm bài. Tuy nhiên, phương pháp này cũng có một số hạn chế, bao gồm việc yêu cầu mã nguồn chuẩn và khó khăn trong việc tạo ra các ca kiểm thử cho các chương trình phức tạp. Test oracle cũng là một thách thức trong việc tự động hóa quá trình kiểm thử.

6.2. Hướng Nghiên Cứu Cải Tiến Để Ứng Dụng Rộng Rãi

Các hướng nghiên cứu và cải tiến để ứng dụng rộng rãi sinh dữ liệu kiểm thử tự động bao gồm việc nghiên cứu các thuật toán học máy mới để tạo ra các ca kiểm thử hiệu quả hơn, tối ưu hóa quá trình kiểm thử và phát hiện các lỗi tiềm ẩn. Việc phát triển các công cụ và khung kiểm thử dễ sử dụng và có khả năng tích hợp với nhiều ngôn ngữ lập trình cũng là một hướng quan trọng. Model-based testingproperty-based testing cũng là các kỹ thuật tiềm năng để cải thiện hiệu quả của quá trình kiểm thử.

24/09/2025

Trích đoạn nội dung tài liệu

Mở đầu Hiện nay, môn học lập trình đã được đưa vào giảng dạy ở các trường Trung học phổ thông (THPT) trên toàn quốc, giúp các em học sinh làm quen với công việc lập trình và làm quen dần với tư duy thiết kế các thuật toán. Ngôn ngữ lập trình được sử dụng để giảng dạy trong hầu hết các trường THPT là Pascal. Tuy nhiên, theo chương trình giáo dục THPT mới, trên cơ sở định hướng lập trình và tùy chọn ngôn ngữ, nhiều trường THPT đã bước đầu đưa các ngôn ngữ lập trình phổ biến như C, Java, v. vào giảng dạy.

Trong quá trình giảng dạy, công việc chấm bài tập lập trình đối với người giáo viên thường diễn ra thủ công và tiềm ẩn nhiều sai sót. Do thời gian chấm bài có hạn nên việc không phát hiện ra các lỗi trong bài lập trình là không tránh khỏi. Điều này dẫn đến điểm chấm chưa thực sự chính xác và công bằng. Làm thế nào để công việc chấp bài lập trình được dễ dàng hơn với các giáo viên, cũng như đảm bảo tính chính xác, rút ngắn thời gian chấm bài là mục tiêu cần hướng tới.

Đối với các bài tập lập trình, việc chấm bài chính là rà soát để phát hiện các lỗi có thể có trên mã nguồn của bài tập học sinh. Khi chương trình xuất hiện lỗi cú pháp, các lỗi sẽ được trình biên dịch phát hiện để người lập trình sửa lỗi. Tuy nhiên, ngay cả khi một chương trình không có lỗi cú pháp thì chương trình vẫn chưa chắc đã đúng vì lỗi có thể xảy ra trong quá trình thiết kế giải thuật. Làm thế nào để hỗ trợ giáo viên kiểm tra xem chương trình có thực hiện đúng với đặc tả yêu cầu của bài toán hay không, hoặc đúng bao nhiêu phần so với đặc tả của bài toán chính là mục tiêu của quá trình chấm bài.

Hơn nữa, việc giáo viên cung cấp các cơ chế cho phép học sinh tự làm bài và tương tác qua các ứng dụng nhằm nâng cao khả năng tự học và tăng cường chất lượng là một xu hướng tất yếu trong hệ thống giáo dục thời gian tới. Vì vậy, nhu cầu về bài toán này càng cấp thiết hơn. Để giải quyết vấn đề này, ứng với mỗi bài toán, giáo viên phải sinh ra một bộ ca kiểm thử đủ tốt (có khả năng phát hiện tất cả các lỗi có thể có của bài lập trình của học sinh). Bộ ca kiểm thử này sau đó sẽ được sử dụng để chấm các chương trình cho học sinh nộp (tự động hoặc thủ công tùy thuộc vào phương pháp và công cụ mà giáo viên sử dụng).

Hiện tại, việc sinh ra các bộ ca kiểm thử như vậy là vượt ngoài khả năng của các giáo viên Trung học phổ thông. Vì vậy, có một công cụ tự động hỗ trợ giáo viên giải quyết bài toán này là một vấn đề cấp thiết, có ý nghĩa thực tiễn cao. Một trong những giải pháp để giải quyết vấn đề này là sinh dữ liệu kiểm thử từ mã nguồn sử dụng phương pháp kiểm thử dòng dữ liệu [2, 3, 4, 8, 9, 11]. Trong phương pháp này, ứng với đặc tả của mỗi bài toán, thay vì yêu cầu giáo viên phải sinh bộ ca kiểm thử, họ sẽ phải cung cấp mã nguồn mẫu (mã nguồn của bài toán tương ứng mà không có lỗi).

Phương pháp này sẽ tự động sinh các ca kiểm thử (bao gồm dữ liệu kiểm thử và giá trị đầu ra mong muốn tương ứng) từ mã nguồn được giáo viên cung cấp. Sau khi TIEU LUAN MOI download : skknchat@gmail.com 2 hoàn tất quá trình này, giáo viên sẽ có một bộ dữ liệu kiểm thử bao quát hết các nhánh của mã nguồn. Tuy nhiên, phương pháp này [2, 3] chỉ cho phép phát hiện những lỗi tiềm ẩn trong mã nguồn (có đặc tả và được lập trình hoặc không có đặc tả và được lập trình). Phương pháp này không kiểm tra được các lỗi ứng với tình huống có đặc tả và không được lập trình (thường được phát hiện bởi các phương pháp kiểm thử hộp đen).

Phương pháp đề xuất trong [2] mới sinh được các dữ liệu kiểm thử, chưa sinh được đầu ra mong muốn, do đó không hỗ trợ được giáo viên trong việc sinh các ca kiểm thử mẫu. Trong [3] đã sinh được các ca kiểm thử cho mã nguồn Java nhưng chưa hỗ trợ xây dựng hệ thống chấm bài. Mục tiêu của luận văn này là hướng đến nghiên cứu giải pháp và xây dựng bộ công cụ hỗ trợ giáo viên chấm bài lập trình một cách tự động nhằm giải quyết các vấn đề như mô tả ở trên. Mấu chốt của giải pháp này là phương pháp sinh dữ liệu kiểm thử từ mã nguồn.

Bản chất của các phương pháp này là phụ thuộc vào ngôn ngữ lập trình được sử dụng (mỗi ngôn ngữ lập trình thường có kỹ thuật sinh dữ liệu kiểm thử khác nhau vì chúng ta cần phải phân tích mã nguồn). Mặc dù ngôn ngữ lập trình được dùng phổ biến nhất trong các trường Trung học phổ thông là Pascal nhưng ngôn ngữ này chưa có công cụ phân tích cây cú pháp (nền tảng cho việc xây dựng đồ thị dòng điều khiển). Vì vậy, phương pháp sinh dữ liệu kiểm thử từ mã nguồn Pascal rất khó thực hiện trong luận văn này. Ngôn ngữ C/C++ đã được quan tâm nghiên cứu với giải pháp khá tốt trong [2].

Vì vậy, luận văn này tập trung nghiên cứu giải pháp cho ngôn ngữ Java. Phương pháp này có thể sử dụng khi chương trình được viết bằng phương pháp hướng đối tượng. Tuy nhiên, học sinh tại các trường Trung học phổ thông thường viết chương trình theo phương pháp hướng cấu trúc nên giải pháp này không sử dụng được. Cùng với phương pháp này, luận văn cũng sẽ nghiên cứu các kỹ thuật kiểm thử hộp đen nhằm sinh bổ sung các ca kiểm thử cho phương pháp trên.

Một công cụ hỗ trợ cũng sẽ được phát triển và thực nghiệm với một số chương trình đơn giản ở bậc Trung học phổ thông nhằm minh chứng cho kết quả của luận văn. Phần còn lại của đề tài nghiên cứu sẽ gồm những nội dung sau. Chương 2 trình bày tổng quan phương pháp sinh dữ liệu kiểm thử dòng điều khiển từ mã nguồn. Đây là phương pháp chung, có thể áp dụng cho nhiều ngôn ngữ lập trình khác nhau, trong chương này cũng đề xuất phương pháp phân tích mã nguồn Java nhằm sinh ca kiểm thử cho các hàm Java.

Chương 3 giới thiệu công cụ hỗ trợ sinh ca kiểm thử tự động và kết quả thực nghiệm bằng cách áp dụng công cụ, cài đặt với một số chương trình đơn giản. Cuối cùng, kết luận và các hướng nghiên cứu của luận văn sẽ được mô tả trong Chương 4. TIEU LUAN MOI download : skknchat@gmail.com 3 Chƣơng 2: Phƣơng pháp sinh dữ liệu kiểm thử dòng điều khiển Chương này trình bày tổng quan về phương pháp kiểm thử dòng điều khiển từ đồ thị dòng điều khiển (Control Flow Graph - CFG) của chương trình nhằm sinh ca kiểm thử cho mã nguồn ứng với tiêu chí kiểm thử yêu cầu. Phương pháp trình bày trong chương này có thể áp dụng cho hầu hết các ngôn ngữ lập trình.1 Tổng quan về kiểm thử dòng điều khiển Kiểm thử dòng điều khiển là phương pháp kiểm thử hộp trắng nhằm phát hiện các lỗi tiềm ẩn xảy ra trên mã nguồn [1, 6].

Phương pháp này dựa vào việc phân tích mã nguồn nhằm xây dựng đồ thị dòng điều khiển ứng với các tiêu chí kiểm thử cho trước. Dựa vào đồ thị này, một bộ dữ liệu kiểm thử sẽ được sinh ra đáp ứng 100% tiêu chí kiểm thử yêu cầu. Người sử dụng sẽ sử dụng đặc tả của bài toán để sinh ra các ca kiểm thử từ bộ dữ liệu kiểm thử đã được sinh ra. Bộ ca kiểm thử này sau đó sẽ được sử dụng để làm bộ kiểm thử mẫu thực hiện kiểm thử trên bài tập lập trình của học sinh phục vụ cho quá trình chấm bài.

Mã nguồn Xây dựng CFG Tiêu chí kiểm thử Sinh đường đi kiểm thử Sinh dữ liệu kiểm thử Sinh đầu ra mong muốn Thực thi ca kiểm thử Báo cáo kiểm thử Hình 2. Tổng quan quy trình kiểm thử dòng điều khiển TIEU LUAN MOI download : skknchat@gmail.com 4 Quy trình kiểm thử dòng điều khiển của một hàm được mô tả như Hình 2. Đầu vào của quy trình là mã nguồn và tiêu chí kiểm thử yêu cầu. Đầu ra của quy trình là báo cáo kiểm thử chứa các kết quả kiểm thử (ca kiểm thử nào phát hiện được lỗi và ca kiểm thử nào không phát hiện được lỗi).

Chi tiết phương pháp bao gồm các bước sau: - Bước 1: Sinh đồ thị dòng điều khiển. Mã nguồn được phân tích dựa trên các tiêu chí kiểm thử để xây dựng đồ thị dòng điều khiển. Với mỗi tiêu chí kiểm thử là phủ câu lệnh, phủ nhánh và phủ điều kiện con, sẽ có một đồ thị dòng điều khiển tương ứng. - Bước 2: Sinh các đường đi kiểm thử.

Từ đồ thị dòng điều khiển, luận văn đề xuất thuật toán duyệt đồ thị sao cho các đường đi kiểm thử được sinh ra đạt độ phủ thỏa mãn các tiêu chí đã đề ra. - Bước 3: Sinh ca kiểm thử. Ca kiểm thử bao gồm bộ giá trị đầu vào được chọn để thực hiện kiểm thử trên mỗi đường đi và giá trị đầu ra mong muốn tương ứng (Expected Output – EO). Ca kiểm thử được sinh ra bằng cách các hệ ràng buộc trên mỗi đường kiểm thử.

Giá trị đầu ra mong muốn được sinh từ đặc tả bài toán. Kết thúc bước này, một tập các ca kiểm thử được sinh ra. - Bước 4: Thực thi các ca kiểm thử. Thực thi các ca kiểm thử nhằm tạo ra báo cáo kiểm thử trong đó chỉ ra ca kiểm thử nào phát hiện được lỗi, ca kiểm thử nào không phát hiện được lỗi.2 Các tiêu chí kiểm thử Tiêu chí kiểm thử là chuẩn mực để đánh giá độ bao phủ của một tập ca kiểm thử so với mã nguồn.

Nhằm tối ưu các ca kiểm thử, tiêu chí kiểm thử được đưa ra để thiết kế các ca kiểm thử sao cho số ca kiểm thử là ít nhất những vẫn có thể kiểm tra được tối đa các trường hợp (có thể mắc lỗi) xảy ra trên mã nguồn. Các thành phần cần kiểm tra bao gồm câu lệnh, các đỉnh quyết định, các điều kiện con, đường thi thành hoặc sự kết hợp giữa chúng [1]. Có rất nhiều tiêu chí kiểm thử được áp dụng trong thực tế, dưới đây là ba tiêu chí kiếm thử đang được sử dụng rộng rãi [1, 2]: - Phủ câu lệnh: Sau khi thực hiện các ca kiểm thử, mỗi dòng lệnh trên mã nguồn phải được duyệt qua ít nhất một lần.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ