Kiểm tra đơn vị có một cái gì đó bí ẩn về nó những ngày này. Mọi người coi nó như thể phạm vi kiểm tra 100% là một chén thánh và như thể kiểm thử đơn vị là một cách phát triển phần mềm.
Họ đang thiếu điểm.
Kiểm tra đơn vị không phải là câu trả lời. Kiểm tra là.
Bây giờ, bất cứ khi nào cuộc thảo luận này xuất hiện, một người nào đó (thường là tôi) sẽ nói ra câu nói của Dijkstra: "Thử nghiệm chương trình có thể chứng minh sự hiện diện của bọ, nhưng không bao giờ chứng minh sự vắng mặt của chúng." Dijkstra đã đúng: kiểm tra là không đủ để chứng minh rằng phần mềm hoạt động như dự định. Nhưng nó là cần thiết : ở một mức độ nào đó, phải có khả năng chứng minh rằng phần mềm đang làm những gì bạn muốn nó.
Nhiều người kiểm tra bằng tay. Ngay cả những người đam mê TDD trung thành cũng sẽ thực hiện kiểm tra thủ công, mặc dù đôi khi họ sẽ không thừa nhận điều đó. Không thể tránh khỏi: ngay trước khi bạn vào phòng hội thảo để giới thiệu phần mềm của bạn với khách hàng / sếp / nhà đầu tư / v.v., bạn sẽ chạy qua nó bằng tay để đảm bảo nó sẽ hoạt động. Không có gì sai với điều đó, và trên thực tế sẽ thật điên rồ khi chỉ mong mọi thứ diễn ra suôn sẻ mà không phải chạy bằng tay - nghĩa là thử nghiệm nó - ngay cả khi bạn có phạm vi kiểm tra đơn vị 100% và sự tự tin tối đa trong các bài kiểm tra của bạn .
Nhưng kiểm tra thủ công, mặc dù nó là cần thiết để xây dựng phần mềm, hiếm khi là đủ . Tại sao? Bởi vì kiểm tra thủ công là tẻ nhạt, tốn thời gian và được thực hiện bởi con người. Và con người nổi tiếng là tồi tệ khi thực hiện các nhiệm vụ tẻ nhạt và tốn thời gian: họ tránh thực hiện chúng bất cứ khi nào có thể và họ thường không làm tốt khi họ bị ép buộc.
Máy móc , mặt khác, là tuyệt vời để thực hiện các nhiệm vụ tẻ nhạt và tốn thời gian. Rốt cuộc, đó là thứ mà máy tính được phát minh ra.
Vì vậy, kiểm tra là rất quan trọng và kiểm tra tự động là cách hợp lý duy nhất để đảm bảo rằng các kiểm tra của bạn được sử dụng một cách nhất quán. Và điều quan trọng là phải kiểm tra và kiểm tra lại, vì phần mềm được phát triển. Một câu trả lời khác ở đây lưu ý tầm quan trọng của kiểm tra hồi quy . Do sự phức tạp của các hệ thống phần mềm, những thay đổi dường như vô hại đối với một phần của hệ thống gây ra những thay đổi ngoài ý muốn (tức là lỗi) trong các phần khác của hệ thống. Bạn không thể khám phá những thay đổi ngoài ý muốn này mà không có một số hình thức kiểm tra. Và nếu bạn muốn có dữ liệu đáng tin cậy về các bài kiểm tra của mình, bạn phải thực hiện kiểm tra theo cách có hệ thống, có nghĩa là bạn phải có một số loại hệ thống kiểm tra tự động.
Tất cả những điều này có liên quan gì đến thử nghiệm đơn vị? Vâng, do bản chất của chúng, các bài kiểm tra đơn vị được điều hành bởi máy chứ không phải bởi con người. Do đó, nhiều người có ấn tượng sai lầm rằng thử nghiệm tự động bằng với thử nghiệm đơn vị . Nhưng điều đó không đúng: các bài kiểm tra đơn vị chỉ là các bài kiểm tra tự động nhỏ thêm .
Bây giờ, giá trị trong các thử nghiệm tự động nhỏ thêm là gì? Ưu điểm là họ kiểm tra các thành phần của một hệ thống phần mềm một cách riêng biệt , cho phép nhắm mục tiêu kiểm tra chính xác hơn và hỗ trợ gỡ lỗi . Nhưng thử nghiệm đơn vị về bản chất không có nghĩa là thử nghiệm chất lượng cao hơn . Nó thường dẫn đến các bài kiểm tra chất lượng cao hơn, do nó bao trùm phần mềm ở mức độ chi tiết tốt hơn. Nhưng có thể kiểm tra hoàn toàn hành vi của chỉ một hệ thống hoàn chỉnh chứ không phải các bộ phận tổng hợp của nó và vẫn kiểm tra kỹ lưỡng.
Nhưng ngay cả với phạm vi kiểm tra đơn vị 100%, một hệ thống vẫn có thể không được kiểm tra kỹ lưỡng. Bởi vì các thành phần riêng lẻ có thể hoạt động hoàn hảo trong sự cô lập, nhưng vẫn thất bại khi được sử dụng cùng nhau. Vì vậy, kiểm tra đơn vị, trong khi rất hữu ích, không đủ để đảm bảo rằng phần mềm hoạt động như mong đợi. Thật vậy, nhiều nhà phát triển bổ sung các bài kiểm tra đơn vị bằng các bài kiểm tra tích hợp tự động, kiểm tra chức năng tự động và kiểm tra thủ công.
Nếu bạn không thấy giá trị trong các bài kiểm tra đơn vị, có lẽ cách tốt nhất để bắt đầu là sử dụng một loại kiểm tra tự động khác. Trong môi trường web, sử dụng công cụ kiểm tra tự động hóa trình duyệt như Selenium thường sẽ mang lại một chiến thắng lớn cho khoản đầu tư tương đối nhỏ. Khi bạn đã nhúng ngón chân vào nước, bạn sẽ dễ dàng nhận thấy các bài kiểm tra tự động hữu ích như thế nào. Và một khi bạn có các bài kiểm tra tự động, kiểm tra đơn vị có ý nghĩa hơn nhiều, vì nó cung cấp khả năng quay vòng nhanh hơn so với các bài kiểm tra tích hợp hoặc kết thúc lớn, vì bạn có thể nhắm mục tiêu các bài kiểm tra tại thành phần mà bạn hiện đang làm việc.
TL; DR: đừng lo lắng về thử nghiệm đơn vị . Chỉ cần lo lắng về việc kiểm tra phần mềm của bạn đầu tiên.