Luận Văn: Kiểm Tra Độ Phủ Trong Kiểm Thử Đơn Vị (ĐH Quốc Gia Hà Nội)

Luận văn thạc sĩ về kiểm tra độ phủ trong kiểm thử đơn vị. Nghiên cứu chuyên sâu về các phương pháp đo lường và nâng cao hiệu quả kiểm thử.

Trường đại học

Đại học Quốc gia Hà Nội

Chuyên ngành

Công nghệ thông tin

Người đăng

Ẩn danh

Thể loại

luận văn thạc sĩ

2014

68
1
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CẢM ƠN!

LỜI CAM ĐOAN

TÓM TẮT

DANH MỤC CÁC THUẬT NGỮ, KÝ HIỆU VÀ CHỮ VIẾT TẮT

DANH MỤC CÁC BẢNG

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

1. CHƢƠNG 1: MỞ ĐẦU

1.1. Bối cảnh nghiên cứu

1.2. Nội dung nghiên cứu

1.3. Cấu trúc luận văn

2. CHƢƠNG 2: CƠ SỞ LÝ THUYẾT VỀ KIỂM THỬ

2.1. Khái niệm kiểm thử phần mềm

2.2. Quy trình kiểm thử phần mềm

2.3. Kiểm thử đơn vị

2.3.1. Kiểm thử đơn vị trong vòng đời phát triển phần mềm

2.3.2. Một số loại kiểm thử đơn vị

3. CHƢƠNG 3: CÔNG CỤ KIỂM CHỨNG JAVA PATHFINDER

3.1. Lịch sử của Java PathFinder

3.2. Những gì có thể được kiểm chứng bởi Java PathFinder

3.3. Kiến trúc của Java PathFinder

3.4. Một số phần mở rộng của Java PathFinder

3.4.1. Bộ tạo chỉ thị (Bytecode Factory)

3.5. Đo độ phủ trong kiểm thử đơn vị sử dụng JPF CoverageAnalyzer

4. CHƢƠNG 4: PHƢƠNG PHÁP KIỂM TRA ĐỘ PHỦ TRONG KIỂM THỬ ĐƠN VỊ SỬ DỤNG JAVA PATHFINDER

4.1. Phương pháp xây dựng công cụ kiểm tra độ phủ sử dụng JPF

4.1.1. Nội dung phương pháp

4.1.2. Ví dụ minh họa cho phương pháp

5. CHƢƠNG 5: THỰC NGHIỆM

5.1. Giới thiệu về công cụ kiểm tra độ phủ

5.2. Cài đặt công cụ sử dụng lập trình

5.3. Xây dựng công cụ kiểm tra độ phủ

5.3.1. Phân tích dữ liệu log

5.3.2. Phân tích mã nguồn

5.3.3. So sánh dữ liệu log và mã nguồn báo cáo kết quả

5.3.4. Các bước thực thi chương trình

5.4. Thực nghiệm kiểm tra độ phủ

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Tổng Quan Luận Văn Kiểm Tra Độ Phủ Kiểm Thử Đơn Vị

Luận văn thạc sĩ này tập trung vào một khía cạnh quan trọng của phát triển phần mềm: đảm bảo chất lượng thông qua kiểm thử. Cụ thể, luận văn đi sâu vào kỹ thuật kiểm thử đơn vị, một bước không thể thiếu trong quy trình phát triển phần mềm. Mặc dù không mới, kiểm thử đơn vị vẫn đóng vai trò then chốt trong việc phát hiện và sửa lỗi sớm, giảm thiểu chi phí và rủi ro. Luận văn này tập trung vào kiểm thử hộp trắng, đặc biệt là kiểm thử luồng điều khiển, nhằm phân tích các đường đi trong chương trình. Độ phủ là một trong những tiêu chí quan trọng khi kiểm thử luồng điều khiển; độ phủ càng cao, độ tin cậy của bộ dữ liệu kiểm thử càng lớn. Luận văn này trình bày một phương pháp kiểm tra độ phủ của bộ dữ liệu kiểm thử, đảm bảo đạt tiêu chuẩn bao phủ nhánh. Phương pháp này sử dụng công cụ Java PathFinder (JPF), một công cụ mạnh mẽ cho việc kiểm chứng phần mềm Java. Phương pháp này khai thác các chức năng lưu vết của JPF để xây dựng một công cụ tự động hỗ trợ kiểm tra độ phủ trong kiểm thử đơn vị. Công cụ này giúp lập trình viên kiểm tra độ phủ của bộ dữ liệu kiểm thử, đồng thời đánh giá lại mã nguồn đã viết. Công cụ này còn giúp lập trình viên xác định các nhánh chưa được phủ, những nơi có thể tiềm ẩn lỗi. Điều này rất quan trọng vì việc bỏ sót các nhánh có thể dẫn đến các vấn đề nghiêm trọng trong quá trình thực thi phần mềm. Bằng cách cung cấp một phương pháp tự động và hiệu quả, luận văn này đóng góp vào việc cải thiện chất lượng và độ tin cậy của phần mềm.

