Quá nhiều kiểm soát phiên bản và chi phí theo dõi lỗi trên mỗi thay đổi?


50

Tôi làm việc tại một nơi là CVS-crazy và Bugzilla-nut.

  1. Có rất nhiều chi nhánh trong mỗi bản phát hành mà người ta không thể đếm chúng. Mọi người liên tục tự động sáp nhập.

  2. Không có sự trôi chảy trong công việc này. Tất cả mọi thứ cảm thấy khóa bước . Phải mất 25 bước ngay cả đối với một điều đơn giản. Nó không giống như ở trên một dây chuyền sản xuất của nhà máy: nó giống như tự mình thiết lập một nhà máy.

Ví dụ tình huống:

Để sửa một lỗi duy nhất, đầu tiên tôi lấy một máy ảo mới, sạch. Sau đó, tôi tạo một nhánh cho sửa lỗi đó, dựa trên một nhánh khác được mô tả trong báo cáo Bugzilla. Tôi cài đặt chi nhánh trên máy, thiết lập nó. Tôi sửa lỗi. Tôi kiểm tra nó, để lại nó và máy cho người khác kiểm tra. Sau đó, tôi phải đi vào phần mềm kiểm soát lỗi và giải thích những gì tôi đã làm và viết một trường hợp thử nghiệm, với tất cả các bước. Cuối cùng, một người khác hợp nhất nó với một bản phát hành.

Bất kể lỗi nhỏ như thế nào, tôi phải làm tất cả những điều này. Đôi khi mọi người kết hợp công việc trên nhiều lỗi, nhưng như tôi đã nói có rất nhiều chi nhánh mà điều này khó có thể thực hiện được.

Ở bất kỳ công việc nào khác, tôi chỉ cần đi vào và sửa lỗi. Tôi thậm chí còn không nhớ sử dụng SCM, mặc dù mọi công việc tôi đã có đã sử dụng nó: đó là vì tại mọi công việc khác, họ bằng cách nào đó giữ nó ra khỏi đường .

Có một điểm mà quá trình này cản trở và trở thành một kết thúc cho chính nó? Đó có phải là kỹ thuật không?


