Khi nào nó được chấp nhận để KHÔNG sửa chữa các cửa sổ bị hỏng?


21

Liên quan đến các cửa sổ bị hỏng , có khi nào tái cấu trúc là tốt nhất để lại cho một hoạt động trong tương lai?

Ví dụ: nếu dự án thêm một số tính năng mới vào hệ thống nội bộ hiện có được gán cho một nhóm chưa làm việc với hệ thống cho đến bây giờ và được đưa ra một mốc thời gian ngắn để làm việc với - thì có thể chứng minh được trì hoãn các cấu trúc lại chính cho mã hiện có để thực hiện thời hạn trong kịch bản này?


6
Đôi khi, ông chủ quyết định rằng các cửa sổ bị hỏng sẽ không được sửa chữa, bởi vì ông biết rằng mình sẽ kiếm được nhiều tiền hơn bằng cách sửa chữa toàn bộ ngôi nhà sau này.
mouviciel

1
Quy tắc cơ bản: Nợ kỹ thuật là ổn để đạt đến thời hạn, nhưng cuối cùng phải được bồi thường và càng sớm càng tốt
JF Dion

4
Xin chúc mừng! Bạn đã mô tả hoàn hảo "triết lý thiết kế" của PHP.
ThomasX


4
Ngày mai không bao giờ đến ...
Eric King

Câu trả lời:


25

Tái cấu trúc là - và nên là - một quá trình đang diễn ra. Nó không đủ để chỉ đáp ứng các yêu cầu với một triển khai đã được thử nghiệm và vẫn chưa hoàn thiện.

"Làm cho nó hoạt động, sau đó làm cho nó hoạt động tốt hơn" .

Tôi không thể nhớ mình đã đọc câu trích dẫn đó ở đâu, nhưng đây là chìa khóa để áp dụng tái cấu trúc tốt và tôi cho rằng nó không chuyên nghiệp để làm khác.

Tái cấu trúc liên tục giống như quét sạch các vết đổ trong khi bạn đang nấu ăn, và làm sạch các món ăn của bạn sau khi bạn ăn xong. Tái cấu trúc mục tiêu giống như tìm một nhà bếp bẩn, nhưng chỉ có thời gian để rửa một hoặc hai ly bẩn. Bạn có muốn sống với một nhà bếp bẩn liên tục, hoặc bạn muốn giữ mọi thứ sạch sẽ khi bạn đi cùng?

Bạn nhận được mã để làm việc, sau đó bạn cấu trúc lại mã của mình để đảm bảo rằng bạn có triển khai tốt nhất bạn có thể sử dụng. Nếu bạn đang làm một cái gì đó quen thuộc, có thể là lần đầu tiên bạn triển khai mã tốt nhất, tuy nhiên phải mất một chút thời gian để kiểm tra lại công việc của bạn để chắc chắn. Nếu có vẻ như bạn có thể cải thiện mã của mình, thì bạn cố gắng cấu trúc lại để đảm bảo mã của bạn ít nhất là gọn gàng và sạch sẽ như bạn có thể làm được. Điều này có nghĩa là bạn đang giảm số nợ kỹ thuật mà bạn để lại và bạn sẽ dễ đọc và tái cấu trúc hơn vào lần tiếp theo khi mã cần được xử lý. Đây là giá trị cốt lõi đằng sau câu thần chú TDD "Red-Green-Refactor", ngoại trừ trường hợp trong TDD bạn tái cấu trúc chủ yếu để loại bỏ trùng lặp, nó cũng trả tiền để xem xét các mục khác có thể được tái cấu trúc, chẳng hạn như các lớp lớn, phương thức dài,

Nếu bạn thấy mình phải đối mặt với một thiết kế lại lớn, thì có lẽ bạn có thể tắt nó trong một thời gian, đặc biệt nếu bạn đang chạy rất thấp trong thời gian trong lịch trình của bạn. Tuy nhiên, điều này được cung cấp chức năng của mã của bạn sẽ không bị xâm phạm và cũng được cung cấp việc triển khai sẽ tiếp tục đáp ứng các yêu cầu. Loại tình huống này sẽ là một trường hợp hiếm gặp, và bạn có thể giúp đảm bảo nó thậm chí còn hiếm hơn nếu bạn liên tục tái cấu trúc khi bạn đi cùng. Tuy nhiên, điều quan trọng hơn nữa là bạn không thể mạo hiểm để lại những thay đổi lớn của mình quá lâu, nếu không, cuối cùng bạn sẽ tạo ra một khối lượng công việc lớn hơn, điều này có thể tốn kém hơn nhiều để sửa chữa, hoặc có thể dẫn đến tốn kém hơn nữa dự án thất bại.