1.1. Kiểm Thử Đơn Vị Nền Tảng Vững Chắc Cho Phần Mềm

Kiểm thử đơn vị là quá trình kiểm tra các thành phần riêng lẻ của phần mềm, như hàm, phương thức hoặc lớp. Mục tiêu là đảm bảo rằng mỗi thành phần hoạt động đúng như mong đợi. Theo [Tài liệu gốc], kiểm thử đơn vị là một bước quan trọng trong vòng đời phát triển phần mềm, giúp phát hiện lỗi sớm và giảm chi phí sửa lỗi. Việc kiểm thử độc lập các đơn vị cho phép xác định chính xác vị trí lỗi. Sai sót trong quá trình lập trình là điều không thể tránh khỏi, đặc biệt khi dự án phức tạp và có nhiều lập trình viên tham gia. Kiểm thử đơn vị giúp giảm thiểu tác động của những sai sót này bằng cách cô lập chúng và cho phép sửa chữa nhanh chóng. Một bộ kiểm thử đơn vị tốt sẽ bao gồm nhiều ca kiểm thử khác nhau, bao phủ các trường hợp sử dụng khác nhau và kiểm tra các giá trị biên. Điều này đảm bảo rằng đơn vị phần mềm hoạt động đúng trong mọi tình huống có thể xảy ra. Thêm vào đó, việc tự động hóa kiểm thử đơn vị giúp quá trình kiểm thử trở nên nhanh chóng và hiệu quả hơn. Các công cụ tự động có thể chạy các ca kiểm thử một cách liên tục, giúp phát hiện lỗi ngay khi chúng xuất hiện. Việc này cho phép lập trình viên sửa lỗi ngay lập tức, trước khi chúng lan rộng và gây ra các vấn đề lớn hơn.

1.2. Độ Phủ Mã Tiêu Chí Đánh Giá Hiệu Quả Kiểm Thử

Độ phủ mã là một thước đo quan trọng trong kiểm thử phần mềm, cho biết mức độ mà bộ kiểm thử bao phủ mã nguồn của chương trình. Theo [Tài liệu gốc], độ phủ càng cao, độ tin cậy của bộ dữ liệu kiểm thử càng lớn. Có nhiều loại độ phủ khác nhau, bao gồm độ phủ câu lệnh (statement coverage), độ phủ nhánh (branch coverage), và độ phủ điều kiện (condition coverage). Độ phủ câu lệnh đảm bảo rằng mọi dòng code được thực thi ít nhất một lần. Độ phủ nhánh đảm bảo rằng mọi nhánh của câu lệnh điều kiện (if, else, switch) được thực thi ít nhất một lần. Độ phủ điều kiện đảm bảo rằng mọi điều kiện con trong một câu lệnh điều kiện phức tạp được thực thi ít nhất một lần với cả giá trị đúng và sai. Độ phủ mã không phải là mục tiêu duy nhất trong kiểm thử phần mềm, nhưng nó là một chỉ số hữu ích để đánh giá hiệu quả của bộ kiểm thử. Một bộ kiểm thử có độ phủ cao có khả năng phát hiện nhiều lỗi hơn so với một bộ kiểm thử có độ phủ thấp. Tuy nhiên, độ phủ cao không đảm bảo rằng chương trình không có lỗi. Vẫn có thể có những lỗi mà bộ kiểm thử không phát hiện ra, ngay cả khi độ phủ đạt 100%.

II. Thách Thức Kiểm Tra Độ Phủ Kiểm Thử Đơn Vị Thủ Công

