Nguồn gốc của thuật ngữ phủ định mã di sản mã nguồn là gì


28

Mọi người đều nói về mã kế thừa trong phát triển phần mềm và tôi đã nghe thuật ngữ này trong mười năm qua được sử dụng để vẽ bất kỳ cơ sở mã nào là xấu.

Trường hợp này thuật ngữ này, có ý nghĩa mạnh mẽ như vậy đối với các lập trình viên như thế nào bắt nguồn?

Tôi chắc chắn phải có một số cuốn sách về phát triển phần mềm đi tiên phong trong thuật ngữ này. Tôi rất thích xác định nguồn gốc của thuật ngữ "mã di sản".


13
Tôi đã nghe định nghĩa sau đây về mã kế thừa 20 năm trước và tôi đã nhớ nó kể từ đó: mã kế thừa là mã bạn hiện đang có trong sản xuất. Nó đã giúp quan điểm của tôi nhiều lần.
Michael Durrant

10
"Mã di sản" là một thuật ngữ phủ định? Ai nói vậy? Dù sao, từ "di sản" không dành riêng cho lập trình, cũng không đặc biệt quan trọng trong bối cảnh này.
Robert Harvey

5
Feathers Michael ( amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/... ) có lẽ là hầu hết không phải là phát minh ra thuật ngữ đó, nhưng ông đưa ra một định nghĩa thú vị: ông gọi là mã di sản "mã mà không kiểm tra". Và đó thực sự là một thuộc tính tiêu cực.
Doc Brown

11
Viết một loạt các mã. Kiểm tra nó vào. Đi ăn trưa. Quay lại. Có cả một màn hình đầy mã di sản! Bây giờ bạn đã hiểu mã đó và đảm bảo rằng tất cả các thay đổi trong tương lai sẽ hoạt động chính xác trong ngữ cảnh của mã đó. Mã kế thừa giống như mã hiện có .
Eric Lippert

4
"Di sản" ở đây chỉ đơn giản có nghĩa là các nhà phát triển ban đầu không còn ở xung quanh nữa, và chỉ còn lại các vật phẩm mã và tài liệu. Nó không đề cập đến một độ tuổi hoặc chất lượng trong bất kỳ cách nào.
SK-logic

Câu trả lời:


39

Mã kế thừa dựa trên cụm từ của một hệ thống kế thừa áp dụng cụ thể cho mã. Theo Wikipedia, nó có lẽ có từ những năm 1970 và được sử dụng phổ biến vào những năm 1980. Nó đã diễn ra với sự bùng nổ công nghệ của những năm 1990.

Điều này có thể được nhìn thấy với trình xem ngram của Google: hệ thống kế thừa, mã kế thừa

hệ thống và mã kế thừa

Đi sâu vào vấn đề này hơn nữa, bạn có thể tìm thấy các tài liệu sử dụng thuật ngữ 'hệ thống di sản' vào những năm 1970 .

Ví dụ sớm nhất về 'hệ thống di sản' mà google có trong một cuốn sách về Kỷ yếu của Hội nghị Phân tích Số và Máy tính Quân đội từ năm 1978:

... giải pháp rõ ràng và được ghi chép rõ ràng cho một vấn đề được xác định rõ ràng là hoạt động hệ thống kế thừa cần phải được hiểu và thay đổi hệ thống hiện có một cách tự tin.

Ngoài ra còn có một ví dụ về 'hệ thống di sản' đang được sử dụng bên ngoài ngành công nghệ trong Clout: Womanpower and Politic grin 1976:

... Ngoài ra, cô ấy còn giữ một vị trí Dân chủ xếp hạng ba trong Ủy ban Ngân hàng và Tiền tệ hùng mạnh - những vị trí quyền lực mà cô ấy tự xây dựng, không thông qua hệ thống kế thừa.

