Có phải là một thực hành tốt để chạy thử nghiệm đơn vị trong móc kiểm soát phiên bản?


43

Từ quan điểm kỹ thuật, có thể thêm một số móc đẩy trước / sau sẽ chạy thử nghiệm đơn vị trước khi cho phép một số cam kết cụ thể được sáp nhập vào nhánh mặc định từ xa.

Câu hỏi của tôi là - tốt hơn là giữ các bài kiểm tra đơn vị trong quá trình xây dựng (do đó, đưa ra các cam kết bị hỏng để repo) hoặc tốt hơn là không cho phép các cam kết "xấu" xảy ra.

Tôi nhận ra rằng tôi không bị giới hạn với hai lựa chọn này. Chẳng hạn, tôi có thể cho phép tất cả các cam kết phân nhánh và kiểm tra trước khi đẩy cam kết hợp nhất vào repo. Nhưng nếu bạn phải chọn chính xác hai giải pháp này, bạn sẽ chọn giải pháp nào và vì lý do chính xác nào?


Câu trả lời:


35

Không, không phải vì hai lý do:

Tốc độ

Cam kết nên nhanh chóng. Một cam kết mất 500 ms, chẳng hạn, quá chậm và sẽ khuyến khích các nhà phát triển cam kết tiết kiệm hơn. Vì bất kỳ dự án nào lớn hơn Hello World, bạn sẽ có hàng chục hoặc hàng trăm bài kiểm tra, sẽ mất quá nhiều thời gian để chạy chúng trong quá trình cam kết trước.

Tất nhiên, mọi thứ trở nên tồi tệ hơn đối với các dự án lớn hơn với hàng ngàn thử nghiệm chạy trong vài phút trên một kiến ​​trúc phân tán, hoặc vài tuần hoặc vài tháng trên một máy.

Điều tồi tệ nhất là bạn không thể làm gì nhiều để làm cho nó nhanh hơn. Các dự án Python nhỏ, có hàng trăm bài kiểm tra đơn vị, mất ít nhất một giây để chạy trên một máy chủ trung bình, nhưng thường lâu hơn nhiều. Đối với ứng dụng C #, nó sẽ trung bình bốn năm giây, vì thời gian biên dịch.

Từ thời điểm đó, bạn có thể trả thêm 10 000 đô la cho một máy chủ tốt hơn sẽ giảm thời gian, nhưng không nhiều hoặc chạy thử nghiệm trên nhiều máy chủ, điều này sẽ chỉ làm mọi thứ chậm lại.

Cả hai đều trả tốt khi bạn có hàng ngàn bài kiểm tra (cũng như các bài kiểm tra chức năng, hệ thống và tích hợp), cho phép chạy chúng trong vài phút thay vì vài tuần, nhưng điều này sẽ không giúp bạn cho các dự án quy mô nhỏ.

Thay vào đó, những gì bạn có thể làm là:

  • Khuyến khích các nhà phát triển chạy thử nghiệm liên quan mạnh mẽ đến mã mà họ đã sửa đổi cục bộ trước khi thực hiện cam kết. Họ có thể không thể chạy hàng ngàn bài kiểm tra đơn vị, nhưng họ có thể chạy năm phần mười trong số đó.

    Hãy chắc chắn rằng việc tìm kiếm các bài kiểm tra có liên quan và chạy chúng thực sự dễ dàng (và nhanh chóng). Visual Studio, ví dụ, có thể phát hiện các thử nghiệm nào có thể bị ảnh hưởng bởi những thay đổi được thực hiện kể từ lần chạy trước. Các IDE / nền tảng / ngôn ngữ / khung công tác khác có thể có chức năng tương tự.

  • Giữ cam kết càng nhanh càng tốt. Thực thi các quy tắc phong cách là OK, bởi vì thông thường, đó là nơi duy nhất để làm điều đó và bởi vì các kiểm tra như vậy thường rất nhanh. Thực hiện phân tích tĩnh là OK ngay khi nó vẫn còn nhanh, điều này hiếm khi xảy ra. Chạy thử nghiệm đơn vị không ổn.

  • Chạy thử nghiệm đơn vị trên máy chủ Tích hợp liên tục của bạn.

  • Hãy chắc chắn rằng các nhà phát triển được thông báo tự động khi họ phá vỡ bản dựng (hoặc khi kiểm tra đơn vị không thành công, điều này thực tế giống như vậy nếu bạn coi trình biên dịch là một công cụ kiểm tra một số lỗi có thể bạn đưa vào mã của mình).

    Ví dụ: truy cập trang web để kiểm tra các bản dựng cuối cùng không phải là một giải pháp. Họ nên được thông báo tự động . Hiển thị cửa sổ bật lên hoặc gửi SMS là hai ví dụ về cách chúng có thể được thông báo.

  • Hãy chắc chắn rằng các nhà phát triển hiểu rằng việc phá vỡ bản dựng (hoặc thất bại trong các bài kiểm tra hồi quy) là không ổn, và ngay khi nó xảy ra, ưu tiên hàng đầu của họ là sửa nó. Việc họ làm việc trên một tính năng ưu tiên cao không phải là vấn đề mà ông chủ của họ yêu cầu giao hàng vào ngày mai: họ đã thất bại trong quá trình xây dựng, họ nên sửa nó.