Tôi có ấn tượng rằng nhiều người có xu hướng nhầm lẫn các định nghĩa cho Tái cấu trúcTái thiết kế . Hai thuật ngữ mô tả các chiến lược để quản lý các tình huống rất khác nhau. Nếu bạn muốn tái thiết kế, bạn đang cam kết thực hiện một thay đổi mạnh mẽ sẽ làm thay đổi hành vi của một hệ thống. Điều này sẽ làm mất hiệu lực một số bài kiểm tra, và cũng sẽ yêu cầu các bài kiểm tra mới. Khi bạn tái cấu trúc, bạn đảm bảo hệ thống của bạn tiếp tục hoạt động chính xácgiống như trước khi thay đổi, tuy nhiên bạn cũng đảm bảo rằng mã của bạn sẽ có tuổi thọ cao và sẽ dễ duy trì hơn theo thời gian. Bạn không "làm phiền" mã của bạn cho địa ngục của nó, bạn đang cam kết với một tiêu chuẩn chuyên nghiệp về mã sạch sẽ giảm nguy cơ thất bại và sẽ đảm bảo mã của bạn vẫn là một niềm vui để làm việc và theo tiêu chuẩn chuyên nghiệp .

Quay trở lại với các cửa sổ bị hỏng tương tự, nếu bạn phá vỡ cửa sổ, bạn nên sửa chữa nó ngay lập tức. Nếu bạn không nhận thấy rằng một cửa sổ bị hỏng, thì bạn cần phải quyết định chi phí cho bạn nếu bạn để cửa sổ bị hỏng. Bây giờ, lặp lại hai câu trước, nhưng thay thế Bug cho cửa sổ. Bạn cuối cùng cần một chiến lược khác. Nếu bạn đã tạo ra một lỗi khi bạn viết mã, bạn sẽ sửa nó ngay lập tức hoặc bạn xem liệu các thay đổi có yêu cầu nỗ lực tái thiết kế hay không và bạn sẽ đưa ra quyết định thương mại khi nào là tốt nhất để giải quyết vấn đề. Vì vậy, bạn không tái cấu trúc để khắc phục sự cố, bạn tái cấu trúc để đảm bảo việc tìm kiếm và khắc phục sự cố dễ dàng hơn. Tôi không quan tâm bạn nghĩ mã của bạn tuyệt vời như thế nào, các hệ thống phức tạp sẽ luôn có vấn đề cần được xử lý theo thời gian. Đây là những gì nợ kỹ thuật là tất cả, và tại sao tái cấu trúc cần phải là một quá trình liên tục khi bạn thực hiện mã của mình và không để lại trong một thời gian tương lai tùy ý.

Vì vậy, trong ngắn hạn, câu trả lời rằng đôi khi có thể chấp nhận được việc trì hoãn các thay đổi lớn đối với mã để đưa ra thời hạn, tuy nhiên không nên coi đó là cách làm thông thường để coi tái cấu trúc như một bài tập độc lập với công việc thực hiện hàng ngày của bạn, và chắc chắn không bao giờ được sử dụng như một cái cớ bởi các nhóm không quen thuộc với cơ sở mã như là một tùy chọn để tránh đảm bảo rằng việc triển khai của họ gọn gàng và sạch sẽ như họ có thể thực hiện trong các tình huống.


Giống như trích dẫn.
Marjan Venema

1
Ở quá nhiều nơi "lần hiếm" là chuẩn mực.
ozz

2
Nếu chỉ các "nhà thiết kế" PHP nhận ra câu nói đó ...
ThomasX

1
Câu nói hay, Hãy nghĩ về điều này - bạn có muốn họa sĩ xe hơi của mình áp dụng logic tương tự để sửa chữa chiếc Toyota 1999 của bạn không - và nếu vậy, bạn đã sẵn sàng trả tiền cho một lớp sơn Roll Royce trên chiếc xe 1000 đô la chưa?
mattnz

