CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM VÀ KIỂM THỬ HỘP TRẮNG 1. Kiểm thử phần mềm 1. Quan niệm về kiểm thử phần mềm Kiểm thử phần mềm (Software Testing) là một yếu tố quan trọng trong vấn đề xác minh và thẩm định. Việc kiểm thử cung cấp một thành luỹ cuối cùng để có thể thẩm định về mặt chất lượng, chứng thực hơn, phát hiện ra lỗi [7].
Theo Glen Myers, 1979, kiểm thử phần mềm là quá trình vận hành chương trình để tìm ra lỗi. Một ca kiểm thử tốt là ca kiểm thử có xác suất cao tìm ra một lỗi chưa được phát hiện. Một ca kiểm thử thắng lợi là ca kiểm thử làm lộ ra được ít nhất một lỗi còn chưa phát hiện. Với cách nhìn này, mục tiêu của chúng ta là thiết kế các ca kiểm thử để có thể phát hiện một cách hệ thống các loại lỗi khác nhau với chi phí thời gian và công sức ít nhất có thể.
Phát hiện lỗi là công việc của kiểm thử. Nhưng kiểm thử phần mềm không phải là gỡ lỗi. Kiểm thử phần mềm là một trong những yếu tố góp phần bảo đảm chất lượng phần mềm, là khâu điển hình kiểm soát đặc tả, thiết kế, lập mã. 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 ra lỗi, đảm bảo sản phẩm phần mềm đáp ứng chính xác, đầy đủ và đúng theo yêu cầu của khách hàng.
Kiểm thử phần mềm cũng cung cấp mục tiêu, cái nhìn độc lập về phần mềm, điều này cho phép việc đánh giá và hiểu rõ các rủi ro khi thực thi phần mềm. Kiểm thử phần mềm tạo điều kiện tận dụng tối đa tư duy đánh giá và sáng tạo để có thể phát hiện ra những điểm mà người khác chưa nhìn thấy. Chiến lược kiểm thử phần mềm Chiến lược kiểm thử là sự tích hợp các kỹ thuật thiết kế “ca kiểm thử” tạo thành một dãy các bước nhằm hướng dẫn quá trình kiểm thử phần mềm thành công [9]. LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4 Ca kiểm thử (test case) là một tình huống kiểm thử tương ứng với một mạch hoạt động của chương trình.
Nó bao gồm một tập các giá trị đầu vào và một danh sách các kết quả đầu ra mong muốn và thực tế. Chiến lược kiểm thử được đặt ra với các mục tiêu nhằm phác thảo lộ trình để: - Nhà phát triển tổ chức việc bảo đảm chất lượng bằng kiểm thử; - Khách hàng hiểu được công sức, thời gian và nguồn lực cần cho kiểm thử Chiến lược kiểm thử cần đạt các yêu cầu sau: - Tích hợp các khâu như lập kế hoạch, thiết kế ca kiểm thử, tiến hành kiểm thử, thu thập và đánh giá các thông tin kết quả; - Đủ mềm dẻo để cổ vũ óc sáng tạo, đáp ứng được yêu cầu khách hàng; - Thích ứng với mức kiểm thử cụ thể; - Đáp ứng các đối tượng quan tâm khác; 1. Các mức kiểm thử [9] Trong tiến trình kiểm thử, người ta chia ra thành nhiều mức kiểm thử. Về phương diện thực hành người ta thường chia thành 4 mức cơ bản: Mức 1.
Kiểm thử đơn vị (Unit testing); Mức 2. Kiểm thử tích hợp (Integration testing); Mức 3. Kiểm thử hệ thống (System testing), bao gồm: - Kiểm thử chức năng (functional test: system and interface) - Kiểm thử phục hồi (recovery test) - Kiểm thử chịu tải (extra: stress and load test) - Kiểm thử thi hành (performance test) - Kiểm thử an ninh (security test) Mức 4. Kiểm thử chấp nhận (acceptance testing)/thẩm định Có 2 tiến trình thực hiện kiểm thử: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 5 Tiến trình 1.
Tiến trình thực hiện kiểm thử tương ứng với tiến trình phát triển (theo từng mô hình). Tiến trình 2. Tiến trình kiểm thử thường theo mô hình chiến lược kiểm thử tổng thể: Kiểm thử Kiểm thử Kiểm thử Kiểm thử đơn vị tích hợp hệ thống thẩm định Môđun Môđun Cả phần cứng, Hệ thống đơn vị chức năng, phần mềm thực hệ con Hình 1. Mô hình chiến lược kiểm thử tổng thể 1.
Sơ lược về các phương pháp kiểm thử Bất kỳ sản phẩm kỹ nghệ nào đều có thể được kiểm thử theo một trong hai cách [1,2,5,6,15]: Cách 1. Kiểm thử chức năng/hộp đen: cho dữ liệu đầu vào đúng/sai, kiểm tra đầu ra đúng/sai, tức là kiểm thử xem từng chức năng có vận hành đúng không, không quan tâm đến cấu trúc bên trong của chức năng đó. Kiểm thử cấu trúc/hộp trắng: không những quan tâm đến mối quan hệ giữa đầu vào và đầu ra của chức năng đó mà còn quan tâm, đến cấu trúc bên trong, quan tâm chi tiết đến từng đầu vào, đầu ra của các thành phần cấu thành trong đó và cả sự ăn khớp giữa chúng nữa, tức là bảo đảm rằng sự vận hành bên trong thực hiện đúng theo đặc tả và tất cả các thành phần bên trong đều được quan tâm và được kiểm tra một cách chi tiết. Đối với phần mềm máy tính, kiểm thử hộp đen biểu thị việc kiểm thử được tiến hành tại giao diện phần mềm.
Mặc dù chúng được thiết kế để phát hiện ra lỗi, kiểm thử hộp đen được dùng để thể hiện rằng các chức năng phần mềm đã vận hành, cái vào được chấp nhận đúng, và cái ra được tạo ta đúng, tính toàn vẹn của thông tin ngoài (như tệp dữ liệu) là được duy trì. Phép kiểm LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 6 thử hộp đen xem xét một số khía cạnh của hệ thống ít để ý tới cấu trúc logic bên trong của phần mềm. Kiểm thử hộp trắng 1. Ý tưởng của kiểm thử hộp trắng Kiểm thử hộp trắng (white-box test) không những quan tâm đến mối quan hệ giữa đầu vào và đầu ra của chức năng đó mà còn quan tâm đến cấu trúc bên trong, quan tâm chi tiết đến từng đầu vào đầu ra của các thành phần cấu thành trong đó và cả sự ăn khớp giữa chúng nữa, tức là bảo đảm rằng sự vận hành bên trong thực hiện đúng theo đặc tả và tất cả các thành phần bên trong đều được quan tâm và được kiểm tra một cách chi tiết [9].
Kiểm thử hộp trắng được hướng tới việc xem xét kỹ về chi tiết thủ tục. Các đường logic đi qua phần mềm được kiểm thử bằng cách đưa ra các trường hợp kiểm thử, vốn thực hiện trên một tập xác định các điều kiện và /hoặc chu trình. “Trạng thái của chương trình” có thể được xem xét tại nhiều điểm khác nhau để xác định liệu trạng thái dự kiến hay khẳng định có tương ứng với trạng thái thực tại không [9]. Bản chất của khiếm khuyết phần mềm chính là lý do đầu tiên phải kiểm thử hộp trắng.
Hơn nữa, việc kiểm thử hộp đen, dù làm kỹ lưỡng đến đâu vẫn có thể sót nhiều loại lỗi. Theo Beizer: “Lỗi ẩn nấp trong các ngóc ngách và tập hợp tại biên giới”. Việc kiểm thử hộp trắng có nhiều khả năng phát hiện ra chúng hơn,. Kiểm thử hộp trắng (white box) là việc kiểm tra các đoạn mã chương trình xem nó có vận hành đúng như thiết kế hay không.
Kiểm thử hộp trắng dựa trên việc xem xét cấu trúc bên trong của chương trình theo cấu trúc điều khiển và sự hoạt động của chúng. Nó có nhiều tên gọi khác như glass testing, structure testing, open box testing, clear box testing [Beizer 1995]. Đối tượng của kiểm thử hộp trắng là các mã nguồn ở các mô-đun đơn vị [7,8]. LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 7 Kiểm thử hộp trắng sử dụng các chiến lược cụ thể và sử dụng mã nguồn của chương trình/đơn vị phần mềm cần kiểm thử nhằm kiểm tra xem chương trình/đơn vị phần mềm có thực hiện đúng so với thiết kế và đặc tả hay không.
Trong khi các phương pháp kiểm thử hộp đen chỉ cho phép phát hiện các lỗi/khiếm khuyết có thể quan sát được, kiểm thử hộp trắng cho phép phát hiện các lỗi/khiếm khuyết tiềm ẩn bên trong chương trình/đơn vị phần mềm, các lỗi này thường khó phát hiện bởi các phương pháp kiểm thử hộp đen. Kiểm thử hộp đen và kiểm thử hộp trắng không thể thay thế cho nhau mà chúng cần được sử dụng kết hợp với nhau trong một quy trình kiểm thử thống nhất nhằm đảm bảo chất lượng phần mềm. Tuy nhiên, để áp dụng các phương pháp kiểm thử hộp trắng, người kiểm thử không chỉ cần hiểu rõ giải thuật mà còn cần có các kỹ năng và kiến thức tốt về ngôn ngữ lập trình được dùng để phát triển phần mềm, nhằm hiểu rõ mã nguồn của chương trình/đơn vị phần mềm cần kiểm thử. Do vậy, việc áp dụng phương pháp kiểm thử hộp trắng thường tốn thời gian và công sức nhất là khi chương trình/đơn vị phần mềm có kích thước lớn.
Vì lý do này, phương pháp kiểm thử hộp trắng chủ yếu được sử dụng cho kiểm thử đơn vị. Mô tả một số cấu trúc theo lược đồ Trong các phương pháp kiểm tra tính đúng đắn của chương trình, lược đồ được dùng để: - Trừu tượng hóa cú pháp của mã lệnh; - Làm khuôn mẫu cơ bản cho các nguyên tắc kiểm tra theo trường hợp. - Kiểm tra tính đúng đắn trên toàn bộ lược đồ. LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 8 SEQUENCE UNTIL IF WHILE CASE Hình 1.
Một số cấu trúc lập trình 1. Một số hướng chính về kiểm thử hộp trắng 1. Kiểm thử theo câu lệnh (Statement Testing) Thiết kế quá trình kiểm thử sao cho mỗi câu lệnh của chương trình được thực hiện ít nhất một lần. Phương pháp kiểm thử này xuất phát từ ý tưởng [1]: - Trừ phi một câu lệnh được thực hiện, nếu không ta không thể biết được có lỗi xảy ra trong câu lệnh đó hay không.
- Việc kiểm thử với một giá trị đầu vào không đảm bảo là sẽ đúng cho mọi trường hợp. Ví dụ: Đoạn chương trình thực hiện tính: result = 0+1+.+|valuel|, nếu result <= maxint, báo lỗi trong trường hợp ngược lại. THEN value := - value; 5. IF result <= maxint LUAN VAN CHAT LUONG download : add luanvanchat@agmail.
Sơ đồ điều khiển chương trình LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 10 Start Yes Value:=Value Value<0 No i:=i+1 result:=result + i (i<value)and (result<=maxint Yes ) No Yes No result< =maxint output (result); output (“too large”); End. Đồ thị của chương trình Ví dụ: Với các bộ giá trị đầu vào (input): maxint = 10, value = -1 hay: maxint = 0, value = -1 sẽ kiểm tra được toàn bộ các câu lệnh trong đoạn chương trình trên. Để đánh giá phương pháp này ta xem qua ví dụ sau: A B Hình 1. Minh hoạ về độ phức tạp của câu lệnh LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 11 Với câu hỏi đầu tiên “Lược đồ nào phức tạp hơn”, ta có câu trả lời là B.