Mở đầu Chương này trình bày lý do và mục đích của đề tài, các đóng góp chính mà đề tài đem lại cũng như kết cấu của đề tài. LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 2 Chƣơng 2. Tổng quan về kiểm thử tự động Chương này trình bày khái niệm về kiểm thử tự động, vai trò và lợi ích khi ứng dụng kiểm thử tự động trong hoạt động kiểm thử phần mềm. Chương này cũng trình bày các bước để phát triển một công cụ kiểm thử tự động cũng như các vấn đề có thể gặp phải trong quá trình phát triển.
Mô tả bài toán và yêu cầu Chương này giới thiệu sơ lược với bạn đọc về hệ thống thông tin có tên là SEC. Lý do cần thiết phải xây dựng hệ thống kiểm thử tự động để kiểm thử cho hệ thống SEC. Ngoài ra, cũng sẽ phân tích, đặc tả để làm rõ các yêu cầu mà hệ thống kiểm thử tự động phải đáp ứng, làm cơ sở cho việc phân tích, thiết kế và phát triển ứng dụng về sau. Thiết kế chƣơng trình Dựa trên các đặc tả yêu cầu đã được làm rõ ở chương 3, trong chương này, chúng tôi sẽ trình bày từng bước phân tích, thiết kế và phát triển các chức năng của hệ thống.
Cài đặt và đánh giá Trong chương này, chúng tôi sẽ trình bày kết quả đạt được khi đưa hệ thống kiểm thử tự động ứng dụng vào hoạt động kiểm thử cho hệ thống SEC. Kết luận Trong chương này, chúng tôi sẽ tổng kết lại các kết quả và đóng góp mà việc thực hiện đề tài đem lại. Ngoài ra, chúng tôi cũng đề xuất các phương hướng nghiên cứu tiếp theo, nhằm giúp cho đề tài trở nên hoàn thiện hơn. LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 3 Chương 2 Tổng quan về kiểm thử tự động 2.
Khái niệm về kiểm thử tự động Kiểm thử tự động là một khái niệm liên quan đến các hoạt động và kỹ thuật tự động hóa trong tiến trình kiểm thử phần mềm. Kiểm thử tự động sử dụng các công cụ và giải pháp để nhằm đạt được các mục tiêu về tốc độ, chất lượng, hiệu quả và chi phí trong tiến trình kiểm thử [10]. Lợi ích Dưới đây là một số lợi ích của kiểm thử tự động [4]: Kiểm thử hồi qui cho một phiên bản mới của chương trình. Điều này là hiển nhiên, đặc biệt là trong điều kiện các chương trình thường xuyên bị thay đổi.
Giả thiết rằng các test cases đã tồn tại và đã được chạy tự động ở một phiên bản trước đó, thì ở các phiên bản tiếp theo, chỉ cần lựa chọn các test cases phù hợp và một chút chi phí cho việc hướng dẫn sử dụng công cụ là có thể thực hiện được việc kiểm thử. Chạy được nhiều ca kiểm thử và thường xuyên hơn. Với việc kiểm thử tự động, sẽ có nhiều ca kiểm thử được thực hiện trong khoảng thời gian ít hơn, và do đó các ca kiểm thử cũng được thực hiện thường xuyên hơn. Điều này sẽ làm tăng cường tính tin cậy của hệ thống [8].
Cho phép hoàn thành kiểm thử đối với các test cases mà rất khó hoặc không thể khi thực hiện bằng tay. Ví dụ: việc cố gắng hoàn thành đúng như thực tế một ca kiểm thử của hệ thống với 200 người dùng cùng trực tuyến (online) có thể không thực hiện được nếu thực hiện kiểm thử bằng tay. Nhưng 200 người dùng này có thể được giả lập bằng các công cụ kiểm thử tự động. Khi kiểm thử bằng tay, kết quả mong muốn thường là những nội dung rõ ràng mà người kiểm thử có thể quan sát.
Tuy nhiên, có những thuộc tính rất khó để có thể xác nhận theo cách bình thường. Ví dụ đối tượng GUI có thể gây ra một sự kiện nào đó, mà ảnh hưởng của nó không được output ngay lập tức. Nhưng nếu sử dụng công cụ kiểm thử thì ta có thể kiểm tra được sự kiện như vậy [11]. Sử dụng tài nguyên (resources) tốt hơn.
Tự động hóa giúp nâng cao độ chính sác và giải tỏa tinh thần cho người thực hiện kiểm thử. Giúp kiểm thử viên có có nhiều thời gian hơn cho việc lập kế hoạch, thiết kế test case… LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4 Mặt khác, với kiểm thử tự động thì máy kiểm thử có thể được sử dụng để chạy kiểm thử vào những lúc rảnh rỗi. Đảm bảo tính nhất quán của kiểm thử. Kiểm thử tự động sẽ được thực hiện lặp đi lặp lại một cách chính xác ở tất cả các lần kiểm thử (ít nhất là dữ liệu đầu vào sẽ không bị thay đổi, kết quả đầu ra thì có thể khác nhau do thời gian thực hiện).
Điều này tạo ra sự nhất quán giữa các lần kiểm thử, điều rất khó đạt được nếu thực hiện bằng tay. Các test cases giống nhau có thể được thực hiện trên các phần cứng, hệ điều hành hoặc cơ sở dữ liệu khác nhau. Điều này tạo nên sự nhất quán về chất lượng trên các nền tảng khác nhau của sản phẩm. Điều rất khó đạt được nếu thực hiện kiểm thử bằng tay (kiểm thử thủ công).
Việc áp dụng chế độ kiểm thử tốt có thể đảm bảo các tiêu chuẩn phù hợp cho kiểm thử và phát triển. Ví dụ, công cụ kiểm thử có thể được sử dụng để kiểm tra cùng một loại tính năng đã được thực hiện theo cùng một cách ở tất cả các ứng dụng hoặc chương trình khác nhau. Tái sử dụng các ca kiểm thử. Có thể thực hiện kiểm thử nhiều lần mà không mất chi phí để quyết định cái gì sẽ được kiểm thử, thiết kế ca kiểm thử, xây dựng các ca kiểm thử hay đảm bảo tính chính xác của kiểm thử.
Rút ngắn thời gian phát triển sản phẩm. Khi mà các test cases được kiểm thử tự động, nó có thể được thực hiện lặp đi lặp lại một cách nhanh chóng, vì vậy sẽ rút ngắn được thời gian kiểm thử. Và qua đó cũng có thể rút ngắn được thời gian phát triển sản phẩm và đưa sản phẩm ra thị trường (Điều này còn tùy thuộc vào việc khắc phục lỗi, tính khả dụng của chương trình) [9]. Tăng tính tin cậy.
Khi một số lượng lớn các ca kiểm thử tự động được thực hiện thành công, nó sẽ tăng cường mức độ đảm bảo rằng hệ thống sẽ được phát hành mà không có vấn đề gì. Tóm lại, với kiểm thử tự động, chúng ta có thể thực hiện kiểm thử với chi phí ít hơn, và chất lượng, năng suất cao hơn. Sự khác nhau giữa kiểm thử và kiểm thử tự động 2. Kiểm thử Kiểm thử là một kỹ năng.
Đối với bất kỳ một hệ thống nào, đều có một số trường hợp mà nếu thực hiện kiểm thử sẽ phát hiện được hầu hết các lỗi của phần mềm. Vì vậy, việc lựa chọn test case nào để chạy là một vấn đề quan trọng. Thực tiễn cũng như kinh nghiệm đã chỉ ra rằng việc lựa chọn ngẫu nhiên các test cases là cách tiếp cận LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 5 không hiệu quả. Nên tiếp cận một cách thận trọng, có hệ thống để có thể tạo ra được các test cases tốt.
Vậy, thế nào là một test case tốt. Có bốn thuộc tính miêu tả chất lượng của một test case: - Khả năng phát hiện lỗi. - Tính chuẩn (exemplary): một test case chuẩn nên thực hiện kiểm thử nhiều hơn một tiêu chí, như vậy sẽ làm giảm thiểu tổng số test cases cần thiết. - Chi phí thực hiện: chi phí bỏ ra để thực hiện test case, điều tra, phân tích nguyên nhân lỗi.
- Chi phí cập nhật test case: chi phí bỏ ra cho việc cập nhật nội dung test case mỗi khi phần mềm thay đổi. Bốn thuộc tính này cần phải cân bằng với nhau. Vì nếu một test case thực hiện kiểm thử quá nhiều tiêu chí, cũng đồng nghĩa với việc sẽ mất nhiều chi phí cho việc thực hiện, điều tra, phân tích hay cập nhật test case mỗi khi phần mềm thay đổi [1]. Vì vậy, các kỹ năng kiểm thử không chỉ đơn thuần là làm sao để thiết kế các test cases có khả năng phát hiện được lỗi cao nhất mà còn là làm sao để thiết kế các test cases với chi phí thấp nhất [3].
Kiểm thử tự động Kiểm thử tự động cũng là một kỹ năng nhưng nó khác với kỹ năng kiểm thử. Việc kiểm thử tự động thì tốn kém hơn kiểm thử bằng tay rất nhiều nếu chỉ thực hiện một lần. Để đạt được lợi ích, kiểm thử tự động cần phải được lựa chọn và thực thi một cách cẩn thận. Cho dù kiểm thử là tự động hoặc bằng tay thì đều ảnh hưởng đến chất lượng của quá trình kiểm thử.
Khi đề cập đến kiểm thử tự động, vấn đề quan tâm không phải là thực hiện nó như thế nào mà là quá trình tự động hóa kiểm thử sẽ ảnh hưởng như thế nào tới chi phí và khả năng nâng cấp về sau. Mỗi lần thực hiện tự động hóa sẽ làm phát sinh rất nhiều chi phí, chi phí cho việc chạy nó chỉ là một phần nhỏ đối với chi phí để thực hiện bằng tay. Tuy nhiên, kiểm thử tự động thường mất nhiều chi phí cho việc tạo và bảo trì. Cách tiếp cận tốt để làm giảm chi phí cho việc tự động hóa kiểm thử là thực thi nó trong một thời gian dài Hình 2.1 thể hiện 4 thuộc tính chất lượng của một test case trong sơ đồ Keviat.
Trường hợp thực hiện kiểm thử bằng tay được thể hiện bằng đường đậm. Khi được tiến hành lần đầu, kiểm thử tự động sẽ kém hiệu quả (mất nhiều chi phí để tự động), LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 6 nhưng sau một số lần thực hiện thì nó sẽ hiệu quả hơn việc thực hiện kiểm thử bằng tay. Để đạt được tính hiệu quả và đưa ra bộ test case (test suite) phù hợp, cần phải bắt đầu với các thành phần thô của một bộ test case tốt, sử dụng các kỹ năng kiểm thử để tạo nên bộ test case thực hiện những thứ quan trọng nhất. Sau đó phải ứng dụng các kỹ thuật tự động để tự động hóa theo cách mà chúng có thể được tạo và bảo trì với chi phí hợp lý.
Hiệu quả(effective) Chi phí Chí phí cập nhật (economic) (evolvable) Tính chuẩn(exemplary) Kiểm thử bằng tay Lần đầu kiểm thử tự động Kiểm thử tự động (sau nhiều lần) Hình 2. Bốn thuộc tính của test case Người phát triển và bảo trì công cụ kiểm thử tự động gọi là “Test automator”. Một “Test automator” có thể/không phải là Kiểm thử viên, có thể/không phải làm một thành viên của nhóm kiểm thử.