Chúng ta có trách nhiệm cải thiện bộ luật cũ không?


64

Tôi đã xem qua một số mã cũ mà tôi đã viết. Nó hoạt động, nhưng nó không phải là mã tuyệt vời. Tôi biết nhiều hơn bây giờ so với lúc đó, vì vậy tôi có thể cải thiện nó. Đây không phải là một dự án hiện tại, mà là mã sản xuất hiện tại, đang hoạt động. Chúng tôi có trách nhiệm quay lại và cải thiện mã mà chúng tôi đã viết trong quá khứ hay là thái độ đúng đắn "nếu nó không bị hỏng, đừng sửa nó"? Công ty của tôi đã tài trợ một lớp đánh giá mã vài năm trước và một trong những vấn đề lớn là đôi khi nó chỉ đủ tốt; tiến lên

Vì vậy, tại một số điểm bạn chỉ nên gọi nó là đủ tốt và tiếp tục, hoặc bạn nên cố gắng thúc đẩy các dự án để cải thiện mã cũ khi bạn nghĩ rằng nó có thể tốt hơn?


Bạn đang làm điều này trong thời gian riêng của bạn hoặc trên xu của công ty?
JBRWilkinson

42
hầu hết các trách nhiệm đầu tiên của bạn là thêm giá trị cho công ty . Nếu bạn đang làm bất cứ điều gì không thêm trực tiếp vào dòng dưới cùng thì bất cứ điều gì khác đều lãng phí công sức. Mã làm việc đã được kiểm tra cũ được kiểm tra mã làm việc , chạm vào nó để làm cho nó tốt hơn giống như một bài tập mạ vàng và bây giờ nó trở thành mã mới chưa được kiểm tra và do đó không hoạt động , không thêm giá trị vào dòng dưới cùng.

7
Hỏi sếp của bạn những gì anh ấy muốn bạn làm. Bạn rất có thể sẽ được yêu cầu để nó một mình. Ngoài ra, thay đổi mã theo kinh nghiệm của tôi chỉ được thực hiện như một phần của giao hàng thực tế. Thay đổi ngẫu nhiên theo thời gian có xác suất đưa ra lỗi quá lớn, khiến bạn mất quá nhiều thời gian để khắc phục vì bạn không có những thay đổi mới trong tâm trí.

1
Thêm một số ý kiến ​​về cải tiến có thể trong tài liệu và để nó ở đó?
James P.

2
Viết bài kiểm tra đơn vị hoặc hồi quy. Đừng thay đổi mã, nhưng làm cho ai đó có thể đi cùng sau đó và thực hiện các thay đổi cần thiết một cách tự tin mặc dù không quen thuộc với mã.
James Youngman

Câu trả lời:


66

Trừ khi bạn sẽ thực hiện các thay đổi đối với "mã cũ" này để sửa lỗi hoặc thêm tính năng, tôi sẽ không cải thiện nó chỉ vì lợi ích của nó. Nếu cuối cùng bạn muốn cải thiện nó, hãy đảm bảo rằng bạn có các bài kiểm tra đơn vị sẽ kiểm tra mã trước khi bạn bắt đầu tái cấu trúc nó.

Bạn có thể sử dụng "mã cũ" để tìm hiểu các thực tiễn tốt hơn. Nếu bạn làm điều này, đó là một trải nghiệm học tập bán thời gian và bạn không nên hy vọng mã đó sẽ thay thế những gì hiện đang được phát hành hoặc triển khai bởi khách hàng / khách hàng.


4
Những gì tôi đã nghĩ là "thối phần mềm" và lý thuyết cửa sổ bị hỏng từ các lập trình viên thực dụng và ảnh hưởng của entropy phần mềm. pragprog.com/the-prealatic-programmer/extuces/software-entropy
jmq

5
Trừ khi bạn sẽ gia tăng giá trị cho công ty bằng cách tái cấu trúc mã đã hoạt động và đang trong quá trình sản xuất, sẽ rất khó để chứng minh thời gian cần thiết để loại bỏ "phần mềm thối" cho cấp trên của bạn. Chỉ làm điều này nếu bạn sẽ tích cực làm việc trong mã này, nếu không sẽ không có nhiều lợi ích ngoài kinh nghiệm tái cấu trúc mà bạn sẽ có được.
Bernard