Bảo vệ

Máy chủ lưu trữ kho lưu trữ không nên chạy mã tùy chỉnh, chẳng hạn như kiểm tra đơn vị, đặc biệt là vì lý do bảo mật. Những lý do này đã được giải thích trong trình chạy CI trên cùng một máy chủ của GitLab?

Mặt khác, nếu ý tưởng của bạn là khởi chạy một quy trình trên máy chủ xây dựng từ hook pre-commit, thì nó sẽ làm chậm hơn nữa các cam kết.


4
Tôi đồng ý, đây là những gì một máy chủ xây dựng dành cho. Kiểm soát nguồn của bạn là để quản lý mã nguồn, không đảm bảo ứng dụng của bạn hoạt động.
Matthew

4
Trong trường hợp cực đoan, trả đũa có thể là một công cụ thông báo cần thiết khi phá vỡ bản dựng.

37
Nửa giây là quá chậm? Đó là một sự sụt giảm trong xô so với việc đưa ra một cái nhìn cuối cùng về những gì được cam kết và sau đó nghĩ và gõ một nhận xét cam kết thích hợp.
Doval

5
@Doval: sự khác biệt là khi bạn đưa ra một cái nhìn cuối cùng hoặc suy nghĩ về nhận xét, bạn là người chủ động , và vì vậy, bạn không chờ đợi. Đây không phải là thời gian bạn dành trước khi nhập ký tự cuối cùng vào IDE của mình và thời gian bạn có thể bắt đầu nhập lại sau khi cam kết kết thúc mới là vấn đề, nhưng bạn chờ bao nhiêu. Đó là lý do tại sao trình biên dịch phải nhanh; Không có vấn đề gì khi bạn dành nhiều thời gian hơn để đọc và viết mã, bởi vì khi bạn làm điều đó, bạn sẽ không chờ đợi, trong khi đó khi mã đang được biên dịch, bạn muốn chuyển sang một hoạt động khác.
Arseni Mourzenko

10
@Thomas: không phải là về sự xao lãng, mà là về sự khó chịu. Theo cách tương tự, 100 ms. "Có tác động có thể đo lường được" đối với cách mọi người đang sử dụng trang web. Mẫu tương tự ở đây: 100 ms. không là gì so với thời gian bạn xem video YouTube hoặc khởi động PC của bạn: một cách có ý thức , bạn sẽ không nhận thấy sự khác biệt giữa 600 ms. và 700 ms. sự chậm trễ. Nhưng vô thức, nó có ảnh hưởng đến hành vi của bạn. Theo cùng một cách, cam kết chậm hơn một chút sẽ không khuyến khích bạn cam kết sớm và thường xuyên.
Arseni Mourzenko

41

Hãy để tôi là người không đồng ý với những người trả lời đồng nghiệp của tôi.

