Các giai đoạn hay cấp độ kiểm thử phần mềm

Các giai đoạn hay cấp độ kiểm thử phần mềm

Kiểm thử đơn vị (Unit test)

Kiểm thử từng phần nhỏ tạo nên chương trình hay là các module nhỏ trong chương trình để tìm ra các lỗi thành phần và khắc phục.

Trước hết ta sẽ tìm hiểu khái niệm Unit trong testing. Một Unit (đơn vị) là một thành phần đơn vị phần mềm nhỏ nhất mà ta có thể kiểm tra được -> Unit Test là kiểm tra sự thực thi của các Unit nhỏ riêng lẻ của chương trình.

Do các Unit trong một phần mềm có kích thước nhỏ và chức năng hoạt động đơn giản, nên việc kiểm thử các Unit này tương đối đơn giản nên chúng ta sẽ không quá khó khăn trong việc testing, xác nhận và ghi nhận kết quả kiểm thử và dễ dàng phân tích kết quả kiểm tra.

Nếu phát hiện lỗi trong giai đoạn Unit test, việc xác định ra nguyên nhân lỗi và khắc phục lỗi cũng tương đối dễ dàng vì phạm vi lỗi trong một Unit nhỏ và đang kiểm tra. Trong thực tiễn thường thì thời gian và chi phí cho Unit Test sẽ tiết kiệm rất nhiều thời gian và chi phí cho các giai đoạn kiểm tra sau và quá trình sửa lỗi ở các giai đoạn sau cũng nhẹ hơn rất nhiều sau đó. Do đó nếu chúng ta làm tốt trong bước này thì các bước test sau sẽ ít gặp lỗi hơn rất nhiều.

Có thể bạn quan tâm:

UT thường được kiểm thử bởi lập trình viên. Công đoạn kiểm tra này cần được thực hiện càng sớm càng tốt trong quá trình viết code và liên tục trong suốt chu kỳ phát triển chương trình. Thông thường, để có thể làm được UnitTest, người tester đòi hỏi phải có kiến thức về thiết kế và lập trình của chương trình. Mục đích của UnitTest là bảo đảm thông tin input được đưa vào và xử lý sau đó xuất ra khỏi Unit (output) với kết quả là chính xác trong kết quả giữa dữ liệu nhập vào và chức năng thực thi của unit.

Cũng như các mức kiểm tra khác, UT cũng đòi hỏi phải chuẩn bị một cách kỹ lưỡng trước các tình huống (test case) hoặc kịch bản test (script), trong đó định nghĩa rõ về mặt dữ liệu đầu vào, các bước thực hiện kiểm thử và dữ liệu đúng khi xuất ra(output) . Các test case và Script này nên được giữ lại để tái sử dụng ở những chương trình sau.

Kiểm thử tích hợp (Integration Test, IT)

Integration Test là loại kiểm thử kết hợp các thành phần/module của một chương trình và kiểm tra sự kết hợp đó như một chương trình đã hoàn thành.

Trong khi Unit Test kiểm tra lỗi các thành phần nhỏ và Unit riêng lẻ thì Integration Test chương trình bằng cách kết hợp chúng lại với nhau và kiểm tra sự giao tiếp của các thành phần Unit Test và truyền thông giữa các thành phần.

Các mục tiêu chính của IT bao gồm:

  • Phát hiện lỗi giao tiếp xảy ra giữa các đơn vị thành phần (Unit).
  • Tích hợp các Unit đơn lẻ tạo thành các hệ thống nhỏ (subsystem) và hoặc là một hệ thống hoàn chỉnh (system) và chuẩn bị kiểm thử chương trình ở mức hệ thống (System Test).

Trong Unit Test, lập trình viên sẽ cố gắng phát hiện các lỗi liên quan đến chức năng và cấu trúc Unit chương trình. Có nhiều phép kiểm tra đơn giản của giao tiếp giữa Unit với các thành phần Unit khác hoặc các thành phần liên quan khác, tuy nhiên để có thể kiểm thử một cách toàn diện thì giao tiếp liên quan đến Unit thật sự chỉ được kiểm tra một cách đầy đủ khi các Unit tích hợp với nhau tạo thành một chương trình lớn hơn để thực hiện IT.

Trừ một số ít ngoại lệ, IT chỉ nên thực hiện khi những Unit thành phần đã được kiểm tra cẩn thận bằng UT, và tất cả các lỗi tìm thấy ở mức Unit đã được fix. Một số người đã hiểu sai rằng Unit khi đã qua giai đoạn Unit Test với giả lập giao tiếp thì không cần thực hiện IT nữa. Thực tế về việc tích hợp giữa các thành phần Unit sẽ dẫn đến những tình huống lỗi hoàn toàn khác.

