Có một mô hình chống được đặt tên cho phần mềm phát triển trong lịch sử? [đóng cửa]


28

Có một mô hình chống mô tả một hệ thống phần mềm phát triển trong lịch sử, nơi nhiều nhà phát triển chỉ thêm các tính năng mới vào hệ thống nhưng không ai thực sự để mắt đến kiến ​​trúc tổng thể cũng như chưa được thực hiện tái cấu trúc?

Tôi nghĩ điều này xảy ra khi quản lý / khách hàng yêu cầu tính năng mới liên tục và không ai có thể tái cấu trúc bất cứ thứ gì mà chỉ thêm vào những gì các nhà phát triển khác đã làm trước đây.

Một lý do cũng có thể là nhà phát triển chỉ tràn ngập hệ thống phần mềm và không thực sự hiểu cách thức hoạt động của nó và sau đó chỉ thêm / dán mã của mình vào cuối (thay vì cấu trúc lại mã và thay đổi mã.)

Vì vậy, theo thời gian, càng ngày càng khó để duy trì hệ thống.

. rơ moóc trong khi đạp xe về phía sau và sau đó một kỹ sư chỉ cần hàn một thanh kéo ra phía trước xe. Công việc đã hoàn thành. Nhưng bây giờ, chiếc xe bò không mở nữa.)


4
Những người không phải là lập trình viên có thể sẽ không hiểu các phản đề, các thuật ngữ lập trình. Tôi nghĩ những gì bạn muốn là một sự tương tự ...
Izkata

1
Bên cạnh đó, một mẫu chống phải là một mẫu thiết kế ... mà bạn không nên sao chép. Và những gì bạn đang mô tả thực sự là một hội chứng quản lý phần mềm hơn là mẫu thiết kế.
Stephen C


Nó được gọi là "Feature-creep" hoặc "scope creep."
Robert Harvey

Câu trả lời:


45

Bạn tham khảo nợ kỹ thuật .

Tất cả chúng ta đều tích lũy nợ kỹ thuật trong các sản phẩm chúng ta phát triển theo thời gian; tái cấu trúc là một trong những cách rất phổ biến và hiệu quả để giảm nợ kỹ thuật này, mặc dù nhiều công ty không bao giờ trả hết nợ kỹ thuật. Các công ty này có xu hướng tìm thấy phần mềm của họ cực kỳ không ổn định trong nhiều năm và nợ kỹ thuật trở nên khủng khiếp đến mức bạn không thể trả dần dần, vì sẽ mất quá nhiều thời gian để trả nó theo cách đó.

Nợ kỹ thuật có thời hạn, bởi vì nó tuân theo các hành vi tương tự của nợ. Bạn nhận được khoản nợ và miễn là bạn tiếp tục chi tiêu (tạo tính năng) và không trả khoản nợ đó, nó sẽ chỉ tăng lên. Giống như nợ nần, khi nó quá lớn, bạn sẽ đạt được những điểm mà bạn có thể muốn rũ bỏ nó hoàn toàn bằng các nhiệm vụ nguy hiểm như viết lại toàn bộ. Cũng giống như nợ thực sự, vì nó tích lũy đến một điểm nhất định, nó cản trở khả năng chi tiêu (tạo tính năng) của bạn hoàn toàn.

Chỉ cần đưa ra một thuật ngữ khác trong hỗn hợp, sự gắn kết đề cập đến việc một hệ thống, vi mô đến cấp độ dòng hoặc vĩ mô đến cấp độ hệ thống phù hợp với nhau như thế nào. Một hệ thống có tính gắn kết cao sẽ có tất cả các phần của nó khớp với nhau rất tốt và trông giống như một kỹ sư đã viết tất cả. Tài liệu tham khảo của bạn ở trên cho ai đó chỉ cần dán mã của họ đến cuối sẽ vi phạm sự gắn kết của hệ thống đó.


Quản lý nợ kỹ thuật

