Sự liên quan của Kiểm thử đơn vị trong bản phát hành sớm Phát hành sớm thường là môi trường thế nào?


10

Trong khoảng một năm qua, tôi đã thúc đẩy nhóm của mình hướng tới phương thức phát triển - phát hành sớm - thường phát hành (AKA: Phát triển ứng dụng nhanh, không phải Agile). Để biết thêm thông tin về cách chúng tôi đóng bản dựng, hãy xem câu trả lời của tôi ở đây: Một cách đơn giản để cải thiện chất lượng phát hành trong môi trường RAD

Khi chúng tôi áp dụng RAD, mọi người khá độc lập và họ đang thực hiện thử nghiệm đơn vị trước tiên; các thử nghiệm tích hợp đã xảy ra nhiều sau đó trong quá trình. Đó là một quá trình tự nhiên đối với họ mà không có nhiều thực thi chính thức. Bây giờ tình hình khá khác:

  1. Toàn bộ nền tảng được tích hợp tốt với các bản dựng / phát hành được thiết lập phía máy khách hoạt động mà không có bất kỳ điểm nóng nào.

  2. Các yêu cầu chức năng mới tiếp tục đến và chúng tôi tăng dần xây dựng chúng khi chúng tôi đi.

  3. Động lực chung của hệ thống là rất quan trọng bởi vì trong khi các nhóm phát triển độc lập có thể tuân theo đúng các quy trình, thì những thất bại lớn đã xảy ra do các tình huống phức tạp, không rõ ràng.

  4. Nhiều phần của hệ thống liên quan đến các thuật toán mới và các đầu vào nghiên cứu, do đó, các thách thức (và do đó cơ chế kiểm tra) không hoàn toàn có thể thấy trước một cách chính xác, như kiểm tra tính năng trong phần mềm được xác định rõ.

Gần đây, tôi đã cố gắng để có được bức tranh tổng thể tốt hơn để xem liệu chúng ta có cần cải tiến quy trình hay không. Khi tôi ngồi xuống với nhóm của mình, nhiều người trong số họ chùn bước: "Chúng tôi không làm thử nghiệm đơn vị nữa!" trong khi những người khác nghĩ rằng chúng ta không nên bắt đầu ngay bây giờ vì nó sẽ không bao giờ có hiệu quả.

Là các bài kiểm tra đơn vị hữu ích trong một hệ thống tương đối trưởng thành? Ít nhất chúng ta có nên cân nhắc phạm vi kiểm tra tùy thuộc vào sự trưởng thành của các đơn vị không? Thử nghiệm đơn vị sẽ làm chậm tốc độ phát triển? Có cần phải đánh giá thử nghiệm đơn vị theo một cách khác?

Các thực tiễn tốt nhất về thử nghiệm cho một nền tảng trưởng thành trong môi trường phát hành sớm phát hành sớm là gì?


Tôi nghĩ ý tưởng là phát hành mã bán làm việc sớm và thường xuyên, nhưng phần "bán làm việc" là ẩn. Kiểm tra đơn vị giúp với điều đó. Nhưng kiểm tra đơn vị có thể không đủ. Bạn cũng có thể muốn một mặt của các bài kiểm tra tích hợp.
ccoakley

Câu trả lời:


15

Các thử nghiệm đơn vị không phải chủ yếu để tìm lỗi ở nơi đầu tiên - chúng là để đảm bảo rằng phiên bản tiếp theo của hệ thống của bạn ổn định như phiên bản trước. Chu kỳ phát hành của bạn càng ngắn, điều quan trọng hơn là bạn có thể chạy thử nghiệm này tự động thay vì thực hiện chúng một cách thủ công.

Tất nhiên, nếu bạn có một hệ thống với một số phần độc lập và bạn chỉ làm việc giữa hai bản phát hành ở một phần nhỏ của hệ thống, bạn có thể bỏ qua một số bài kiểm tra đơn vị dành cho các phần khác của hệ thống. Nhưng bạn chắc chắn nên sử dụng (và mở rộng) các bài kiểm tra đơn vị cho các phần mà bạn đang làm việc.