Một chiến lược cần lưu ý trong IT là nên tích hợp dần từng Unit. Một Unit sau một thời điểm được tích hợp vào một nhóm các Unit khác, mà nhóm các Unit này đã được tích hợp trước đó và đã được kiểm tra IT trước đó. Lúc này, ta chỉ cần kiểm tra giao tiếp của Unit mới và hệ thống Unit đã tích hợp trước đó, điều này làm cho ta khoanh vùng được mức độ ảnh hưởng, kiểm soát sai sót và làm cho số lượng kiểm tra sẽ giảm, sai sót sẽ giảm đáng kể.

Kiểm thử hồi quy

Kiểm thử hồi quy là hoạt động kiểm thử trợ giúp để đảm bảo các thay đổi trong chương trình không gây ra những lỗi bổ sung không mong đợi. Kiểm thử hồi quy thường là test lại các kiểm thử sau khi thay đổi chương trình.

Kiểm thử hồi quy có thể được thực hiện thủ công, bằng cách thực hiện lại tập con tất cả các test case hoặc sử dụng các công cụ test tự động. Bộ kiểm thử hồi quy gồm các bộ kiểm thử như sau:

  • Một mẫu tập của các kiểm thử sẽ kiểm thử tất cả chức năng của chương trình.
  • Một mẫu tập các trường hợp kiểm thử bổ sung tập trung vào các chức năng có thể bị thay đổi bởi các tác động mới.
  • Các mẫu tập kiểm thử tập trung vào các thành phần làm phần mềm thay đổi.

Kiểm thử hồi quy là một trong những loại kiểm thử quan trong nhất và tốn kém nhiều thời gian và công sức của tester nhất. Tuy nhiên, không thể bỏ qua kiểm thử hồi quy vì đó là điều không thể, vì có thể dẫn đến tình trạng lỗi phần mềm phát sinh hoặc lỗi đã kiểm thử và sữa chữa rồi.

Kiểm thử hệ thống (system test)

System Test bao gồm một hàng loạt kiểm thử nhằm xác minh tất cả các thành phần của hệ thống có được lắp ghép và tích hợp một cách chính xác hay không. Mục đích của ST là đảm bảo toàn bộ hệ thống hoạt động một cách trơn tru và đúng như khách hàng mong muốn.

ST bắt đầu khi tất cả các bộ phận của phần mềm đã được tích hợp thành công. Thông thường loại kiểm tra này tốn rất nhiều công sức và thời gian. Trong nhiều trường hợp, việc kiểm tra đòi hỏi yêu cầu phải có môi trường kiểm thử thích hợp. Ví dụ như một số phần mềm và phần cứng hỗ trợ, phần mềm hoặc phần cứng hệ thống đặc thù, và đặc biệt là các chương trình cần thời gian thực, hệ thống phân bố, hoặc hệ thống nhúng. Ở mức độ của ST thì tester cũng tìm kiếm các lỗi, nhưng trọng tâm của loại kiểm thử này là đánh giá về chức năng, hoạt động, thao tác, sự tin cậy và các yêu cầu khác liên quan đến chất lượng của toàn hệ thống.

Điểm khác nhau then chốt giữa Integration Test và System Test là ST chú trọng các hành vi và lỗi trên toàn hệ thống, còn IT chú trọng sự giao tiếp giữa các thực thể hoặc đối tượng khi chúng làm việc cùng nhau. Trong quy trình kiểm thử thì thông thường ta phải thực hiện UT và IT để đảm bảo mọi đơn vị và giao tiếp, tương tác giữa chúng hoạt động chính xác trước khi thực hiện System test

Kiểm thử chấp nhận (Acceptance Test )

Sau giai đoạn System Test là Acceptance Test, đây là giai đoạn kiểm tra phía người dùng, được khách hàng thực hiện, qua giai đoạn này là quá trình giao hàng. Mục đích của AT là để chứng minh rằng phần mềm sau khi sản xuất đã thỏa mãn tất cả các yêu cầu của khách hàng và khách hàng sẽ chấp nhận phần mềm và trả tiền nhanh chóng thanh toán hợp đồng.

Acceptance Test có ý nghĩa vô cùng quan trọng, mặc dù trong nhiều trường hợp, hầu hết mọi trường hợp, các phép kiểm tra của ST và AT gần như tương tự, nhưng bản chất của các phép thử và cách thức thực hiện lại rất khác biệt.