Có rất nhiều cách để quản lý nợ kỹ thuật, mặc dù giống như nợ thật, cách tiếp cận tốt nhất là trả nợ thường xuyên. Thật không may như nợ thực tế đôi khi là một ý tưởng tốt hơn để tích lũy nhiều hơn trong một khoảng thời gian ngắn, trong đó, ví dụ thời gian để tiếp thị cho một tính năng có thể tăng gấp đôi hoặc gấp ba doanh thu của bạn. Phần khó khăn là cân nhắc các ưu tiên cạnh tranh này cũng như xác định khi nào các khoản nợ ROI không xứng đáng với tính năng nhất định so với khi có.

Vì vậy, đôi khi đáng để tích lũy khoản nợ trong một thời gian ngắn, nhưng điều đó hiếm khi xảy ra, và như với tất cả các khoản nợ, thời gian càng ngắn thì càng tốt. Vì vậy, cuối cùng (tốt nhất là nhanh chóng ) sau khi bạn tích lũy nợ kỹ thuật, bạn phải trả nó, đây là những cách tiếp cận phổ biến:

  • Tái cấu trúc
    • Điều này cho phép bạn lấy các đoạn mã chỉ được nhận ra là bị đặt sai chỗ giữa chừng hoặc sau khi thực hiện xong và đặt chúng vào đúng vị trí của chúng (hoặc dù sao cũng đúng hơn).
  • Viết lại
    • Điều này giống như một sự phá sản. Nó lau sạch đá phiến, nhưng bạn bắt đầu không có gì và có mọi cơ hội để phạm sai lầm tương tự, hoặc thậm chí lớn hơn. Rủi ro cao tiếp cận phần thưởng cao cho nợ kỹ thuật, nhưng đôi khi đó là lựa chọn duy nhất của bạn . Mặc dù điều đó hiếm khi xảy ra hơn nhiều người sẽ nói với bạn.
  • Tổng quan kiến ​​trúc
    • Đây là nhiều hơn một cách tiếp cận trả nợ kỹ thuật tích cực. Điều này được thực hiện bằng cách nhờ ai đó có thẩm quyền về các chi tiết kỹ thuật để tạm dừng thực hiện bất kể kế hoạch và lịch trình dự án để đảm bảo nó tích lũy ít nợ kỹ thuật.
  • Mã đóng băng
    • Đóng băng mã thay đổi có thể cho phép bạn thở phòng nơi nợ của bạn không tăng hoặc giảm. Điều này cho bạn thời gian để lập kế hoạch tiếp cận để giảm nợ kỹ thuật với hy vọng có ROI cao nhất trong phương pháp của bạn.
  • Mô đun hóa
    • Đây giống như cách tiếp cận cấp 2 chỉ khả dụng khi bạn sử dụng Tổng quan kiến ​​trúc để hệ thống mô-đun hoặc Tái cấu trúc để tiến tới một. Khi bạn có một hệ thống mô-đun, sau đó bạn có thể trả nợ trong toàn bộ các phần của hệ thống theo cách cô lập. Điều này cho phép bạn thực hiện một phần tái viết, một phần tái cấu trúc, cũng như giảm thiểu dồn tích nợ kỹ thuật tỷ lệ vì cô lập giữ nợ chỉ trong những lĩnh vực mà các tính năng đi vào, như trái ngược với sự lây lan xung quanh hệ thống.
  • Kiểm tra tự động
    • Kiểm tra tự động có thể hỗ trợ trong việc quản lý nợ kỹ thuật của bạn, bởi vì chúng có thể giúp bạn xác định các điểm rắc rối trong hệ thống, hy vọng trước khi nợ ở các khu vực đó tăng lên rất lớn, nhưng ngay cả sau khi thực tế họ vẫn có thể khiến các kỹ sư nhận ra những khu vực nguy hiểm đó. có thể chưa nhận ra Hơn nữa, một khi bạn đã có các bài kiểm tra tự động, bạn có thể tự do tái cấu trúc mọi thứ mà không cần lo lắng về việc phá vỡ quá nhiều. Không phải vì các nhà phát triển sẽ không phá vỡ mọi thứ, mà bởi vì họ sẽ tìm ra khi họ phá vỡ mọi thứ , dựa vào những người kiểm tra thủ công trong các hệ thống mắc nợ cao có xu hướng có một hồ sơ theo dõi kém để tìm ra vấn đề.

