Nhận xét mã để họ thực sự làm việc trong Agile thực sự?


13

Vì vậy, tôi bắt đầu làm việc cho một tập đoàn lớn, một trong số đó có 3 chữ cái và họ đang cố gắng trở thành Agile, nhưng có vô số quy trình, mà tôi không cảm thấy là Agile.

Một trong những điều khiến tôi đau lòng nhất là đánh giá mã. Công việc cuối cùng của tôi là với một công ty khởi nghiệp mà tôi muốn nói là nhóm phát triển Agile nhất mà tôi đã thấy, đã tham gia và / hoặc đã từng nghe nói đến.

Dù sao, lập luận của tôi là Đánh giá mã là một sự lãng phí thời gian trong phát triển lặp hoặc Agile trong đó UX / UI cực kỳ / dữ dội (nghĩ rằng sự hoàn hảo của Apple / Steve Jobs). Có lẽ ai đó ở đây có thể giúp hiểu trước khi họ sa thải tôi?

Đây là quá trình phát triển của tôi và là quá trình khởi nghiệp cuối cùng của tôi ... rất Agile.

Chúng tôi thực hiện công việc tính năng ban đầu để sắp xếp nhiệm vụ / todos phát triển. Chúng tôi sẽ chế giễu một vài phiên bản và trình bày cho người dùng, nhóm và tiếp thị để nhận phản hồi. Sau đó, chúng tôi thực hiện một bước lặp khác để có được một vòng từ các bên liên quan ở trên. Sau đó, chúng tôi sắp xếp công việc và bắt đầu. Chúng tôi có các mốc và ngày để gặp nhau, nhưng chúng tôi tiếp tục cắm đi. Chúng tôi không có đánh giá mã trong bất kỳ điều này. Một vài lần trong những tuần phát triển của chúng tôi, chúng tôi lại tổ chức các cuộc gặp gỡ với các bên liên quan để xem liệu họ có đồng ý các tính năng / chức năng / UX / UI vẫn phù hợp và đúng mục tiêu hay không.

Khi chúng ta gần đến cuối chu kỳ lặp lại 8 tuần, QA bắt đầu thử nghiệm, sau đó nó sẽ đến với người dùng alpha và cuối cùng là người dùng beta. Nhưng trong quá trình phát triển alpha và beta, các tính năng mới và các tính năng cũ hơn sẽ thực hiện các thay đổi hàng ngày hoặc hàng giờ cho UI để cải thiện UX. Vì vậy, một tính năng đang được phát triển bản phát hành này, cuối cùng có thể được thay đổi thêm 3 lần trong bốn tuần qua để cải thiện và hoàn thiện nó hoặc thêm một vài tính năng nhỏ (ví dụ: làm cho thành phần trở nên bóng bẩy hơn hoặc thông minh hơn). Đôi khi các thay đổi có thể là bề ngoài có nghĩa là không có thao tác CRUD nào được thay đổi hoặc sửa đổi, nhưng tất cả UI chỉ thay đổi.

Vì vậy, với loại quy trình phát triển này, Agile cực đoan, các đánh giá mã sẽ không lãng phí thời gian? Có nghĩa là nếu tôi có một hoặc hai nhà phát triển khác xem xét mã của mình, nhưng sau đó mã đó thay đổi thêm 3 lần nữa trước khi nó ra khỏi cửa, vì tất cả các cải tiến UI / UX, chúng tôi không lãng phí thời gian của mình cho 3 lần đầu tiên họ đã xem xét nó mã như mã / thành phần / UI đó đã bị loại bỏ?

Chúng tôi chưa bao giờ gặp nhiều vấn đề về chất lượng với quy trình này và vâng, nếu nhà phát triển bỏ lại tất cả kiến ​​thức, nhưng chúng tôi luôn tìm thấy các nhà phát triển thông minh để tiếp nhận và tiếp quản.