Điều này được gọi là Đăng ký Gated trong thế giới TFS và tôi mong đợi ở nơi khác. Khi bạn cố gắng đăng ký vào một chi nhánh với đăng ký có kiểm soát, kệ sẽ được gửi đến máy chủ, đảm bảo các thay đổi của bạn được xây dựng và các bài kiểm tra đơn vị (đọc: tất cả) đã chỉ định vượt qua. Nếu họ không, nó thông báo cho bạn rằng bạn là một con khỉ xấu đã phá vỡ công trình. Nếu họ làm như vậy, những thay đổi sẽ đi vào kiểm soát nguồn (yay!).

Theo kinh nghiệm của tôi, đăng ký kiểm soát là một trong những quy trình quan trọng nhất để kiểm tra đơn vị thành công - và bằng cách mở rộng, chất lượng phần mềm.

Tại sao?

  • Bởi vì kiểm tra gated buộc mọi người phải sửa các bài kiểm tra bị hỏng. Ngay khi các bài kiểm tra bị hỏng trở thành thứ mà mọi người có thể làm hơn là phải làm, chúng sẽ trở thành ưu tiên của các kỹ sư lười biếng và / hoặc những người kinh doanh khó tính.
    • Một bài kiểm tra bị hỏng càng lâu thì càng khó (và tốn kém hơn).
  • Bởi vì ngay khi mọi người nên chạy thử nghiệm thay vì phải chạy thử nghiệm, việc chạy thử nghiệm bị phá vỡ bởi các kỹ sư lười biếng / hay quên và / hoặc doanh nhân khó tính.
  • Bởi vì ngay khi các bài kiểm tra đơn vị tác động đến thời gian cam kết của bạn, mọi người thực sự bắt đầu quan tâm đến việc thực hiện các bài kiểm tra đơn vị kiểm tra của họ . Vấn đề tốc độ. Vấn đề sinh sản. Vấn đề độ tin cậy. Vấn đề cô lập.

Và tất nhiên, có lợi ích ban đầu bạn mang lại - khi bạn đã kiểm tra và kiểm tra một bộ kiểm tra chắc chắn, mọi thay đổi đều "ổn định". Bạn lưu tất cả chi phí đó (và khả năng xảy ra lỗi) của "lần xây dựng tốt cuối cùng là khi nào?" - tất cả các bản dựng là đủ tốt để phát triển chống lại.

Có, cần có thời gian để xây dựng và chạy thử nghiệm. Theo kinh nghiệm của tôi 5-10 phút cho một ứng dụng C # có kích thước tốt và các bài kiểm tra đơn vị ~ 5k. Và tôi không quan tâm đến điều đó. Có, mọi người nên kiểm tra thường xuyên. Nhưng họ cũng nên cập nhật nhiệm vụ thường xuyên hoặc kiểm tra email hoặc uống cà phê hoặc hàng tá những thứ "không hoạt động trên mã" khác tạo nên công việc của một công cụ phần mềm để chiếm thời gian đó. Kiểm tra mã xấu tốn kém hơn nhiều so với 5-10 phút.


3
+1 Tôi muốn thêm, rằng nhiều dự án nguồn mở có sự phân biệt rõ ràng giữa đóng góp và cam kết. Những lý do cho nó rất giống với lý do tại sao kiểm tra gated tồn tại.
JensG

Một vấn đề quan trọng với việc đăng ký kiểm soát là nó ức chế giải quyết vấn đề hợp tác của mã khó. Điều này thậm chí còn có ý nghĩa hơn với các đội phân phối.
CuriousRợi

2
@CquilRợi - bạn thấy thế nào? Mọi người hiếm khi cam kết hợp tác ngay cả khi họ làm việc cộng tác. Mặt khác, các kệ hoặc các nhánh nhiệm vụ nhấp nhô hoạt động tốt cho điều đó trong khi không cản trở phần còn lại của nhóm.
Telastyn

@ Telastyn Tủ kệ là một thuật ngữ mới đối với tôi. Tôi nhận thấy rằng đây là một tùy chọn MS VS, không phải là tùy chọn cho một số lượng lớn các dự án. Trong lĩnh vực phát triển ứng dụng di động, VS là một người không chơi.
CuriousRợi