11
@jmquigley, phần mềm chỉ rots nếu mã nguồn của nó bị thay đổi và các cửa sổ bị hỏng chỉ có hiệu lực nếu chúng được nhìn thấy. Một cơ sở mã cũ, nếu không cần phải chạm vào nó, sẽ hoạt động theo cách tương tự miễn là môi trường của nó cho phép.
Péter Török

2
Cố gắng không đưa lỗi vào một chương trình đang hoạt động trong quá trình "cải thiện" nó ;-)
robrambusch

4
Tôi nghĩ rằng mã 'thối' là một phép ẩn dụ đáng tiếc. mã không bị thối, nếu bạn không làm gì với nó thì nó không thay đổi gì cả. nếu bất cứ điều gì, mã làm việc cứng lại - bạn giới thiệu entropy khi bạn làm việc đó và bạn có thể loại bỏ entropy này bằng cách dành nhiều năng lượng để cấu trúc lại nó (tương tự như đúc lại / rèn)
jk.

32

Tái cấu trúc các khu vực mã bạn cần sửa đổi thường xuyên nhất . Vì bạn thường xuyên truy cập vào các khu vực này, nên việc tái cấu trúc sẽ cải thiện sự hiểu biết về mã và khả năng đọc của bạn khi bạn phải truy cập lại chúng, trong khi không có lý do nào để mã hóa lại, không ai sẽ nhìn lại.

Hơn nữa, nếu bạn chỉ cấu trúc lại các vùng mã khi bạn cần sửa đổi chúng, nó sẽ cung cấp cho bạn một lý do hợp lệ nếu việc tái cấu trúc của bạn gây ra hồi quy . Tất nhiên, hãy cố gắng bao gồm các phép tái cấu trúc của bạn bằng các bài kiểm tra đơn vị, nhưng điều này không phải lúc nào cũng có thể, đặc biệt là với mã kế thừa và bạn nên mong đợi các phép tái cấu trúc lớn sẽ tạo ra hồi quy mỗi lần.

Nếu bạn cần thêm các tính năng và thiết kế của bạn đang làm bạn chậm lại hoặc gây ra sự trùng lặp thì hãy cấu trúc lại . Khi tôi thiết kế mã, tôi gần như không bao giờ dự đoán chính xác những thay đổi sẽ cần trong tương lai. Tuy nhiên, khi tôi thêm các tính năng mới, tôi thường kết thúc việc cấu trúc lại mã được chia sẻ. Vào lúc đó, tôi đã thêm một chu kỳ tái cấu trúc / tính năng thứ ba, việc tái cấu trúc của tôi đã tự trả tiền và mã chia sẻ của tôi khá ổn định.

TLDR: tái cấu trúc khi cần thiết, không có nghĩa vụ.


bạn có thể nói cụ thể hơn ý của bạn bằng cách 'tái cấu trúc gây ra hồi quy' không? Mục đích của việc tái cấu trúc để cải thiện thiết kế phần mềm của bạn mà không thay đổi hành vi của nó? Bạn có thể đưa ra một ví dụ không?
Manfred

3
@ John: Vâng, đó là mục đích của tái cấu trúc: cải thiện mã nhưng duy trì hành vi.
Bernard

@ John bất kỳ rủi ro tái cấu trúc không tầm thường nào có thể vô tình thay đổi hành vi, đặc biệt là khi không có thử nghiệm hồi quy tại chỗ.
Hội trường Garrett

14

Tất cả mọi thứ bạn làm đều có chi phí. Bạn có giới hạn thời gian để lập trình. Tất cả mọi thứ bạn làm trong lập trình nên được xem xét lại, "lợi ích của việc này là gì?" và "lợi ích của việc làm gì khác là gì?"

Nếu bạn không tính đến chi phí cơ hội (Chi phí để làm việc gì khác?) Thì chất lượng là miễn phí. Tốt hơn là cải thiện mã của bạn. Bạn sẽ học được điều gì đó. Nó sẽ chạy tốt hơn. Nó sẽ bán nhiều hơn.

Câu hỏi thực sự là điều tốt nhất tiếp theo bạn có thể làm với thời gian của mình là gì? Và sau đó bạn đã đánh đổi.