8
Cảm thấy tệ cho bạn :( Công ty nơi bạn đang làm việc có CMMI 3 trở lên không?
artjom

6
Âm thanh như tổ chức đã bị cắn nặng trước đó và đã tăng cường phòng thủ. Có lẽ bạn nên hỏi về lịch sử của điều này?

1
Và vì các giám sát viên khuyến khích những phiền nhiễu liên tục, công việc của bạn phải là một địa ngục thực sự ...
dây leo

57
Đây là một câu hỏi hoặc một bài viết blog?
Rei Miyasaka

31
Nếu phần mềm là hệ thống điều khiển cho một nhà máy điện hạt nhân thì điều này có vẻ không hợp lý. Nếu đối với một trang fanpage Facebook thì có vẻ vô cùng quá đáng. Không có bối cảnh, thật khó để nói liệu điều này có hợp lý hay không: chắc chắn có những dự án mà nó không có, và những dự án khác chắc chắn là có.
edA-qa mort-ora-y

Câu trả lời:


89

Có một điểm mà quá trình này cản trở và trở thành một kết thúc cho chính nó?

Quá trình nặng là phổ biến, không may. Một số người - đặc biệt là quản lý - tưởng tượng một cách tôn giáo rằng các quy trình sản xuất sản phẩm. Vì vậy, họ làm quá các quy trình và quên rằng đó thực sự là một số ít những người thông minh, chăm chỉ, thực sự tạo ra các sản phẩm. Đối với quản lý cấp trên, thật đáng sợ khi thậm chí nghĩ rằng công việc kinh doanh của họ nằm trong tay một số chuyên viên máy tính, và vì vậy, hãy nhắm mắt lại với thực tế và nghĩ về "quy trình" thân yêu của họ, thay vào đó, cho họ ảo tưởng về sự kiểm soát.

Đó là lý do tại sao các công ty khởi nghiệp nhanh nhẹn với một số ít kỹ sư giỏi có thể đánh bại các tập đoàn lớn, được thành lập, với công nhân dành 95% năng lượng cho quá trình và báo cáo. Một số ví dụ về các công ty khởi nghiệp nhỏ đã từng đánh bại đối thủ cạnh tranh và / hoặc tạo ra thị trường hoàn toàn mới:

  • Apple (Apple I được tạo bởi 1 kỹ sư; lúc đó có 3 người đàn ông).
  • Google (được tạo bởi 2 lập trình viên).
  • Facebook ( nỗ lực 1 người ban đầu).
  • Microsoft ( công ty 2 người năm 1975).

Người ta có thể dễ dàng nói rằng đây chỉ là những ngoại lệ, ngoại lệ cực đoan và để làm điều gì đó nghiêm túc, tốt hơn hết bạn nên trở thành một tập đoàn lớn, được thành lập. Nhưng danh sách này tiếp tục. Và hơn thế nữa. Thật xấu hổ lâu. Hầu như mọi công ty lớn ngày nay đều bắt đầu như một cửa hàng gara, nơi đã làm một điều gì đó bất thường. Một cái gì đó kỳ lạ. Họ đã làm sai. Bạn có nghĩ rằng họ đã làm nó theo quy trình?


19
Tôi đang tự hỏi, có bằng chứng cho bất kỳ khiếu nại nào bạn trình bày ở đây không? Bạn có phải là nguồn chính (tức là quản lý điều hành)? Bạn đã tiến hành hoặc đọc các cuộc phỏng vấn với họ? Thật thú vị khi tất cả các loại câu trả lời đều nói "CÓ! ĐÚNG TRÊN!" dường như đến từ những người chưa bao giờ kết thúc và do đó không thể đảm bảo tính chính xác. Tôi nghĩ rằng điều quan trọng đối với chúng tôi là phân biệt câu trả lời thực sự đúng với câu trả lời mà các nhà phát triển (người nổi tiếng là chống quản lý) muốn tin tưởng .
Aaronaught

6
Tôi thực sự không nghĩ rằng trách nhiệm nên thuộc về bản thân tôi hoặc bất kỳ ai khác để cung cấp "thông tin được hỗ trợ tốt hơn" khi chỉ trích một câu trả lời như thế này; bạn đã đưa ra một yêu cầu rất mạnh mẽ, rộng rãi, sâu rộng và không đưa ra bằng chứng nào - thậm chí không phải là bằng chứng giai thoại - để sao lưu nó. Thật không may khi một cộng đồng được cho là chuyên nghiệp lại dễ dàng bị ảnh hưởng bởi loại vô nghĩa dân túy này.
Aaronaught

11
Điều gì, thực sự, bạn không nghĩ rằng thật dễ dàng để có được phiếu bầu bằng cách nói với mọi người những gì họ muốn nghe? Vâng, nói một cách thẳng thắn, tôi không có nhiều sự tôn trọng đối với đám đông ủng hộ những câu trả lời không đáng có này. Tôi đoán tôi không thể đổ lỗi cho những người như bạn vì đã làm điều tối thiểu khi cộng đồng thưởng cho hành vi đó, nhưng tuy nhiên, tôi ước mọi người ít nhất sẽ cố gắng cải thiện câu trả lời của họ khi bị chỉ trích thay vì ngoan cố chỉ vào những người ủng hộ như một sự biện minh.
Aaronaught

8
Toàn bộ điều? "Một số người" - những người nào? "Đặc biệt là quản lý" - tại sao lại cho rằng họ có nhiều khả năng tin vào điều này? "Tưởng tượng tôn giáo" - làm thế nào bạn chắc chắn rằng niềm tin của họ không có cơ sở trong thực tế hay logic? "Quy trình sản xuất sản phẩm?" - ai chính xác đã đưa ra yêu cầu cụ thể đó và trong bối cảnh nào? "Làm quá các quy trình" - chính xác điều đó có nghĩa là gì? "Kinh doanh nằm trong tay của một số chuyên viên máy tính" - ở mức độ nào, và làm thế nào? "nhắm mắt / ảo tưởng kiểm soát" - giải thích? "Các công ty khởi nghiệp nhanh nhẹn ... có thể đánh bại các tập đoàn lớn, được thành lập" - bạn có khẳng định rằng những điều này không phải là ngoại lệ?
Aaronaught

7
@Aaronaught: Diễn đàn này không phải là một bài báo khoa học. Không ai, không phải bạn và tôi, sẽ đưa ra lời giải thích cho từng câu anh ấy viết. Bạn chỉ hỏi những người cho câu trả lời này vì bạn không thích nó. Rõ ràng nó đánh vào dây thần kinh, nhưng làm thế nào về việc không đồng ý theo cách văn minh? Đối với các công ty khởi nghiệp đánh bại các tập đoàn lớn, hãy đọc, ví dụ như chỉ hai câu đầu tiên của mô tả sản phẩm từ đây: amazon.com/Radical-Innovation-Compiances-Outsmart-Upstarts/dp/iêu
Joonas Pulakka

21

Các công ty thường phải chịu đựng những gì tôi muốn gọi là tiến thoái lưỡng nan Kiểm soát-Linh hoạt. Càng ít quy tắc, cấu trúc và chi phí quan liêu thì càng dễ dàng và nhanh chóng hơn để hoàn thành mọi việc (điều đó cũng thú vị hơn). Tuy nhiên, cũng dễ làm những điều "xấu" như những điều "tốt". Điều đó có nghĩa là bạn chỉ ổn khi bạn có những nhân viên lành nghề, mắc một vài lỗi không nghiêm trọng.

Mặt khác, nếu bạn có nhiều nhân viên có trình độ từ thấp đến bán chuyên nghiệp và / hoặc chi phí mắc lỗi quá cao (như nguy cơ mảnh vỡ tàu con thoi trên bán cầu bắc), các công ty có xu hướng chồng chất ngày càng nhiều "quy tắc "Và" các quy trình "để thử và giảm thiểu chúng.

Vấn đề duy nhất là chi phí tích lũy của các quy trình này khiến bạn khó hoàn thành bất cứ điều gì sẽ dẫn đến việc các nhân viên tài năng hơn rời khỏi công ty. Điều này dẫn đến kỹ năng trung bình đi xuống nhiều hơn, đòi hỏi nhiều quá trình và quan liêu hơn. Vì vậy, vòng xoáy tử thần tiếp tục cho đến khi một cái gì đó triệt để xảy ra hoặc công ty đi lên.

Nếu bạn thấy mình ở một công ty dường như đã đi qua điểm không thể quay lại ở khía cạnh này, bạn có thể tự giải quyết "không quan tâm" đến công việc của mình (đó là điều mà hầu hết đã ở lại) hoặc thoát khỏi địa ngục ở đó với linh hồn của bạn nguyên vẹn :)

Nếu công ty đã không đi quá xa và bạn có phương tiện, bạn có thể cố gắng đảo ngược khóa học thông qua quyết tâm và ý chí tuyệt đối. Hãy coi chừng rằng nó có thể tiêu tốn rất nhiều công sức và năng lượng cá nhân mà không đảm bảo thành công, vì vậy hãy chắc chắn rằng nó xứng đáng. Đôi khi, tốt hơn hết là chỉ cần cắt giảm sự mất mát của một người và đếm cho chính mình một trải nghiệm phong phú hơn.


17

Chỉ có một lý do hợp lệ cho phong cách phát triển như vậy: phần mềm được phát triển là hoàn toàn quan trọng và không được, trong mọi trường hợp, không chứa bất kỳ lỗi nào. Hãy nghĩ về phần mềm phun nhiên liệu động cơ phản lực trong các máy bay chở khách, hoặc phần mềm điều hòa nhịp tim hoặc hệ thống phóng tên lửa hạt nhân.