Mặc dù tầm quan trọng của độ phủ mã là không thể phủ nhận, việc kiểm tra độ phủ trong kiểm thử đơn vị thường là một quá trình thủ công và tốn thời gian. Lập trình viên phải tự theo dõi các đường đi thực thi của chương trình, xác định các nhánh chưa được bao phủ, và viết thêm các ca kiểm thử để bao phủ những nhánh đó. Quá trình này dễ mắc lỗi, đặc biệt đối với các chương trình phức tạp. Việc phân tích mã nguồn để xác định các nhánh chưa được bao phủ đòi hỏi sự hiểu biết sâu sắc về cấu trúc và logic của chương trình. Lập trình viên phải đọc và hiểu mã nguồn, xác định các câu lệnh điều kiện, và phân tích các đường đi thực thi có thể xảy ra. Quá trình này có thể tốn nhiều thời gian và công sức, đặc biệt đối với các chương trình lớn và phức tạp. Hơn nữa, việc viết thêm các ca kiểm thử để bao phủ những nhánh chưa được bao phủ cũng đòi hỏi sự sáng tạo và kỹ năng. Lập trình viên phải suy nghĩ về các trường hợp sử dụng khác nhau, xác định các giá trị đầu vào phù hợp, và viết các ca kiểm thử để kích hoạt các nhánh đó. Quá trình này có thể khó khăn và tốn thời gian, đặc biệt đối với các chương trình có nhiều nhánh và điều kiện phức tạp. Do đó, việc tự động hóa quá trình kiểm tra độ phủ là rất quan trọng để giảm thiểu chi phí và tăng hiệu quả của kiểm thử đơn vị.

2.1. Phức Tạp Của Kiểm Thử Luồng Điều Khiển Thủ Công

Kiểm thử luồng điều khiển là một kỹ thuật kiểm thử hộp trắng tập trung vào việc phân tích các đường đi thực thi của chương trình. Theo [Tài liệu gốc], kiểm thử luồng điều khiển đòi hỏi việc xây dựng đồ thị luồng điều khiển, xác định các đường đi có thể xảy ra, và viết các ca kiểm thử để bao phủ các đường đi đó. Quá trình này có thể rất phức tạp, đặc biệt đối với các chương trình có nhiều nhánh và vòng lặp. Việc xây dựng đồ thị luồng điều khiển đòi hỏi sự hiểu biết sâu sắc về cấu trúc và logic của chương trình. Lập trình viên phải đọc và hiểu mã nguồn, xác định các câu lệnh điều kiện và vòng lặp, và vẽ ra đồ thị thể hiện các đường đi thực thi có thể xảy ra. Quá trình này có thể tốn nhiều thời gian và công sức, đặc biệt đối với các chương trình lớn và phức tạp. Hơn nữa, việc xác định các đường đi có thể xảy ra và viết các ca kiểm thử để bao phủ các đường đi đó cũng đòi hỏi sự sáng tạo và kỹ năng. Lập trình viên phải suy nghĩ về các trường hợp sử dụng khác nhau, xác định các giá trị đầu vào phù hợp, và viết các ca kiểm thử để kích hoạt các đường đi đó. Quá trình này có thể khó khăn và tốn thời gian, đặc biệt đối với các chương trình có nhiều nhánh và vòng lặp.

2.2. Giới Hạn Về Nguồn Lực Và Thời Gian Trong Dự Án

Trong thực tế, các dự án phát triển phần mềm thường bị giới hạn về nguồn lực và thời gian. Điều này gây áp lực lên lập trình viên trong việc kiểm tra độ phủ và thực hiện kiểm thử đơn vị một cách kỹ lưỡng. Theo [Tài liệu gốc], việc dành quá nhiều thời gian cho kiểm thử đơn vị có thể ảnh hưởng đến tiến độ chung của dự án. Lập trình viên phải cân bằng giữa việc đảm bảo chất lượng phần mềm và việc đáp ứng thời hạn dự án. Trong tình huống này, việc tự động hóa quá trình kiểm tra độ phủ là rất quan trọng. Các công cụ tự động có thể giúp lập trình viên tiết kiệm thời gian và công sức, đồng thời đảm bảo rằng kiểm thử đơn vị được thực hiện một cách kỹ lưỡng và hiệu quả. Các công cụ này có thể tự động phân tích mã nguồn, xác định các nhánh chưa được bao phủ, và đề xuất các ca kiểm thử phù hợp. Điều này giúp lập trình viên tập trung vào việc viết mã và sửa lỗi, thay vì tốn thời gian cho các công việc thủ công.

III. Giải Pháp Kiểm Tra Độ Phủ Tự Động Với Java PathFinder

