Kiểm thử phần mềm là một quá trình quan trọng trong vòng đời phát triển phần mềm, nhằm đảm bảo chất lượng và độ tin cậy của sản phẩm.
Bài viết này tại VNLibs.com sẽ sơ lược các kỹ thuật và công đoạn kiểm thử phần mềm, từ kiểm thử mức đơn vị đến kiểm thử toàn bộ hệ thống.
1. Phân loại kỹ thuật kiểm thử.
Các kỹ thuật kiểm thử phần mềm có thể được phân loại dựa trên mức độ tiếp cận mã nguồn và phạm vi kiểm thử:
1.1. Kiểm thử mức đơn vị (Unit Testing).
Kiểm thử mức đơn vị tập trung vào việc kiểm tra các thành phần nhỏ nhất của phần mềm, thường là các hàm, thủ tục hoặc lớp. Mục tiêu là xác minh từng đơn vị hoạt động chính xác theo yêu cầu. Có hai kỹ thuật chính trong kiểm thử mức đơn vị:
– Kiểm thử hộp trắng (White Box Testing): Kỹ thuật này dựa trên hiểu biết về cấu trúc bên trong của mã nguồn; Người kiểm thử sẽ thiết kế các trường hợp kiểm thử để đảm bảo tất cả các đường dẫn mã, điều kiện và nhánh logic được thực thi và kiểm tra; Các tiêu chuẩn bao phủ mã (code coverage) thường được sử dụng để đo lường hiệu quả của kiểm thử hộp trắng, bao gồm bao phủ dòng lệnh, bao phủ nhánh, bao phủ đường dẫn.
– Kiểm thử hộp đen (Black Box Testing): Kỹ thuật này tập trung vào chức năng của đơn vị mã mà không quan tâm đến cấu trúc bên trong; Người kiểm thử sẽ dựa trên đặc tả yêu cầu để thiết kế các trường hợp kiểm thử, xác định các đầu vào và đầu ra mong muốn, sau đó kiểm tra xem đơn vị mã có hoạt động đúng với các đầu vào đó hay không.
1.2. Kiểm thử tích hợp (Integration Testing).
Kiểm thử tích hợp tập trung vào việc kiểm tra sự tương tác giữa các đơn vị mã khác nhau khi chúng được kết hợp lại thành các mô-đun lớn hơn hoặc toàn bộ hệ thống. Mục tiêu là phát hiện lỗi liên quan đến giao diện, truyền dữ liệu và sự phụ thuộc giữa các đơn vị.
– Kiểm thử từ dưới lên (Bottom-up Integration): Các mô-đun ở mức thấp nhất được kiểm thử trước, sau đó tích hợp dần lên các mô-đun cấp cao hơn.
– Kiểm thử từ trên xuống (Top-down Integration): Mô-đun cấp cao nhất được kiểm thử trước, sau đó tích hợp dần xuống các mô-đun cấp thấp hơn.
– Kiểm thử Big Bang: Tất cả các mô-đun được tích hợp cùng lúc và kiểm thử.
1.3. Kiểm thử hệ thống (System Testing).
Kiểm thử hệ thống tập trung vào việc kiểm tra toàn bộ hệ thống phần mềm sau khi tích hợp xong, nhằm đảm bảo hệ thống đáp ứng các yêu cầu chức năng và phi chức năng.
Loại kiểm thử | Mục đích | Ví dụ |
---|---|---|
Kiểm thử chức năng | Kiểm tra xem hệ thống có thực hiện đúng các chức năng theo yêu cầu hay không. | Kiểm tra xem chức năng đăng nhập hoạt động chính xác, người dùng có thể đăng nhập với tài khoản hợp lệ và bị từ chối với tài khoản không hợp lệ. |
Kiểm thử hiệu năng | Kiểm tra khả năng hoạt động của hệ thống dưới các mức tải khác nhau. | Kiểm tra thời gian đáp ứng của hệ thống khi có 100 người dùng truy cập đồng thời. |
Kiểm thử khả năng chịu tải | Kiểm tra khả năng hoạt động của hệ thống khi vượt quá giới hạn thiết kế. | Kiểm tra xem hệ thống có bị crash khi có 1000 người dùng truy cập đồng thời hay không. |
Kiểm thử khả năng phục hồi | Kiểm tra khả năng phục hồi của hệ thống sau khi gặp sự cố. | Kiểm tra xem hệ thống có thể tự động khôi phục dữ liệu sau khi mất điện hay không. |
Kiểm thử bảo mật | Kiểm tra khả năng bảo mật của hệ thống, ngăn chặn các truy cập trái phép và bảo vệ dữ liệu. | Kiểm tra xem hệ thống có chống lại được các cuộc tấn công SQL injection hay không. |
Kiểm thử khả năng sử dụng | Kiểm tra xem hệ thống có dễ sử dụng và thân thiện với người dùng hay không. | Kiểm tra xem giao diện người dùng có trực quan, dễ hiểu và dễ thao tác hay không. |
Kiểm thử tương thích | Kiểm tra khả năng tương thích của hệ thống với các môi trường phần cứng và phần mềm khác nhau. | Kiểm tra xem hệ thống có hoạt động bình thường trên các trình duyệt web và hệ điều hành khác nhau hay không. |
1.4. Kiểm thử chấp nhận (Acceptance Testing).
Kiểm thử chấp nhận là giai đoạn kiểm thử cuối cùng trước khi hệ thống được đưa vào sử dụng chính thức.
– Kiểm thử chấp nhận của người dùng (User Acceptance Testing – UAT): Người dùng cuối sẽ kiểm tra hệ thống để đảm bảo nó đáp ứng nhu cầu và mong đợi của họ.
– Kiểm thử chấp nhận vận hành (Operational Acceptance Testing – OAT): Nhóm vận hành sẽ kiểm tra hệ thống để đảm bảo nó có thể được triển khai, vận hành và bảo trì một cách hiệu quả.
2. Các công đoạn kiểm thử.
Quy trình kiểm thử phần mềm thường bao gồm 6 công đoạn chính trong quy trình kiểm thử phần mềm. Các công đoạn kiểm thử phần mềm được liên kết chặt chẽ với nhau, tạo thành một quy trình hoàn chỉnh, nhằm đảm bảo chất lượng và độ tin cậy của phần mềm. Việc thực hiện đúng và đầy đủ các công đoạn này sẽ giúp phát hiện và sửa chữa lỗi sớm, giảm thiểu rủi ro và nâng cao sự hài lòng của khách hàng.
2.1. Lập kế hoạch kiểm thử (Test Planning).
Đây là công đoạn đầu tiên và quan trọng nhất, đặt nền móng cho toàn bộ quá trình kiểm thử.
– Mục tiêu: Xác định rõ ràng mục tiêu của việc kiểm thử, ví dụ như kiểm tra chức năng, hiệu năng, bảo mật, hay khả năng sử dụng.
– Phạm vi: Xác định rõ phần mềm nào sẽ được kiểm thử, những tính năng nào sẽ được kiểm tra, và những tính năng nào sẽ không được kiểm tra.
– Phương pháp: Lựa chọn phương pháp kiểm thử phù hợp, ví dụ như kiểm thử hộp đen, kiểm thử hộp trắng, kiểm thử tự động.
– Tài nguyên: Xác định nguồn lực cần thiết cho việc kiểm thử, bao gồm con người, công cụ, môi trường kiểm thử.
– Lịch trình: Lập kế hoạch thời gian cho từng giai đoạn kiểm thử, bao gồm thời gian thiết kế trường hợp kiểm thử, thực thi kiểm thử, báo cáo lỗi và xử lý lỗi.
2.2. Thiết kế trường hợp kiểm thử (Test Case Design).
Công đoạn này tập trung vào việc xây dựng các kịch bản kiểm thử cụ thể.
– Phân tích yêu cầu: Nắm rõ các yêu cầu chức năng và phi chức năng của phần mềm.
– Xác định các tình huống kiểm thử: Liệt kê tất cả các tình huống có thể xảy ra khi sử dụng phần mềm.
– Thiết kế các bước kiểm thử: Mô tả chi tiết các bước thực hiện để kiểm tra từng tình huống.
– Xác định dữ liệu đầu vào: Chuẩn bị dữ liệu đầu vào cần thiết cho từng bước kiểm thử.
– Xác định kết quả mong đợi: Mô tả kết quả mong đợi sau khi thực hiện từng bước kiểm thử.
2.3. Thực thi kiểm thử (Test Execution).
Đây là giai đoạn thực hiện các trường hợp kiểm thử đã được thiết kế.
– Chuẩn bị môi trường kiểm thử: Cài đặt phần mềm và thiết lập môi trường kiểm thử theo yêu cầu.
– Thực hiện các bước kiểm thử: Thực hiện từng bước kiểm thử theo tài liệu Trường hợp kiểm thử.
– Ghi lại kết quả: Ghi lại kết quả thực tế sau khi thực hiện từng bước kiểm thử.
– So sánh kết quả thực tế với kết quả mong đợi: Xác định xem trường hợp kiểm thử có vượt qua hay không.
2.4. Báo cáo lỗi (Defect Reporting).
Khi phát hiện lỗi trong quá trình kiểm thử, cần phải báo cáo lỗi một cách chi tiết để nhóm phát triển có thể sửa chữa.
– Mô tả lỗi: Mô tả chi tiết lỗi đã phát hiện, bao gồm các bước tái hiện lỗi, dữ liệu đầu vào, kết quả thực tế và kết quả mong đợi.
– Phân loại lỗi: Phân loại lỗi theo mức độ nghiêm trọng, ví dụ như lỗi nghiêm trọng (critical), lỗi lớn (major), lỗi nhỏ (minor).
– Ưu tiên xử lý lỗi: Xác định thứ tự ưu tiên xử lý lỗi dựa trên mức độ nghiêm trọng và ảnh hưởng của lỗi.
2.5. Theo dõi và xử lý lỗi (Defect Tracking and Resolution).
Công đoạn này tập trung vào việc quản lý quá trình sửa chữa lỗi.
– Theo dõi trạng thái lỗi: Theo dõi trạng thái của từng lỗi, ví dụ như lỗi mới (new), lỗi đang được xử lý (in progress), lỗi đã được sửa (fixed), lỗi đã được đóng (closed).
– Kiểm tra lại sau khi sửa lỗi: Sau khi nhóm phát triển sửa lỗi, cần phải kiểm tra lại để đảm bảo lỗi đã được sửa chữa hoàn toàn và không gây ra lỗi mới.
2.6. Đánh giá kết quả kiểm thử (Test Evaluation).
Sau khi hoàn thành quá trình kiểm thử, cần phải đánh giá hiệu quả của quá trình kiểm thử.
– Phân tích báo cáo kiểm thử: Phân tích báo cáo Kết quả kiểm thử và báo cáo Lỗi để đánh giá chất lượng của phần mềm.
– Đánh giá mức độ bao phủ kiểm thử: Đánh giá xem các trường hợp kiểm thử đã bao phủ được đầy đủ các yêu cầu của phần mềm hay chưa.
– Đánh giá hiệu quả của quy trình kiểm thử: Đánh giá xem quy trình kiểm thử đã được thực hiện hiệu quả hay chưa.
– Đưa ra các khuyến nghị cải thiện: Đề xuất các biện pháp cải thiện quy trình kiểm thử cho các dự án công nghệ tiếp theo.
Kết luận: Kiểm thử phần mềm là một quá trình quan trọng để đảm bảo chất lượng và độ tin cậy của sản phẩm. Việc lựa chọn các kỹ thuật và công đoạn kiểm thử phù hợp sẽ giúp phát hiện và sửa chữa lỗi sớm, giảm thiểu rủi ro và nâng cao sự hài lòng của khách hàng.
3. Ví dụ cụ thể về kỹ thuật và công đoạn kiểm thử phần mềm.
Dưới đây là một số ví dụ cụ thể về việc áp dụng các kỹ thuật và công đoạn kiểm thử phần mềm ở các công ty lớn trên thế giới, kèm theo số liệu chứng minh hiệu quả:
3.1. Microsoft.
– Kỹ thuật: Microsoft sử dụng kết hợp kiểm thử hộp trắng và hộp đen trong quá trình phát triển hệ điều hành Windows. Họ áp dụng kiểm thử đơn vị (unit testing) cho từng module, sau đó kiểm thử tích hợp (integration testing) để đảm bảo các module hoạt động cùng nhau một cách trơn tru. Cuối cùng, họ thực hiện kiểm thử hệ thống (system testing) trên toàn bộ hệ điều hành.
– Công đoạn: Microsoft tuân thủ quy trình kiểm thử nghiêm ngặt, bao gồm lập kế hoạch kiểm thử chi tiết, thiết kế hàng ngàn trường hợp kiểm thử, thực thi kiểm thử tự động và thủ công, báo cáo và theo dõi lỗi chặt chẽ.
– Số liệu: Theo báo cáo của Microsoft, quy trình kiểm thử nghiêm ngặt đã giúp giảm 80% số lượng lỗi nghiêm trọng được phát hiện sau khi phát hành Windows 7 so với Windows Vista. Windows 10 được đánh giá là một trong những phiên bản Windows ổn định nhất từ trước đến nay, với số lượng lỗi được báo cáo ít hơn đáng kể so với các phiên bản trước.
3.2. Google.
– Kỹ thuật: Google nổi tiếng với việc áp dụng kiểm thử tự động (automation testing) một cách rộng rãi. Họ phát triển các công cụ kiểm thử riêng, chẳng hạn như Selenium và WebDriver, để tự động hóa việc thực thi các trường hợp kiểm thử.
– Công đoạn: Google tích hợp kiểm thử vào toàn bộ quy trình phát triển phần mềm, từ giai đoạn thiết kế đến giai đoạn triển khai. Họ áp dụng phương pháp phát triển hướng kiểm thử (Test-Driven Development – TDD) để đảm bảo chất lượng mã nguồn ngay từ đầu.
– Số liệu: Google cho biết kiểm thử tự động đã giúp giảm 50% thời gian kiểm thử và tăng 20% năng suất phát triển phần mềm. Google Chrome được đánh giá là một trong những trình duyệt web ổn định và an toàn nhất hiện nay, nhờ vào quy trình kiểm thử chặt chẽ.
3.3. Amazon.
– Kỹ thuật: Amazon áp dụng kiểm thử A/B (A/B testing) để đánh giá hiệu quả của các thay đổi trên website và ứng dụng di động. Họ chia người dùng thành hai nhóm, một nhóm sử dụng phiên bản cũ và một nhóm sử dụng phiên bản mới, sau đó so sánh các chỉ số hiệu suất giữa hai nhóm.
– Công đoạn: Amazon tích hợp kiểm thử A/B vào quy trình phát triển sản phẩm, cho phép họ liên tục thử nghiệm và cải thiện trải nghiệm người dùng.
– Số liệu: Amazon cho biết kiểm thử A/B đã giúp tăng 10% tỷ lệ chuyển đổi trên website và 5% doanh thu từ ứng dụng di động.
3.4. Facebook.
– Kỹ thuật: Facebook sử dụng kiểm thử beta (beta testing) để thu thập phản hồi từ người dùng thực tế trước khi phát hành sản phẩm chính thức. Họ cho phép một nhóm người dùng giới hạn truy cập vào phiên bản beta của sản phẩm, sau đó thu thập ý kiến phản hồi và sửa lỗi trước khi phát hành rộng rãi.
– Công đoạn: Facebook tích hợp kiểm thử beta vào quy trình phát triển sản phẩm, cho phép họ phát hiện và sửa lỗi sớm, đồng thời cải thiện trải nghiệm người dùng.
– Số liệu: Facebook cho biết kiểm thử beta đã giúp giảm 50% số lượng lỗi được báo cáo sau khi phát hành sản phẩm chính thức.
Các ví dụ trên cho thấy các công ty lớn trên thế giới đều coi trọng việc kiểm thử phần mềm và áp dụng các kỹ thuật và công đoạn kiểm thử một cách hiệu quả. Việc đầu tư vào kiểm thử đã mang lại cho họ những lợi ích to lớn, bao gồm giảm số lượng lỗi, tăng năng suất phát triển, và cải thiện trải nghiệm người dùng.
4. Tài liệu tham khảo
[1] Ron Patton, “Software Testing (2nd Edition)”, 2005 – Sams Publishing
[2] Lisa Crispin, Janet Gregory, “Agile Testing: A Practical Guide for Testers and Agile Teams”, 2009 – Addison-Wesley Professional
[3] Cem Kaner, James Bach, Bret Pettichord, “Lessons Learned in Software Testing: A Context-Driven Approach”, 2001 – Wiley
[4] Kent Beck, “Test Driven Development: By Example”, 2002 – Addison-Wesley Professional
[5] Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas, “The Art of Software Testing (3rd Edition)”, 2011 – Wiley
[6] Boris Beizer, “Software Testing Techniques”, 1990 – Van Nostrand Reinhold
[7] Elaine J. Weyuker, Thomas J. Ostrand, “A Survey of Software Testing Techniques”, 1980, ACM Computing Surveys, Vol. 12, No. 4, pp. 411-470.
[8] Rex Black, “The Seven Principles of Software Testing”, 2009, Software Testing & Quality Engineering Magazine, Vol. 11, No. 6, pp. 16-20.
[9] Cem Kaner, James Bach, “Exploring Exploratory Testing”, 2005, Florida Institute of Technology, Technical Report.
[10] Capers Jones, “How to Reduce the Cost of Software Testing”, 2008, Crosstalk, The Journal of Defense Software Engineering, Vol. 21, No. 5, pp. 18-22.
[11] Guru99, “Software Testing Fundamentals”, 2023 – Guru99 Website
[12] ArtOfTesting, “Software Testing Tutorial: Free QA Course”, 2023 – ArtOfTesting Website
[13] Simplilearn, “What is Software Testing? Definition, Types, Methods & Levels”, 2023 – Simplilearn Website
[14] Software Testing Help, “Software Testing Life Cycle (STLC)”, 2023 – Software Testing Help Website
[15] Selenium Easy, “Test Automation Best Practices”, 2023 – Selenium Easy Website
[16] Testlio, “A Guide to Different Types of Software Testing”, 2023 – Testlio Blog
[17] DZone, “The Importance of Software Testing in the Development Process”, 2023 – DZone Website
[18] VersionOne, “Best Practices for Agile Software Testing”, 2023 – VersionOne Website
[19] Atlassian, “Continuous Integration and Continuous Delivery (CI/CD) for Software Testing”, 2023 – Atlassian Website
[20] World Quality Report, “The Future of Software Testing”, 2023 – Capgemini Website
Tác giả: Thạc Bình Cường
Bạn đang xem bài viết:
Sơ lược các kỹ thuật và công đoạn kiểm thử phần mềm
Link https://vnlibs.com/cong-nghe/so-luoc-cac-ky-thuat-va-cong-doan-kiem-thu-phan-mem.html