Nó sẽ bán nhiều phần mềm hơn?

Nó sẽ gây ra ít đau đầu để hỗ trợ?

Bạn sẽ học gì?

Nó sẽ trở nên thẩm mỹ hơn?

Nó sẽ cải thiện danh tiếng của bạn?

Đặt những câu hỏi này (và bất kỳ câu hỏi nào khác liên quan đến bạn) cho điều này và các hoạt động khác trong hàng đợi của bạn và điều đó sẽ giúp trả lời nếu nó đáng để sửa. Những sự đánh đổi này là lý do tại sao kinh tế là quan trọng đối với các lập trình viên. Joel đã nói điều đó trước khi tôi làm, và một người cố vấn cũ đã nói điều đó với tôi ngay cả trước Joel.

Hoặc nếu bạn muốn câu trả lời đơn giản hơn, chỉ cần dừng xem TV cho đến khi bạn sửa mã. :-)


4
Để mượn từ một ví dụ thực tế không phải trong phần mềm, một số công ty vận tải sẽ trả tiền cho nhân viên để làm sạch và đánh bóng giàn khoan của họ, vì nhiều lý do, thường là vì nó giúp các tài xế / nhà điều hành xây dựng niềm tự hào trong 'đơn vị' của họ, vì vậy họ chăm sóc tốt hơn về nó, và chú ý hơn đến nó; khắc phục vấn đề nhanh chóng và thuận tiện. Trên Tương tự, nếu có dặm để thực hiện, nhận được trong các xe tải và lái nó và lo lắng về việc làm sạch nó sau khi một vài chi tiết ngàn dặm (đi bờ biển này đến bờ biển).
JustinC

@justinC - chính xác! Ví dụ của bạn nắm bắt cả lý do khác và chi phí cơ hội.
MathAttack

Chi phí (hoặc giá trị , v.v.) thực sự là từ khóa cho câu trả lời đúng. Nó nên thêm giá trị trong toàn bộ, cũng xem xét rằng việc chạm vào mã cũ có thể phá vỡ công cụ (loại bỏ giá trị) cho dù nó có thể được tối ưu hóa hơn bao nhiêu.
cregox

6

Tôi nghĩ bạn nên bắt đầu bằng cách tự hỏi mình câu hỏi dường như đã bị bỏ qua. Mã xấu là gì? Và bằng cách này, bạn đang thực sự tự hỏi mình như sau:

  • Có mã không làm những gì nó phải làm?
  • Là mã gây ra vấn đề cho bạn khi bạn đang bảo trì phần mềm?
  • Là mã hoàn toàn khép kín?
  • Bạn có kế hoạch cập nhật hoặc thay thế mã bất cứ lúc nào trong tương lai gần không?
  • Có một trường hợp kinh doanh đúng đắn mà bạn có thể thực hiện để cập nhật mã mà bạn quan tâm không?

Nếu có một điều tôi đã học được trong nhiều năm qua, đó là bạn không đủ khả năng để tự mình đoán thứ hai sau sự thật. Mỗi khi bạn giải quyết một vấn đề trong mã, bạn sẽ học được điều gì đó và có thể sẽ thấy cách giải pháp của bạn - hoặc một cái gì đó tương tự - có thể là một giải pháp tốt hơn cho một vấn đề bạn đã giải quyết cách đây nhiều năm. Đây là một điều tốt, bởi vì nó cho bạn thấy rằng bạn đã học được từ kinh nghiệm của bạn. Tuy nhiên, câu hỏi thực sự là liệu mã bạn viết trước đây có khả năng trở thành vấn đề di sản trở nên khó xử lý hơn theo thời gian hay không.

Điều chúng tôi thực sự đang nói ở đây là liệu mã làm phiền bạn dễ hay khó bảo trì và việc bảo trì có thể tốn kém như thế nào khi thời gian trôi qua. Đây thực chất là một câu hỏi về Nợ kỹ thuật, và liệu có đáng để trả hết khoản nợ đó bằng cách sử dụng một chút bảo trì phẫu thuật hay không, liệu khoản nợ đó có đủ nhỏ để bạn có thể để nó trượt một chút không.

