CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1. Lý thuyết về kiểm thử phần mềm 1. Kiểm thử phần mềm là gì? Kiểm thử phần mềm là quy trình được sử dụng để đánh giá, kiểm tra chất lượng phần mềm ở nhiều khía cạnh khác nhau dựa trên các yêu cầu của người sử dụng đối với sản phẩm phần mềm, nhằm đảm bảo phần mềm hoạt động tốt trong các môi trường, trường hợp khác nhau. Kiểm thử phần mềm là một cuộc kiểm tra được tiến hành để cung cấp cho các bên liên quan thông tin về chất lượng của sản phẩm hoặc dịch vụ được kiểm thử.
Kiểm thử có thể cung cấp cho doanh nghiệp một quan điểm, một cách nhìn độc lập về phần mềm để từ đó cho phép đánh giá và thấu hiểu được những rủi ro trong quá trình triển khai phần mềm. Trong trình hoặc ứngkỹdụng thuậtvới kiểm mụcthử đíchkhông đi tìmchỉ cácgiới hạn ởmềm lỗi phần việc (bao thựcgồm hiệncác mộtlỗichương và các thiếu sót) mà còn là một quá trình phê chuẩn và xác minh một chương trình máy tính / ứng dụng / sản phẩm nhằm: - Đáp ứng được mọi yêu cầu hướng dẫn khi thiết kế và phát triển phần m mềm. - Thực hiện công việc đúng như kỳ vọng. - Có thể triển khai được với những đặc tính tương tự.
- Và đáp ứng được mọi nhu cầu của các bên liên quan. Tùy thuộc vào từng phương pháp, việc kiểm thử có thể được thực hiện bất cứ lúc nào trong quá trình phát triển phần mềm. Theo truyền thống thì các nỗ lực kiểm thử được tiến hành sau khi các yêu cầu được xác định và việc lập trình được hoàn tất nhưng trong Agile (là một tập hợp các phương pháp phát triển phần mềm linh hoạt dựa trên việc lặp đi lặp lại và gia tăng giá trị) thì việc kiểm thử được tiến hành liên tục trong suốt quá trình xây dựng phần mềm. Như vậy, vậy, mỗi một phương pháp kiểm thử bị chi phối theo một quy trình phát triển phần mềm nhất định.
Các mục tiêu chính của kiểm thử phần mềm - Phát hiện càng nhiều lỗi càng tốt trong thời gian kiểm thử xác định trước - Chứng minh rằng sản phẩm phần mềm phù hợp với các đặc tả yêu cầu của nó. 4 - Xác thực chất lượng kiểm thử phần mềm đã dùng chi phí và nỗ lực tối thiểu - Tạo các testcase chất lượng cao, thực hiện kiểm thử hiệu quả và tạo ra các báo cáo vấn đề đúng và hữu dụng. Phân loại kiểm thử phần mềm Ta phân loại kiểm thử dựa vào yếu tố: Chiến lược kiểm thử, phương pháp kiểm thử và kỹ thuật kiểm thử. - Dựa vào chiến lược kiểm thử ta có thể phân chia kiểm thử thành 2 loại: kiểm thử thủ công và kiểm thử tự động - Theo phương pháp tiến hành kiểm thử ta chia kiểm thử thành 2 loại: + Kiểm thử tĩnh: Là loại kiểm tra trong đó code không được thực hiện.
Nó có thể được thực hiện bằng tay hoặc bằng một bộ công cụ. Loại kiểm tra này thực hiện kiểm tra code, tài liệu yêu cầu và tài liệu thiết kế và đưa ra nhận xét, lưu nhận xét vào tài liệu công việc. Khi phần mềm không thực thi và không làm gì, chúng ta thực hiện kiểm tra trạng thái an toàn để phân tích phần mềm trong môi trường không chạy. + Kiểm thử động: Được thực hiện khi code đang ở chế độ thực thi.
Thử nghiệm động được thực hiện trong môim ôi trường thực thi chạy chương trình ứng dụng. Khi code được thực thi, thì đầu vào được truyền một giá trị, kết quả hoặc đầu ra của việc thực hiện được so sánh với kết quả dự kiến ban đầu đã đưa ra. Với việc này chúng ta có thể quan sát được các hành vi chức năng của phần mềm, giám sát hệ thống bộ nhớ, thời gian phản hồi của CPU, hiệu suất của hệ thống.được thực hiện khi code đang ở chế độ thực thi. Thử nghiệm động được thực hiện trong môi trường thực thi chạy chương trình ứng dụng.
Khi code được thực thi, thì đầu vào được truyền một giá trị, kết quả hoặc đầu ra của việc thực hiện được so sánh với kết quả dự kiến ban đầu đã đưa ra. Với việc này chúng ta có thể quan sát được các hành vi chức năng của phần mềm, giám sát hệ thống bộ nhớ, thời gian phản hồi của CPU, hiệu suất của hệ thống. - Dựa vào kỹ thuật kiểm thử ta có thể phân chia kiểm thử thành 3 loại: + Kiểm thử hộp đen + Kiểm thử hộp trắng + Kiểm thử hộp xám.4 Các cấp độ kiểm thử phần mềm Kiểm thử phần mềm không đơn giản như nhiều người thường nghĩ, công việc này có nhiều mức độ khác nhau và có mối tương quan với các chặng phát triển trong dự án phát triển phần mềm. Trong một dự án kiểm thử phần mềm bao gồm 4 mức độ cơ bản: Kiểm thử đơn vị, kiểm thử tích hợp, kiểm thử hệ thống thống và kiểm thử chấp nhận.
- Kiểm thử đơn vị (Unit Testing): kiểm thử sự hiện thực chi tiết của từng đơn vị nhỏ (hàm, class, .) có hoạt động đúng không? - Kiểm thử module (Module Testing): kiểm thử các dịch vụ của module có phù hợp với đặc tả của module đó không? - Kiểm thử tích hợp (Integration Testing): kiểm thử xem từng phân hệ của phần mềm có đảm bảo với đặc tả thiết kế của phân hệ đó không? - Kiểm thử hệ thống (System Testing): Testing): kiểm thử các yêu cầu không chức năng của phần mềm như hiệu suất, bảo mật, làm việc trong môi trường căng thẳng,. - Kiểm thử độ chấp nhận của người dùng (AcceptanceTesting): kiểm tra xem người dùng có chấp thuận sử dụng phần mềm không? - Kiểm thử hồi quy: được làm mỗi khi có sự hiệu chỉnh, nâng cấp phần mềm với mục đích xem phần mềm mới có đảm bảo thực hiện đúng các chức năng trước khi hiệu chỉnh không? 6 1. Test case Mỗi testcase chứa các thông tin cần thiết để kiểm thử thành phần phần mềm theo 1 mục tiêu xác định. Testcase gồm bộ 3 thông tin {tập dữ liệu đầu vào, trạng thái của thành phần phầm mềm, tập kết quả kỳ vọng} - Tập dữ liệu đầu vào (Input): gồm các giá trị dữ liệu cần thiết để thành phần phầm mềm dùng và xử lý.
- Tập kết quả kỳ vọng: kết quả mong muốn sau khi thành phần phần mềm xử lý dữ liệu nhập. - Trạng thái thành phần phần mềm: được tạo ra bởi các giá trị prefix và postfix. Tập các testcase: tập hợp các testcase mà ta có ý định dùng để kiểm thử thành phần phần mềm để minh chứng rằng TPPM có đúng các hành vi mong muốn. Các phương pháp thiết kế test case - Kiểm thử hộp + Không cầnđen kiến(Black box thức về chitesting): tiết thiếttheo góchiện kế và nhìnthực sử dụng bên trong.
+ Kiểm thử dựa trên các yêu cầu và đặc tả sử dụng thành phần phần mềm. - Kiểm thử hộp trắng (White box testing): theo góc nhìn hiện thực + Cần kiến thức về chi tiết thiết kế và hiện thực bêntrong. + Kiểm thử dựa vào phủ các lệnh, phủ các nhánh, phủ các điều kiện con. Kiểu kiểm thử Kỹ thuật kiểm thử được dùng Unit testing Hộp trắng, hộp đen Integration testing Hộp đen, hộp trắng Functional testing Hộp đen System testing Hộp đen 7 Acceptance testing Hộp đen 1.
Các nguyên tắc cơ bản về kiểm thử Thông tin thiết yếu của mỗi testcase là kết quả hay dữ liệu xuất kỳ vọng. Nếu kết quả kỳ vọng của testcase không được định nghĩa rõ ràng, người ta sẽ giải thích kết quả sai (plausible) thành kết quả đúng bởi vì hiện tượng “the eyes seeing what it wants to see.” => 1 test case phải chứa 2 thành phần thiết yếu: - Đặc tả về điều kiện dữ liệu nhập. - Đặc tả chính xác về kết quả đúng của chương trình tương ứng với dữ liệu nhập. Việc kiểm thử đòi hỏi tính độc lập: lập trình viên nên tránh việc kiểm thử các TPPM do mình viết.
Các issues tâm lý: - Chương trình có thể chứa các lỗi do lập trình viên hiểu sai về đặc tả/phát biểu vấn đề. - Tổ chức lập trình không nên kiểm thử các chương trình của tổ chức mình viết. - Thanh tra 1 cách xuyên suốt các kết quả kiểm thử. Phải thiết kế đủ các test case cho cả 2 trường hợp: dữ liệu đầu vào hợp lệ và dữ liệu đầu vào không hợp lệ và chờ đợi.
Xem xét chương trình xem nó không thực hiện những điều mong muốn, xem nó có làm những điều không mong muốn? Tránh các testcase "throwaway" trừ phi chương trình thật sự là "throwaway". Không nên lập kế hoạch nỗ lực kiểm thử dựa trên giả định ngầm rằng phần mềm không có lỗi. Xác xuất xuất hiện nhiều lỗi hơn trong 1 section phần mềm tỉ lệ thuận với số lỗi đã phát hiện được trong section đó. Kiểm thử là 1 tác vụ rất thách thức đòi hỏi sự sáng tạo và trí tuệ.
Kiểm thử phần mềm nên bắt đầu từ các thành phần nhỏ đơn giản rồi đến các thành phần ngày càng lớn hơn. Kiểm thử theo kiểu vét cạn là không thể. Nên hoạch định qui trình kiểm thử trước khi bắt đầu thực hiện kiểm thử. Quy trình kiểm thử phần mềm Dẫu cho các biến thể tồn tại giữa các tổ chức lập trình thì vẫn có một quy trình điển hình để kiểm thử.
Mẫu dưới đây là phổ biến trong các tổ chức sử dụng 8 mô hình phát triển Waterfall (thác nước). Các hoạt động tương tự thường được tìm thấy trong các mô hình phát triển khác, nhưng có thể có hoặc không rõ ràng. Quy trình kiểm thử phần mềm: - Phân tích yêu cầu: Kiểm thử thường sẽ bắt đầu lấy các yêu cầu trong các giai đoạn của vòng đời phát triển phần mềm. Trong giai đoạn thiết kế, các Tester làm việc với các nhà phát triển để xác định những khía cạnh của một thiết kế được kiểm chứng và những thông số được kiểm tra.
- Lập kế hoạch kiểm thử: Chiến lược kiểm thử, kế hoạch kiểm thử, kiểm thử sáng tạo… Và có một kế hoạch là cần thiết vì nhiều hoạt động sẽ được thực hiện trong thời gian kiểm thử. - Kiểm thử phát triển: Các quy trình kiểm thử, các kịch bản, Test Case, các dữ liệu được sử dụng trong kiểm thử phần mềm. - Kiểm thử thực hiện: Dựa trên các kế hoạch, các văn bản kiểm thử và các báo cáo bất kỳ lỗi nào tìm thấy cho nhóm phát triển. - Kiểm thử báo cáo: Sau khi hoàn tất kiểm thử, các Tester tạo ra các số liệu và báo cáo cuối cùng về nỗ lực kiểm thử của họ và có sẵn sàng phát hành phần mềm hay không.