Làm cách nào tôi có thể cập nhật một cơ sở mã lớn để đáp ứng các tiêu chuẩn chất lượng cụ thể?


10

Có rất nhiều thông tin về các công cụ và kỹ thuật để cải thiện các cơ sở mã di sản, nhưng tôi chưa bắt gặp bất kỳ nghiên cứu trường hợp thực tế nào trong thế giới thực. Hầu hết các lời khuyên là ở cấp độ vi mô, và trong khi hữu ích, không thuyết phục được nhiều người vì thiếu bằng chứng, nó có thể giúp ích ở cấp độ vĩ mô.

Tôi đang tìm kiếm đặc biệt cho các cải tiến gia tăng đã được chứng minh là thành công trong thế giới thực khi cập nhật một cơ sở mã lớn để đáp ứng các tiêu chuẩn chất lượng ngày nay, và không phải là viết lại hoàn chỉnh.

Trước:

  • Lớn: lớn hơn 1MLOC
  • Di sản: không có kiểm tra tự động
  • Chất lượng kém: độ phức tạp cao, khớp nối cao, khuyết tật thoát cao

Sau

  • Kiểm tra tự động
  • Cập nhật / bảo trì dễ dàng hơn
  • Chất lượng cao: độ phức tạp thấp hơn, mã tách rời, ít lỗi thoát

Những bước tăng dần nào đã được chứng minh trong thế giới thực để cập nhật một cơ sở mã di sản lớn thành công để đáp ứng các tiêu chuẩn chất lượng trên mà không cần phải viết lại toàn bộ?

Nếu có thể, hãy bao gồm một công ty mẫu hoặc nghiên cứu trường hợp của một dự án di sản lớn đã trải qua quá trình cải thiện chất lượng "thành công" trong câu trả lời của bạn để sao lưu nó.




7
Toàn bộ ngành tài chính? Phần lớn nó chạy trên mã FORTRAN 40 tuổi. Không giống như Netscape, họ không thể tặc lưỡi và viết lại từ đầu, vì vậy nó đang dần cải thiện toàn bộ thời gian này.
MattDavey

2
trong POV của tôi, Netscape khó có thể sử dụng như một ví dụ thành công - dự án đã kết thúc công ty ..... lúc đó là một quảng cáo cho tổ chức lợi nhuận. Không thể tưởng tượng được các cổ đông đã mở kệ hàng đầu một cách sủi bọt vào ngày hôm đó ...... thực tế có một tờ giấy trắng nổi tiếng dọc theo dòng chữ "Điều không nên làm" bằng cách sử dụng Netscape như một trường hợp hoàn hảo ....
mattnz

2
Xin chào @mikelong Tôi đã chỉnh sửa câu hỏi của bạn để thử và mở lại. Câu hỏi ban đầu của bạn yêu cầu một danh sách các ví dụ, được coi là "không mang tính xây dựng" theo tiêu chuẩn StackExchange. Vui lòng chỉnh sửa thêm để thêm chi tiết về ý nghĩa của "chất lượng cao" hoặc cập nhật từ ngữ nếu tôi mắc lỗi. :)
Rachel

Câu trả lời:


8

Những cuốn sách như http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 phải chứng kiến ​​đủ mức độ phổ biến của các cơ sở mã kém chất lượng trong ngành.

Tôi đoán tại sao bạn không nghe hoặc nhìn thấy, và quan trọng hơn, bạn sẽ không bao giờ có thể nghe về họ cho đến khi bạn tự mình làm việc với một trong số họ, dường như không ai có khả năng vì nhiều lý do khác nhau, nói ra rằng mã của họ cơ sở là tất cả các bên trên mà không phải đối mặt với hậu quả không tầm thường.

Điều này có thể giải thích cho các nghiên cứu mà bạn nói đến. Nếu bạn đọc đủ sách, ví dụ, Bí mật Deep C của Peter van der Linden, bạn sẽ đọc về những lỗi hàng triệu đô la, nơi phần mà dự án đã có chúng sẽ bị thiếu.