3
@CantlyRợi - thật sao? Một nhóm phân phối hơn 17 giờ quan tâm nhiều hơn về việc chờ đợi 10 phút cho một cam kết hơn khả năng xây dựng bị hỏng trong khi bên vi phạm đang ngủ? Điều đó dường như ... Ít hơn tối ưu.
Telastyn

40

Cam kết nên chạy nhanh. Khi tôi cam kết một số mã, tôi muốn nó được đẩy đến máy chủ. Tôi không muốn đợi một vài phút trong khi nó chạy thử pin. Tôi chịu trách nhiệm về những gì tôi đẩy lên máy chủ và không cần ai trông nom tôi bằng các cam kết.

Điều đó nói rằng, một khi nó đến máy chủ, nó cần được phân tích, kiểm tra đơn vị và xây dựng ngay lập tức (hoặc trong một khung thời gian ngắn). Điều này sẽ cảnh báo tôi về thực tế rằng các bài kiểm tra đơn vị bị hỏng hoặc nó không được biên dịch hoặc tôi đã tạo ra một mớ hỗn độn được hiển thị bởi các công cụ phân tích tĩnh có sẵn. Việc này được thực hiện càng nhanh (xây dựng và phân tích), phản hồi của tôi càng nhanh và tôi có thể sửa nó nhanh hơn (những suy nghĩ chưa hoàn toàn tráo đổi ra khỏi não tôi).

Vì vậy, không, không đặt các bài kiểm tra và như vậy trong các cam kết trên máy khách. Nếu bạn phải, hãy đặt chúng trên máy chủ trong một cam kết bài (vì bạn không có máy chủ CI) hoặc trên máy chủ xây dựng CI và cảnh báo tôi một cách thích hợp về các vấn đề với mã. Nhưng đừng chặn cam kết xảy ra ở nơi đầu tiên.

Tôi cũng nên chỉ ra rằng với một số diễn giải về Phát triển hướng thử nghiệm, người ta nên kiểm tra trong một thử nghiệm đơn vị trước tiên . Điều này chứng minh và tài liệu các lỗi hiện diện. Sau đó, một lần đăng ký sau sẽ là mã sửa lỗi kiểm tra đơn vị. Ngăn chặn bất kỳ đăng ký nào cho đến khi các bài kiểm tra đơn vị vượt qua sẽ làm giảm giá trị hiệu quả của việc kiểm tra trong một bài kiểm tra đơn vị không ghi lại được vấn đề.

Liên quan: Tôi có nên kiểm tra đơn vị cho các khuyết tật đã biết? giá trị của việc kiểm tra trong các bài kiểm tra đơn vị thất bại là gì?


2
Commits should run fast.lợi ích của việc này là gì? Tôi tò mò vì chúng tôi hiện đang sử dụng các bản kiểm tra có kiểm soát. Thông thường các đăng ký của tôi là một tích lũy của một giờ hoặc lâu hơn công việc, vì vậy chờ 5 phút không phải là một vấn đề lớn. Trong thực tế, tôi đã thấy rằng thông thường khi tôi đang vội vàng thì việc xây dựng xác nhận là hữu ích nhất để bắt những lỗi ngớ ngẩn (kết quả của việc vội vã)
Justin

1
@Justin Chờ năm phút là chờ năm phút bất kể nó ở đâu. Bạn không cần phải dùng kiếm nerf mỗi khi bạn thực hiện cam kết. Và không có gì lạ khi tôi chia một giờ làm việc thành nhiều cam kết là mỗi đơn vị khái niệm của nhau - "cam kết mã dịch vụ còn lại" theo sau là "cam kết mã cho trang khách được phục vụ" như hai cam kết riêng biệt (không đề cập đến các tinh chỉnh css như một cam kết khác). Nếu mỗi trong số này mất 5 phút để chạy, thì 1/6 thời gian của tôi sẽ dành để chờ kiểm tra. Điều này sẽ dẫn đến các cam kết rollup lớn hơn, khó theo dõi lỗi hơn.

5 phút chờ đợi để chạy thử nghiệm đơn vị? Tôi cảm thấy như các dự án mà các bạn đang làm việc nên được chia thành các thành phần nhỏ hơn.
dùng441521