Và vâng, chúng tôi có rất nhiều người thử nghiệm vì họ có thể phải kiểm tra lại mọi thứ 3 hoặc 4 lần. Ngoài ra, vui lòng đừng gác máy khi hỏi tại sao tất cả UI / UX thay đổi ... đó chỉ là cách mọi thứ được thực hiện ... đó là lý do tại sao ứng dụng giành được hàng tấn giải thưởng cho UI / UX và người dùng sẽ giết vì ứng dụng. Quá trình suy nghĩ là nếu tôi có thể cải thiện thậm chí 2% trong một cái gì đó bởi vì tôi có thêm một giờ thì hãy làm điều đó. Người dùng sẽ hạnh phúc hơn, có nghĩa là nhiều đô la hoặc người dùng hơn. Và vâng, người dùng của chúng tôi vẫn ổn với ứng dụng thay đổi liên tục vì đó là cách nó được thực hiện kể từ ngày đầu tiên để họ không thấy nó là xấu hay tiêu cực.

Hy vọng bài đăng này không trở nên khoa trương, nhưng tôi không thể thấy Code Reviews không lãng phí. Có thể 2% tất cả mã của chúng tôi trong mã được xem xét có lỗi. Mỗi bản phát hành, chúng tôi có thể tìm thấy 3 lỗi thông qua đánh giá mã. Vì vậy, kết thúc là 40 giờ xem xét mã cho mỗi nhà phát triển trên mỗi bản phát hành (4 x 40 = 160 giờ) để tìm ra 3 đến 5 lỗi? Có thể 50% trong số đó có 3 đến 5 lỗi đã được QA chọn. Sẽ không tốt hơn nếu dành 40 giờ cho mỗi nhà phát triển để thêm một tính năng mới hoặc cải thiện các tính năng hiện có?


@DeadMG: Trải nghiệm người dùng
Steven A. Lowe

4
@ user25702: quá trình bạn mô tả không giống như Agile, nó có vẻ như RUP / xoắn ốc. Cụ thể "Một vài lần trong những tuần phát triển của chúng tôi, chúng tôi lại tổ chức các cuộc gặp gỡ với các bên liên quan để xem liệu họ có đồng ý các tính năng / chức năng / UX / UI hay không vẫn còn phù hợp." là chống nhanh nhẹn; các tính năng được đóng băng trong một lần lặp để tránh các vấn đề về mục tiêu di động liên quan đến các phương pháp RUP / xoắn ốc. Đối với câu hỏi danh nghĩa của bạn, tôi không thấy nhiều giá trị trong các đánh giá mã ở đây nếu và chỉ khi bạn chắc chắn các lỗi sẽ được QA tìm thấy.
Steven A. Lowe

1
Lặp lại 8 tuần không nhanh nhẹn và chắc chắn không "cực kỳ nhanh nhẹn".
Martin Wickman

Một số PM nghĩ rằng lặp đi lặp lại có nghĩa là chúng ta có một vài lần lặp ngắn ở đầu và một vài lần lặp dài ở giữa theo sau là nhiều lần lặp ngắn ở cuối khi cần. Vấn đề là điều này gây rối với nhịp chiến đấu của phát triển phần mềm và khả năng bắt lỗi sớm. Lặp lại 8 tuần sẽ là một trong những lần lặp giữa đó. Tôi đồng ý rằng điều này không nhanh nhẹn.
Berin Loritsch

Nếu bạn muốn tranh luận đánh giá mã đi, thì tôi khuyên bạn nên lấy một số thống kê. Tài liệu về thời gian thực hiện đánh giá mã (trong tổng số giờ làm việc), số lỗi / vấn đề được phát hiện trong đó, cùng với mức độ nghiêm trọng của vấn đề. Đối với nhóm của tôi, hóa ra chúng tôi đã dành ít nhất 16 giờ cho mỗi lần xem xét, phát hiện trung bình 2-3 lỗi, tất cả đều là mỹ phẩm trong tự nhiên. Thật dễ dàng để tranh luận về phương pháp thử nghiệm đầu tiên để thay thế các đánh giá ngang hàng khi đối mặt với những con số đó.
Berin Loritsch

Câu trả lời:


13

Có một vài điều mà các đánh giá mã có thể làm cho bạn và một số điều họ không thể làm được. Các đối số có lợi cho đánh giá mã:

  • Sở hữu tập thể
  • Tìm lỗi (QC)
  • Thực thi phong cách nhất quán (QA)
  • Kèm cặp