Trên thực tế, khách hàng không tham gia và quan tâm vào quá trình xây dựng phần mềm nên thường là kết quả của AT sẽ có sai sót rất lớn, mặc dù phần mềm đã trải qua tất cả các kiểm tra trước đó.

Sự sai lệch này thường là liên quan đến việc hiểu sai yêu cầu phần mềm cũng như sự mong chờ về mặt chức năng của khách hàng. Ví dụ đôi khi một phần mềm vượt qua các phép kiểm thử phần mềm về chức năng thực hiện bởi nhóm tester thực hiện dự án, nhưng khách hàng khi kiểm tra sau cùng vẫn thất vọng vì giao diện, bố cục màn hình nghèo nàn, thao tác khó khăn, không theo thói quen sử dụng của khách hàng.

Một số loại hình kiểm thử trong thực tế

Hiện nay, do sự phát triển mạnh mẽ của công nghệm phần mềm nên có một số loại hình kiểm thử tiêu biểu như:

  • Testing các phần mềm trên Desktop: đây là các chương trình được cài đặt trên máy tính cá nhân nhằm đảm nhiệm các chức năng theo yêu cầu người dùng. Đây vẫn đang là ứng dụng có mức độ phổ biến nhất.
  • Kiểm thử Web hay kiểm thử trên đám mây: với sự lớn mạnh của Internet thì các ứng dụng web cũng ngày càng phát triển và đang dần thay thế các ứng dụng trên Desktop truyền thống như Google Document, Microsoft web apps,…
  • Kiểm thử trên Mobile: ngày nay xã hội với sự phát triển nhanh chóng, các thiết bị di động (điện thoại thông minh, máy tính bảng,…) có số lượng người dùng cũng đang tăng lên chóng mặt, cùng với đó là số lượng phần mềm phục vụ cho nhu cầu tăng cao vì vậy đây là một lĩnh vực đầy tiềm năng và thawcsh thức trong công nghệ phần mềm.
  • Penetration testing là quá trình kiểm tra bảo mật cho các ứng dụng web bằng cách giả lập các cuộc tấn công vào website để tìm kiếm và phát hiện các lỗ hổng bảo mật, các vấn đề bảo mật liên quan trong website. Những người tester sẽ đóng vai trò là hacker mũ đen và giả lập các phương pháp tấn công vào các trang web cần test.

Kiểm thử tự động

Kiểm thử tự động là một phương pháp kiểm tra lỗi của một hệ thống nào đó bằng các công cụ kiểm tra tự động hoá với dữ liệu đầu vào là một tập dữ liệu có thể gây lỗi và đầu ra đã được xác định.

Kiểm thử tự động thường có tác dụng lớn trong các trường hợp kiểm thử lặp đi lặp lại không thay đổi, trong quá trình kiểm thử hồi quy hay các kiểm thử có giá trị input đầu vào rất lớn khiến làm quá trình test thủ công gặp nhiều khó khăn.

Đối với các trường hợp kiểm thử được lặp đi lặp lại, nếu thực hiện một cách thủ công dễ dàng gây ra sự nhàm chán cho người testing, dẫn tới năng suất lao động kém. Đó là chưa kể tới việc sai sót khi làm một công việc quá nhiều lần, lặp đi lặp lại quy trình một cách thủ công. Ngược lại, nếu sử dụng kiểm thử tự động, dù có lặp đi lặp lai bao nhiêu lần thì cũng cho ra thao tác và kết quả chính xác. Điều này giúp người kiểm thử tránh được những rủi ro không đáng có và giảm thời gian kiểm thử một cách đáng kể.

Một số công cụ kiểm thử tự động phổ biến hiện nay: Selenium, QTP (HP UFT), Rational Function Tester, Owasp,…

Dù có rất nhiều ưu điểm về mặt thời gian thực thi nhưng kiểm thử tự động cũng không thể hoàn toàn thay thế yếu tố con người trong quá trình kiểm thử. Để có thể thực hiện được kiểm thử một cách tự động, trước hết vẫn cần bàn tay con người thiết lập thao tác kiểm thử cho công cụ hay các đoạn kịch kiểm thử để máy tính để thực thi. Đối với những bước kiểm thử chỉ thực hiện số ít lần thì việc mất thời gian tạo kịch bản kiểm thử tự động là không cần thiết.

Ngoài ra có một số kiểm thử đặc thù riêng biệt mà máy móc không thể làm được. Đặc biệt là các phần mềm kiểm thử tự động không phải hoàn toàn miễn phí và dễ sử dụng.

Xem thêm hướng dẫn testing owasp

Leave a Reply