@mattnz Sự tương tự của bạn không thực sự đúng đối với việc phát triển phần mềm. Đây không phải là một trường hợp "mạ vàng", đây là một khoản thanh toán chi phí tương đối thấp để đảm bảo bạn nhận được lợi tức tối đa cho khoản đầu tư của mình. Đánh cắp sự tương tự bức tranh của bạn, đó cũng là sự khác biệt giữa việc phủ một lớp sơn lên xe của bạn bằng một bàn chải rộng, hoặc sử dụng buồng phun sơn để có được một kết thúc đẹp. Bạn nhận được những gì bạn phải trả cho, vì vậy bạn có muốn trả mức giá chuyên nghiệp và nhận một công việc đã hoàn thành một nửa? Cắt giảm góc có thể tiết kiệm một chút trong ngắn hạn, nhưng sẽ phát sinh nợ kỹ thuật lớn hơn trong dài hạn.
S.Robins

11

Một số nhà phát triển cho biết họ đang "Sửa cửa sổ bị hỏng" khi thực sự họ đang "sắp xếp lại các ghế trên tàu Titanic". Tái cấu trúc mã hoạt động nhưng xúc phạm khứu giác của bạn là tương đối dễ dàng. Nếu bạn thấy rằng bạn tiếp tục quay lại với loại nhiệm vụ đó thay vì thêm các khả năng mới cho người dùng của bạn hoặc làm cho ứng dụng trở nên hữu dụng hơn cho họ (tối ưu hóa có nghĩa là làm cho ứng dụng chạy nhanh hơn ở đây, thì tối ưu hóa có nghĩa là làm cho mã dễ đọc hơn khác nhau) thì có lẽ bạn đang dọn dẹp quá nhiều. Không phải vì dọn dẹp là xấu, mà bởi vì công ty đang trả tiền cho sự phát triển để có được một cái gì đó phát triển. Họ không muốn một giải pháp dễ vỡ, khó đọc, được kiến ​​trúc kém, để chắc chắn, nhưng họ cũng không muốn một giải pháp nửa đẹp và bóng bẩy.

Dọn dẹp khi bạn cần làm một việc đơn giản "để đi" hoặc khi bạn đang chờ một nhóm khác cho bạn biết liệu vấn đề của bạn có thực sự là lỗi của họ hay khi bạn đang chờ quyết định. Sẽ có rất nhiều cơ hội. Nếu bạn có cơ hội để chuyển toàn bộ ứng dụng về phía trước, hãy nắm lấy nó, trừ khi bạn bắt đầu cảm thấy toàn bộ mọi thứ đã trở nên dễ vỡ. Có lẽ là không. Bạn sẽ có cơ hội tái cấu trúc - bạn không cần phải lo lắng về điều đó.

Để trở lại nửa sau câu hỏi của bạn, một lần chạy nước rút để thêm các tính năng đối mặt với dòng thời gian ngắn, sẽ là sai khi nói "và chúng tôi sẽ không thực hiện bất kỳ tái cấu trúc nào, không có thời gian." Sẽ là sai khi nói "Tôi biết đã 6 tuần và nó trông giống hệt người dùng, nhưng những cửa sổ bị hỏng này thực sự cần phải sửa." Phù hợp với tái cấu trúc vào các khoảng trống xảy ra trong bất kỳ dự án nào. Đừng nương tựa vào việc dọn dẹp với chi phí đáp ứng mục tiêu của dự án.


4
Một số nhà phát triển cho biết họ đang "Sửa cửa sổ bị vỡ" khi thực sự họ đang "sắp xếp lại các ghế trên tàu Titanic" - thực sự, dường như rất khó để các nhà phát triển nói ra sự khác biệt giữa "nợ kỹ thuật" và "không phải theo cách tôi sẽ làm đã hoàn thành nó "
RevBingo

9

Từ góc độ kinh doanh, tái cấu trúc là đầu tư đầu cơ - đầu tư thời gian và công sức (tiền) bây giờ, với hy vọng rằng nó sẽ tiết kiệm nhiều thời gian và công sức hơn (tiền) đôi khi trong tương lai.

Không tham gia vào cuộc tranh luận về việc nỗ lực tái cấu trúc sẽ tiết kiệm được bao nhiêu trong phần kết nối (Điều này phụ thuộc vào quá nhiều biến để nó trở thành một cuộc thảo luận có ý nghĩa ở đây), rõ ràng đã đến lúc tái cấu trúc là khi "giá trị hiện tại ròng" của chi phí để lại nó vượt quá chi phí làm bây giờ.