Đây là những câu hỏi mà bạn thực sự cần phải cân nhắc với khối lượng công việc hiện tại và tương lai của bạn, và nên được thảo luận lâu dài với ban quản lý và nhóm của bạn để hiểu rõ hơn về nơi đầu tư tài nguyên của bạn và liệu mã cũ của bạn có đáng không thời gian bạn có thể cần phải dành cho nó - nếu có. Nếu bạn có thể tạo ra một trường hợp kinh doanh tốt để giới thiệu thay đổi, thì bằng mọi cách hãy làm như vậy, nhưng nếu bạn đang phải đối mặt với sự thôi thúc phải sửa đổi mã bởi vì bạn cảm thấy xấu hổ về cách bạn viết nó, thì tôi khuyên bạn không nên phòng cho niềm tự hào cá nhân khi nói đến việc duy trì mã cũ. Nó có thể hoạt động, hoặc không, và nó dễ bảo trì, hoặc tốn kém để duy trì, và nó không bao giờ tốt hay xấu chỉ vì kinh nghiệm ngày nay không có sẵn cho bạn ngày hôm qua.


5

Chắc chắn không cải thiện nó chỉ vì mục đích cải thiện nó. Như những người khác đã nói (và là lẽ thường), tất cả chúng ta đều trở nên tốt hơn (đối với một số giá trị "tốt hơn") khi thời gian trôi qua. Điều đó đang được nói, xem xét mã (chính thức hoặc không chính thức) thường chiếu sáng các bit và phần mà chúng ta có thể muốn không bao giờ nhìn thấy ánh sáng của ngày nữa.

Mặc dù tôi không tin rằng chúng tôi có trách nhiệm quay lại và cải thiện mã mà về cơ bản không bị hỏng, không an toàn hoặc phụ thuộc vào các tính năng trong danh sách / EOL không dùng nữa, đây là một số điều tôi đã làm trong quá khứ trong tình huống này :

  • Xác định những người trong nhóm thực sự đào trở lại và cải thiện mã, như một loại công việc làm sạch não hoặc nhiệm vụ tốt, có kích cỡ cắn mang lại cảm giác hoàn thành và tìm thời gian trong lịch trình để họ thực hiện nó một cách thường xuyên. Tôi đã luôn có ít nhất một trong số những người như vậy trong một nhóm và cách tiếp cận này cũng có thể thúc đẩy tinh thần (hoặc ít nhất là tâm trạng) nếu tất cả chúng ta đang trong giai đoạn tạm lắng hoặc suy sụp.

  • Sử dụng nó làm cơ sở cho một bài tập học tập. Đối với thực tập sinh, sinh viên hoặc thành viên mới / thành viên của nhóm, việc tái cấu trúc mã cũ với sự hướng dẫn từ các thành viên cao cấp của nhóm cho họ cơ hội giao tiếp với các thành viên mới của nhóm, hiểu thêm về hệ thống và tập thói quen viết / cập nhật kiểm tra đơn vị và làm việc với tích hợp liên tục. Điều quan trọng cần lưu ý là bài tập này được thực hiện với sự hướng dẫn và được đóng khung rõ ràng như một bài tập để làm cho mã tốt hơn vì nó không tuân thủ các tiêu chuẩn / quy phạm hiện hành.

Vì vậy, không có trách nhiệm sửa chữa nó, nhưng những thứ cũ có thể thực sự hữu ích. Và bài kiểm tra đơn vị và CI là bạn của bạn!


4
đưa mã xấu cho người mới là mô hình chống quản lý dự án tồi tệ nhất , họ nhìn thấy nó và nghĩ rằng nó là chính xác và chỉ cần sao chép nó, mã xấu lan truyền như một căn bệnh ung thư vì lời khuyên tồi tệ như thế này.

1
@JarrodRoberson Cảm ơn bạn đã chỉ ra những gì tôi nên làm rõ hơn; Tôi đã chỉnh sửa câu trả lời của mình để lưu ý rằng tôi thực hiện điều này rất cụ thể như một phần của trải nghiệm học tập và họ đang làm việc với một người cố vấn. Đó không phải là một tình huống khó khăn.
jcmeloni