LƯU Ý: Tôi muốn bình luận, nhưng nó quá dài. Tôi hiểu điều này không trả lời đầy đủ câu hỏi.

EDIT: C ++ 11 & Khả năng tồn tại lâu dài của GCC bị nghi ngờ - nếu các nhà phát triển tái cấu trúc GCC và làm cho nó trở nên dễ sử dụng hơn như LLVM / clang, nó có thể cung cấp một ví dụ tốt. Các cuộc thảo luận lưu ý rằng tài liệu kém ở một số nơi đẩy rào cản gia nhập cho các nhà phát triển mới cao hơn.


4

Vào ngày 3 tháng 2 năm 2013, Michael Meek, một trong những nhà phát triển LibreOffice, sẽ nói chuyện trong một vài ngày với tựa đề "LibreOffice: làm sạch và tái hiện một cơ sở mã khổng lồ, hoặc tại sao việc viết lại nó thậm chí còn tồi tệ hơn . " Nghe có vẻ chính xác những gì bạn đang yêu cầu: một cuộc thảo luận về những gì họ đã làm để lấy "một cơ sở mã khổng lồ, được hiểu kém, được bình luận rộng rãi bằng tiếng Đức, không có bài kiểm tra đơn vị, cơ sở hạ tầng xây dựng rối và hai mươi lăm nhiều năm nợ kỹ thuật chưa thanh toán "và hiện đại hóa nó.

Bài thuyết trình có thể được phát trực tuyến và (tôi nghĩ) các bản ghi âm sẽ có sẵn vào một ngày nào đó trong tương lai.


1
Tôi nhận ra rằng nó đã được lên kế hoạch trong vài ngày kể từ bây giờ, tuy nhiên một khi nó được phát sóng, bạn có thể thêm một bản tóm tắt về quy trình họ đã thực hiện để hiện đại hóa cơ sở mã của họ cho câu trả lời của bạn không, trong trường hợp các liên kết đó bị chết?
Rachel

@Rachel - Nếu tôi có thể bắt được chương trình phát sóng, tôi chắc chắn sẽ làm như vậy. Cảm ơn.
Josh Kelley

4

Tôi thực sự đã trải qua một lần tái cấu trúc khá quan trọng ba lần trong sự nghiệp của mình. Mã có xu hướng phân rã, vì vậy nếu cơ sở mã của bạn đủ dài, một bộ tái cấu trúc lớn là điều không thể tránh khỏi. Tất cả các ví dụ của tôi là trên cơ sở mã riêng, điều này có thể giải thích tại sao các ví dụ công khai khó tìm.

Lần đầu tiên là một ứng dụng, dù tin hay không, có kiến ​​trúc cơ bản khiến nó chỉ hoạt động với máy in ma trận điểm. Khi công ty của tôi không còn tìm được nhà cung cấp để cung cấp ruy băng nữa, họ đã giao cho tôi làm cho nó hoạt động với máy in laser.

Lần thứ hai là sự di chuyển của hàng trăm tập lệnh thử nghiệm tự động từ C sang Java, một phần vì chúng tôi cần khả năng đa nền tảng tốt hơn và một phần vì việc thuê các nhà phát triển C mới trở nên khó khăn.

Lần thứ ba tôi vẫn ở giữa, đó là mô đun hóa một ứng dụng nguyên khối khổng lồ để cho phép thử nghiệm đơn vị bằng cách giảm khớp nối và cho các mục đích đa nền tảng.

Tôi so sánh nỗ lực leo lên một ngọn núi. Bạn có mục tiêu to lớn này trước mắt, nhưng bạn không giải quyết nó ở cấp độ vĩ mô. Bạn cầm nó một tay tại một thời điểm, luôn có vị trí dự phòng chặt chẽ, không bao giờ ngắt kết nối an toàn trước đó cho đến khi vị trí tiếp theo được đặt đúng chỗ. Bạn bắt đầu chỉ thực hiện những cải tiến nhỏ dần, và sau một lúc bạn quay lại và đột nhiên khung cảnh tuyệt đẹp này.