Luận văn này đề xuất một phương pháp tự động kiểm tra độ phủ trong kiểm thử đơn vị sử dụng công cụ Java PathFinder (JPF). Theo [Tài liệu gốc], JPF là một công cụ mạnh mẽ cho việc kiểm chứng phần mềm Java, cho phép phân tích các đường đi thực thi của chương trình và phát hiện các lỗi tiềm ẩn. Phương pháp này khai thác các chức năng lưu vết của JPF để xây dựng một công cụ tự động hỗ trợ kiểm tra độ phủ trong kiểm thử đơn vị. Công cụ này giúp lập trình viên kiểm tra độ phủ của bộ dữ liệu kiểm thử, đồng thời đánh giá lại mã nguồn đã viết. Thay vì phải tự theo dõi các đường đi thực thi của chương trình và xác định các nhánh chưa được bao phủ, lập trình viên có thể sử dụng công cụ này để tự động phân tích mã nguồn và xác định các nhánh đó. Công cụ này cung cấp một giao diện trực quan để hiển thị độ phủ mã, giúp lập trình viên dễ dàng xác định các khu vực trong chương trình cần được kiểm tra kỹ hơn. Hơn nữa, công cụ này có thể đề xuất các ca kiểm thử phù hợp để bao phủ những nhánh chưa được bao phủ, giúp lập trình viên tiết kiệm thời gian và công sức.

3.1. Khai Thác Khả Năng Lưu Vết Của Java PathFinder

Phương pháp này tập trung vào việc khai thác khả năng lưu vết của Java PathFinder (JPF). Theo [Tài liệu gốc], JPF có thể ghi lại các đường đi thực thi của chương trình, bao gồm các câu lệnh đã được thực thi, các nhánh đã được rẽ, và các giá trị của các biến. Thông tin này có thể được sử dụng để phân tích độ phủ mã và xác định các khu vực trong chương trình cần được kiểm tra kỹ hơn. Công cụ được đề xuất sử dụng thông tin lưu vết của JPF để xây dựng một bản đồ các đường đi thực thi của chương trình. Bản đồ này cho phép lập trình viên dễ dàng xác định các nhánh chưa được bao phủ và viết thêm các ca kiểm thử để bao phủ những nhánh đó. Hơn nữa, công cụ này có thể sử dụng thông tin lưu vết để xác định các ca kiểm thử có hiệu quả nhất trong việc bao phủ các nhánh, giúp lập trình viên tập trung vào việc viết các ca kiểm thử có giá trị nhất.

3.2. Xây Dựng Công Cụ Tự Động Hóa Kiểm Tra Độ Phủ

Mục tiêu của luận văn này là xây dựng một công cụ tự động hóa quá trình kiểm tra độ phủ trong kiểm thử đơn vị. Công cụ này sẽ tự động phân tích mã nguồn, xác định các nhánh chưa được bao phủ, đề xuất các ca kiểm thử phù hợp, và hiển thị độ phủ mã một cách trực quan. Công cụ này sẽ giúp lập trình viên tiết kiệm thời gian và công sức, đồng thời đảm bảo rằng kiểm thử đơn vị được thực hiện một cách kỹ lưỡng và hiệu quả. Công cụ này sẽ được thiết kế để dễ sử dụng và tích hợp vào quy trình phát triển phần mềm hiện có. Lập trình viên có thể sử dụng công cụ này để kiểm tra độ phủ mã của các đơn vị phần mềm một cách nhanh chóng và dễ dàng, và viết thêm các ca kiểm thử để bao phủ những nhánh chưa được bao phủ.

IV. Ứng Dụng Thực Tiễn Thử Nghiệm Và Đánh Giá Công Cụ

Để đánh giá hiệu quả của công cụ được đề xuất, luận văn này sẽ thực hiện một loạt các thử nghiệm trên các đơn vị phần mềm khác nhau. Các thử nghiệm này sẽ tập trung vào việc đo lường độ phủ mã của bộ kiểm thử, xác định các nhánh chưa được bao phủ, và đánh giá khả năng của công cụ trong việc đề xuất các ca kiểm thử phù hợp. Kết quả của các thử nghiệm này sẽ được sử dụng để đánh giá hiệu quả của phương pháp được đề xuất và xác định các khu vực cần cải thiện. Các thử nghiệm sẽ được thực hiện trên các đơn vị phần mềm có kích thước và độ phức tạp khác nhau, để đảm bảo rằng công cụ có thể được sử dụng trong nhiều tình huống khác nhau. Kết quả của các thử nghiệm sẽ được so sánh với các phương pháp kiểm tra độ phủ thủ công, để đánh giá mức độ cải thiện về thời gian và công sức.