Trong tất cả các tình huống khác, chi phí chung sẽ giết chết doanh nghiệp. Thời gian để di chuyển trên.


2
Họ cho rằng đó là nhiệm vụ quan trọng, nhưng người ta có thể nói điều này về bất kỳ phần mềm nào; đó là vấn đề bao nhiêu khách hàng chấp nhận sự cố. Và nếu đó là nhiệm vụ quan trọng, tôi phải hỏi tại sao chẳng hạn, họ dường như thực sự không thích ý tưởng trao quyền sở hữu bất kỳ dự án nào cho bất kỳ ai. Gần đây tôi đã được hỏi về một phần mềm phức tạp tôi đã viết cách đây 3 tháng và tôi không thể cung cấp manh mối, vì họ đã chuyển tôi khỏi công việc đó đột ngột khi tôi làm việc. Những người này là những kẻ ngốc. Họ coi mọi người chỉ dùng một lần và ý kiến ​​của bất kỳ ai khác ngoài ý kiến ​​của họ là vô giá trị.
Ponk

1
@Ponk, mọi người đều dùng một lần Khi các quy trình xác định công việc và khách hàng đã chấp nhận phần mềm và tiền đang chuyển vào thì mọi thứ và không còn gì là nhiệm vụ quan trọng nữa. Tại sao quan tâm đến sự đổi mới vào thời điểm này? Khách hàng có thể chỉ quan tâm rằng trong một khoảnh khắc thông báo, nhà cung cấp của họ có một nhóm phát triển phần mềm được đào tạo và sẵn sàng làm việc để có thể nhận được các tính năng mới trong vòng chưa đầy một năm. Trong khi đó, điều quan trọng là bạn và nhóm hoàn thành bất cứ điều gì khác ngoài ảo ảnh mà bạn đang làm việc.
maple_shaft

1
@maple: Một điều là làm cho dư thừa. Một cách khác là nếu mọi người chết vì một lỗi đánh máy nhỏ của bạn và trên hết mất việc, bạn phải đối mặt với tội ngộ sát với nhiều năm tù. ĐÂY là cái mà tôi gọi là nhiệm vụ quan trọng và không có nhiều phần mềm mà bạn phải đối mặt với rủi ro như vậy.
SF.

3
Đó không chỉ là một lý do tại sao họ làm theo cách họ làm. Và nói rằng một quá trình phát triển tốt hơn quá trình khác cũng giống như nói rằng cam tốt hơn chuối. Nếu họ có lợi nhuận và có thể trả lương, quy trình này hoạt động tốt hơn một số công ty định hướng nhanh nhẹn. Từ những gì được viết tôi chỉ có thể thấy rằng người này đang làm việc sai. Có rất nhiều công ty cung cấp nhiều tự do hơn cho các nhà phát triển.
Dainius

+1 để chỉ ra rằng có những tình huống (ngay cả trong phần mềm) rằng mức độ kiểm soát này là cần thiết.
riwalk

15

Câu hỏi này thực sự có hai câu hỏi, cần được giải quyết riêng:

Tại sao một số đội có một quá trình phát triển nghiêm ngặt?

Câu trả lời đơn giản là bởi vì nếu họ không, sai lầm xảy ra. Sai lầm tốn kém. Điều này đúng cho sự phát triển và nó cũng đúng với phần còn lại của lĩnh vực CNTT (sysadmin, DBA, v.v.).

Điều này rất khó để nhiều nhà phát triển và nhân viên CNTT hiểu được vì hầu hết chúng ta chỉ từng làm việc tại một trong những "thái cực" - hoặc là những công ty lớn, theo phong cách Fortune với ít nhất một tá nhà phát triển và quy trình nghiêm ngặt phải tuân theo, hoặc các ISV nhỏ, siêu nhỏ hoặc thậm chí làm việc tự do trong đó mọi người chỉ không làm hỏng việc, hoặc chi phí cho việc bắt vít thấp.

Nhưng nếu bạn đã từng thấy một công ty ở giữa các giai đoạn này - thậm chí là một công ty có đội ngũ nhân viên CNTT tài năng, thông minh - bạn sẽ hiểu được sự nguy hiểm của việc không có quy trình hoặc có quy trình nửa vời. Bạn thấy đấy, giao tiếp giữa các nhân viên bị sự cố nổ kết hợp ; một khi bạn đạt đến mức khoảng 6-10 nhà phát triển trong một nhóm, nguyên nhân chính của các khiếm khuyết lớn hoặc nghiêm trọng không phải là do thiếu tài năng hoặc bí quyết, mà là do thiếu giao tiếp.

Alice hỏi xung quanh vào sáng thứ Hai và quyết định phẫu thuật tái tạo trong thân cây là ổn vì không ai khác làm việc trên phần đó. Bob đến một giờ sau đó, trở về từ kỳ nghỉ của mình và tràn đầy năng lượng và quyết định anh ta sẽ thực hiện một tính năng chính mới trong cùng khu vực đó, và tại sao phải bận tâm với một chi nhánh vì dù sao không ai chạm vào mã đó? Vì vậy, Alice đã trả hết "khoản nợ kỹ thuật" đó, Bob thực hiện tính năng sát thủ của mình đã tồn tại trong 6 tháng và cuối cùng khi cả hai kiểm tra mã của họ (tất nhiên là ngay trước giờ đóng cửa vào thứ Sáu, tất nhiên!) nhóm phải ở lại phía sau và cố gắng vượt qua cơn ác mộng của những cuộc xung đột vẫn tiếp tục sống như những con bọ và hồi quy trong suốt vài tuần tới.