Tôi vẫn nghĩ rằng nó được diễn đạt theo cách mà mọi người sẽ đọc "Đưa nó cho người mới - đặc biệt là thực tập sinh và sinh viên." và ngừng đọc để hiểu ngay tại đó. Nếu nó được diễn ra ở nơi nó bắt đầu với một thành viên cấp cao và một cặp thành viên cơ sở lập trình kiểu XP hoặc một cái gì đó tương tự thì nó có thể không quá tệ. Tôi có vấn đề với các khía cạnh mạ vàng và thêm rủi ro thay đổi mọi thứ vì mục đích thay đổi chúng của điểm đạn đầu tiên là tốt.

1
Đánh giá mã là để ngăn chặn mã xấu vào kiểm soát phiên bản, không phải để xác định mã kém sau khi thực tế, đó là cách để muộn.

@JarrodRoberson Cảm ơn bạn đã chỉ ra những vấn đề bạn gặp phải với ngôn ngữ mơ hồ và không may có khả năng gây hiểu lầm của tôi; Tôi đã thực hiện nhiều chỉnh sửa hơn và chờ đợi những gì hiện có.
jcmeloni

2

Không cần thiết. Tuy nhiên, nếu bạn đang thực hiện bảo trì mã và tình cờ tìm thấy thứ gì đó có thể tốt hơn, bạn có thể thay đổi nó với điều kiện bạn phải kiểm tra đơn vị phù hợp để đảm bảo bạn không tạo ra hồi quy.

Nếu không có thử nghiệm nào như vậy tồn tại và bạn không thể chắc chắn nó sẽ hoạt động chính xác như thế nào, tốt hơn hết là bạn nên để nó một mình.


4
Tôi sẽ thêm "và nếu thay đổi, nó sẽ không thêm nhiều thời gian vào lịch trình đã lên kế hoạch"
HLGEM

2

Từ quan điểm của một kỹ sư, chắc chắn tôi rất muốn làm việc với mã cũ cho đến khi nó không thể được cải thiện nữa. Nhưng có một trường hợp kinh doanh cho nó? Vào cuối ngày, mã có mặt để đóng góp vào điểm mấu chốt, lợi nhuận của nơi làm việc của bạn. Nếu không, hãy để lại nó.

Có một sự cảnh báo lớn, nếu bằng cách cải thiện mã, bạn sẽ tránh được lỗi xảy ra, (nghĩ rằng những quả bóng Y2K lớn ở đây ..) Tôi chắc chắn sẽ đưa nó lên với ai đó cao hơn, có thể là người quản lý đơn vị kinh doanh của bạn, và thảo luận về hậu quả của việc cải thiện mã.


2

Đối với tôi, câu hỏi có thể được nhắc lại và khái quát: "Tại sao ai đó nên sử dụng thêm tài nguyên (thời gian, tiền bạc, tinh thần, v.v.) nếu đoạn mã cụ thể đó hoạt động tốt bây giờ? Không phải là lãng phí tài nguyên ? "

Mỗi lần tôi tìm thấy một mã kế thừa, tôi nghĩ về một số điều có vẻ quan trọng.

  1. Điều gì cho tôi sẽ thay đổi?
  2. Tôi có cần hỗ trợ mã này không? Bao lâu nó có thể xảy ra (tương lai gần / xa)?
  3. Là mã này đủ thoải mái để làm việc với? (Ngay bây giờ)
  4. Tôi có thể chắc chắn rằng tất cả những thay đổi mà tôi làm là an toàn không? Các xét nghiệm khác nhau thường giúp trả lời câu hỏi này.
  5. Tôi có thể gặp hậu quả gì nếu tôi sẽ phạm lỗi trong quá trình sửa đổi mã? Có thể hoàn nguyên các thay đổi của tôi một cách nhanh chóng? Nó sẽ lãng phí thời gian?
  6. ...

Thật ra, bạn nên tự hỏi mình rất nhiều câu hỏi. Không có một danh sách đầy đủ và cuối cùng của họ. Chỉ có bạn và có lẽ đồng đội của bạn có thể tìm thấy câu trả lời.