4.1. Đo Lường Độ Phủ Mã Trên Các Dự Án Thực Tế

Các thử nghiệm sẽ tập trung vào việc đo lường độ phủ mã trên các dự án thực tế. Điều này sẽ giúp đánh giá khả năng của công cụ trong việc xác định các khu vực trong chương trình cần được kiểm tra kỹ hơn. Các dự án thực tế sẽ được chọn để đảm bảo rằng chúng có kích thước và độ phức tạp khác nhau, và rằng chúng sử dụng các ngôn ngữ lập trình khác nhau. Độ phủ mã sẽ được đo lường bằng nhiều phương pháp khác nhau, bao gồm độ phủ câu lệnh, độ phủ nhánh, và độ phủ điều kiện. Kết quả của các phép đo này sẽ được sử dụng để đánh giá hiệu quả của công cụ và xác định các khu vực cần cải thiện.

4.2. Phân Tích Và Đánh Giá Kết Quả Thử Nghiệm

Kết quả của các thử nghiệm sẽ được phân tích và đánh giá để xác định hiệu quả của công cụ được đề xuất. Phân tích sẽ xem xét mức độ cải thiện về thời gian và công sức, cũng như mức độ cải thiện về độ phủ mã. Đánh giá sẽ xem xét tính khả thi của việc tích hợp công cụ vào quy trình phát triển phần mềm hiện có, cũng như khả năng của công cụ trong việc giúp lập trình viên viết các ca kiểm thử có hiệu quả hơn. Kết quả của phân tích và đánh giá sẽ được sử dụng để đưa ra các khuyến nghị về việc sử dụng công cụ và cải thiện phương pháp được đề xuất.

V. Kết Luận Và Hƣớng Phát Triển Kiểm Tra Độ Phủ Tiếp Theo

Luận văn này đã trình bày một phương pháp tự động kiểm tra độ phủ trong kiểm thử đơn vị sử dụng công cụ Java PathFinder (JPF). Phương pháp này khai thác các chức năng lưu vết của JPF để xây dựng một công cụ tự động hỗ trợ kiểm tra độ phủ trong kiểm thử đơn vị. Kết quả thử nghiệm cho thấy công cụ này có thể giúp lập trình viên tiết kiệm thời gian và công sức, đồng thời đảm bảo rằng kiểm thử đơn vị được thực hiện một cách kỹ lưỡng và hiệu quả. Tuy nhiên, vẫn còn nhiều khu vực cần cải thiện, chẳng hạn như khả năng đề xuất các ca kiểm thử phù hợp hơn, và khả năng tích hợp công cụ vào quy trình phát triển phần mềm hiện có một cách dễ dàng hơn. Luận văn này kết luận bằng việc đề xuất các hướng phát triển tiếp theo cho công cụ và phương pháp được đề xuất.

5.1. Tổng Kết Những Đóng Góp Của Luận Văn

Luận văn này đã đóng góp vào lĩnh vực kiểm thử phần mềm bằng cách đề xuất một phương pháp tự động kiểm tra độ phủ trong kiểm thử đơn vị. Phương pháp này giúp lập trình viên tiết kiệm thời gian và công sức, đồng thời đảm bảo rằng kiểm thử đơn vị được thực hiện một cách kỹ lưỡng và hiệu quả. Luận văn này cũng đã xây dựng một công cụ tự động hỗ trợ kiểm tra độ phủ trong kiểm thử đơn vị, và đã thực hiện một loạt các thử nghiệm để đánh giá hiệu quả của công cụ. Kết quả của các thử nghiệm này cho thấy công cụ có thể được sử dụng để cải thiện chất lượng phần mềm và giảm chi phí phát triển.

5.2. Hướng Nghiên Cứu Và Phát Triển Công Cụ Trong Tương Lai

Trong tương lai, công cụ này có thể được cải thiện bằng cách thêm các tính năng mới, chẳng hạn như khả năng đề xuất các ca kiểm thử phù hợp hơn, và khả năng tích hợp công cụ vào quy trình phát triển phần mềm hiện có một cách dễ dàng hơn. Hơn nữa, công cụ này có thể được mở rộng để hỗ trợ các ngôn ngữ lập trình khác, và để hỗ trợ các phương pháp kiểm thử khác, chẳng hạn như kiểm thử tích hợpkiểm thử hệ thống. Các hướng nghiên cứu trong tương lai có thể tập trung vào việc cải thiện khả năng đề xuất các ca kiểm thử, bằng cách sử dụng các kỹ thuật trí tuệ nhân tạo và học máy. Các hướng nghiên cứu khác có thể tập trung vào việc tích hợp công cụ vào các môi trường phát triển tích hợp (IDE) phổ biến, để giúp lập trình viên sử dụng công cụ một cách dễ dàng hơn.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI từ nội dung tài liệu gốc; tài liệu do người dùng đóng góp và được kiểm duyệt trước khi xuất bản. Báo lỗi nội dung.