2
Câu trả lời hay, tôi chỉ gọi nó là phát triển phần mềm, nhưng bạn tất nhiên đúng khi gọi nó là nợ kỹ thuật. :-)
Encaitar

Ha ha. Vâng, tôi đoán đây là một vấn đề khá phổ biến. Nhưng tôi thích phòng kỹ thuật và tôi nghĩ nó phù hợp khá tốt.
Jens

Không thể một thiết kế ban đầu tạo ra nợ kỹ thuật khi sửa lỗi mà không có kết quả của các tính năng mới liên tục được thêm vào?
JeffO

1
@JeffO vâng, vấn đề này là một sự giả tạo của churn hơn là viêm màng não, mặc dù cái này gây ra cái khác. Tôi sẽ sửa khi tôi quay lại máy tính, cảm ơn vì nhận xét
Jimmy Hoffa

" Dựa vào những người kiểm tra thủ công trong các hệ thống mắc nợ cao có xu hướng có hồ sơ theo dõi kém để tìm ra vấn đề. " - rất đáng tin, nhưng bạn có nguồn nào không?
Aaron Hall

30

Mô tả của bạn phù hợp với Big Ball of Mud của Foote và Yoder :

Trong vài năm qua, một số tác giả ... đã trình bày các mẫu đặc trưng cho kiến ​​trúc phần mềm cấp cao ... Trong một thế giới lý tưởng, mọi hệ thống sẽ là một ví dụ về một hoặc nhiều mẫu cấp cao như vậy. Tuy nhiên, đây không phải là như vậy. Kiến trúc thực sự chiếm ưu thế trong thực tế vẫn chưa được thảo luận: BÓNG LỚN CỦA MUD .

MỘT BÓNG LỚN của MUD có cấu trúc hỗn độn, ngổn ngang, cẩu thả, băng keo và dây điện, rừng mã spaghetti. Chúng ta đều đã nhìn thấy chúng. Các hệ thống này cho thấy các dấu hiệu không thể nhầm lẫn của sự tăng trưởng không được kiểm soát, và lặp đi lặp lại, sửa chữa nhanh chóng. Thông tin được chia sẻ bừa bãi giữa các yếu tố xa xôi của hệ thống, thường đến mức gần như tất cả các thông tin quan trọng trở nên toàn cầu hoặc trùng lặp. Cấu trúc tổng thể của hệ thống có thể chưa bao giờ được xác định rõ. Nếu có, nó có thể đã bị xói mòn ngoài sự công nhận. Các lập trình viên với sự nhạy cảm về kiến ​​trúc trốn tránh những vũng lầy này. Chỉ những người không quan tâm đến kiến ​​trúc, và, có lẽ, thoải mái với quán tính của công việc hàng ngày để vá các lỗ hổng trong những con đê thất bại này, mới có thể làm việc trên các hệ thống như vậy ...

Tại sao một hệ thống trở thành một BÓNG LỚN CỦA MUD? Đôi khi, các hệ thống lớn, xấu xí xuất hiện từ MÃ THWAYAWAY . MÃ THWAYAWAY là mã nhanh và bẩn chỉ được sử dụng một lần và sau đó bị loại bỏ. Tuy nhiên, mã như vậy thường có một cuộc sống của riêng nó, mặc dù cấu trúc thông thường và tài liệu nghèo nàn hoặc không tồn tại. Nó hoạt động, vậy tại sao phải sửa nó? Khi một vấn đề liên quan phát sinh, cách nhanh nhất để giải quyết vấn đề có thể là sửa đổi nhanh chóng mã làm việc này, thay vì thiết kế một chương trình chung, phù hợp từ đầu. Theo thời gian, một chương trình vứt bỏ đơn giản đã tạo ra một BÓNG LỚN.