Alice và Bob Cả hai đã làm rất tốt trong các nhiệm vụ mã hóa, nhưng cả hai đều bắt đầu với một quyết định tồi tệ ("điều tồi tệ nhất có thể xảy ra là gì?"). Trưởng nhóm hoặc người quản lý dự án sẽ đưa họ qua khám nghiệm tử thi và đưa ra một danh sách kiểm tra để ngăn điều này xảy ra lần nữa:

  • Việc đăng ký phải được thực hiện hàng ngày để giảm thiểu tác động của xung đột;
  • Những thay đổi sẽ mất hơn 1 ngày đáng kể phải được thực hiện trên các chi nhánh;
  • Tất cả các tác vụ quan trọng (bao gồm cả các công việc không có tính năng như tái cấu trúc) phải được theo dõi và chỉ định đúng trong trình theo dõi lỗi.

Tôi sẽ đặt cược rằng, với nhiều người trong chúng ta, "quá trình" này có vẻ giống như lẽ thường. Đó là chiếc mũ cũ. Nhưng bạn có biết rằng rất nhiều đội nhỏ hơn không làm điều này? Một nhóm hai người thậm chí có thể không bận tâm đến việc kiểm soát nguồn. Ai quan tâm? Thật ra nó không cần thiết. Các vấn đề chỉ bắt đầu xảy ra khi nhóm phát triển nhưng quá trình thì không.

Tất nhiên, tối ưu hóa quy trình cũng giống như tối ưu hóa hiệu suất; nó theo một đường cong hàm mũ nghịch đảo. Danh sách kiểm tra ở trên có thể loại bỏ 80% lỗi, nhưng sau khi bạn thực hiện nó, bạn thấy rằng một số thứ khác chiếm 80% lỗi còn lại . Trong ví dụ giả tưởng nhưng quen thuộc của chúng tôi, đó có thể là lỗi xây dựng do có môi trường xây dựng khác nhau, do đó không có phần cứng và nhà phát triển tiêu chuẩn nào đang sử dụng các thư viện nguồn mở được cập nhật mỗi 2 tuần.

Vì vậy, bạn có ba lựa chọn: Hoặc (a) chuẩn hóa phần cứng và hạn chế nghiêm ngặt việc sử dụng thư viện của bên thứ 3, điều này gây tốn kém và có thể ảnh hưởng đáng kể đến năng suất, hoặc (b) thiết lập máy chủ xây dựng, cần có sự hợp tác từ nhóm sysadmin và nhà phát triển toàn thời gian để duy trì nó, hoặc (c) cho phép các nhà phát triển tự làm điều này bằng cách phân phối một máy ảo tiêu chuẩn và bảo các nhà phát triển xây dựng dựa trên đó. Rõ ràng (b) là giải pháp dài hạn tốt nhất nhưng (c) có sự cân bằng ngắn hạn tốt hơn về độ tin cậy và kinh nghiệm.

Chu kỳ cứ lặp đi lặp lại. Mọi "chính sách" mà bạn thấy thường được lập ra để giải quyết một vấn đề thực sự. Như Joel Spolsky đã viết từ năm 2000 trở về trước (về một chủ đề hoàn toàn khác bạn, nhưng vẫn có liên quan):

Khi bạn đi vào một nhà hàng và bạn thấy một tấm biển có ghi "Không cho phép chó", bạn có thể nghĩ rằng dấu hiệu đó hoàn toàn mang tính mô tả: Nhà hàng của ông không thích những con chó xung quanh, vì vậy khi ông xây dựng nhà hàng, ông đã đặt tấm biển đó.

Nếu đó là tất cả những gì đang diễn ra, thì cũng sẽ có một dấu hiệu "Không có rắn"; Rốt cuộc, không ai thích rắn. Và một dấu hiệu "Không có voi", bởi vì họ phá vỡ những chiếc ghế khi họ ngồi xuống.

Các thực lý do đó dấu hiệu là có lịch sử: đó là một dấu hiệu lịch sử chỉ ra rằng những người sử dụng để cố gắng mang lại những con chó của họ vào nhà hàng.

Hầu hết các nhóm phần mềm đều giống nhau (tôi sẽ không nói tất cả): Các chính sách như "Bạn cần thêm trường hợp kiểm tra cho mọi sửa lỗi" gần như luôn luôn chỉ ra rằng nhóm có lịch sử gặp vấn đề với hồi quy. Sự hồi quy là một trong những vấn đề thường xảy ra do sự cố truyền thông hơn là sự bất tài. Miễn là bạn hiểu chính sách, bạn có thể sử dụng các phím tắt hợp pháp (ví dụ: tôi phải sửa 6 lỗi nhỏ nhưng tất cả chúng đều có cùng tính năng, vì vậy tôi thực sự chỉ có thể viết một trường hợp thử nghiệm cho tất cả 9 lỗi).

Điều đó giải thích tại sao các quy trình ở đó, nhưng nó không phải là toàn bộ câu chuyện. Nửa còn lại là:

Tại sao quá trình này rất khó để làm theo?

Đây thực sự là câu hỏi đơn giản hơn để trả lời: Đó là vì nhóm (hoặc quản lý của nó) tập trung vào các kết quả lặp lạigiảm thiểu các khiếm khuyết (như trên) nhưng chưa được quan tâm đúng mức đến tối ưu hóatự động hóa quá trình đó.