24/09/2025
Luận văn thạc sĩ kiểm tra độ phủ trong kiểm thử đơn vị

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

MỞ ĐẦU 1. Bối cảnh nghiên cứu Trong những năm gần đây, khi công nghệ thông tin càng ngày càng phát triển, phần mềm thực sự trở thành một phần không thể thiếu trong các doanh nghiệp. Mỗi bộ phận trong mỗi doanh nghiệp đều phụ thuộc vào phần mềm để hỗ trợ việc phát triển, sản xuất, quảng cáo và tiếp thị các sản phẩm và dịch vụ của họ. Trong các giai đoạn phát triển phần mềm, giai đoạn phát hiện, xác định và sửa các lỗi phần mềm là giai đoạn không thể thiếu nhằm đảm bảo chất lượng của các sản phẩm phần mềm.

Trong một tổ chức phát triển thương mại điển hình, chi phí dành cho các công việc gỡ lỗi (debugging), kiểm thử (testing) và các hoạt động kiểm chứng phần mềm (verification activities) chiếm từ 50 đến 70% tổng chi phí phát triển [7]. Với tốc độ phát triển đến chóng mặt của lĩnh vực công nghệ thông tin và truyền thông trên cả các hệ thống phần cứng và phần mềm, khả năng xảy ra nhiều lỗi, đặc biệt là các lỗi phức tạp là rất cao. Những lỗi này có thể gây ra những hậu quả nghiêm trọng về tiền bạc, thời gian, thậm chí sinh mạng của con người. Nhìn chung, một lỗi càng sớm được phát hiện sẽ càng mất ít công sức để sửa lỗi, thậm chí có thể phải xây dựng lại toàn bộ hệ thống từ đầu.

• Theo thống kê của Standish Group, Mỹ (2000) [8]: Trên 350 công ty với hơn 8000 dự án phần mềm có: 31% dự án phần mềm bị huỷ bỏ trước khi được hoàn thành. Với các công ty lớn, chỉ có khoảng 9% tổng số các dự án hoàn thành đúng tiến độ và trong ngân sách dự án (với các công ty nhỏ, tỷ lệ này vào khoảng 16%). • Theo nghiên cứu của NIST, Mỹ (2002) [10]: Chi phí hàng năm dành cho việc phát hiện các lỗi phần mềm lên đến 59.5 tỉ đô la chiếm từ 0.6% GDP kinh tế nước Mỹ. • Theo thống kê của NASA IV&V Center (2000) [10]: Ngành công nghiệp không gian vũ trụ mất đến hàng tỉ đô la và hàng trăm sinh mạng con người trong những năm cuối thập niên 1990 vì các vấn đề liên quan đến phần mềm.

Quá trình phát triển phần mềm bao gồm rất nhiều giai đoạn: Thu thập yêu cầu, phân tích, thiết kế, xây dựng, kiểm tra, triển khai và bảo trì phần mềm. Trong các giai đoạn đó giai đoạn kiểm tra, phát hiện, xác định và sửa các lỗi phần mềm là rất quan trọng để đảm bảo chất lượng của một phần mềm. Để phát hiện ra các lỗi phần mềm, phần mềm cần được kiểm chứng (Verification) và 1 TIEU LUAN MOI download : skknchat@gmail.com thẩm định (Validation) [9, 11]. Thẩm định cần có sự tham gia của khách hàng nhằm kiểm tra xem phần mềm có thực sự đáp ứng các yêu cầu của khách hàng hay không.

Kiểm chứng là kiểm tra phần mềm có được thiết kế và thực thi đúng như đặc tả hay không. Mục tiêu chính của phát triển phần mềm là phải làm sao tạo ra được những sản phầm phần mềm có chất lượng tốt nhất. Để giúp làm được điều đó kiểm chứng phần mềm là phần không thể thiếu. Kiểm chứng phần mềm giúp làm giảm thiểu lỗi phần mềm tới mức có thể chấp nhận được.