Ngoài những ví dụ cho thấy việc sử dụng nó đã mở rộng ra ngoài thế giới phần mềm thuần túy, các chi tiết cụ thể về nơi chính xác thuật ngữ có nguồn gốc có lẽ bị mất theo thời gian. Với các tài liệu tham khảo về quân sự và chính trị, nó có thể có nguồn gốc từ họ (chủ yếu là quân đội và di cư biệt ngữ của nó ( "Có vẻ như 'kluge' đã đến MIT thông qua cựu sinh viên của nhiều dự án điện tử quân sự chạy ở Cambridge trong chiến tranh (nhiều trong Tòa nhà 20 đáng kính của MIT, nơi đặt TMRC ... " ))


Đây là một câu trả lời tuyệt vời. Tôi sẽ tiếp tục nghiên cứu để xem liệu tôi có thể tìm thấy một nguồn gốc hay không, nhưng bạn có khả năng đúng là nguồn gốc đã bị mất hoặc có thể không được ghi lại.
stevebot

1
@stevebot Tôi khuyên bạn nên đi theo con đường của 'hệ thống kế thừa' chứ không phải mã ... thuật ngữ đó dường như có mã kế thừa và có cùng ý nghĩa thiết yếu.

6
Văn bản trong 'cuốn sách về sự hình thành liên kết carbon-carbon của bạn từ năm 1979' là từ một cuốn sách có tên 'Thực tiễn mới trong quản lý dự án' và là từ năm 2002 (xuất bản lần đầu năm 1998). Có vẻ như có gì đó bị lẫn lộn trong quá trình quét.
Pete Kirkham

1
Dường như đây không phải là nguồn gốc của thuật ngữ phủ định.
JeffO

@JeffO Không, vì MichaelT đề cập đến việc nó không kết luận nó đến từ đâu. Đây là một câu trả lời tốt chết tiệt mặc dù cho thấy nghiên cứu và nỗ lực.
stevebot

5

Cơ sở mã kế thừa thường không chỉ hệ thống POS, mà là bất kỳ hệ thống nào tồn tại trong cơ sở mã hoặc hệ thống không còn được sử dụng để phát triển mới. Chẳng hạn, nhóm của tôi hiện hỗ trợ một vài ứng dụng .net 1.1 và 2.0 được coi là mã kế thừa. Nếu đến lúc cần sửa đổi, họ sẽ được viết lại hoặc cập nhật để sử dụng các khung và tiêu chuẩn mới nhất. Cho đến lúc đó chúng tôi quản lý chúng như các ứng dụng cũ cần tiếp tục hoạt động nhưng không có cải tiến hoặc sửa lỗi mã nào được thực hiện.

Ngoài ra còn có một vài hệ thống cũ mà chúng tôi không hỗ trợ ở tất cả những gì được viết bằng VB6 và Classic ASP. Chúng tôi không có khả năng hoặc chỉ thị để hỗ trợ hoặc sửa đổi các hệ thống này, miễn là chúng tiếp tục chạy và không có nhu cầu cải tiến, chúng sẽ không được cập nhật. Không có gì đặc biệt sai với bất kỳ hệ thống nào trong số này. Họ thực hiện công việc theo cách họ cần và ngoài việc trông giống như một ứng dụng từ giữa đến cuối thập niên 90, họ không gặp vấn đề gì lớn.

Vì vậy, di sản không có nghĩa là POS chỉ là một hệ thống được tạo ra bằng công nghệ hoặc ngôn ngữ trước đó không theo tiêu chuẩn hiện hành. Một số hệ thống kế thừa đủ điều kiện là POS chủ yếu là do chúng thiếu các phương pháp phát triển tồn tại cho đến ngày nay cho phép mã được quản lý và hơn 15 năm kinh nghiệm của các lập trình viên web kỳ cựu.


Tôi hoàn toàn đồng ý rằng các hệ thống Legacy không nhất thiết phải là hệ thống POS. Tôi đang tự hỏi nguồn gốc của cụm từ là gì.
stevebot

3
@stevebot Nếu bạn muốn tìm nguồn gốc của thuật ngữ, bạn nên yêu cầu điều đó mà không giả định trước một ý nghĩa.
một CVn