Đó là dễ dàng, ngoại trừ bạn không có ý tưởng bao nhiêu chi phí. Bạn cũng cần phải tính đến tất cả các ý tưởng lập kế hoạch tài chính thông thường như Thu nhập từ đầu tư, quản lý rủi ro (giá trị thương hiệu, trách nhiệm pháp lý, bảo hiểm so với rủi ro không bảo hiểm), chi phí oppertuniy, v.v.

Trong hầu hết các trường hợp, quyết định khi nào tái cấu trúc là tốt nhất để lại cho những người điều hành doanh nghiệp. Mặc dù có nhiều áp phích trên diễn đàn này, các nhà quản lý thường biết nhiều về việc điều hành một doanh nghiệp hơn là lập trình viên. Họ có một bức tranh lớn hơn trong tâm trí bao gồm tối đa hóa lợi nhuận cho cổ đông. Thật hiếm khi sửa chữa những thứ không bị hỏng góp phần vào việc này, mã cũng không ngoại lệ.

Chỉnh sửa: Tôi đã đọc một bài viết thú vị về lịch trình duy trì trên cơ sở hạ tầng quan trọng. Ý chính là phong trào tránh xa sự bảo trì thường xuyên (tái cấu trúc) để sửa chữa khi cần thiết (sửa lỗi). Sự khác biệt chính là các cấp độ giám sát - ví dụ, một nhà máy điện hạt nhân giám sát rất chi tiết và khắc phục khi "hỏng" nhưng trước khi thất bại. Những gì đã được tìm thấy là việc sửa chữa một sơ đồ bảo trì không chỉ tốn kém hơn, mà còn ít đáng tin cậy do mất điện do chương trình bảo trì. Một ý tưởng tương tự là cần thiết cho phần mềm - tái cấu trúc các bit sắp bị phá vỡ - mà bạn chỉ có thể biết bằng cách đo.


4
+1 mặc dù có lỗi chính tả :); hầu hết các lần khách hàng không trả tiền cho mã sạch - họ đang trả tiền cho một kết quả. Nếu bạn có mã sạch và không có kết quả, bạn sẽ không được trả tiền và bạn sẽ không tái cấu trúc trong thời gian dài.
jasonk

2
Tôi chỉ muốn lưu ý rằng khá phổ biến rằng Người quản lý có ý thức tốt hơn về toàn bộ doanh nghiệp. Thật không may, họ thường có ý thức sâu sắc về việc mã xấu sẽ có giá bao nhiêu trong tương lai, vì vậy hãy đảm bảo người quản lý của bạn có một số dữ liệu chi phí hợp lý để làm việc, nếu bạn tin tưởng người quản lý đưa ra quyết định này.
Michael Kohne

Một cách khác để xem Tái cấu trúc không phải là một điều gì đó để quyết định thực hiện như một nhiệm vụ mục tiêu, mà là một phương tiện để đảm bảo bạn không vượt qua chính mình khi bạn phát triển một hệ thống. Thông thường, bạn sẽ tìm thấy mã yếu kém sẽ khiến bạn tiếp tục sửa đổi các bài kiểm tra và cố gắng dập tắt các đám cháy khi bạn đi cùng. Điều này có thể chi phí khách hàng của bạn lên phía trước như là kết quả. Giữ mã sạch sẽ không được coi là mạ vàng mã của bạn, mà là duy trì một tiêu chuẩn chuyên nghiệp để mang lại kết quả thành công.
S.Robins

1
@ S.Robins Chúng ta đang nói về tái cấu trúc, và mã không được bao gồm kém, (trong suy nghĩ của tôi thứ hai là một vấn đề, thứ nhất là một thứ tốt đẹp để có).
jasonk

5

Có thể chấp nhận khi thiệt hại cho doanh nghiệp bằng cách sửa chúng lớn hơn là không sửa chúng.

Các tình huống xảy ra điều này có thể là:

  • trong đó thời hạn hoặc cơ hội kinh doanh có thể bị bỏ lỡ vì thời gian cần thiết để khắc phục
  • trong đó một đoạn mã (thực sự) được lên kế hoạch để nghỉ hưu trong một khoảng thời gian rất ngắn do đó gần như không có lợi ích gì cho việc tái cấu trúc nó.

Và những tình huống này xảy ra - các tình huống thương mại thường sẽ kéo dài thời hạn nhân tạo phải đáp ứng khi cơ hội đàm phán đã qua, và các yêu cầu có thành phần thời gian - ví dụ như thay đổi luật pháp hoặc quy tắc thuế có hiệu lực một ngày cụ thể - tồn tại.

