Sự khác nhau giữa Unit, Integration và Functional Testing
Đối với bất kỳ ứng dụng phần mềm nào, cả Unit Test và Integration test thì đều rất quan trọng khi mỗi loại sử dụng các quy trình khác nhau để test các ứng dụng phần mềm. Nhưng một hoặc cả hai không thể thay thế cho kiểm thử chức năng (Functional Testing). Trong bài viết này, chúng ta sẽ hiểu ...
Đối với bất kỳ ứng dụng phần mềm nào, cả Unit Test và Integration test thì đều rất quan trọng khi mỗi loại sử dụng các quy trình khác nhau để test các ứng dụng phần mềm. Nhưng một hoặc cả hai không thể thay thế cho kiểm thử chức năng (Functional Testing).
Trong bài viết này, chúng ta sẽ hiểu Unit , Integration và Functional Testing và làm rõ sự khác nhau giữa các hình thức / mức độ kiểm thử.
Đối với người mới bước vào nghề, để dễ hình dung về ba loại test cơ bản chúng ta cùng tìm hiểu với một ví dụ đơn giản: Đối với chức năng của điện thoại di động, các bộ phận chính được yêu cầu kiểm thử là "pin" và "sim card".
Unit testing- Pin đã được kiểm tra về tuổi thọ, công suất của nó và các thông số khác. Thẻ sim được kiểm tra để kích hoạt nó.
Integration Testing- Pin và thẻ sim được tích hợp ví dụ: lắp ráp để khởi động điện thoại di động.
Functional Testing- các chức năng của điện thoại di động được kiểm tra về tính năng của nó về sử dụng pin cũng như thẻ sim.
Bây giờ chúng ta đã thấy những ví dụ về những thật ngữ không chuyên, bây giờ chúng ta lấy một ví dụ về kỹ thuật, trang đăng nhập:
Hầu hết các ứng dụng web yêu cầu người dùng / khách hàng đăng nhập. Chính vì những điều đó, mọi ứng dụng web đã có một trang "Đăng nhập" trang đó có những yếu tố sau:
• Account/Username
• Password
• Login/Sign in Button
Đối với Unit Testing, chúng ta có thể có những Test cases sau:
Độ dài của trường - username và password
Giá trị trường đầu vào nên là hợp lệ
Nút đăng nhập được kích hoạt chỉ sau khi giá trị hợp lệ (Định dạng và chiều dài đúng chuẩn) được nhập vào cả hai trường.
Đối với Integration Testing, chúng ta có thể có những Test cases sau:
Người dùng sẽ nhìn thấy thông báo chào mừng sau khi nhập các giá trị hợp lệ và nhấn nút đăng nhập. Người sử dụng cần được điều hướng đến các trang chào đón, trên trang chủ sau khi nhập nhập hợp lệ và nhấn nút Login.
Bây giờ, sau Unit và Integration testing được thực hiện, chúng ta sẽ xem xét đến test case cho kiểm thử chức năng.
-
Các trạng thái mong muốn sẽ được kiểm tra, ví dụ: người dùng có thể đăng nhập vào bằng cách nhấp vào nút đăng nhập sau khi nhập tên và mật khẩu giá trị hợp lệ hay không?
-
Thông báo chào mừng xuất hiện sau khi đăng nhập thành công không?
-
Thông báo lỗi sẽ xuất hiện khi đăng nhập không hợp lệ?
-
Có bất kỳ cookie trang web được lưu trữ cho trường đăng nhập?
-
Một user chưa được kích hoat có thể đăng nhập thành công hay không?
-
Có bất kỳ một link 'quên mật khẩu' cho những người dùng đã quên mật khẩu của mình hay không?
Có rất nhiều trường hợp mà một tester có thể nghĩ và thực hiện kiểm thử. Nhưng một lập trình viên thì không thể cover hết tất cả các trường hợp đó trong khi vừa làm Unit và Integration.
Do đó, có rất nhiều kịch bản vẫn chưa được test thậm chí sau khi tiến hành Unit và Integration testing.
Bây giờ chúng ta sẽ cùng tìm hiểu từng loại một để làm rõ các vấn đề:
Unit Testing(UT):
Như tên cho thấy, mức độ này liên quan đến việc kiểm thử của một 'đơn vị'. Ở đây đơn vị có thể là một phần nhỏ của ứng dụng cái có thể được kiểm thử; có thể là một chức năng đặc biệt nhỏ nhất, phương pháp, vv..
Phát triển phần mềm là những người viết các trường hợp kiểm thử ở mức độ đơn vị (Unit). Mục đích ở đây là để phù hợp với yêu cầu và trạng thái mong muốn của đơn vị.
Dưới đây là vài điểm quan trọng trong Unit testing và lợi ích của nó:
• Unit testing được thực hiện trước khi Integration testing bởi các nhà phát triển phần mềm sử dụng các kỹ thuật kiểm thử hộp trắng (white box testing).
• UT không chỉ kiểm tra các trạng thái tích cực , ví dụ: đầu ra chính xác trong trường hợp đầu vào hợp lệ, nhưng cũng có những thất bại xảy ra với đầu vào không hợp lệ.
• Tìm kiếm các vấn đề / lỗi ở giai đoạn đầu là rất hữu ích và nó làm giảm tổng chi phí dự án. Là Đơn vị kiểm tra được thực hiện trước khi hội nhập của mã, các vấn đề phát hiện ở giai đoạn này có thể được giải quyết rất dễ dàng và ảnh hưởng của họ cũng rất ít.
• Một xét nghiệm đơn vị kiểm tra mảnh nhỏ của mã hay các chức năng cá nhân, và các vấn đề / lỗi được tìm thấy trong các trường hợp thử nghiệm độc lập và không ảnh hưởng đến các trường hợp thử nghiệm khác.
• Một lợi thế quan trọng là các trường hợp đơn vị kiểm tra đơn giản hóa và thực hiện thử nghiệm mã dễ dàng hơn. Vì vậy, nó trở nên dễ dàng hơn để giải quyết các vấn đề ở giai đoạn sau quá bởi vì chỉ có sự thay đổi mới nhất trong mã này là để được kiểm tra.
• Kiểm thử đơn vị (UT) tiết kiệm thời gian và chi phí, và nó là tái sử dụng và dễ dàng để duy trì.
Junit (Java framework), PHPUnit (PHP framework), NUnit (.Net framework) etc. là những tool phổ biến được dùng để UT (unit testing) cho các loại ngỗn ngữ khác nhau.
Integration Testing (IT):
IT kiểm thử tích hợp của các phần khác nhau của hệ thống lại với nhau. Hai phần khác nhau hoặc các module của hệ thống được tích hợp đầu tiên và sau đó IT sẽ được thực hiện.
Mục đích của IT là để kiểm tra chức năng, độ tin cậy và hiệu suất của hệ thống khi tích hợp.
IT được thực hiện trên các module đã được UT (đơn vị kiểm thử) và sau đó IT sẽ xác định xem liệu sự kết hợp của các mô-đun có cho ra output mong muốn hay không.
IT hoặc có thể được thực hiện bằng cách kiểm thử độc lập hoặc do lập trình viên.
Có 3 loại khác nhau của phương pháp kiểm thử tích hợp. Tiếp theo chúng ta sẽ đi vào chi tiết của từng loại một.
a) Big Bang Integration approach:
Trong phương pháp này, tất cả các module hoặc đơn vị (Unit) được tích hợp và kiểm thử trong cùng một thời điểm. Điều này thường được thực hiện khi toàn bộ hệ thống đã sẵn sàng để IT tại một thời điểm duy nhất.
Xin đừng nhầm lẫn phương pháp này với system testing (ST); phương pháp này chỉ tích hợp các module hoặc đơn vị được kiểm tra mà không phải là toàn bộ hệ thống như được thực hiện trong ST.
Ưu điểm chính của phương pháp Big bang là tất cả mọi thứ đã được tích hợp được test tại một thời điểm. Nhưng nhược điểm chính của phương pháp này là nó khó khăn để xác định lỗi hệ thống (failures).
Ví dụ: Trong hình dưới đây, Unit 1 đến Unit 6 được tích hợp và thử nghiệm bằng cách sử dụng phương pháp Big Bang.
b) Top down approach:
Tích hợp các đơn vị / modules được kiểm tra từ trên xuống dưới theo từng bước.
Đơn vị đầu tiên được test riêng biệt bằng cách viết test STUBS. Sau đó, các level thấp hơn được tích hợp từng cái một cho đến khi level cuối cùng được đặt lại với nhau và test.
Phương pháp Top down là một cách tiếp cận rất cơ bản của việc tích hợp vì nó phù hợp với các hoạt động sẽ diễn ra trong môi trường thực tế.
Mối quan tâm duy nhất với phương pháp này là các chức năng chính sẽ được là kiểm tra ở giai đoạn cuối.
c) Bottom Up approach:
Unit / modules được kiểm tra từ dưới lên cao nhất, từng bước một, cho đến khi tất cả các cấp của các Unit / module được tích hợp và test như là một đơn vị.
Chương trình mô phỏng sẽ được gọi là DRIVERS được sử dụng trong phương pháp này. Nó thì dễ dàng hơn để phát hiện các vấn đề hoặc lỗi ở mức độ thấp hơn.
Nhược điểm chính của phương pháp này là các vấn đề mức độ cao hơn chỉ có thể được xác định vào cuối khi tất cả các đơn vị đã được tích hợp.
Functional testing (FT):
Kỹ thuật kiểm thử hộp đen (Back box testing technique), nơi mà các chức năng của ứng dụng được kiểm thử để tạo ra output mong muốn dựa vào việc cung cấp đầu vào nhất định được gọi là "kiểm thử chức năng”.
Trong quá trình kiểm thử phần mềm, chúng ta làm điều này bằng cách viết các trường hợp kiểm tra (testcase) theo yêu cầu và theo kịch bản. Đối với bất kỳ chức năng, số lượng các Test case bằng văn bản có thể thay đổi từ một đến nhiều.
Test case cơ bản bao gồm các phần sau đây: • Test Summary
• Prerequisites (if any)
• Test case input steps
• Test data (if any)
• Expected output
• Notes (if any)
"Dựa trên yêu cầu" và "Dựa trên kịch bản dự án" là hai hình thức của kiểm thử chức năng sẽ được thực hiện.
Trong kiểm thử dựa trên yêu cầu của khách hàng, Test case được tạo ra như một phần của yêu cầu và được kiểm thử sao cho phù hợp với yêu cầu đó .Đối với kiểm thử chức năng dựa trên kịch bản dự án, việc kiểm thử này được thực hiện bằng việc nhớtất cả các kịch bản từ góc độ kinh doanh.
Tuy nhiên, nhược điểm chính của kiểm thử chức năng là có thể dư thừa xảy ra trong kiểm thử và khả năng bị thiếu một số lỗi logic.
Vậy Unit , Integration, Functional testing khác nhau như thế nào?
Bây giờ chúng ta có một ý tưởng ngắn gọn của đơn vị, tích hợp và thử nghiệm chức năng, chúng ta hãy nhìn vào sự khác biệt của chúng.
Unit Testing | Integration Testing | Functional Testing | |
---|---|---|---|
Định nghĩa và mục đích | Kiểm thử riêng biệt từng đơn vị hoặc từng module | Kiểm thử tích hợp hai hay nhiều đơn vị/modules kết hợp cùng với nhau để hoàn thành nhiệm vụ | Kiểm tra các hành vi của các ứng dụng theo yêu cầu. |
Mức độ phức tạp | Không hề phức tạp vì nó bao gồm các dòng code nhỏ nhất | Phức tạp hơn một chút so với kiểm thử đơn vị | Phức tạp hơn so với kiểm thử đơn vị và kiểm thử tích hợp |
Kỹ thuật kiểm thử | Kiểm thử hộp trắng | Kiểm thử hộp trắng, đen và xám | Kiểm thử hộp đen |
Những điểm cần lưu ý chính | Những đơn vị hoặc module riêng lẻ | Tích hợp các đơn vị hoặc module | Toàn bộ chức năng ứng dụng |
Lỗi/vấn đề được tìm thấy | Tìm các vấn đề có thể xảy ra thường xuyên trong các module | Tìm các vấn đề có thể xảy ra trong khi tích hợp các module khác nhau | Tìm thấy vấn đề không cho phép một ứng dụng thực hiện các chức năng của nó. Điều này bao gồm một số vấn đề dựa trên kịch bản dựa test. |
Lọt bug | Không có cơ hội lọt bug | Ít có cơ hội | Nhiều cơ hội lọt issue khi danh sách chức năng phải test luôn là vô hạn. |
Kết luận:
Unit , Integration, Functional testing: Cả ba có tương quan lẫn nhau. Để đạt được việc bao phủ đầy đủ thì phải có kiểm thử đơn vị cho các đường dẫn / dòng code, chức năng và tích hợp để đảm bảo rằng công việc gắn kết với đơn vị.
Hy vọng bài viết này đã đưa cho bạn một ý tưởng rõ ràng về đơn vị, tích hợp và thử nghiệm chức năng và sự khác biệt của chúng, mặc dù có nhiều hơn còn có nhiều hơn những kiểu kiểm thử .
Nguồn dịch: http://www.softwaretestinghelp.com/the-difference-between-unit-integration-and-functional-testing/