Chính vì vậy, nó có vai trò vô cùng quan trọng trong toàn bộ quy trình phát triển phần mềm và trong ngành công nghệ phần mềm hiện nay. Chính vì thế, trong công nghệ phần mềm, kiểm chứng phần mềm luôn thu hút được mối quan tâm của rất nhiều nhà nghiên cứu. Việc viết tập hợp các ca kiểm thử (test cases) là một phần quan trọng không thể thiếu trong phương pháp kiểm thử phần mềm. Tập hợp các ca kiểm thử đúng đắn giúp giảm thiểu tối đa các lỗi, giảm thời gian tìm kiếm lỗi, tạo ra được các phần mềm tốt, tính ổn định cao.

Nội dung nghiên cứu Kiểm thử là giai đoạn quan trọng trong quá trình phát triển phần mềm. Có rất nhiều nguyên nhân gây ra lỗi trong phần mềm, nó nằm ở tất cả các giai đoạn trong quy trình phát triển phần mềm, và lập trình cũng là một trong số các giai đoạn đó. Lỗi xuất hiện do lập trình gây ra là hoàn toàn dễ hiểu, trong thời kỳ đầu của ngành công nghiệp phần mềm, phát triển phần mềm cũng có nghĩa là lập trình, việc lập trình được thực hiện hoàn toàn thủ công, chính vì thế lỗi gây ra do lập trình là chủ yếu. Ngày nay, lập trình chỉ là một công đoạn trong quá trình phát triển phần mềm, được hỗ trợ bởi nhiều công cụ lập trình cao cấp, do đó việc lập trình đã trở nên nhẹ nhàng hơn, tuy nhiên không phải vì vậy mà lỗi lập trình lại mất đi.

Người ta áp dụng rất nhiều kỹ thuật trong kiểm thử nhằm mục tiêu thiết kế ra các ca kiểm thử có khả năng phát hiện ra nhiều lỗi nhất trong chương trình. Tuy nhiên, trên thực tế vẫn có thể tồn tại các nhánh không được chạy qua khi hàm hoặc một phương thức được thực thi. Những nhánh đó có thể là vô nghĩa nhưng cũng có thể là nơi tiềm ẩn rất nhiều nguyên nhân gây ra lỗi. Vì vậy, chúng ta cần có phương pháp xác định có hay không tồn tại các nhánh chưa duyệt qua trong chương trình, nếu có thì thông báo cho người phát triển kiểm tra và xử lý.

Trong nội dung luận văn sẽ tìm hiểu các tiêu chuẩn bao phủ [6] mã nguồn của bộ test cơ bản nhưng rất mạnh mẽ như tiêu chuẩn bao phủ lệnh (statement coverage), bao phủ nhánh (branch coverage), bao phủ điều kiện (condition coverage) nhằm giúp xây dựng các ca kiểm thử tốt phát hiện nhánh chưa được phủ trong mã nguồn đang xét. Bên cạnh đó trong luận văn cũng đề 2 TIEU LUAN MOI download : skknchat@gmail.com xuất xây dựng một công cụ tự động kiểm tra độ phủ của bộ dữ liệu kiểm thử thỏa mãn một tiêu chuẩn dựa trên công cụ kiểm chứng Java Pathfinder. Đầu vào của công cụ là một hàm hay một phương thức cần kiểm tra, xây dựng đồ thị luồng điều khiển, tiến hành xây dựng các ca kiểm thử. Sử dụng công cụ Java Pathfinder hỗ trợ ghi lại từng dòng lệnh được chạy trong quá trình kiểm thử với bộ các ca kiểm thử đã xây dựng.

Sau đó công cụ so sánh dữ liệu ghi được với các nhánh trong đồ thị luồng điều khiển, xác định được những nhánh nào trong hàm, trong phương thức chưa được phủ, hiển thị kết quả cảnh báo cho lập trình viên. Công cụ sẽ giúp quá trình kiểm tra độ phủ trong kiểm thử đơn vị thực hiện nhanh chóng, kết quả hiển thị trực quan hơn nhằm đánh giá các ca kiểm thử và hàm đang xét.3 Cấu trúc luận văn Phần còn lại của luận văn có cấu trúc như sau: Chƣơng 2: Trình bày kiến thức về kiểm thử phần mềm, chiến lược kiểm thử đơn vị với kỹ thuật cụ thể là kiểm thử luồng điều khiển trong kiểm thử hộp trắng. Chƣơng 3: Giới thiệu về công cụ kiểm chứng JavaPathfinder, các kiến trúc chung về JPF, thành phần mở rộng của JPF và cách kiểm tra độ phủ của bộ dữ liệu kiểm thử thông qua tính năng trong lớp CoverageAnalyzer. Chƣơng 4: Đề xuất phương pháp kiểm tra độ phủ của bộ dữ liệu kiểm thử dựa trên công cụ Java Pathfinder.