Ví dụ, trong câu hỏi ban đầu, tôi thấy một số vấn đề:

  • Hệ thống kiểm soát sửa đổi (CVS) là di sản theo tiêu chuẩn ngày nay. Đối với các dự án mới , nó đã được thay thế gần như hoàn toàn bởi lật đổ (SVN), bản thân nó đang nhanh chóng bị lu mờ bởi các hệ thống phân tán như Mercurial (Hg). Chuyển sang Hg sẽ làm cho việc phân nhánh và hợp nhất trở nên đơn giản hơn rất nhiều , và ngay cả trong ví dụ giả thuyết của tôi ở trên, yêu cầu cam kết hàng ngày sẽ trở nên ít đau đớn hơn. Mã thậm chí không phải biên dịch, vì kho lưu trữ là cục bộ; - trên thực tế, các nhà phát triển lười biếng thậm chí có thể tự động hóa bước này nếu họ muốn, thiết lập một kịch bản đăng xuất để tự động cam kết thay đổi đối với kho lưu trữ cục bộ.

  • Không có thời gian đã được dành để tự động hóa quá trình Máy ảo. Toàn bộ quá trình lấy, định cấu hình và tải nguồn / thư viện vào máy ảo có thể được tự động hóa 100%. Đó có thể là một quá trình không giám sát mà bạn chạy trên một máy chủ trung tâm ở đâu đó trong khi bạn sửa lỗi trên máy cục bộ của mình (và chỉ sử dụng VM để đảm bảo bản dựng sạch).

  • Mặt khác, ở một quy mô nhất định, giải pháp VM-per-developer bắt đầu trở nên ngớ ngẩn và bạn chỉ nên có một máy chủ Tích hợp liên tục. Đó là nơi mang lại lợi ích năng suất thực sự, bởi vì nó (phần lớn) giải phóng các nhà phát triển cá nhân khỏi phải lo lắng về các bản dựng. Không cần phải lo lắng về việc thiết lập các máy ảo sạch vì máy chủ xây dựng luôn sạch sẽ.

  • Các từ ngữ của câu hỏi ( "test trường hợp với tất cả các bước") ngụ ý rằng có một số thủ thử nghiệm đang diễn ra. Điều này, một lần nữa, có thể làm việc cho các nhóm nhỏ với khối lượng công việc tương đối thấp, nhưng không có ý nghĩa gì ở quy mô lớn hơn. Kiểm tra hồi quy có thể và nên được tự động hóa; không có "bước", chỉ có một lớp hoặc phương thức được thêm vào bộ kiểm thử đơn vị / tích hợp.

  • Không cần phải nói, việc chuyển từ Bugzilla sang một hệ thống theo dõi lỗi mới hơn (tốt hơn) sẽ khiến cho trải nghiệm đó bớt đau đớn hơn rất nhiều.

Các công ty không nhất thiết phải rẻ hoặc ngu ngốc chỉ vì họ không giải quyết được những vấn đề này. Tất cả những gì họ biết là quy trình hiện tại hoạt động , và trong một số trường hợp, họ không thích rủi ro và miễn cưỡng thay đổi bất cứ điều gì về nó. Nhưng thực sự họ chỉ cần được thuyết phục về lợi ích .

Nếu các nhà phát triển đã dành một tuần để theo dõi thời gian của họ cho tất cả các nhiệm vụ không mã hóa, thì bạn có thể dễ dàng thêm nó, cho người quản lý thấy (ví dụ) một khoản đầu tư không vốn, 100 giờ để nâng cấp lên Mercurial loại bỏ tối đa 10 giờ mỗi tuần để giải quyết xung đột hợp nhất, sau đó là khoản thanh toán 10 tuần và họ gần như chắc chắn sẽ đồng ý với nó. Cùng ý tưởng với máy chủ xây dựng (CI) hoặc theo dõi lỗi tốt hơn.

Tóm lại: Các đội chưa làm những điều này vì chưa ai thuyết phục được ban quản lý rằng điều đó đủ quan trọng để làm ngày hôm nay . Vì vậy, hãy chủ động và biến nó thành một phương trình lợi ích chi phí; tìm hiểu bao nhiêu thời gian dành cho các nhiệm vụ có thể được đơn giản hóa / tự động với rủi ro tối thiểu và tính điểm hòa vốn và mức chi trả cuối cùng của một công cụ hoặc kỹ thuật mới. Nếu họ vẫn không nghe, thì bạn đã biết những lựa chọn còn lại của bạn là gì.


Nếu các nhà phát triển đã dành một tuần để theo dõi thời gian của họ cho tất cả các nhiệm vụ không mã hóa, thì bạn có thể dễ dàng thêm nó, hiển thị quản lý ... và biến nó thành một phương trình lợi ích chi phí, v.v ...

Trên một phần có giá trị mở rộng hơn nữa.

Tôi có thể xác nhận rằng nó hoạt động. Các lập trình viên đã sử dụng nó vài lần trong một trong những dự án tôi đã làm và mỗi lần nó dẫn đến những thay đổi mong muốn.

Ấn tượng chung của tôi là nếu được thực hiện đúng, thủ thuật này có thể ghi đè lên số lượng khá lớn sự thiếu hiểu biết về quản lý và quán tính.

Tôi muốn lưu ý rằng mặc dù công ty mà chúng tôi (nhà phát triển) phải sử dụng phương pháp DIY kiểu này rất khôn ngoan về CNTT. Tại các nhà cung cấp phần mềm dày dạn hơn, tôi thấy những thứ như thế chủ yếu được thực hiện bởi chính các nhà quản lý. Và như một quy luật, họ làm việc hiệu quả hơn những lập trình viên đó. Năng suất hơn nhiều.


9

Nếu bạn đang làm việc trong một ngành được kiểm soát chặt chẽ, có thể có một số lý do cho quy trình rườm rà đó: một ngày nào đó bạn có thể được kiểm toán và bạn sẽ phải trình bày tất cả các hồ sơ của mình để giải thích ai đã sửa lỗi đó, làm thế nào, ai đã xem xét nó, ai đã kiểm tra nó, v.v ...

Vì vậy, nó có thể là một điều ác cần thiết.

Mặt khác, nếu không có sự biện minh nào cho quy trình đó, ngoài việc có thể thiếu sự tin tưởng từ ban quản lý, bạn nên cố gắng nói chuyện với người quản lý của mình và cho anh ấy biết làm thế nào bạn có thể tiết kiệm thời gian (và do đó là tiền) cho công ty.

Không ai trong tâm trí của mình từ chối một quá trình nhanh hơn và tốt hơn nếu nó được giải thích chính xác.