Nhiều quy trình nhanh giải quyết chúng theo những cách khác nhau:

  • Quyền sở hữu tập thể: mọi người trong nhóm chịu trách nhiệm về dự án, điều đó có nghĩa là mọi người sẽ chú ý vào mã bất cứ lúc nào.
  • Miễn phí tái cấu trúc: điều này đưa các đánh giá mã lên cấp độ tiếp theo và cho phép bất kỳ ai trong nhóm thực hiện tái cấu trúc khi cần thiết.
  • Kiểm tra đơn vị (QC): kiểm tra đơn vị hiệu quả hơn và ít bị lỗi của con người hơn sau đó kiểm tra trực quan. Trong thực tế, tôi vẫn chưa tìm thấy một phương tiện hiệu quả hơn.
  • Lập trình cặp (QA): chăm sóc tư vấn và cung cấp lời khuyên tái cấu trúc sớm khi mã được viết. Đây vẫn là một chủ đề gây tranh cãi, nhưng tôi thấy nó có ích trong khi tăng cường một nhà phát triển mới. Đây cũng là thời điểm tốt để thực thi các tiêu chuẩn mã hóa.

Về bản chất, có những cách khác để chăm sóc những lợi ích tiềm năng mà bạn thường có khi thực hiện đánh giá ngang hàng. Kinh nghiệm cá nhân của tôi với các đánh giá ngang hàng là chúng là các cơ chế rất kém hiệu quả và không hiệu quả trong việc tìm ra lỗi hoặc lỗi thiết kế lớn hơn. Tuy nhiên, họ có vị trí trong một số đội và trong các dự án mà sự nhanh nhẹn là không khả thi (vì bất kỳ lý do gì), chúng là khá cần thiết.


3
Dường như có một số thông tin sai trong câu trả lời hiện tại. Quyền sở hữu tập thể không có nghĩa là "mọi con mắt trên tất cả các mã mọi lúc". Tái cấu trúc không có gì để làm với phát hiện lỗi. Kiểm tra đơn vị và kiểm tra phục vụ các mục đích khác nhau và trên thực tế mỗi người có thể phát hiện ra các loại khiếm khuyết khác nhau (ví dụ trong các câu trả lời khác). Lập trình cặp, trong khi một hình thức đánh giá, không phải là sự thay thế thực sự cho việc kiểm tra Fagan. Trải nghiệm cá nhân của bạn có vẻ không điển hình, đặc biệt là liên quan đến lỗi thiết kế - bạn đã làm loại đánh giá nào? Làm thế nào bạn đo lường hiệu quả cho các đánh giá?
Michael

1
Thời gian thực hiện đánh giá so với các khiếm khuyết được tìm thấy và mức độ nghiêm trọng của chúng. Chúng tôi so sánh với các số liệu tương tự so với thử nghiệm đơn vị. Các vấn đề được phát hiện trong quá trình xem xét mã hầu như luôn luôn liên quan đến định dạng mã và chúng mất nhiều thời gian hơn để thực hiện. Thời gian tương tự dành cho việc kiểm tra đơn vị đã phát hiện ra các vấn đề thực sự và không còn phải chuẩn bị và làm nữa.
Berin Loritsch 6/2/2015

"Quyền sở hữu tập thể": Theo kinh nghiệm của tôi, điều này thường chỉ là ảo tưởng: những người đánh giá thường đánh bóng vào những chi tiết nhỏ và không nhìn thấy bức tranh lớn trong mã do người khác viết. Sau đó, khi sửa đổi mã đó, họ không thực sự hiểu nó và họ (1) không dám thay đổi nó, hoặc (2) họ viết lại nó một cách rộng rãi để họ có thể hiểu nó. Cách tiếp cận (2) thường có hai tác dụng phụ: (A) họ giới thiệu các lỗi và (B) nhà phát triển ban đầu không hiểu mã nữa.
Giorgio