PS Tôi đã nhận thấy rằng tôi có xu hướng viết lại mã rất thường xuyên, trong khi bạn bè và đồng đội của tôi có xu hướng để nó không bị ảnh hưởng. Đó là bởi vì chúng tôi trả lời các câu hỏi được đề cập khác nhau. Và tôi phải nói rằng chúng tôi thường xuyên trả lời sai ... vì chúng tôi không thể dự đoán được tương lai.


2

Microsoft có cần cập nhật windows không? Có phải tất cả các * nix Distros phải tiếp tục phát triển? Hay một ví dụ thực tế hơn là mọi người vẫn lái xe của năm 1970?


1

Bạn thường có thể viết mã tốt hơn trong lần thứ hai, bạn đã tìm hiểu thêm về tên miền bằng cách viết nó ban đầu.

Không có câu trả lời đơn giản nào cho việc đó là giá trị bồi dưỡng. Nói chung, bạn không nên trừ khi a) đó là một trích đoạn học tập tốt cho bạn hoặc b) bạn sẽ tiết kiệm thời gian trong thời gian dài với mã tốt hơn. Hãy nhớ mọi thay đổi rủi ro lỗi.

Là một lưu ý phụ tôi sẽ ủng hộ mạnh mẽ các bài kiểm tra đơn vị. Rất dễ dàng để cải thiện việc bồi dưỡng đặc biệt là nếu bạn không có hành vi hiện tại được đánh dấu rõ ràng với phần còn lại tự động.


1

Tôi tin rằng chúng ta có trách nhiệm viết mã tốt nhất có thể hiện nay. Điều đó có nghĩa là sử dụng tất cả mọi thứ chúng ta đã học được trong quá khứ và từ chối thực hiện các bước cắt ngắn trong thiết kế của chúng tôi. Nếu áp lực lịch trình khiến thứ gì đó bị cắt giảm, tôi không tin rằng chất lượng phần mềm của chúng tôi thậm chí nên được xem xét, mặt khác, cái kẹp giấy hoạt hình nhỏ gọn đó ...

Bây giờ nếu bạn đang làm việc và thấy rằng mã mà bạn cần tương tác không được viết theo cấp độ bạn hiện có khả năng viết, thì việc sửa nó là hợp lý nếu bạn có thể thực hiện theo cách có kiểm soát. Cá nhân tôi có kinh nghiệm rất nhỏ với loại Tái cấu trúc này, giống như mọi người (gần như tất cả mọi người?) Tôi đã thử toàn bộ "cho phép thay đổi mọi thứ và cầu nguyện cho nó hoạt động" và bị cắn bởi điều đó đủ tệ. Tôi đề nghị xem xét các cuộc thảo luận của Martin Fowler (hoặc cuốn sách của ông hoặc một trong nhiều bài viết ) về vấn đề này. Ông dường như đã truyền cảm hứng cho hầu hết những suy nghĩ hiện tại về quá trình này.

Tất nhiên đôi khi bạn có thể không thể xóa mã như bạn muốn. Joel Spolsky đã viết một bài viết về lý do tại sao bạn có thể muốn dành một vài tuần chỉ đơn giản là Tái cấu trúc mã của bạn. Đọc nó ở đây và có nó là một chút cũ, nhưng tôi nghĩ rằng thông tin vẫn còn có liên quan.

Tôi hy vọng điều đó sẽ giúp


1

Tôi cảm thấy rằng tái cấu trúc / cải thiện mã cũ xác định chính lập trình viên. Muốn cải thiện mã mà bạn đã viết một năm trước chỉ cho thấy sự tiến bộ của bạn và nếu nó làm cho ứng dụng tốt hơn và bạn có khả năng, thời gian và phê duyệt để cải thiện nó, hãy làm điều đó.


1

Tốt hơn / cải thiện là một so sánh đa trục. Bạn có nghĩ rằng bạn có thể làm cho nó nhanh hơn, nhỏ hơn, tiết kiệm tài nguyên hơn, dễ đọc hơn, thông tin hữu ích hơn, kết quả chính xác hơn, linh hoạt hơn, tổng quát hơn, có thể chạy trên nhiều hệ thống hơn, loại bỏ sự phụ thuộc vào một sản phẩm riêng biệt?

Tại sao công ty của bạn phải trả tiền cho bạn để dành thời gian viết lại mã này, thay vì viết mã mới hoặc viết lại một số đoạn mã khác?