Nhưng hãy sẵn sàng bảo vệ lập luận của bạn để biện minh cho sự thay đổi.


4
Tôi đã phỏng vấn cho một công việc như thế một lần, đó là liên quan đến chăm sóc sức khỏe và họ miêu tả quá trình này như một địa ngục trần gian. Thật tốt khi nói thật.
Ponk

2
Tuy nhiên, các quy trình như vậy giả định rằng việc thực hiện hiện tại là nguyên sơ và không có khiếm khuyết. Có một quá trình như vậy về cơ bản khóa trong một sản phẩm bị hỏng là nguy hiểm thực sự.
edA-qa mort-ora-y

1
"Không ai trong tâm trí của mình từ chối một quá trình nhanh hơn và tốt hơn nếu nó được giải thích chính xác." --- Tôi có thể nghĩ ra rất nhiều chương trình nghị sự mà một người ra quyết định có thể tuân theo khi tuyên bố này không đúng.

@kekekela, Điều này phụ thuộc vào cách bạn xác định quy trình "tốt hơn". Là một kỹ sư phần mềm, tôi có thể định nghĩa nó là hiệu quả hơn, Trình quản lý dự án sẽ định nghĩa nó là kiểm soát nhiều hơn.
maple_shaft

Nó có thể phụ thuộc vào điều đó. Giới hạn bản thân bạn nghĩ rằng tất cả mọi người thực sự muốn quá trình "tốt nhất" theo số liệu có thiện chí của riêng họ làm cho bạn bỏ lỡ một loạt các nguyên nhân gốc rễ cho hiện trạng.

8

Một nửa vấn đề là bạn đang sử dụng các công cụ lỗi thời trong một quy trình, mà chúng không được thiết kế cho. Những gì bạn mô tả là rất dễ có trong các DVCS hiện đại, không có nhiệm vụ tẻ nhạt là tạo chi nhánh cho mỗi lỗi.

Một vấn đề khác là bạn rõ ràng không thuộc dòng công việc bạn thích. Bạn làm việc trong bảo trì, trong khi bạn muốn phát triển. Có rất ít điều có thể được thực hiện về điều đó ngoài việc thay đổi công việc.


8

Kỷ luật của công nghệ phần mềm vốn dĩ là "tất cả về quy trình", vì vậy để tự hỏi liệu nó "đã trở thành" cách đó có phải là thiếu điểm hay không.

Mặc dù hầu hết các lập trình viên thà bị làm phiền với quy trình tối thiểu tuyệt đối, đến mức một số người sẽ ủng hộ các phương pháp nhanh nhẹn ngay cả khi họ không giải quyết được các vấn đề mà tổ chức của họ đang gặp phải, công ty hoàn toàn có thể quyết định sử dụng " "quá trình nặng nề vì lý do kinh doanh hợp lý, chẳng hạn như" khách hàng yêu cầu nó. " Điều này là phổ biến nếu khách hàng của bạn là Fortune 500 công ty, trường đại học hoặc cơ quan chính phủ. Phần thưởng của việc bán cho những khách hàng này có thể đủ lớn để nó chứng minh được chi phí quá trình thêm vào.

Công ty của bạn là một điểm dữ liệu và không thể khái quát hóa trải nghiệm của bạn thành xu hướng toàn ngành hướng tới hoặc tránh xa các quy trình nặng hơn. Câu hỏi thực sự là, sự cân bằng nào hoạt động tốt nhất cho công ty của bạn, sản phẩm của bạn, khách hàng của bạn và cá nhân bạn, với tư cách là một lập trình viên? Nếu bạn không thích làm việc cho công ty đó, hãy thúc đẩy thay đổi hoặc nhận một công việc khác.


1
+1 cho "kỷ luật của công nghệ phần mềm". Đó một kỷ luật, trong tất cả các ý nghĩa của từ này.
Dan Ray

6

Từ câu hỏi khác tôi đã thấy từ bạn hôm nay, bạn có vẻ khá không hài lòng với công việc của mình. Bạn đã không ở đó lâu, bạn chỉ có thể nói với người giám sát của mình rằng bạn nghĩ mình đã phạm sai lầm và đã đến lúc bạn phải chia tay sớm hơn dự kiến.

Nếu bạn giỏi trong công việc của mình, bạn thực sự sẽ không gặp nhiều khó khăn để tìm một cái mới, và thành thật mà nói, nếu không có lý do chính đáng để quá trình này tồn tại, có lẽ tôi cũng sẽ cân nhắc việc di chuyển. Sử dụng CVS hoàn toàn sẽ là một công cụ đối phó với tôi, nhưng tôi luôn đặt câu hỏi kiểm soát nguồn tại cuộc phỏng vấn. Rõ ràng, tôi không thể biết tình hình của bạn và có thể không thể rời bỏ công việc nếu bạn có nghĩa vụ khác.


Quan sát sắc sảo :) Tôi đang phỏng vấn.
Ponk

CVS tôi có thể sống cùng, một số công ty tôi đã làm việc cho LIED TO ME trong cuộc phỏng vấn rằng tôi sẽ làm dịch vụ web WCF / RIA với Silverlight và thay vào đó đưa tôi vào một ứng dụng Powerbuilder cổ xưa và vẫn đang sử dụng VSS 6.
maple_shaft

1
ahhh ouch @maple_shaft, đó là khắc nghiệt. Vẫn nghĩ về những gì bạn có thể nói với những đứa trẻ lớn ... Tôi đã làm việc trên các ứng dụng powerbuilder ...: D # life-fail
Anonymous Type

3

Tôi sẽ nói về việc công nghệ phần mềm đang tràn ngập các lập trình viên rất tệ, nhưng tình huống mà bạn mô tả là khủng khiếp.