@Justin catching silly mistakes (as a result of rushing)chính xác. đổ xô nói chung là một thực hành xấu trong công nghệ phần mềm. Robert C. Martin khuyên bạn nên viết mã như thực hiện phẫu thuật youtube.com/watch?v=p0O1VVqRSK0
Jerry Joseph

10

Về nguyên tắc, tôi nghĩ sẽ hợp lý khi ngăn mọi người thực hiện thay đổi đối với tuyến chính phá vỡ công trình. Đó là, quá trình thực hiện các thay đổi đối với nhánh chính của kho lưu trữ của bạn cần phải đảm bảo rằng tất cả các thử nghiệm vẫn vượt qua. Phá vỡ việc xây dựng đơn giản là quá tốn kém về thời gian bị mất cho tất cả các kỹ sư trong dự án để làm bất cứ điều gì khác.

Tuy nhiên, giải pháp cụ thể của hook hook không phải là một kế hoạch tốt.

  1. Nhà phát triển phải chờ các bài kiểm tra chạy trong khi cam kết. Nếu nhà phát triển phải chờ trên máy trạm của mình để tất cả các bài kiểm tra vượt qua, bạn đã lãng phí thời gian kỹ sư có giá trị. Kỹ sư cần có khả năng chuyển sang nhiệm vụ tiếp theo, ngay cả khi anh ta sẽ phải chuyển trở lại vì các bài kiểm tra kết thúc không thành công.
  2. Các nhà phát triển có thể muốn cam kết mã bị hỏng trong một chi nhánh. Trong một nhiệm vụ lớn hơn, phiên bản mã của nhà phát triển có thể dành nhiều thời gian không ở trạng thái qua. Rõ ràng, việc hợp nhất mã đó vào dòng chính sẽ rất tệ. Nhưng điều quan trọng là nhà phát triển vẫn có thể sử dụng kiểm soát phiên bản để theo dõi tiến trình của mình.
  3. Thỉnh thoảng có những lý do tốt để bỏ qua quá trình và bỏ qua các bài kiểm tra.

2
# 1 bị che khuất bằng cách cho phép các nhà phát triển đăng ký vào một chi nhánh cá nhân hoặc kho lưu trữ cục bộ. Chỉ khi nhà phát triển muốn mã của họ ở đâu đó thì các nhà phát triển khác mới có thể thấy mã mà các bài kiểm tra đơn vị cần chạy. Như với # 1, # 2 bị che khuất bởi chỉ móc vào các nhánh chính. # 3 bị phản đối bởi thực tế là A) Bất kỳ tính năng nào như vậy đều có thể bị vô hiệu hóa, mặc dù đó là một rắc rối (và phải là rắc rối) và B) Các thử nghiệm đơn vị không thành công có thể bị vô hiệu hóa.
Brian

@Brian, tôi hoàn toàn đồng ý, bạn có thể thực hiện công việc này. Nhưng, cố gắng thực hiện bằng cách chặn phía máy chủ hook hook sẽ không hoạt động.
Winston Ewert

điểm tốt. Breaking the build is simply too costly in terms of lost time for all engineers on the projectTôi sẽ đề nghị sử dụng một số loại công cụ thông báo xây dựng để tránh tất cả các kỹ sư kết thúc mất thời gian trên mỗi bản dựng bị hỏng
Jerry Joseph

3

Không, bạn không nên như những câu trả lời khác đã chỉ ra.

Nếu bạn muốn có một cơ sở mã được đảm bảo không có các thử nghiệm thất bại, thay vào đó bạn có thể phát triển trên các nhánh tính năng và thực hiện các yêu cầu kéo thành chủ. Sau đó, bạn có thể xác định các điều kiện tiên quyết để chấp nhận các yêu cầu kéo đó. Lợi ích là bạn có thể đẩy thực sự nhanh chóng và các bài kiểm tra chạy trong nền.


2

Phải chờ xây dựng thành công và thử nghiệm trên mỗi cam kết với chi nhánh chính thực sự khủng khiếp, tôi nghĩ mọi người đều đồng ý về điều này.