Bí quyết là xác định những tình huống này và đánh giá chúng đúng cách. Mã dự kiến ​​sẽ nghỉ hưu thường sẽ tồn tại trong nhiều năm. Thời hạn nhân tạo có thể cần phải được đáp ứng nhưng chúng thường có thể được đáp ứng theo các cách khác nhau (ví dụ: phần mềm có thể được trình bày, demo-ed và "ra mắt" vào một ngày nhất định mà không cần phải hoàn thành phiên bản phát hành cuối cùng cho đến sau này).

Khi được trình bày với loại điều này, bạn cần tiếp cận nó với một tâm trí cởi mở nhưng luôn hỏi nó có xuất hiện không? Là các giả định liên quan đến thực tế? Có cách nào khác để đáp ứng mục tiêu mà không vận chuyển mã không đạt tiêu chuẩn? Nếu không có cách nào tôi sử dụng tốt nhất thời gian tôi có sẵn?

Và nếu không có sự thay thế nào luôn tốt, nhưng khi nào chúng ta sẽ sửa nó?

Bởi vì nó nên gần như, hầu như, hầu như luôn luôn là khi , không phải nếu .


Re: thời hạn nhân tạo; Trong thế giới lý tưởng, bất kỳ dự án tử tế nào cũng cần có thời hạn. Tôi đã nghe nói về các nhóm sản phẩm sẽ ổn khi trượt một tuần (một tuần không phải là vấn đề lớn phải không?) - mà không nhận ra động cơ kinh doanh - rằng điều này sẽ đưa bạn sau ngày thứ bảy đen , so với trước đó. Di chuyển xấu.
jasonk

3

Nếu các nhà quản lý quyết định rằng họ muốn xây dựng nợ kỹ thuật . Đây là một quyết định hợp lý để đưa ra nếu một người, ví dụ, chỉ muốn một nguyên mẫu ban đầu cho một số khách hàng ban đầu để nhận được một số phản hồi sớm.


4
Nó xảy ra quá thường xuyên, nơi các nhà quản lý cho phép nợ kỹ thuật tích lũy để đáp ứng thời hạn chặt chẽ, chỉ thay vì trả hết nợ càng nhanh càng tốt, họ thấy thời hạn tiếp theo lờ mờ và thay vì sắp xếp thời gian cho công việc sắp tới nợ trước , khoản nợ được bỏ qua và thời gian cần thiết với các tính năng mới bổ sung để phát hành. Nói cách khác, khoản nợ không bao giờ được trả hết, và trước khi bạn nhận ra mức độ sâu sắc của dự án, đã quá muộn để làm bất cứ điều gì để tránh vấn đề vượt khỏi tầm kiểm soát. Bạn có thể tích lũy nợ, miễn là bạn thực sự trả hết nợ nhanh chóng.
S.Robins

2
Một số nhà quản lý (đặc biệt là phi kỹ thuật) không biết bạn đang nói về vấn đề gì khi đề cập đến nợ kỹ thuật. Một số thậm chí nghĩ rằng bạn đang cố gắng đưa họ vào việc đi chơi và chơi với các công cụ thay vì làm việc thực sự.
quick_now

Đó là lý do tại sao tổ chức của chúng tôi không có người quản lý: Open-Org.com;)
David

1
Hầu hết các nhà quản lý không đủ thông minh để hiểu những hạn chế của nợ kỹ thuật, do đó, điều bạn gặp phải là nợ kỹ thuật liên tục tích lũy cho đến khi bạn phá sản về mặt kỹ thuật và buộc phải viết lại toàn bộ hệ thống.
Wayne Molina

1

Bạn có thể nghĩ về nó giống như cách xin tín dụng. Có thể vay tiền để đầu tư vào X trong ngắn hạn và trả tiền cho nó trên cơ sở dài hạn không? Không có câu trả lời dứt khoát, nó có thể là lợi ích tốt nhất của tổ chức (ví dụ để đáp ứng mong đợi của khách hàng hiện tại), hoặc nó có thể là một thảm họa nếu được thực hiện một cách vô trách nhiệm.

Tất cả đều được ưu tiên và quản lý nên lưu ý rằng mặc dù ưu tiên số một là làm cho "mã hoạt động", thực hiện các tính năng mới và đáp ứng mong đợi của khách hàng, mỗi khi bạn rời khỏi các cửa sổ bị hỏng, bạn sẽ làm cho ưu tiên số một chậm hơn , khó khăn hơn, và đòi hỏi đầu tư nguồn lực nhiều hơn. Ngoài ra, 99% thời gian là không khả thi để ngừng phát triển các tính năng mới và tập trung mọi nỗ lực trong việc "sửa lỗi cơ sở mã".