Nội dung của phương pháp là xây dựng công cụ đo độ phủ ở mức kiểm thử đơn vị sử dụng khả năng lưu vết chương trình của JPF. Chƣơng 5: Thực nghiệm và đánh giá kết quả đạt được. Trong chương này chúng tôi nêu rõ cách cài đặt công cụ JPF, vận dụng tính năng của JPF và cài đặt thêm mã nguồn để xây dưng công cụ kiểm tra độ phủ. Bên cạnh đó chúng tôi sử dụng công cụ đã xây dụng để kiểm tra độ phủ của bộ test thông qua các ví dụ từ đó rút ra nhận xét đánh giá về mã nguồn cũng như các ca kiểm thử đã viết.

3 TIEU LUAN MOI download : skknchat@gmail.com CHƢƠNG 2- CƠ SỞ LÝ THUYẾT VỀ KIỂM THỬ 2.1 Khái niệm kiểm thử phần mềm Kiểm thử phần mềm là quá trình thực thi hệ thống hoặc chương trình để kiểm tra xem hệ thống có đúng với đặc tả, thiết kế hay không. Kiểm thử phần mềm đồng nghĩa với việc tìm ra những lỗi tiềm ẩn chưa được phát hiện, một cách sớm nhất và đảm bảo rằng những lỗi đó đã được sửa, chứ không làm công việc chuẩn đoán nguyên nhân gây ra lỗi hay sửa lỗi đã phát hiện được[4]. Mục đích của kiểm thử phần mềm là thiết kế một hoặc chuỗi các ca kiểm thử có khả năng phát hiện được lỗi cao. Để thu được kết quả tốt, hoạt động kiểm thử cần được chuẩn bị tốt về kế hoạch, thiết kế và dữ liệu cho mỗi ca kiểm thử.

Đây chính là đầu vào cho việc kiểm thử, còn đầu ra chính là tài liệu báo cáo kiểm thử, nêu ra được các thông tin về mục đích của kiểm thử, dữ liệu đầu vào, dữ liệu đầu ra mong đợi, dữ liệu đầu vào thực tế… 2. Quy trình kiểm thử phần mềm Quy trình kiểm thử phần mềm bao gồm các bước như lập kế hoạch kiểm thử, thiết kê các trường hợp kiểm thử, bố trí nhân lực kiểm thử, đo lường, đánh giá sản phẩm để xác nhận sản phẩm có thể được đưa ra sử dụng hay chưa. Trong đó:  Giai đoạn lập kế hoạch kiểm thử [2,3] bao gồm các bước như xác định hoạt động cần thực hiện, phương pháp thực hiện, mục đích kiểm thử dựa vào đặc tả yêu cầu, đặc tả chức năng…, phạm vi kiểm thử, phương pháp kiểm thử, nguồn tài nguyên cần thiết, thời gian biểu cho hoạt động kiểm thử, tài liệu tham khảo.  Giai đoạn thiết kế các ca kiểm thử là giai đoạn quan trọng nhất, bao gồm các bước xác định dữ liệu đầu vào và đầu ra cho hoạt động kiểm thử cùng các câu lệnh cần thực hiện.

Trong suốt quá trình thiết kế ca kiểm thử, yêu cầu hệ thống phải được nghiên cứu một cách thận trọng, các tính năng của hệ thống phải được xác định một cách rõ ràng và các hành vi của ca kiểm thử cũng cần được định nghĩa chi tiết.  Bố trí nhân lực kiểm thử: việc kiểm thử cần được tiến hành một cách độc lập giữa các nhóm kiểm thử sau đó thu thập kết quả của từng nhóm, so sánh với nhau và đưa ra kết luận cuối cùng. Việc kiểm thử thường được tiến hành ở nhiều cấp độ khác nhau như kiểm thử đơn vị, kiểm thử tích hợp hay kiểm thử hệ thống…, xuyên suốt trong vòng đời phát triển của phần mềm. Ở mỗi cấp độ kiểm thử nên có từng nhóm riêng biệt ví dụ ở cấp độ kiểm thử đơn vị thì chính 4 TIEU LUAN MOI download : skknchat@gmail.

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