Nhưng có những cách khác để đạt được một nhánh chính phù hợp. Đây là một gợi ý, một chút tương tự trong tĩnh mạch của các đăng ký kiểm soát trong TFS, nhưng có thể khái quát hóa cho bất kỳ hệ thống kiểm soát phiên bản nào có nhánh, mặc dù tôi chủ yếu sử dụng thuật ngữ git:

  • Có một nhánh dàn mà bạn chỉ có thể cam kết hợp nhất giữa các nhánh dev của bạn và nhánh chính

  • Thiết lập một hook bắt đầu hoặc xếp hàng một bản dựng và kiểm tra các xác nhận được thực hiện trên nhánh dàn, nhưng điều đó không làm cho committer chờ

  • Khi xây dựng và kiểm tra thành công, hãy tự động làm cho nhánh chính tiến lên nếu cập nhật

    Lưu ý: không tự động hợp nhất vào nhánh chính, vì hợp nhất được thử nghiệm, nếu không phải là hợp nhất chuyển tiếp theo quan điểm của nhánh chính, có thể thất bại khi sáp nhập vào nhánh chính với các cam kết ở giữa

Hậu quả là:

  • Cấm con người cam kết với chi nhánh chính, tự động nếu bạn có thể, nhưng cũng là một phần của quy trình chính thức nếu có kẽ hở hoặc nếu nó không khả thi về mặt kỹ thuật để thực thi điều này

    Ít nhất, bạn có thể chắc chắn rằng không ai sẽ làm điều đó một cách vô ý, hoặc không có ác ý, một khi đó là quy tắc cơ bản. Bạn không nên cố gắng làm điều đó, bao giờ.

  • Bạn sẽ phải chọn giữa:

    • Một nhánh dàn, sẽ làm cho việc hợp nhất thành công thực sự thất bại nếu một lần hợp nhất chưa được xây dựng và không được kiểm tra không thành công

      Ít nhất, bạn sẽ biết việc hợp nhất nào thất bại và có ai đó sửa nó, nhưng việc hợp nhất ở giữa không thể truy nguyên được (bởi hệ thống kiểm soát phiên bản) cho kết quả của quá trình xây dựng và kiểm tra thêm.

      Bạn có thể xem chú thích tệp (hoặc đổ lỗi), nhưng đôi khi thay đổi trong tệp (ví dụ: cấu hình) sẽ tạo ra lỗi ở những nơi không mong muốn. Tuy nhiên, đây là một sự kiện khá hiếm.

    • Nhiều nhánh dàn, sẽ cho phép sáp nhập thành công không xung đột để đến nhánh chính

      Ngay cả trong trường hợp một số chi nhánh dàn dựng khác có sự hợp nhất không xung đột . Truy xuất nguồn gốc tốt hơn một chút, ít nhất là trường hợp một vụ sáp nhập không mong đợi một sự thay đổi ảnh hưởng từ một vụ sáp nhập khác. Nhưng một lần nữa, điều này là đủ hiếm để không lo lắng về mỗi ngày hoặc mỗi tuần.

      Để có sự hợp nhất không xung đột trong hầu hết thời gian, điều quan trọng là phải phân chia các nhánh theo giai đoạn một cách hợp lý, ví dụ: mỗi nhóm, mỗi lớp hoặc mỗi thành phần / dự án / hệ thống / giải pháp (bạn đặt tên cho nó là bao nhiêu).

      Nếu nhánh chính được chuyển tiếp sang hợp nhất khác, bạn phải hợp nhất lại. Hy vọng rằng, đây không phải là một vấn đề với sự hợp nhất không xung đột hoặc với rất ít xung đột.

So với đăng ký kiểm soát, ưu điểm ở đây là bạn có sự đảm bảo của một nhánh chính hoạt động, bởi vì nhánh chính chỉ được phép đi tiếp, không được tự động hợp nhất các thay đổi của bạn với bất kỳ điều gì đã được cam kết ở giữa. Vì vậy, điểm thứ ba là sự khác biệt cần thiết.


Nhưng quan điểm của việc có một nhánh hoạt động không (thường) là để đảm bảo bạn có một bản phát hành ổn định, mà là để cắt giảm sự đập phá gây ra bởi các nhà phát triển làm việc cùng một mã.
Telastyn