Một điều nữa là khi một hệ thống phát triển, sẽ ngày càng có nhiều nhu cầu kiểm tra tích hợp bổ sung - nhưng điều đó không có nghĩa là bạn sẽ cần ít bài kiểm tra đơn vị hơn.

Câu hỏi thực sự đằng sau bạn có lẽ là một câu hỏi khác. Có khó khăn hơn khi viết bài kiểm tra đơn vị vì hệ thống của bạn ngày càng lớn hơn không? Các bài kiểm tra "đơn vị" của bạn có thực sự là bài kiểm tra đơn vị không, hay chúng không kiểm tra mọi thứ một cách cô lập nữa? Điều này có thể là do họ dựa vào các bộ phận cấp thấp hơn của hệ thống đã ổn định theo thời gian.

Những điều này xảy ra bởi vì các nhà phát triển có xu hướng sử dụng lại các thư viện và mã hiện có bằng cách trực tiếp tham chiếu chúng. Nó thường có tác dụng là việc viết các bài kiểm tra đơn vị trở nên khó khăn hơn, bởi vì chúng thường phải cung cấp một môi trường phức tạp hơn và nhiều dữ liệu kiểm tra hơn. Nếu đó là vấn đề của bạn, thì bạn nên tìm hiểu về các khái niệm chính Nguyên tắc phân chia giao diệnphụ thuộc giao diện , điều này có thể giúp bạn làm cho mã dễ kiểm tra hơn.


"Nó thường có tác dụng là việc viết các bài kiểm tra đơn vị trở nên khó khăn hơn, bởi vì chúng thường phải cung cấp một môi trường phức tạp hơn và nhiều dữ liệu kiểm tra hơn." <- Một bài kiểm tra đơn vị phải dễ dàng đối với một hệ thống đơn giản như một hệ thống phức tạp. Bạn không cần nhiều hơn nửa tá thiết lập cho mỗi lớp. Nếu không, nó chỉ có nghĩa là lớp học của bạn đã phát triển quá lớn. Ngoài ra, kiểm tra đơn vị không nên được gắn với bất kỳ môi trường. (Nhưng bạn có thể đã biết những điều đó rồi, chỉ cần nói ...)
Sleeper Smith

@S ngủerSmith: có, và để có thể viết các bài kiểm tra đơn vị đơn giản như vậy, có thể nên áp dụng DI và ISP - đó chính xác là những gì tôi đã viết ở trên. Xin lỗi nếu tôi không đủ rõ ràng về điều đó.
Doc Brown

4

Bạn nên xem xét việc phát triển theo hướng kiểm thử, trong đó các kiểm thử được thiết kế trước và mô tả cách mã mới sẽ hoạt động khi được viết. Sau đó, bạn làm cho các bài kiểm tra vượt qua.

Theo kinh nghiệm của tôi, điều này có xu hướng làm cho mã gọn hơn và tốt hơn, đặc biệt là cho các thư viện và nó là một phần có thể chạy được của đặc tả (có nghĩa là nó sẽ luôn là tài liệu chính xác).

Điều đó nói rằng, các thử nghiệm hiện tại được sử dụng để đảm bảo rằng mã vẫn hoạt động như mong đợi. Nó có thể bắt được sự cố mã và cho phép bạn đảm bảo rằng mã của bên thứ ba vẫn hoạt động như mong đợi khi nâng cấp.


3

Theo đề xuất của Doc BrownThorbjørn Ravn Andersen , môi trường phát hành sớm thường phát hành có thể hưởng lợi nhiều hơn từ việc phát triển đơn vị tốt và phát triển theo hướng kiểm tra so với một chu kỳ phát hành dài.

Nếu bạn có một hệ thống tích hợp liên tục tốt và các thử nghiệm thể hiện tốt chức năng, bạn có ý tưởng tốt tại bất kỳ thời điểm nào đang hoạt động (vì các thử nghiệm cho chức năng đó đang qua) và những gì chưa được triển khai ( bởi vì không có thử nghiệm cho chức năng đó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.