Ví dụ, giả sử bạn có 60.000 tệp mã được ghép nối cao. Bạn muốn bắt đầu đặt nó dưới bài kiểm tra đơn vị, nhưng sự phụ thuộc làm cho nó không thể. Làm thế nào để bạn sửa chữa nó? Bạn tách một tập tin. Bạn thêm các bài kiểm tra tự động. Bạn quay trở lại mặt đất ổn định trước khi di chuyển trên. Lặp lại 59.999 lần.

Nếu đó là những âm thanh đơn giản, đó là vì nó đơn giản. Nó không dễ, nhưng nó đơn giản. Lúc đầu thật khó để nhận thấy bất kỳ tiến triển nào. Chúng tôi mất hai năm để trở thành một công cụ tái cấu trúc bất khả thi và có thể sẽ đi trước chúng tôi nhiều năm cho đến khi chúng tôi hoàn thành, nhưng nhìn lại chúng tôi nhận ra rằng mã đã nhận được tốt hơn bao nhiêu và chúng tôi đã có thể tiếp tục cung cấp chức năng mới cho khách hàng của chúng tôi trong thời gian trung bình.

Hai lần khác làm việc theo cùng một cách. Bạn tìm thấy bước an toàn nhỏ nhất bạn có thể thực hiện và bạn thực hiện nó, luôn giữ ứng dụng ở trạng thái hoạt động. Bạn chỉ lo lắng về bức tranh lớn để đảm bảo bạn đang đi đúng hướng. Tất cả các hành động của bạn là nhỏ, ổn định và gia tăng.


1

Từ kinh nghiệm cá nhân làm việc trên cơ sở hàng triệu mã dòng, tôi đã tìm thấy một vài chiến lược có vẻ hiệu quả.

Nhìn vào tất cả các lỗi (thậm chí là đóng) và cố gắng chia chúng thành các loại. Cụ thể để thử phá vỡ chúng theo thành phần mà chúng thuộc về. Nếu họ thuộc về nhiều hơn một thành phần lưu ý rằng họ làm. Một khi bạn đã thực hiện điều này, xem cái xô nào là lớn nhất và sử dụng cái đó để xác định nơi bắt đầu. Ngoài ra, bạn có thể xem lịch sử sửa đổi của các tệp để xác định những gì thay đổi nhiều nhất và sử dụng đó làm hướng dẫn về nơi bắt đầu. Về cơ bản những gì bạn đang cố gắng làm là tìm ra cái gì bị hỏng nhiều nhất và lặp lại. Ngoài ra, tôi đã thấy rằng cố gắng sửa chữa mọi thứ cùng một lúc không bao giờ hoạt động, nó chỉ gây ra nhiều vấn đề hơn.

Nếu bạn thấy rằng có rất nhiều thứ thuộc về nhiều thành phần là dấu hiệu của các vấn đề "hệ thống" và có thể chỉ ra mã được ghép quá chặt hoặc API cần làm mới.

Một lĩnh vực khác mà tôi đã dành nhiều thời gian là thử nghiệm cơ sở mã hiện có. Có nhiều chiến lược ở đây và tất cả đều có công nhưng không ai là giải pháp hoàn chỉnh cho vấn đề.

  • Kiểm thử đơn vị có thể hoạt động nhưng thường thì bạn bị giới hạn ở những gì có thể được kiểm tra đơn vị do mã được liên kết chặt chẽ. Tuy nhiên làm điều đó nơi bạn có thể.
  • Thử nghiệm bên ngoài là một con đường khác. Tôi cho rằng bạn có thể đã có cái này và nếu không tôi sẽ dành thời gian để tạo ra nó. Ngoài ra, một cái gì đó đã làm việc cho tôi là thêm khả năng đưa ngẫu nhiên các lỗi / sự kiện vào hệ thống. Thêm vào đó, cố gắng tiêm nhiều thứ cùng một lúc để cố gắng làm cho nó thất bại theo những cách mới.
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.