Theo kinh nghiệm cá nhân của tôi, một số "quy trình" mà bạn mô tả đi kèm với quản lý và quản trị hệ thống hoàn toàn không biết về sự thiếu hiệu quả của các hệ thống mà họ đang áp đặt cho các lập trình viên. Ví dụ bao gồm hạn chế lựa chọn hệ điều hành, hạn chế phần mềm được sử dụng, truy cập internet, đặc quyền quản trị máy tính để bàn cá nhân; tất cả những điều này là cần thiết để phát triển tốt.

Hơn nữa, các yêu cầu tương thích giữa các "giải pháp ma thuật" được sử dụng bởi các chi nhánh khác nhau của các công ty. Ví dụ bao gồm các văn phòng chính áp đặt kiểm soát nguồn tập trung, máy chủ Outlook ngoài trang web và các nguyên tắc hoặc ngôn ngữ mã hóa có thể không phù hợp cho mọi vấn đề.

Không có nhiều niềm vui để giữ cho bánh xe của doanh nghiệp hoạt động, nhưng tôi đã thấy rằng những bong bóng nhỏ của sự đổi mới, sáng tạo và sáng chói tồn tại ở một số công ty.


+1 vì đã cố gắng tìm ra sự lấp lánh trong một kịch bản khủng khiếp.
Loại ẩn danh

3

Bạn có thể làm việc trong một công ty định hướng quy trình . Tôi sẽ cố gắng tìm một công ty định hướng kết quả thay vào đó, nơi nó quan trọng những gì bạn không làm như thế nào bạn làm điều đó.

Trong công ty của tôi, chúng tôi cũng có một "quy trình" (nhưng nó rất đơn giản) .. Nhưng khi nó cản trở tôi phá vỡ các quy tắc và bỏ qua các bước. Sẽ không ai nói gì với tôi miễn là tôi không phá vỡ bất cứ điều gì bằng cách sử dụng phím tắt vì tôi nhận được kết quả.


2

Có một điểm mà quá trình này cản trở và trở thành một kết thúc cho chính nó? Đó có phải là kỹ thuật không?

Theo nghĩa đen, hầu hết các kỹ thuật đang tập hợp các phần được thiết lập tốt theo một trật tự được thiết lập để đáp ứng với một vấn đề cụ thể. Điều này là rõ ràng nhất nếu bạn hỏi ME họ làm gì cả ngày. Bạn đang nhầm lẫn kỹ thuật với kiến ​​trúc hoặc phát triển sản phẩm giai đoạn đầu (trong bất kỳ lĩnh vực nào). Tôi có hai quan sát về câu hỏi của bạn.

  1. Bạn dường như đã được chỉ định cho công việc sửa lỗi, không phải công việc kiến ​​trúc hoặc thiết kế.
  2. Các đồng nghiệp của bạn dường như đã đưa ra các cách giải quyết hạn chế (kết hợp các VM sửa lỗi) để làm cho chúng hiệu quả hơn, dường như bạn không tuân theo ví dụ hợp lý của họ.

Nó chỉ đơn giản là một thực tế là trong bất kỳ nỗ lực mang tính xây dựng nào cần một số lượng lớn người, một số người có thể thực hiện thiết kế và một nhóm lớn hơn 'có được' để thực hiện. Xin lỗi, nhưng bạn thuộc nhóm thứ hai đó.

Như các nhà bình luận khác đã lưu ý, CVS không phải là công cụ tốt nhất cho công việc cho một mô hình phát triển phân nhánh cao, nhưng tôi cũng lưu ý rằng bạn không chịu trách nhiệm sáp nhập ... vì vậy đừng lo lắng về nó.

Hầu hết các khiếu nại của bạn về cơ bản dường như là "Tôi không muốn kiểm tra, trước, trong hoặc sau khi phát triển!" Hãy chia nhỏ các bước của bạn, từng điểm một.

  • Để sửa một lỗi duy nhất, đầu tiên tôi lấy một máy ảo mới, sạch. Một môi trường thử nghiệm
  • Sau đó, tôi tạo một nhánh cho sửa lỗi đó, dựa trên một nhánh khác được mô tả trong báo cáo Bugzilla. - Bạn nhân đôi môi trường mà lỗi đã được tìm thấy trong ... điều này không hợp lý như thế nào?
  • Tôi cài đặt chi nhánh trên máy, thiết lập nó. Tôi sửa lỗi. Tôi kiểm tra nó trong - Quá trình phát triển cơ bản
  • ... Để lại nó và máy cho người khác kiểm tra. - Nhóm hợp nhất của bạn có thể muốn điều này có thể xác minh sửa chữa nếu hợp nhất đi về phía nam.
  • Sau đó, tôi phải vào phần mềm kiểm soát lỗi và giải thích những gì tôi đã làm - Nếu bạn ở một cửa hàng không làm điều này ... tại sao bạn lại theo dõi lỗi?
  • và viết một trường hợp thử nghiệm với tất cả các bước. - Tôi có thể sai, nhưng dường như đó là hướng tất cả những 'đứa trẻ tuyệt vời' đang đi
  • Cuối cùng, một người khác hợp nhất nó với một bản phát hành. - Và một số bước ở trên là để làm cho công việc của họ dễ dàng hơn

Một người khác trước mặt bạn rõ ràng đã xử lý lỗi để đảm bảo rằng một lỗi được tìm thấy không được sửa lại trong bản phát hành khác hoặc bị hỏng trong bản phát hành sau (đó là những gì các trường hợp thử nghiệm dành cho).

Điều duy nhất thậm chí từ xa bất thường hoặc quá nhiệt tình về quá trình này là điều VM. Có một cơ hội công bằng sẽ được coi là hợp lý nếu chúng tôi biết bạn đang làm việc trong lĩnh vực nào.


2

Hấp dẫn. Bạn có người kiểm tra? Họ nên làm một số điều đó. Tôi là một, và nơi tôi làm việc, chúng tôi có một giải pháp tốt.