Bạn nên cải thiện khi có cơ hội, nhưng cơ hội có nghĩa là bạn đang làm việc với mã hoặc bạn đã xác định lý do kinh doanh để thực hiện thay đổi.

Đẩy một sự thay đổi vào sản xuất giới thiệu một cơ hội phá vỡ mọi thứ khác (thử nghiệm đơn vị và chức năng chỉ làm giảm cơ hội này, họ không loại bỏ nó) và chỉ nên được thực hiện khi lợi ích dự kiến ​​vượt xa rủi ro.

Đó là một điểm khác để xem xét - bạn có HỢP ĐỒNG để đẩy sự thay đổi này sang sản xuất, hay đơn giản là cho ngành phát triển? Thanh cho hai kịch bản là hoàn toàn khác nhau. Nếu nó chỉ đi vào nhánh phát triển và có thể không bao giờ được đưa vào sản xuất, thì về cơ bản, cơ hội có nghĩa là bạn đang xem mã vì một số lý do và không mất thời gian để làm. Nó có thể được xem xét theo quy định nếu một push bao giờ nên xảy ra, và bỏ qua nếu nó được coi là không có cơ sở tại thời gian. Mặt khác, nếu nó sẽ được sản xuất ngay bây giờ, như tôi đã nói ở trên, bạn cần xem xét liệu sự thay đổi này có xứng đáng với chi phí hay không: về thời gian thực hiện cú hích và lợi ích của việc sử dụng mã mới.


Thay đổi mã sản xuất mà không có ý định được đẩy vào sản xuất? Nhưng được giữ trong ngành phát triển? hmm Đừng nghĩ rằng tôi sẽ chấp nhận điều đó. Nó sẽ chỉ phục vụ cho sự phát triển phức tạp và phức tạp sau này bởi vì không ai sẽ chắc chắn liệu nó có nên được thay đổi (một lần nữa) hay không tuân thủ các thay đổi khác được dự định cho sản xuất.
Marjan Venema

@MarjanVenema: khi ngừng phát triển, tất cả các nhánh phải giống hệt nhau. Nếu sau này bạn thấy một cái gì đó có thể được cải thiện, nhưng KHÔNG PHẢI được cải thiện, hãy cải thiện nó trong nhánh phát triển và để nó ở đó chờ phát triển tiếp tục và một cú hích mới sẽ được thực hiện.
jmoreno

À, được rồi, tôi hiểu rồi. Đối với tôi điều đó có nghĩa là nó vẫn được dự định để sản xuất, chỉ sau này. Và nó khá rủi ro trừ khi bạn chắc chắn rằng có một vấn đề đi kèm trong hệ thống theo dõi vấn đề của bạn, vì vậy bộ phận kiểm tra / qa cũng nhận được sự cố gắng của họ về "cải tiến" của bạn. Nếu không, họ sẽ đưa nó vào sản xuất chưa được kiểm chứng khi nó đi cùng với những thay đổi khác.
Marjan Venema

@MarjanVenema: có lẽ tôi nên nói có ý định đẩy nó vào sản xuất ngay lập tức. Nếu bạn khẳng định rằng sự thay đổi sẽ không bao giờ được đẩy lên sản phẩm, thì đừng thực hiện thay đổi. Nếu OTOH, bạn không chắc chắn, nhưng thay đổi được thực hiện dễ dàng và bạn đã ở đó ... thực hiện thay đổi. Đối với theo dõi và thử nghiệm, điều đó có nghĩa là được bao phủ bởi "được xem xét theo yêu cầu".
jmoreno

hmm, tôi đoán tôi sẽ chọn không thực hiện thay đổi trừ khi nó liên quan trực tiếp đến những gì tôi đang làm. Và, khi chúng tôi có một nhánh cho mỗi vấn đề, tôi luôn biết khi nào (bản phát hành) một cái gì đó sẽ đi vào sản xuất. Ngoài ra, tôi thực sự cảm thấy bất kỳ thay đổi nào cần phải được kiểm tra, chứ không phải "chỉ" được xem xét theo yêu cầu. Đánh giá của mọi người về những gì tạo nên rủi ro khác nhau và một đôi mắt thứ hai không bao giờ lạc lối. Sau đó, một lần nữa, tôi làm việc chủ yếu trên mã phía máy chủ nơi các thay đổi có thể ảnh hưởng tinh tế đến kết quả trả về cho khách hàng. Đánh giá rủi ro cho các thay đổi đối với mã phía khách hàng có thể dễ dàng hơn rất nhiều.
Marjan Venema