Tóm lại, có thể chấp nhận rời khỏi các cửa sổ bị hỏng đôi khi, giống như chấp nhận cho vay ... chỉ cần nhớ rằng bạn thực sự, thực sự phải trả tiền cho nó trong tương lai. Và trong tương lai, thời gian để làm điều đó rất có thể sẽ không lớn hơn nhiều so với thời gian bạn có bây giờ.


0

Thông thường, khi bạn có thể, bạn nên sửa nó, Điều này sẽ ngăn chặn thời gian tiềm năng dành cho bảo trì. Tuy nhiên, một số thực hành không nhanh nhẹn dã man có xu hướng để cho hiện trạng miễn là nó còn hoạt động. Một số nhà quản lý sợ "những tác động không lường trước" của sự thay đổi.

Tôi chỉ muốn để nó hoạt động nếu nó hoạt động như bình thường (chỉ bị hỏng do tối ưu hóa chứ không phải chức năng) và bạn thiếu thời gian để kiểm tra nó, nếu bạn thực hiện tái cấu trúc. Tuy nhiên, bạn cần lưu ý rằng nó nên được sửa sau càng sớm càng tốt.

Nếu nó bị hỏng bởi chức năng và các tính năng mới của bạn phụ thuộc vào nó, tốt nhất bạn nên sửa nó càng sớm càng tốt.


0

Hầu hết các lập trình viên đang kinh doanh để kiếm tiền cho chủ nhân của họ. Vì vậy, khi nào nên tái cấu trúc xảy ra: Khi nó làm cho công ty của bạn kiếm tiền. Tái cấu trúc là thời gian không dành cho các dự án khác và thời gian tiết kiệm trong tương lai cho dự án này.

Cho dù nó có giá trị hay không thì tùy thuộc vào người quản lý của bạn.


1
-1; Kiểu thái độ này là nguyên nhân khiến các hệ thống phần mềm ngừng hoạt động vì tái cấu trúc được coi là "thời gian có thể dành cho những thứ mới".
Wayne Molina

1
Tái cấu trúc thời gian IS không dành cho những thứ mới.
Pieter B

@Wayne M: Mọi thứ là các kỹ sư phần mềm thường không quyết định những gì được thực hiện, doanh nghiệp và người quản lý làm. Tất nhiên, mọi người đều muốn tái cấu trúc bất cứ khi nào họ muốn, nhưng đó thực sự không phải là thực tế ... ít nhất là trong 7 năm kinh nghiệm của tôi trong nghề.
James

+1 Kiểu thái độ này là những gì mang lại giá trị cho bất cứ ai trả lương cho bạn. Không có nó, toàn bộ công việc của bạn có thể được thuê ngoài.
MarkJ

0

Các lập trình viên nên cho phía doanh nghiệp biết mức độ của nợ kỹ thuật, để họ có thể đưa ra quyết định sáng suốt. Nếu nhu cầu được đưa ra thị trường sớm hơn rủi ro về mã của bạn, bạn không có nhiều sự lựa chọn. Thiếu dòng tiền sẽ kèn rất nhiều quyết định kỹ thuật.

Để đặt một số vấn đề vào một viễn cảnh phi kỹ thuật, hãy chỉ ra thời gian kéo dài để sửa lỗi và thêm các tính năng mới. Nếu quản lý có một nền tảng bán hàng và tiếp thị, họ có thể hiểu điều này. Họ ghét phải nói với khách hàng những điều này sẽ mất nhiều thời gian hơn.

Nếu bạn đang nghĩ về việc mở rộng nhóm của mình, đây có thể là thời điểm tốt để thuê một nhà phát triển cơ sở. Kiểm tra bảo hiểm sẽ là một vị cứu tinh rất lớn trong trường hợp này. Họ sẽ học được nhiều hơn bằng cách làm hơn là đọc tài liệu.


0

nó có thể trở nên chính đáng để trì hoãn các phép tái cấu trúc chính đối với mã hiện có với mục đích đưa ra thời hạn trong kịch bản này không?

  • Nếu một cái gì đó bị phá vỡ, thì rất có thể là không. Bạn sẽ không lái một chiếc xe với hệ thống phanh làm việc một phần, phải không? (Trừ khi rủi ro không đến nơi nào đó đúng giờ lớn hơn rủi ro bị rơi vì phanh bị lỗi.) Xa giải pháp lý tưởng, nhưng thật không may, nó xảy ra.