Đối với một khiếm khuyết chức năng, như bạn đang giải thích, quy trình của chúng tôi diễn ra như sau:

  1. Tôi kiểm tra lỗi trong VM (được báo cáo bởi khách hàng hoặc trong quá trình kiểm tra khám phá của tôi, hoặc w / e)
  2. Lỗi được tìm thấy / repro'd.
  3. Tôi tạo ra lỗi. Lỗi bao gồm:
    • Repro đầy đủ, từ điểm cài đặt đến điểm nhìn thấy lỗi.
    • Một liên kết đến một ảnh chụp nhanh của VM (nếu tôi nghĩ nhà phát triển sẽ cần nó ... dù sao tôi cũng đã chụp nó, chỉ trong trường hợp họ yêu cầu).
    • Thông tin hệ thống, bất kỳ cài đặt đặc biệt nào tôi cần thực hiện.
  4. Lỗi đó được gán cho dev. Trong khi họ đang sửa lỗi tôi:
    • Tạo một trường hợp thử nghiệm
    • Viết (hoặc chuyển đổi) bài kiểm tra thủ công thành bài kiểm tra tự động

Sau đó, tôi chờ đợi một giải pháp, và giúp nhà phát triển theo bất kỳ cách nào họ cần. Khi nó trở lại như đã giải quyết, tôi:

  1. Chạy trường hợp kiểm tra tự động và phiên bản thủ công (đôi khi) để xác nhận sửa chữa.
  2. Đóng lỗi.

TL; DR: Nếu bạn không có người kiểm tra, thì bạn cần một số. Nếu bạn có một số thì họ sẽ không 'làm phần của họ'.


2

Tom DeMarco:

... Cuốn sách số liệu ban đầu của tôi ... dòng trích dẫn nhiều nhất là câu đầu tiên của nó: "Bạn không thể kiểm soát những gì bạn không thể đo lường." Dòng này chứa một sự thật có thật, nhưng tôi đã trở nên ngày càng khó chịu với việc sử dụng nó. Ẩn ý trong trích dẫn (và thực sự trong tiêu đề của cuốn sách) là kiểm soát là một khía cạnh quan trọng, có thể là quan trọng nhất, của bất kỳ dự án phần mềm nào. Nhưng nó không phải là.

... Bạn càng tập trung vào kiểm soát, bạn càng có khả năng làm việc trong một dự án đang cố gắng cung cấp một cái gì đó có giá trị tương đối nhỏ.

Theo tôi, câu hỏi quan trọng hơn nhiều so với cách kiểm soát dự án phần mềm là tại sao chúng ta lại làm nhiều dự án mang lại giá trị cận biên như vậy? ...

Kỹ thuật phần mềm: Một ý tưởng Thời gian đã đến và đi?


Nó không rõ ràng sao? Kiếm tiền. Tiền gợi cảm bẩn.
maple_shaft

1

"Sau đó, tôi tạo một nhánh cho sửa lỗi đơn lẻ đó,"

Không cần phải tạo một nhánh cho sửa lỗi duy nhất. Đầu tiên tạo lỗi trong bugzilla. Kiểm tra chi nhánh phát hành. Hãy sửa chữa. Thực hiện cam kết với thông báo cam kết chứa số lỗi, cập nhật lỗi và đánh dấu là "đã sửa, cần kiểm tra" hoặc "đã sửa, đã kiểm tra, cần hợp nhất" một cách thích hợp, tùy thuộc vào từ khóa văn bản được viết trong thông báo cam kết. Cơ sở dữ liệu lỗi là cơ chế theo dõi hoàn hảo cho tất cả các thay đổi được thực hiện và lý do chúng được thực hiện; báo cáo có thể được chạy từ cơ sở dữ liệu lỗi để trích xuất thông tin này.


1

Tôi nghĩ rằng hầu hết quá trình có thể được tự động hóa , do đó việc tạo chi nhánh và máy ảo (bao gồm biên dịch mã, thiết lập trình gỡ lỗi, v.v.) đã được thực hiện cho bạn trước khi bạn bắt đầu làm việc với lỗi.

Mô tả những gì bạn đã làm và làm thế nào nó cần được kiểm tra là xứng đáng cho tất cả các sửa lỗi. Tôi đã tìm thấy chỉ cần viết văn bản có thể bắt gặp các vấn đề , vì nó làm tôi suy nghĩ về rủi ro, vv

Vì vậy, tôi nghĩ rằng quá trình này có thể là một chút so với các ứng dụng hàng đầu, nhưng vấn đề thực sự là thiếu các công cụ tự động tùy chỉnh để hỗ trợ quá trình này.


0

Yo man, quá trình suy nghĩ của bạn là đúng ở chỗ những gì bạn mô tả là hoàn toàn nhảm nhí và một minh chứng thực sự về những điều sai trái có thể có trong phần mềm. Mặc dù đây là tin tốt, có rất nhiều công ty đang thực hành Agile với tinh thần thực sự. Công ty tôi làm việc là một trong những công ty như vậy. Có rất nhiều những ngày này và đó là tin tốt.

Thời gian bạn cảm thấy rằng mọi thứ thực sự không đúng ở nơi làm việc của bạn, có hai điều bạn có thể làm - hoặc bạn có thể ảnh hưởng đến thay đổi tích cực hoặc rời khỏi nơi đó và tham gia một nơi tốt hơn.

CVS hoặc bất kỳ hệ thống quản lý cấu hình không phải là xấu. Thật không may, cách nó được sử dụng, mà không thực sự biết mục đích của nó, gây ra nỗi đau này trong! @ # $ Cho toàn bộ tổ chức.

Để hiểu nhanh về Agile thực sự là gì, hãy xem qua cuốn sách "Thực tiễn của một nhà phát triển Agile" của Venkata Subramaniam. Nó được viết độc đáo bằng ngôn ngữ dễ hiểu.

Chúc bạn may mắn!

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.