1

Một nguyên tắc nhỏ là nếu bạn mất thời gian để hiểu mã đang làm gì và nếu thời gian này có thể được giảm đi bởi một số phép tái cấu trúc được chọn tốt, thì bạn đang phục vụ nhu cầu của doanh nghiệp và nhóm của bạn thực hiện các bước này.

Nếu mã không được hưởng lợi từ phân tích của bạn, nếu tên trường không trở thành biểu hiện của mục đích mã và các phương thức không được chia thành các phần có thể đọc được, thì doanh nghiệp đã mất một thứ có giá trị: trạng thái hiểu của bạn. Với các công cụ như Visual Studio và ReSharper, các loại tái cấu trúc này là an toàn, trung tính logic và có giá trị lớn trong năng suất và sự tự tin của nhà phát triển trong tương lai.

Như chú Bob Martin nói, "Luôn luôn để khu cắm trại sạch hơn bạn tìm thấy."


1

Đây là một câu hỏi để hỏi quản lý trong công ty của bạn.

Bạn có thời gian và tài nguyên cần thiết để quay lại và thay đổi mã cũ không?

Bạn có đủ thời gian và nguồn lực để có một nhóm QA KIỂM TRA những gì bạn đã thay đổi để đảm bảo nó không bị hỏng không?

Tôi đã rơi vào cái bẫy này trước khi tôi ở trong một mô-đun sửa lỗi và thấy mã tôi hoặc người khác viết không hiệu quả hoặc không phù hợp, thay đổi nó và kết thúc với nhiều vấn đề cần xử lý hơn là tôi chỉ sửa lỗi tôi được giao nhiệm vụ sửa chữa.


0

Nó phụ thuộc.

Nếu mã được đề cập thực sự bị hỏng, do đó nó chứa các lỗi chắc chắn sẽ xuất hiện tại một điểm (ví dụ: một số bộ đếm tại một số điểm sẽ gây ra lỗi và gây ra các vấn đề khó chịu), thì việc sửa chúng có thể rất đáng để thử - nhưng nếu bạn làm, đặt tất cả các biện pháp bảo vệ có thể lên hàng đầu để tránh đưa ra các lỗi mới: đảm bảo bạn có các bài kiểm tra đơn vị có ý nghĩa bao gồm mọi thứ bạn chạm vào, kiểm tra tất cả các thay đổi của bạn bởi một người có thẩm quyền, khăng khăng kiểm tra kỹ, đảm bảo bạn có thể quay lại cũ phiên bản bất cứ lúc nào, sao lưu mọi dữ liệu trước khi đi vào sản xuất, triển khai đến môi trường chấp nhận trước và được người dùng thực tế kiểm tra, v.v. Bạn cũng sẽ muốn được chấp thuận trước khi tiếp tục: nếu lỗi thực sự là một quả bom hẹn giờ và người quản lý của bạn có phần có thẩm quyền,bạn sẽ có thể thuyết phục anh ấy / cô ấy cho phép bạn sửa nó (và nếu bạn không được chấp thuận, thì có lẽ đó là một dấu hiệu cho thấy bạn đã sai).

OTOH, nếu khiếu nại của bạn chỉ thiếu sự tao nhã của mã, thì bạn không dám chạm vào nó. Bây giờ, họ đã thực hiện dịch vụ trung thành trong sản xuất, thay đổi mã sẽ chỉ làm bạn hài lòng, nhưng không thêm bất kỳ giá trị nào, và giống như mọi thay đổi, có nguy cơ bạn phá vỡ thứ gì đó. Ngay cả khi bạn không, thời gian của bạn là có giá trị (theo nghĩa đen: bạn được trả tiền cho những gì bạn làm, vì vậy mỗi phút thời gian của bạn đều tốn tiền) và vì bạn không thêm bất kỳ giá trị thực tế nào, nên một sự thay đổi sẽ là một khoản lỗ ròng cho công ty và dự á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.