CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1. Tổng quan về kỹ nghệ phần mềm Kỹ nghệ phần mềm {software engineering) là sự áp dụng một cách tiếp cận có hệ thống, có kỷ luật, và định lượng được cho việc phát triển, sử dụng và bảo trì phần mềm. Ngành học kỹ nghệ phần mềm bao trùm kiến thức, các công cụ, và các phương pháp cho việc định nghĩa yêu cầu phần mềm, và thực hiện các tác vụ thiết kế, xây dựng, kiểm thử (software testing), và bảo trì phần mềm. Trích dẫn một câu nói của Edsger Dijkstra về công nghệ phần mềm: Khi máy tính chưa xuất hiện, thì việc ĩập trình chưa có khó khăn gì cả.Khỉ mới xuất hiện một vài chiếc máy tính chức năng kém thì việc ĩập trình bắt đầu gặp một vài khó khăn nho nhỏ.GỈỜ đây khỉ chúng ta có những chiếc máy tính khổng lồ thì những khó khăn ẩy trở nên vô cùng ỉớn.Như vậy ngành công nghiệp điện tử không giải quyết khó khăn nào cả mà họ chi tạo thêm ra những khó khăn mớỉ.Khó khăn mà họ tạo nên chính là việc sử dụng sản phẩm của họ.
Khái niệm cơ bản về kiềm thử Kiểm thử phần mềm (software testing) là một trong những yếu tố góp phần bảo đảm chất lượng phần mềm (SQA), là khâu điển hình kiểm soát đặc tả, thiết lập, lập mã. Theo Glen Myers: “Kiểm thử phẩn mềm là quá trình vận hành chương trình để tìm ra lỗi”. Kiểm thử phần mềm được đặt ra với những lý do 4 Muốn nhận diện phần mềm như một phần tử của hệ thống hoạt động. Hạn chế chi phí cho các thất bại do lỗi gây ra sau này (hiệu quả) Có kế hoạch tốt nâng cao chất lượng suốt quá trình phất triển (giải pháp).
Kiểm thử giữ vai trồ lớn trong quá trình phát triển phần mềm. Xét theo tiêu chí về chi phí thì kiểm thử chiếm: 40% công sức phát triển; > 30% tổng thời gian phát triển; Với các phần mềm có ảnh hưởng tới sinh mạng, chi phí có thể gấp từ 3 đến 5 lần tổng các chi phí khác cộng lại. Như vây, kiểm thử tốt sẽ: Giảm chi phí phát triển; Tăng độ tin cậy của sản phẩm phần mềm. Vấn đề đặt ra là cần vận hành phần mềm như thế nào để: Hiệu suất tìm ra lỗi là cao nhất? Chi phí (thời gian, công sức) ít nhất? Công việc trước mắt của kiểm thử phần mềm là tạo ra các ca kiểm thử để tìm ra lỗi của phần mềm.
Mục đích cuối cùng của kiểm thử phần mềm nhằm có một chương trình tốt, chi phí ít. Glen Myers phát biểu một số quy tắc giống như mục đích kiểm thử: ©Kiểm thử là một tiến trình thực hiện một chương trình với ý định 5 tìm ra lỗi. ©Một ca kiểm thử là một trường hợp kiểm thử có xác suất cao để tìm ra lỗi. ®Việc kiểm thử thành công là việc kiểm thử làm lộ ra một lỗi còn chưa được phát hiện.
Các mục đích trên dẫn đến một sự thay đổi lớn trong quan điểm.Chúng đi ngược lại quan điểm thông thường là một phép kiểm thử thành công là kiểm thử không tìm ra lỗi nào.Mục đích của chúng ta là thiết kế các ca kiểm thử để làm lộ ra một cách có hệ thống những lớp lỗi khác nhau và làm như vậy với một số lượng thời gian và công sức ít nhất. Nếu kiểm thử được tiến hành thành công, thì nó sẽ làm lộ ra những lỗi trong phần mềm. Việc kiểm thử phần mềm làm việc theo đặc tả nên các yêu cầu hiệu năng dường như là được đáp ứng. Bên cạnh đó, dữ liệu thu thập được khi việc kiểm thử tiến hành đưa ra một chỉ dẫn tốt về độ tin cậy phần mềm và một chỉ dẫn nào đó về phẩm chất phần mềm với tư cách toàn cục.
Có một điều mà kiểm thử không thể làm được: Kiểm thử không thể chứng minh được việc không có khiếm khuyết, nó chỉ có thể chứng minh được khiếm khuyết phần mềm hiện hữu. Khi kiểm thử, người ta đưa ra những khái niệm về ca kiểm thử “tốt” và “thắng lợi”: Ca kiểm thử tốt là ca kiểm thử có xác suất cao tìm ra 1 lỗi. Ca kiểm thử thẳng lợi là ca kiểm thử làm lộ ra ít nhất một lỗi. Vấn đề đặt ra ở chỗ nếu không tìm được lỗi nào thì có thể kết luận 6 phần mềm hoàn hảo?Câu trả lời chung là chưa hẳn như vậy.
Kiểm thử có nhiều lợi ích, trong đó phải kể đến các lợi ích quan trọng: Ca kiểm thử thắng lợi làm lộ ra khiếm khuyết Kiểm thử mang lại các lợi ích phụ là thuyết minh: + Chức năng tương ứng với đặc tả, + Thực thi phù hợp yêu cầu và đặc tả, + Cung cấp các chỉ số tin cậy và chất lượng. Tuy kiểm thử có nhiều lợi ích như trên nhưng chưa thể khẳng định phần mềm không cồn khiếm khuyết. Chiến lược kiểm thử 1. Khái niệm chiến lược kiểm thử 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.
Chiến lược kiểm thử được đặt ra với mục tiêu nhằm phác thảo một 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 phải đạt những yếu cầu sau: Tích hợp được các khâu như lập kế hoạch, thiết kế ca kiểm thử, 7 tiến hành kiểm thử, thu thập và đánh giá các thong tin kết quả. Đủ mềm dẻo để cổ vũ óc sáng tạo, đáp ứng được nhu 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 nhau. Kiểm thử là một tập hợp những hoạt động mà có thể được lập kế hoạch trước và tiến hành một cách có hệ thống.
Một tập các bước mà trong đó chúng ta có thể vận dụng những kỹ thuật thiết kế ca kiểm thử và phương pháp kiểm thử có những đặc trưng mang tính “khuôn mẫu Bắt đầu ở mức mô-đun và tiếp tục cho đến khi tích hợp ở mức hệ thống trọn vẹn. Các kỹ thuật kiểm thử khác nhau là thích hợp cho những thời điểm khác nhau. Được cả người phát triển và nhóm kiểm thử độc lập cùng tiến hành. Kiểm thử đi trước gỡ lỗi, song việc gỡ lỗi phải thích ứng với từng chiến lược kiểm thử.
Chiến lược cần thích ứng với từng mức kiểm thử và phải đưa ra hướng dẫn cho người thực hành và một tập các cột mốc cho người quản lý. Có hai mức kiểm thử: Kiểm thử mức thấp: thẩm định từng đoạn mã nguồn xem có tương ứng và thực thi đúng đắn hay không? Kiểm thử mức cao: thẩm định và xác minh các chức năng hệ 8 thống chủ yếu có đúng đặc tả và đáp ứng yêu cầu của khách hàng hay không? Mỗi chiến lược đáp ứng được yêu cầu cần quan tâm: Có các hướng dẫn cho người thực hiện tiến hành kiểm thử. Có các cột mốc cho các nhà quản lý kiểm soát hoạt động bảo đảm chất lượng. Có thước đo để đo và nhận ra các vấn đề càng sớm càng tốt.
Khách hàng có thể nhận biết được quá trình kiểm thử. Việc kiểm thử cung cấp một thành lũy cuối cùng để có thể thẩm định về chất lượng và có thể phát hiện ra lỗi. Có một số quan điểm sai lầm: Người phát triển không nên tham gia kiểm thử. Cho phép người lạ kiểm thử một cách thô bạo.
- Người kiểm thử chỉ quan tâm khi kiểm thử bắt đầu. Nên xuất phát từ thực tiễn mà phân công trách nhiệm thử: - Người phát triển chịu trách nhiệm kiểm thử đơn vị do mình phát triển để bảo đảm thực hiện theo đúng thiết kế, có thể tham gia kiểm thử tích hợp; không khoán trắng chương trình cho người kiểm thử mà phải cùng làm việc với người kiểm thử xuyên suốt dự án. Nhóm kiểm thử độc lập bắt đầu làm việc khi các khoản mục cấu trúc phần mềm đã đầy đủ, giúp gỡ bỏ những thành kiến: “người 9 xây dựng không thể kiểm thử tốt sản phẩm”, gỡ bỏ mâu thuẫn giữa những người tham gia; đánh giá công sức người phát triển bỏ ra tìm lỗi; tạo ra báo cáo đầy đủ cho tổ chức bảo đảm chất lượng phần mềm. Mô hình chiến lược tồng thể về mặt kỹ nghệ, việc kiểm thử gồm một số bước được thực hiện tuần tự.
Ban đầu, việc kiểm thử tập trung vào từng mô-đun riêng biệt bảo đảm nó ban hành đúng đắn như một đơn vị. Do đó mới có tên kiểm thử đơn vị. Kiểm thử đơn vị dùng rất nhiều các kỹ thuật kiểm thử hộp trắng, kiểm soát các đường đặc biệt trong cấu trúc điều khiển của một lớp mô- đun nhằm phát hiện tối đa các lỗi. Mặt khác, các mô-đun phải được lắp ghép hay tích hợp lại để tạo nên phần mềm hoàn chỉnh.
Việc kiểm thử tích hợp có liên quan đến thẩm định và xây dựng chương trình.Các kỹ thuật thiết kế kiểm thử hộp đen được dùng trong hầu hết quá trình tích hợp, mặc dù các kiểm thử hộp trắng cũng có thể được dùng để bao quát đa số các đường điều khiển.Sau khi phần mềm đã được dùng tích hợp (được xây dựng), một tập hợp các phép kiểm thử sẽ được tiến hành.Các tiêu chuẩn hợp lệ (được thiết lập trong phân tích yêu cầu) cũng phải được kiểm thử.Việc kiểm thử hợp lệ được tiến hành nhằm bảo đảm phần mềm đáp ứng đầy đủ các yêu cầu chức năng.Các kỹ thuật kiểm thử hộp đen được dùng chủ yếu trong kiểm thử hợp lệ. Kiểm thử hệ thống nằm trong khung cảnh rộng hơn của kỹ nghệ hệ thống máy tính.Khi làm hợp lệ, phần mềm phải được tổ hợp với các phần tử hệ thống khác (như phần cứng, con người, CSDL).VÌ vậy, kiểm thử hệ thống là rất quan trọng. 10 Cuối cùng, kiểm thử chẩp nhận sẽ thẩm định lại rằng tất cả các thành phần có phối khớp với nhau không, cũng như chức năng hay độ hoàn thiện của hệ thống có đạt được không. Xác minh + thẩm định Thẩm định Hình 1.Mô hình chiến lược kiểm thử tổng thể 1.
Một số chiến lược kiểm thử khác Ngoài chiến lược kiểm thử tổng thể, người ta còn tiến hành một loạt các chiến lược kiểm thử bổ trợ khác như: Kiểm thử hệ thời gian thực Kiểm thử Alpha và Beta Kiểm thử so sánh. Chiến lược kiểm thử hệ thời gian thực Hệ thời gian thực là hệ thống đáp ứng đúng, chính xác các sự kiện của môi trường. 11 Kiểm thử hệ thống thời gian thực là rất khó.