CHƯƠNG 1: TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM MỤC TIÊU THỰC HIỆN: Sau khi học xong chương này, sinh viên có khả năng: - Trình bày được sự cần thiết của kiểm thử phần mềm, 7 nguyên tắc kiểm thử và quy trình tổng quát của kiểm thử. - Trình bày được những kiến thức, kỹ năng, đạo đức, thái độ và những yêu cầu của doanh nghiệp mà một nhân viên kiểm thử phần mềm cần đạt được.1 Sự cần thiết của kiểm thử 1.1 Ngữ cảnh hệ thống phần mềm Một trong những nguyên lý kiểm thử quan trọng đó là: Kiểm thử phụ thuộc vào ngữ cảnh. Theo nguyên lý này, việc kiểm thử được thực hiện khác nhau trong những ngữ cảnh khác nhau. Ví dụ, khi kiểm thử một ứng dụng Web thương mại điện tử chúng ta thường tập trung vào những tiêu chí như giao diện, cách thanh toán, sự tiện dụng khi mua hàng,.trong khi nếu kiểm thử một phần mềm Đăng ký môn học thì chúng ta thường tập trung vào kiểm thử những vấn đề như điều kiện tiên quyết của môn học, số sinh viên tối thiểu và tối đa trong một lớp, số lượng người đăng ký đồng thời,.Có thể thấy được tùy vào mỗi loại phần mềm khác nhau mà nhân viên kiểm thử sẽ thiết kế các bộ Test phù hợp để kiểm thử đúng các tiêu chí quy định cho mỗi loại phần mềm đó.2 Nguyên nhân gây ra các lỗi của phần mềm Có 4 trường hợp thường gặp khi phát triển phần mềm như sau (xem hình 1.1): Trường hợp 1: Đội ngũ lấy yêu cầu khách hàng lấy yêu cầu đúng, đội ngũ thiết kế thiết kế đúng theo yêu cầu, và đội ngũ lập trình lập trình đúng theo thiết kế, từ đó sẽ sản xuất ra được một phần mềm hoạt động đúng như mong đợi của khách hàng.
Trường hợp 2: Đôi ngũ lấy yêu cầu khách hàng lấy yêu cầu đúng, đội ngũ thiết kế thiết kế đúng theo yêu cầu, tuy nhiên trong quá trình lập trình, đội ngũ lập trình gây ra nhiều lỗi dẫn đến phần mềm có nhiều bugs trong đó. Ở trường hợp này, bugs phát sinh trong giai đoạn lập trình và có thể sửa chữa (fix) nhanh chóng nếu được kiểm thử kỹ càng. 1 Trường hợp 3: Đội ngũ lấy yêu cầu khách hàng lấy yêu cầu đúng, nhưng đội ngũ thiết kế có thể hiểu lầm hoặc vì lý do nào đó dẫn đến thiết kế không đúng với yêu cầu, sau đó chuyển sang đội ngũ lập trình thì họ sẽ lập trình đúng theo thiết kế, sau khi code xong và chuyển sang giai đoạn kiểm thử thì phát hiện ra sản phẩm tuy code ít lỗi nhưng lại có thiết kế không đúng theo yêu cầu. Ở trường hợp này, chi phí để chỉnh sửa phần mềm tốn kém nhiều hơn ở trường hợp 2 vì bắt buộc phải đi thiết kế lại theo đúng yêu cầu rồi sau đó lập trình lại theo thiết kế.
Trường hợp 4: Đội ngũ lấy yêu cầu khách hàng vì lý do nào đó (ví dụ: ngôn ngữ dịch không chuẩn, hoặc không triển khai nhiều phương pháp để làm rõ yêu cầu của khách hàng) dẫn đến lấy yêu cầu sai mà cứ nghĩ mình đúng, sau đó đội ngũ thiết kế sẽ thiết kế theo đúng những yêu cầu mà đội ngũ lấy yêu cầu truyền đạt lại, và đội ngũ lập trình sẽ lập trình đúng theo thiết kế. Ở trường hợp này, sản phẩm tưởng chừng như là đúng đó (code đúng theo thiết kế, và thiết kế đúng theo yêu cầu) có thể chứa đựng những lỗi tiềm ẩn bên trong nó mà đội ngũ lập trình lẫn kiểm thử có thể không biết, khi bàn giao cho khách hàng, tuy rằng phần mềm hoạt động tốt nhưng cuối cùng khách hàng không chấp nhận vì không đúng ý của họ. Trường hợp này rất nguy hiểm, có thể bị đền hợp đồng cho khách hàng và xa hơn nữa là có thể mất khách hàng và mất uy tín của công ty. Từ 4 trường hợp trên ta có thể thấy được việc kiểm thử phải được thực hiện càng sớm càng tốt.
Kiểm thử cần bắt đầu từ giai đoạn lấy yêu cầu của khách hàng để có thể phát hiện sớm và làm rõ các vấn đề còn mơ hồ để thiết kế và xây dựng phần mềm cho đúng, đáp ứng được mong muốn của khách hàng và giảm thiểu được chi phí phát triển phần mềm.1: Các trường hợp lỗi khi phát triển phần mềm Lỗi được phát hiện càng sớm thì chi phí sửa lỗi càng ít.2: Lỗi được phát hiện càng sớm thì chi phí sửa lỗi càng ít 1.3 Vai trò của kiểm thử trong phát triển, vận hành và bảo trì phần mềm Kiểm thử nghiêm ngặt hệ thống phần mềm và tài liệu có thể giúp giảm thiểu những vấn đề rủi ro xảy ra trong quá trình vận hành và góp phần nâng cao chất lượng của hệ thống phần mềm, nếu như các lỗi được tìm thấy và sửa chữa trước khi hệ thống được vận hành thực tế. 3 Kiểm thử phần mềm đảm bảo cho phần mềm đáp ứng đúng các yêu cầu từ phía khách hàng, tuân thủ hợp đồng cũng như đáp ứng tốt những tiêu chuẩn nghiệp vụ của công ty mua và sử dụng phần mềm, ví dụ: nghiệp vụ du lịch trong phần mềm quản lý các tour du lịch, nghiệp vụ kế toán trong phần mềm kế toán, các nghiệp vụ liên quan đến việc quản lý sinh viên, quản lý điểm, đăng ký học phần. trong phần mềm quản lý trường học,.4 Kiểm thử và chất lượng Ngoài việc xây dựng được một phần mềm đáp ứng các yêu cầu của khách hàng về mặt chức năng, giao diện thì việc tạo ra được một phần mềm tốt, hiệu suất tốt, độ ổn định cao khi vận hành là vấn đề rất cần được quan tâm và cần có quy trình thực hiện với đầy đủ các khâu từ phân tích, thiết kế, cài đặt, kiểm thử để đảm bảo phần mềm đạt được chất lượng tốt nhất, đáp ứng yêu cầu của khách hàng, đem lại sự tự tin cho phần mềm và gia tăng uy tín của công ty. Kiểm thử mang lại sự tự tin về chất lượng của phần mềm nếu việc kiểm thử tìm thấy một vài hoặc không tìm thấy lỗi.
Kiểm thử đúng sẽ giảm thiểu được tổng thể mức độ rủi ro của hệ thống. Khi quá trình kiểm thử tìm thấy lỗi, chất lượng của hệ thống phần mềm được nâng cao sau khi những lỗi đó được sửa chữa. Kiểm thử có thể đo lường chất lượng của phần mềm về các khiếm khuyết được tìm thấy (cả yêu cầu phần mềm chức năng và phi chức năng) và cả các đặc tính: - Độ tin cậy - Khả năng sử dụng - Hiệu quả - Bảo trì - Tính di động Cải thiện chất lượng của hệ thống trong tương lai bằng cách rút ra những bài học từ những dự án trước. Hiểu được nguyên nhân gốc của các khiếm khuyết được tìm thấy trong dự án.
Kiểm thử là một trong những hoạt động đảm bảo chất lượng.5 Kiểm thử bao nhiêu là đủ? Một trong những nguyên tắc quan trọng trong Kiểm thử phần mềm đó là Kiểm thử toàn bộ là không thể. Kiểm thử mọi thứ là không thực hiện được, trừ khi nó chỉ bao 4 gồm một số trường hợp bình thường. Thay vì kiểm thử toàn bộ, việc phân tích rủi ro và dựa trên mức độ ưu tiên để tập trung nỗ lực kiểm thử vào một số điểm cần thiết.2 Kiểm thử là gì? Kiểm thử phần mềm là một quy trình với một chuỗi các hoạt động như sau: - Lập kế hoạch kiểm thử và điều khiển việc kiểm thử. - Phân tích và thiết kế kiểm thử (chọn điều kiện test, thiết kế các Test Case).
- Thiết lập môi trường kiểm thử và chạy kiểm thử. - Đánh giá tiêu chí xuất và báo cáo. - Các hoạt động kết thúc việc kiểm thử. Mục tiêu của việc kiểm thử bao gồm: - Mục tiêu quan trọng của kiểm thử phần mềm là tìm lỗi.
Bất kỳ phần mềm nào được tạo ra cũng đều có lỗi bên trong đó, nhiệm vụ của các Tester là tìm kiếm được các lỗi có trong phần mềm để các Developer sửa lỗi và bàn giao được một phần mềm tốt nhất cho khách hàng. - Một mục tiêu nữa là việc kiểm thử giúp nâng cao chất lượng của phần mềm, gia tăng sự tự tin của đội ngũ phát triển với phần mềm mình tạo ra. - Một mục tiêu khác của kiểm thử phần mềm là giúp ngăn ngừa lỗi. Việc kiểm thử phần mềm được tiến hành từ các giai đoạn sớm trong quá trình phát triển phần mềm giúp cho quá trình phát triển phần mềm được thuận lợi hơn, ngăn ngừa được các lỗi phát sinh kể cả từ giai đoạn phân tích và làm rõ yêu cầu phần mềm.3 Bảy nguyên lý của kiểm thử phần mềm Nguyên lý 1: Kiểm thử cho thấy sự hiện diện của lỗi Kiểm thử có thể cho thấy sự có mặt của các lỗi, nhưng không thể chứng minh phần mềm không có lỗi.
Kiểm thử giảm xác suất của các lỗi chưa được tìm thấy vẫn còn trong phần mềm. Nguyên lý 2: Kiểm thử toàn bộ là không thể Kiểm thử mọi thứ là không thực hiện được, trừ khi nó chỉ bao gồm một số trường hợp bình thường. Thay vì kiểm thử toàn bộ, việc phân tích rủi ro và dựa trên mức độ ưu tiên để tập trung nỗ lực kiểm thử vào một số điểm cần thiết. Ví dụ chúng ta có một phần mềm dùng để đếm số lượng nguyên âm khi chúng ta nhập một từ có 5 ký tự vào Textbox như sau: 5 Hình 1.3: Nguyên lý 2 – kiểm thử toàn bộ là không thể Nếu chúng ta kiểm thử hết tất cả các từ 5 chữ có thể có (ví dụ: apple, hello, awake,.) thì chúng ta sẽ cần tới 26 mũ 5 = 11.376 Test Cases để kiểm thử, điều này là bất khả thi vì những vấn đề như thời gian, nhân lực, chi phí không cho phép.
Do đó, chúng ta cần có những kỹ thuật kiểm thử phù hợp để rút ngắn được thời gian kiểm thử mà vẫn đảm bảo phần mềm hoạt động đúng theo yêu cầu (ví dụ các kỹ thuật phân vùng tương đương, kỹ thuật phân tích giá trị biên, kỹ thuật dùng bảng quyết định,.) Nguyên lý 3: Kiểm thử sớm Để tìm được các lỗi sớm nhất có thể, các hoạt động kiểm thử nên được bắt đầu càng sớm càng tốt trong vòng đời phát triển phần mềm hoặc hệ thống.4: Nguyên lý 3 – kiểm thử sớm Nguyên lý 4 – Sự tập trung của lỗi Nỗ lực kiểm thử nên tập trung một cách cân đối vào mật độ lỗi dự kiến và lỗi phát hiện ra sau đó trong các mô-đun. Một số ít các mô-đun thường chứa nhiều lỗi không phát hiện ra trong lúc kiểm thử trước khi phát hành (release), hoặc chịu trách nhiệm cho hầu hết các lỗi hoạt động của phần mềm.