2
@stevebot - Di sản là bất cứ thứ gì bạn để lại khi bạn truyền lại. Tôi sẽ cho rằng bộ mô tả chỉ được thông qua từ đó theo cách mà nó đã được áp dụng cho vô số lĩnh vực khác.
SoylentGray

1
@ MichaelKjorling bạn đang nói với tôi rằng bạn chưa bao giờ nghe mã kế thừa được sử dụng theo nghĩa tiêu cực ?? Đó không phải là ý nghĩa của tôi, mà là của những người khác mà tôi đã nghe đi nghe lại trong các cuộc gặp gỡ, sách và công việc. Như tôi đã nói, tôi hoàn toàn đồng ý rằng di sản không nên là một thuật ngữ tiêu cực.
stevebot

@stevebot - mã kế thừa chỉ có vẻ 'tiêu cực', bởi vì nó chỉ được sử dụng trong bối cảnh thay thế hoặc can thiệp vào một hệ thống cũ hơn (và những khó khăn của chúng). Một chương trình đã được xây dựng hơn một thập kỷ trước nhưng vẫn hữu ích / có liên quan và có một vài lỗi vẫn là 'phần mềm kế thừa', nhưng mọi người chỉ gọi đó là 'phần mềm'. Tương tự với codebase.
Robotnik

3

"Mã kế thừa" là một thuật ngữ được sử dụng bởi những người tiếp thị để gây áp lực cho những người có mã cũ (nhưng có lẽ hoạt động tốt) để cập nhật lên các ngôn ngữ và kỹ thuật phần mềm lớn nhất (và có thể nhiều lỗi hơn). Nó được liên kết chặt chẽ với "hệ thống kế thừa", đề cập đến phần cứng và hệ điều hành cũ hoạt động tốt nhưng không tuân thủ những gì hiện nay là "chính xác" (ví dụ: OpenVMS, hệ thống IBM).


6
Mặc dù điều này có thể đúng, nhưng sẽ tốt hơn nếu bạn chỉnh sửa câu trả lời để trích dẫn các tài liệu tham khảo cụ thể hỗ trợ cho các khiếu nại được đưa ra trong câu trả lời này. Có bất kỳ tài liệu tham khảo như vậy mà bạn có thể trích dẫn?
một CVn

2

Thuật ngữ mã kế thừa có niên đại ít nhất là năm 1989 như được Glenn Everhart sử dụng trong comp.sys.amiga :

(... Nhân tiện, vâng, đôi khi tôi cũng lập trình trong C ... nhưng tôi thấy việc chuyển đổi mã kế thừa dễ dàng hơn khi thay đổi ngôn ngữ của nó ...)

Tôi không tìm thấy gì có thể kiểm chứng sớm hơn trong Google Sách.


Như Eric Lippert đã chỉ ra, rất ít phút sau khi bạn viết một đoạn mã bạn đã nhận được mã kế thừa. Các đường cong được hiển thị bởi MichaelT và phát hiện của bạn chỉ hình dung khung thời gian, nơi sự phát triển chính của CNTT bắt đầu tạo ra số lượng mã khổng lồ, liên quan đến rất nhiều người trên khắp thế giới. Một lát sau, nhu cầu thay thế các hệ thống "cũ" bằng các hệ thống mới hơn cũng được nêu ra - và đó là lý do tại sao và khi nó trở thành một thuật ngữ phổ biến.
JensG

1
Mã cũ đã được thay thế liên tục, nếu có lý do chính đáng để. Tôi đã từng làm việc trên một hệ thống thanh toán máy tính lớn được viết (bằng PL / 1) vào năm 1970. Nó đã thay thế một hệ thống được viết bằng ngôn ngữ lắp ráp máy tính lớn (bản thân nó phần lớn là tự động hóa của một hệ thống thủ công hiện có). Hệ thống PL / 1 cuối cùng đã được thay thế sau khoảng 35 năm sử dụng (một vài lần thất bại để thay thế nó trước đó). Có thể bây giờ các công nghệ hiện đại đã bị loại bỏ sớm hơn (và không quan tâm đến việc viết lại bao nhiêu hệ thống di sản mà điều này có khả năng đòi hỏi).
Khởi động
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.