Điểm B cho thấy thường những gì xảy ra không phải là sở hữu tập thể mà là sở hữu cá nhân chuyển từ nhà phát triển này sang nhà phát triển khác mọi lúc. Theo cách này, mỗi thành viên trong nhóm đại khái sẽ biết mã làm gì và cách thức tổ chức, nhưng không ai thực sự hiểu nó sâu sắc. Quyền sở hữu mã tập thể thực sự sẽ cần nhiều thời gian và thảo luận về mã hơn để có được sự hiểu biết chung, nhưng thường thì lần này không có sẵn.
Giorgio

11

Có phải các đánh giá mã chỉ để tìm lỗi mặc dù? Bạn dường như nghĩ đó là sự thật và tôi thì không.

Tôi cho rằng các đánh giá mã có thể liên quan nhiều hơn đến quyền sở hữu tập thể của mã, đảm bảo rằng kiến ​​thức nằm trong nhiều đầu và chuẩn bị cho những người khác kế thừa mã có thể dành cho các tính năng mới cũng như các lỗi. Tôi thích đánh giá mã như một cách để kiểm tra và cân bằng hệ thống vì bạn không bao giờ biết khi nào ai đó có thể có ý tưởng về nơi nào đó có thể được viết lại để duy trì các quy ước.


4

Lập trình cặp là câu trả lời XP để đánh giá mã. Về cơ bản, mỗi dòng mã được xem xét khi nó được viết. Đó là những đánh giá mã được đưa đến mức cực đoan.


7
Tôi sẽ tranh luận mạnh mẽ với điều này. Chắc chắn, nó đang được xem xét bởi hai người, nhưng những người đó thường ở trên cùng một trang khi mã được viết. Đánh giá mã là một người có tâm trạng hoàn toàn khác khi nhìn vào mã của bạn và tìm các loại vấn đề "doh! Quên về việc xử lý trường hợp đó" - XP thực sự không giúp được gì cho vấn đề đó.
Billy ONeal

4

Các đánh giá và kiểm tra mã thường không bắt được các loại lỗi tương tự và các lỗi bị bắt bởi đánh giá mã có thể dễ sửa hơn, vì vị trí của lỗi đã được biết.

Bạn không thể biết liệu mã không có lỗi chỉ vì nó vượt qua kiểm tra mà không được ghi lại. "Kiểm tra chỉ có thể chứng minh sự hiện diện của lỗi chứ không phải sự vắng mặt." (Dijkstra?)

Đánh giá mã cũng giữ kiểu mã giống nhau và có khả năng tìm những nơi mã không tốt nhưng hiện tại vẫn hoạt động. Nó tiết kiệm chi phí bảo trì xuống đường.

Ngoài ra, nhu cầu của một tập đoàn lớn và một công ty khởi nghiệp là khác nhau. Khởi nghiệp thường thất bại, và phải di chuyển nhanh. Các tập đoàn lớn nhận được nhiều giá trị hơn từ việc làm đúng hơn là nhanh nhất có thể. Bạn có thể thích làm việc tại các công ty khởi nghiệp hơn các công ty lớn, nhưng đó không phải là lý do để cố gắng áp đặt các chiến lược khởi nghiệp khi họ không phù hợp.


2

Các đánh giá mã của bạn chỉ bao giờ bật lên các thay đổi UI / UX? Tôi sẽ tranh luận rằng đó không phải là một đánh giá mã, đó là một bài kiểm tra khả năng sử dụng. Đánh giá mã nhiều hơn về việc xử lý các vấn đề mà người dùng / người kiểm tra / doanh nghiệp / bất cứ điều gì không bao giờ thấy, bởi vì chúng nằm trong mã. Manh mối ở ngay trong tên.

Bây giờ tôi sẽ đồng ý với bạn rằng có một đường được vẽ ở đâu đó. Bạn có xem lại 4 lần lặp của cùng một thay đổi UI không? Hoặc bạn có trải qua 4 lần lặp lại điều đó, với mỗi lần lặp có khả năng làm cho mã ít được bảo trì hơn không? Tôi sẽ nói thử và đo cả hai cách tiếp cận và tìm sự cân bằng phù hợp cho nhóm của bạn, nhưng đừng từ bỏ hoàn toàn các đánh giá mã.