Tuy nhiên, nếu bạn đang nói về mã làm việc bao thanh toán lại, thì tôi sẽ xem xét những điều sau:

  • Nếu nó phụ thuộc vào các nhà phát triển hoặc giám đốc kỹ thuật cao cấp của chúng tôi thì chúng tôi sẽ không bao giờ phát hành bất kỳ phần mềm nào. Chúng tôi luôn luôn tái yếu tố và phấn đấu cho chủ nghĩa hoàn hảo.

  • Nếu bao thanh toán lại sẽ có tác động tiêu cực đến lợi nhuận của doanh nghiệp thì nó nên được lên lịch lại.

  • Nếu doanh nghiệp của bạn đã hứa sẽ cung cấp một số chức năng nhất định trước một ngày nhất định, thì bạn sẽ cấu trúc lại sau. Hãy nghĩ về tổ chức từ thiện Ngày Mũi Đỏ - mỗi năm họ có thể thu thập quyên góp trong khoảng thời gian 24 hoặc 48 giờ. Không có cách nào họ có thể tái lập hệ số cơ sở mã của họ nếu họ nghĩ rằng điều đó có thể ngăn họ tham gia quyên góp trong khoảng cách thời gian đó. Ngoài ra, nếu có một cửa sổ bị hỏng, nhưng nó sẽ không ảnh hưởng đến khả năng quyên góp của họ, thì có khả năng là họ sẽ chọn không tái lập hệ số.

  • Bạn sẽ luôn tìm thấy một cách tốt hơn để làm một cái gì đó. Đó là một quá trình tự nhiên và nó rất quan trọng để có thể vẽ một đường thẳng.


Sẽ rất tuyệt nếu nhận được một số phản hồi về việc bỏ phiếu: D
CodeART

2
Đồng ý, với rất nhiều phiếu trừ, có vẻ như ai đó vừa có một ngày tồi tệ, và đâm vào một loạt phiếu bầu.
Sam Goldberg

-1

Trả lời câu hỏi của bạn về tái cấu trúc, tôi sẽ nói, "có". Như một người khác đã chỉ ra trong các câu trả lời ở trên, tái cấu trúc là một quá trình đang diễn ra, và đôi khi có những quyết định kinh doanh và chiến thuật thay thế cho nhu cầu viết lại mã đã hoạt động (mặc dù có lẽ theo cách klugey).

Về "cửa sổ bị vỡ": Lần đầu tiên tôi nghe thuật ngữ này trong bối cảnh phát triển phần mềm, khoảng 10 năm trước. Nhưng tại thời điểm đó, nó được sử dụng để mô tả cho phép kiểm tra đơn vị bị hỏng . Đây là mô tả kịch bản mà mọi người có cám dỗ không sửa các bài kiểm tra đơn vị bị hỏng, bởi vì có vẻ tốt hơn chỉ cần nhớ những bài kiểm tra nào "không thể thất bại", thay vì sửa các bài kiểm tra bị hỏng (bị hỏng hợp lệ do giao diện hoặc yêu cầu thay đổi, ví dụ).

Tôi nghĩ rằng việc áp dụng phép ẩn dụ cửa sổ bị hỏng cho các bài kiểm tra đơn vị bị hỏng là phù hợp hơn và mô tả nhiều hơn về sự nguy hiểm của việc cho phép "cửa sổ bị hỏng" trong vùng lân cận phần mềm. Theo tôi, nếu bạn đang nói về các bài kiểm tra đơn vị bị hỏng (như các cửa sổ bị hỏng), thì câu trả lời sẽ là không bao giờ ổn. (Trong phạm vi chúng ta có thể nói không bao giờ ...)


Lý do cho việc bỏ phiếu xuống là gì? Có gì nói ở đây không đúng? Hay chỉ là những biên tập viên đầy thù hận?
Sam Goldberg

-1

Nếu nó thực sự bị hỏng thì nên sửa.

Nhưng nó có thực sự bị hỏng? Bạn có chắc chắn rằng bạn không chỉ đánh đồng "không đẹp" với bị hỏng.

Bạn cần áp dụng phép tính "giá trị chìm" trước khi tính lại mã làm việc vì bạn không thích kiểu này, hoặc vì bạn nghĩ rằng nó sẽ gây ra vấn đề trong tương lai.