Ngay cả các hệ thống có kiến ​​trúc được xác định rõ cũng dễ bị xói mòn cấu trúc. Sự tấn công không ngừng của các yêu cầu thay đổi mà bất kỳ hệ thống thành công nào thu hút có thể dần dần làm suy yếu cấu trúc của nó. Các hệ thống đã từng gọn gàng trở nên phát triển quá mức khi TĂNG TRƯỞNG PIECEMEAL dần dần cho phép các yếu tố của hệ thống mở rộng một cách không kiểm soát.

Nếu sự mở rộng như vậy tiếp tục không suy giảm, cấu trúc của hệ thống có thể trở nên bị tổn hại nghiêm trọng đến mức nó phải bị bỏ rơi. Như với một khu phố mục nát, một vòng xoáy đi xuống xảy ra. Vì hệ thống ngày càng khó hiểu hơn, việc bảo trì trở nên đắt đỏ và khó khăn hơn. Lập trình viên giỏi từ chối làm việc ở đó. Nhà đầu tư rút vốn. Tuy nhiên, như với các khu phố, có nhiều cách để tránh, và thậm chí đảo ngược, loại suy giảm này. Giống như bất cứ điều gì khác trong vũ trụ, việc chống lại các lực entropic đòi hỏi phải đầu tư năng lượng. Phần mềm làm dịu cũng không ngoại lệ. Cách để bắt entropy trong phần mềm là cấu trúc lại nó. Một cam kết bền vững để tái cấu trúc có thể giữ cho một hệ thống không bị lún vào BÓNG LỚN ...

  • ... Một trong những kẻ thù hiệu quả nhất của bùn là ánh nắng mặt trời. Việc sử dụng mã phức tạp để xem xét kỹ mũi tên có thể tạo tiền đề cho việc tái cấu trúc, sửa chữa và phục hồi. Đánh giá mã là một cơ chế người ta có thể sử dụng để đưa mã ra ánh sáng ban ngày.

http://www.laputan.org/images/pictures/Mir-Mud.gif


Tôi bắt gặp "quả bóng bùn lớn" nhưng với một lời giải thích hơi khác. Bây giờ tôi đã đọc câu trả lời của bạn và cũng đọc những gì bài viết trên wikipedia về "quả bóng lớn" nói về nó, điều này thực sự phù hợp khá tốt. (Mặc dù tôi nghĩ rằng thuật ngữ này có thể không hấp dẫn lắm trong khi cố gắng thuyết phục ban quản lý ngừng triển khai các tính năng mới và thực hiện tái cấu trúc.)
Jens

2
@ Đọc mỗi lần đọc của tôi, bạn không hỏi về cách thuyết phục ban quản lý tránh đầu tư vào một mớ hỗn độn (nếu có, tôi thậm chí sẽ không đề cập đến BBoM, vì nó không liên quan / câu trả lời sẽ là nợ kỹ thuật ). Mặc dù vậy, điều tôi đọc là: "mô hình chống mô tả một hệ thống phần mềm phát triển trong lịch sử nơi nhiều nhà phát triển chỉ thêm các tính năng mới vào hệ thống nhưng không ai thực sự để mắt đến kiến ​​trúc tổng thể cũng như các phép tái cấu trúc từng được thực hiện" - đó là BBoM
gnat

2
Bạn đúng rồi. Câu hỏi của tôi là về một thuật ngữ cho những gì tôi có trong tâm trí. Quản lý thuyết phục là một điều thứ hai trong phạm vi câu hỏi (nhưng đã có trong tâm trí của tôi). Nhưng đối với câu hỏi, câu trả lời của bạn hoàn toàn phù hợp (đã đưa ra câu trả lời).
Jens

1
Đánh giá mã - Cuộc gọi tuyệt vời! Sẽ thêm vào danh sách nợ kỹ thuật quản lý ở trên khi tôi quay lại máy tính. Điều này nên được chấp nhận như là câu trả lời, tôi quên mất thuật ngữ này ra tay.
Jimmy Hoffa

1
@Jens đọc bài viết BBoM - cuối cùng là những gợi ý để giải quyết và sửa chữa.
gbjbaanb
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.