Không, nếu bạn có một repo lớn với các đội lớn, phân phối toàn cầu. Chẳng hạn, Microsoft sử dụng một cách tiếp cận tương tự, nhiều lớp hơn với Windows.
acelent

2

Tôi thích "vượt qua các bài kiểm tra đơn vị" là một cổng để gửi mã. Tuy nhiên, để làm cho công việc đó, bạn sẽ cần một vài điều.

Bạn sẽ cần một khung xây dựng lưu trữ các đồ tạo tác.

Bạn sẽ cần một khung kiểm tra lưu trữ trạng thái kiểm tra từ các lần chạy thử (thành công), với bất kỳ (các) vật phẩm cụ thể nào.

Bằng cách đó, việc đăng ký với các bài kiểm tra đơn vị vượt qua sẽ nhanh chóng (kiểm tra chéo từ nguồn đến vật phẩm được xây dựng khi nhà phát triển kiểm tra các bài kiểm tra trước khi đăng ký), những người kiểm tra đơn vị không thành công sẽ bị chặn và nhà phát triển thuận tiện quên kiểm tra các bản dựng trước khi cam kết sẽ được khuyến khích ghi nhớ vào lần tới, bởi vì chu trình biên dịch và kiểm tra dài.


1

Tôi muốn nói rằng nó phụ thuộc vào dự án và phạm vi của các bài kiểm tra tự động được chạy trên "cam kết".

Nếu các thử nghiệm bạn muốn chạy trong trình kích hoạt đăng ký thực sự nhanh hoặc nếu quy trình làm việc của nhà phát triển sẽ buộc một số công việc quản trị sau khi đăng ký như vậy, thì tôi nghĩ rằng nó không quan trọng lắm và buộc các nhà phát triển chỉ kiểm tra trong những thứ hoàn toàn chạy các bài kiểm tra cơ bản nhất. (Tôi cho rằng bạn sẽ chỉ chạy các thử nghiệm cơ bản nhất trên trình kích hoạt như vậy.)

Và tôi nghĩ, tốc độ / quy trình làm việc cho phép, đó là một điều tốt để không thúc đẩy các thay đổi cho các nhà phát triển khác thất bại trong các bài kiểm tra - và bạn chỉ biết nếu họ thất bại nếu bạn chạy chúng.

Bạn viết "cam kết ... đến chi nhánh từ xa" trong câu hỏi, điều này có nghĩa với tôi đây là (a) không phải là điều mà một nhà phát triển làm trong vài phút, do đó, một sự chờ đợi nhỏ có thể được chấp nhận rất tốt, và (b) sau đó như vậy một cam kết thay đổi mã có thể ảnh hưởng đến các nhà phát triển khác, vì vậy kiểm tra bổ sung có thể theo thứ tự.

Tôi có thể đồng ý với các câu trả lời khác về "không làm cho các nhà phát triển của bạn xoay ngón tay cái trong khi chờ đợi" cho một hoạt động như vậy.


1

Cam kết bị hỏng không nên được cho phép trên thân cây , vì thân cây là những gì có thể đi vào sản xuất. Vì vậy, bạn cần đảm bảo có một cổng mà họ cần phải vượt qua trước khi ở trên thân cây . Tuy nhiên, các xác nhận bị hỏng có thể hoàn toàn ổn trong một repo miễn là nó không ở trên thân cây.

Mặt khác, yêu cầu các nhà phát triển chờ đợi / khắc phục sự cố trước khi đẩy các thay đổi vào kho lưu trữ có một số nhược điểm.

Vài ví dụ:

  • Trong TDD, thông thường cam kết và đẩy các thử nghiệm thất bại cho các tính năng mới trước khi bắt đầu triển khai tính năng này
  • Điều tương tự cũng xảy ra đối với việc báo cáo lỗi bằng cách cam kết và đẩy một bài kiểm tra thất bại
  • Đẩy mã không hoàn chỉnh cho phép 2 hoặc nhiều người làm việc trên một tính năng song song dễ dàng
  • Cơ sở hạ tầng CI của bạn có thể mất thời gian xác minh, nhưng nhà phát triển không phải chờ
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.