Đối với mã bao thanh toán lại mà bạn đã viết tuần trước bạn đã chìm chi phí là thời gian bạn đã sử dụng mã hóa vào tuần trước, không thực sự đáng bận tâm nếu mã được cải thiện đáng kể.

Mã bao thanh toán lại đã được thông qua thử nghiệm đơn vị. Bây giờ bạn không chỉ cần viết lại, bạn cần xác định lại và chạy lại tất cả các thử nghiệm được thực hiện cho đến nay, điều này bắt đầu trông đắt tiền.

Mã bao thanh toán lại đã đi vào sản xuất. Thậm chí nhiều thử nghiệm phải được thực hiện, cộng với việc triển khai cho người dùng và nguy cơ cung cấp thứ gì đó không hoạt động tốt như bản phát hành cũ. Bạn cần phải biện minh cho điều này và xóa nó với ông chủ lớn trước khi tiếp tục.

Mã tái xác nhận đã được sản xuất trong một thời gian và đã thông qua một số bản phát hành và sửa lỗi. Trừ khi bạn biết phần mềm sẽ ngừng hoạt động, thậm chí không đi đến đó!


Thông thường "không đẹp" đi đôi với "hỏng". Mã không được viết chính xác sẽ khó duy trì và thêm các tính năng mới vào, vì vậy cuối cùng bạn sẽ phải viết lại mã đó vì bạn đã bỏ qua việc tái cấu trúc trên đường đi.
Wayne Molina

2
Mã được kiểm tra và trong sản xuất không có báo cáo lỗi nổi bật là mã làm việc. Rất nhiều thời gian và tiền bạc đã được đầu tư để đưa nó vào trạng thái đó. Mã đẹp chỉ có vậy - mã đẹp.
James Anderson

Tôi không đồng ý. Mã có thể hoạt động nhưng là một rắc rối để duy trì và thêm các tính năng; mã như thế này bị hỏng vì nó cứng và "có mùi". Mã được viết đúng thường rất đẹp VÀ được kiểm tra VÀ quan trọng hơn là dễ duy trì và nâng cao.
Wayne Molina

@Wayne M: Wow, Wayne bạn thực sự không có ý tưởng. Nếu bạn từng làm điều đó để PM các nhà phát triển của bạn sẽ yêu bạn, nhưng sự nghiệp của bạn có thể sẽ không còn lâu nữa. Bạn phải vẽ đường tại một số điểm. Tôi hiểu rằng đó là bạn, những người đã hạ thấp tất cả những người không đồng ý với giấc mơ của bạn?
James

1
@WayneM - vì vậy bạn sẽ đưa ra một "lỗi" vì bạn không thích giao diện của mã. Mã được viết để thực hiện một công việc - nếu nó thực hiện công việc thì nó hoạt động. Chi phí bảo trì có thể cao nhưng phải rẻ hơn so với viết lại.
James Anderson

-2

Đó là kinh nghiệm của tôi rằng thời hạn là điều quan trọng nhất đối với doanh nghiệp. Nó thực sự phụ thuộc vào người sẽ sử dụng ứng dụng của bạn. Trong trường hợp của tôi, nó là dành cho phần mềm hệ điều hành điện thoại di động ... bỏ lỡ thời hạn có nghĩa là bỏ lỡ các mục tiêu bán hàng và giá cổ phiếu.

Chúng tôi đã bắt gặp rất nhiều khoảnh khắc WTF khi nhìn vào mã mà chúng tôi được thừa hưởng và rõ ràng cần phải thay đổi. Tuy nhiên, vì mã này hoạt động 'chỉ khoảng' (sự không rõ ràng không được hiểu rõ) nên không có sự khuyến khích nào cho ban quản lý thực sự cho phép tái cấu trúc trong khi có những cam kết nổi bật được đưa ra. Mãi cho đến khi một lỗi được nhìn thấy 'trong tự nhiên', chúng ta sẽ được phép thay đổi bất cứ điều gì, mặc dù chúng ta có thể tự phá vỡ nó một cách dễ dàng thông qua các trường hợp cạnh tối nghĩa. Tôi đã từng tái cấu trúc khoảng 10k dòng mã trong thời gian riêng của mình và cuối cùng phải vứt nó đi. Thời gian cần thiết để thử nghiệm và những người khác xem xét vv không thể được biện minh.


Tôi rất vui vì thực tế phát triển phần mềm dường như bị mất đối với một số người
James
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.