Chương 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1.1 Tổng quan về kiểm thử phần mềm 1.1 Khái niệm cơ bản về kiểm thử phần mềm Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần dưới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá một khía cạnh nào đó của hệ thống hay thành phần đó. Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm lỗi.(Theo Glen Myers – “ The Art of Software Testing” – Nghệ thuật kiểm thử phần mềm) Kiểm thử sẽ hiển thị những lỗi hiện có, nhưng không hiển thị những lỗi chưa thấy. Kiểm thử phần mềm là quá trình giám định dựa trên chất lượng sản phẩm hoặc dịch vụ sau khi tiến hành kiểm tra. Kiểm thử độc lập cho phép doanh nghiệp đánh giá mức độ rủi ro khi phát triển phần mềm.
Kỹ thuật kiểm thử bao gồm quá trình kiểm thử phần mềm và tìm lỗi. Kiểm thử phần mềm bao gồm quá trình kiểm tra và kiểm định để đảm bảo phần mềm đáp ứng nhu cầu người dùng, phần mềm chạy đúng chức năng. Có thể nói kiểm thử phần mềm có nhiều cách định nghĩa khác nhau. Tuy nhiên, tất cả đều thể hiện nội dung cơ bản chính là phát hiện lỗi và đánh giá chất lượng phần mềm, đồng thời nâng cao khả năng kiểm soát và hạn chế các lỗi xảy ra khi phát triển phần mềm ngay từ ban đầu, chứ không đơn thuần chỉ là việc tìm ra những lỗi sẵn có khi nhóm phát triển đã đưa ra những phiên bản cụ thể của phần mềm.
Và như GlenMyers đã nói thì kiểm thử mà không phát hiện được lỗi coi là không thành công. Kiểm thử phần mềm có thể được thực hiện ở bất kỳ giai đoạn nào trong phát triển phần mềm, phổ biến nhất là kiểm thử sau khi yêu cầu người dùng hoàn 2 thiện hoặc phần mềm vừa xong giai đoạn phát triển. Tuy nhiên, trong quy trình phát triển phần mềm theo kiểu Agile thì kiểm thử phần mềm là quy trình đi cùng với việc phát triển phần mềm.2 Một số thuật ngữ trong kiểm thử phần mềm Kiểm chứng và thẩm định: Kiểm chứng (verification) và thẩm định (validation) hay được dùng lẫn lộn, nhưng thực ra chúng có ý nghĩa khác nhau. Kiểm chứng là quá trình để đảm bảo rằng một sản phẩm phần mềm thỏa mãn đặc tả của nó.
Còn thẩm định là quá trình để đảm bảo rằng sản phẩm đáp ứng được yêu cầu của người dùng (khách hàng). Trong thực tế, chúng ta cần thực hiện kiểm chứng trước khi thực hiện việc thẩm định sản phẩm phần mềm. Vì vậy, chúng ta có thuật ngữ V&V (Verification &Validation). Lý do của việc này là chúng ta cần đảm bảo sản phẩm đúng với đặc tả trước.
Nếu thực hiện việc thẩm định trước, một khi phát hiện ra lỗi, chúng ta không thể xác định được lỗi này do đặc tả sai hay do lập trình sai so với đặc tả. - Thẩm tra (Verification): Thẩm tra là tiến trình nhằm xác định đầu ra của một công đoạn công viện phát triển phần mềm phù hợp với công đoạn trước đó. - Xác nhận( Validation): Xác nhận là tiền trình nhằm chỉ ra toàn hệ thống đã phát triển xong phù hợp với tài liệu mô tả yêu cầu. So sánh sự khác nhau giữa Thẩm tra và Xác nhận - Thẩm tra: Thẩm tra quan tâm đến việc ngăn chặn lỗi giữa các công đoạn - Xác nhận: Xác nhận quan tâm đến sản phẩm cuối cùng không còn lỗi Một sai sót (error): - Là một sự nhầm lẫn hay một sự hiểu sai trong quá trình phát triển phần mềm của người phát triển Một lỗi (fault, defect): - Xuất hiện trong phần mềm như là kết quả của một sai sót được phân loại như sau: 3 o Sai sót đưa ra thừa – chúng ta đưa một vài thứ không chính xác mô tả yêu cầu phần mềm.
o Sai sót do bỏ sót – Người thiết kế có thể gây sau sót do bỏ sót, kết quả là thiếu một số phần cần thiết có trong mô tả yêu cầu phần mềm. Hỏng hóc (failure): - Là kết quả của một lỗi xuất hiện làm cho chương trình không hoạt động được hay hoạt động nhưng cho kết quả không như mong đợi. Dữ liệu thử (test data): - Dữ liệu vào cần cung cấp cho phần mềm trong khi thực thi Kịch bản kiểm thử (test scenario): - Các bước thực hiện khi khi kiểm thử Phán xét kiểm thử (test oracle): đánh giá kết quả của kiểm thử bẳng 2 cách • Tự động: chương trình • Thủ công: con người Kiểm thử viên (tester): người thực hiện kiểm thử Trường hợp kiểm thử (test case): - Dữ liệu thử, điều kiện thực thi để có kết quả mong đợi. - Trường hợp kiểm thử được liên kết tương ứng với hoạt động của chương trình.
- Một trường hợp bao gồm một tập hợp các giá trị đầu vào và một danh sách các kết quả đầu ra mong muốn 1.3 Vòng đời kiểm thử - Testing life cycle Kiểm điểm yêu cầu: Người kiểm thử kiểm điểm yêu cầu phần mềm để dùng chúng và chắc rằng chúng là kiểm thử được. (Nếu chúng không kiểm thử được thì yêu cầu là mơ hồ và cần được xem lại); đây là một hoạt động quan trọng trong nguyên lí kĩ nghệ phần mềm chủ trương người kiểm thử phải tham gia sớm trong dự án phần mềm và làm việc chặt chẽ với các kĩ sư yêu cầu để chắc rằng các yêu cầu phần mềm là tốt và đầy đủ trước khi dự án bắt đầu. 4 Lập kế hoạch kiểm thử: Người kiểm thử biết cái gì cần được kiểm thử, và lập kế hoạch các hoạt động kiểm thử của họ như: Chuẩn bị chiến lược kiểm thử, kế hoạch kiểm thử, lịch biểu kiểm thử và ước lượng thời gian kiểm thử. Bởi vì người kiểm thử tham gia sớm vào trong dự án, họ có thể làm việc chặt chẽ với kiến trúc sư phần mềm và người thiết kế phần mềm trong việc xác định mọi cấu phần của sản phẩm phần mềm, cả yêu cầu chức năng và phi chức năng.
Người kiểm thử cũng giúp nhận diện giao diện giữa phần cứng và phần mềm cũng như lập kế hoạch cách kiểm thử các yêu cầu này. Thiết kế kiểm thử: Người kiểm thử bắt đầu xây dựng các trường hợp kiểm thử, kịch đoạn kiểm thử và dữ liệu kiểm thử dựa trên yêu cầu/thiết kế của phần mềm. Họ cũng tạo ra việc dõi vết các yêu cầu để chắc việc kiểm thử là đầy đủ bao quát mọi chi tiết của yêu cầu phần mềm. Bằng việc hiểu thiết kế trong chi tiết, người kiểm thử có thể phát triển các trường hợp kiểm thử tốt hơn và dữ liệu kiểm thử cho dự án.
Thiết lập môi trường kiểm thử: Người kiểm thử thiết lập môi trường kiểm thử và chắc rằng nó là hệt như với môi trường người dung. Thực hiện kiểm thử: Người kiểm thử thực hiện các trường hợp kiểm thử của họ và kịch đoạn kiểm thử trong môi trường kiểm thử để xác định chất lượng của phần mềm. Phát sinh kết quả kiểm thử và báo cáo khiến khuyết. Người kiểm thử tiến hành kiểm thử chức năng, kiểm thử tích hợp, và kiểm thử hệ thống và giúp khách hàng tiến hành kiểm thử chấp nhận của người dùng.
Tiến trình kiểm thử thông thường bao gồm những bước sau: - Thiết kế các ca kiểm thử - Tạo dữ liệu kiểm thử: trong bước này chúng ra kiểm thử tất cả các dữ liệu vào là cần thiết và chọn tập các dữ liệu thử đại diện từ miền dữ liệu vào dựa trên các tiêu chuẩn chọn dữ liệu tử. - Thực thi chương trình trên dữ liệu thử: o Cung cấp dữ liệu thử o Thực thi 5 o Ghi nhận kết quả - Quan sát kết quả kiểm thử: bước này ta thực hiện trong hoặc sau khi kiểm thử và sau đó ta so sánh kết quả kiểm thử với kết quả mong đợi. Hình 1: Vòng đời kiểm thử phần mềm 1.4 Nguyên tắc kiểm thử phần mềm Trước khi bắt đầu bất cứ hoạt động kiểm thử nào một kỹ sư phần mềm cũng phải biết các nguyên tắc cơ bản sau: - Mọi hoạt động kiểm thử đều phải theo được yêu cầu của khách hàng. Do mục đích của kiểm thử là tìm ra lỗi nên phần lớn các lỗi ( từ quan điểm của khách hàng) sẽ làm cho chương trình không đáp ứng được yêu cầu của khách hàng.
- Kiểm thử phải được lập kế hoạch trước khi thật sự bắt đầu: lập kế hoạch kiểm thử có thể bắt đầu ngay khi hoàn thành xong các mô hình yêu cầu. Xác định chi tiết các trường hợp thử có thể bắt đầu khi các mô hình thiết kế được hoàn thiện. Do đó mọi kiểm thử có thể được lập kế hoạch và thiết kế trước khi xây dựng mã chương trình. 6 - Kiểm thử ban đầu nhỏ, sau đó quá trình lớn dần.
Kiểm thử đầu tiên được lập kế hoạch và thực hiện thường tập trung vào các module chương trình riêng lẻ. Trong tiến trình kiểm thử, kiểm thử chuyển sang chú trọng vào nỗ lực tìm ra các lỗi trong các module tích hợp và cuối cùng là toàn bộ hệ thống. - Không thể kiểm thử mọi khía cạnh: Có nhiều cách kiểm thử cho các chương trình thậm chí cả với chương trình có kích thước vừa phải. Vì lẽ đó, không thể thực hiện mọi cách trong kiểm thử.
- Để có hiệu quả cao nhất, quá trình kiểm thử phải có tham gia của bên thứ 3. Kỹ sư phần mềm tạo ra hệ thống không phải là người tốt nhất để thực hiện mọi kiểm thử cho phần mềm.5 Kế hoạch kiểm thử Để đảm bảo cho chất lượng của dự án trong thời gian phát triển thì việc review và test phải được thực hiện liên tục. Việc test không chỉ được thực hiện trong pha cài đặt mà ngay từ những pha đầu tiên chúng ta đã phải tiến hành Tất cả những thành viên trong nhóm phát triển đều phải có nhiệm vụ là test những phần của mình làm ra với những trường hợp họ tự đặt ra Kế hoạch cho tài liệu test Tài liệu test phải đảm tối thiểu các nội dung sau: - Người test - Những gì cần phải test - Thời gian test - Kết quả mong muốn - Input thử nghiệm - Kết quả thực sau khi test - Code Review Sau khi đã hoàn thành code cũng với việc test trong quá trình code. Thì phải thực hiện test cho toàn bộ phần code đã được viết tại mỗi bước lặp 7 Phát triển theo hướng test Trong pha cài đặt, những lập trình viên khi code thì phải gắn liền với việc viết testcase bằng công cụ Junit cho phần code của mình.
Có thể viết một phần test trước sau đó viết code và tiếp tục viết phần code còn lại cho việc test.