Ngay cả khi đánh giá mã không bao giờ phát sinh vấn đề, nó vẫn có một lợi ích mà bạn hiếm khi nhận thấy cho đến khi nó không xuất hiện: mọi đoạn mã được hai nhà phát triển xem xét, vì vậy hai nhà phát triển biết thay đổi là gì và dự định đạt được . Vì vậy, một trong số họ bị ốm vào ngày hôm sau và được nghỉ một tuần, người còn lại có thể nhận bất kỳ công việc khẩn cấp nào họ đang làm.


1

Tôi có xu hướng đồng ý rằng quyền sở hữu tập thể và ghép nối cùng với TDD và CI là các thuốc giải độc Agile cho các phiên đánh giá mã chính thức.

Ngay cả trong UP / Xoắn ốc, tôi không phải là một fan hâm mộ lớn của một bước quy trình cụ thể là "xem xét mã" bởi vì dường như đối với tôi, các loại vấn đề mà nó có thể tìm thấy được phát hiện muộn hơn so với khả năng của chúng được đầu tư vào một số tiền mặt hợp tác và một số tự động hóa đơn giản.

Tôi cảm thấy rằng vì đã có: - một số đánh giá được chia sẻ về thiết kế (thường được thể hiện bằng UML ít nhất trên bảng trắng) có nghĩa là các vấn đề thiết kế quy mô lớn hoặc sử dụng API kém, v.v. bị bắt trước khi viết rất nhiều mã. - FxCop, CheckStyle, FindBugs (hoặc tương tự) chạy cùng với các bản dựng tích hợp liên tục tự động để bắt tên, kiểu dáng, khả năng hiển thị, sao chép mã, v.v.

Chúng tôi đã có thể thất bại sớm hơn và nhận được phản hồi nhanh hơn thói quen xem xét mã hạ nguồn sẽ được tạo ra.

Tôi không nói rằng thật lãng phí thời gian để ngồi xuống và nhìn vào cơ sở mã của bạn một lần, nhưng làm cho việc xem xét mã là một bước kết nối để gọi một cái gì đó được thực hiện có vẻ như nó tạo ra rất nhiều công việc có thể đã được tiến hành tránh với sự kiểm tra / hợp tác tốt hơn ngược dòng.


0

Một trong những mục tiêu chính mà tôi mong đợi từ các đánh giá mã là tăng tính dễ bảo trì mã. Đánh giá mã phải giúp mọi người viết mã rõ ràng tuân thủ hợp lý với các tiêu chuẩn mã hóa tốt. Hầu hết các mã được bảo trì rất nhiều đặc biệt là trong các công ty lớn. Hoàn vốn cho mã duy trì nên bắt đầu trước khi mã được phát hành và tiếp tục sau đó.

Mã đánh giá trong và của chính họ sẽ không bao giờ dẫn đến thay đổi mã. Nếu đánh giá mã chỉ ra rằng các thay đổi là bắt buộc, thì việc thực hiện thay đổi sẽ dẫn đến thay đổi mã.

Trạng thái mã có thể thay đổi do đánh giá, nhưng điều đó chủ yếu không liên quan đến các vấn đề bạn đề cập.

Nếu đánh giá mã dẫn đến nhiều thay đổi mã thì có gì đó bị hỏng trong quá trình phát triển của bạn. Dựa vào số lượng người thử bạn có, có thể ném nó lên tường và để người thử nghiệm tìm ra tâm lý vấn đề.

Mọi thứ sẽ được đưa đến những người thử nghiệm trong trạng thái hoàn thành. Càng nhiều thử nghiệm càng tốt nên được tự động hóa, để người kiểm tra không kiểm tra lại cùng một thứ theo thời gian.

UI / UX không yêu cầu một số thời gian thử nghiệm, nhưng có các chuyên gia thiết kế / phát triển ở mặt trước sẽ giảm bớt điều đó. Nó cũng đòi hỏi một khuôn mặt trước màn hình. Tuy nhiên, trong tất cả các ứng dụng tôi đã làm việc cùng, đó là một phần tương đối nhỏ của mã.

Chi phí để thực hiện các thay đổi (bao gồm sửa lỗi) thường tăng lên cho mỗi giai đoạn mà nó trải qua. Tìm lỗi trong phát triển thường rẻ hơn sửa lỗi sau khi kiểm tra tìm thấy chú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.