Trước tiên, tôi sẽ cố gắng để liên lạc với những người ban đầu được phát triển mã hoặc những người ít nhất duy trì nó trước khi tôi, hy vọng nhận được đầy đủ thông tin để có được một sự hiểu biết cơ bản của mã nói chung , để bạn có thể bắt đầu thêm các nhận xét hữu ích vào nó.
Có thể bạn thậm chí có thể nhờ ai đó mô tả các API quan trọng nhất (bao gồm chữ ký, giá trị trả về và mục đích) cho mã. Nếu trạng thái toàn cầu được sửa đổi bởi một hàm, điều này cũng cần được làm rõ ràng. Tương tự, bắt đầu phân biệt giữa các hàm và thủ tục, cũng như thanh ghi đầu vào/đầu ra.
Bạn nên làm rõ với chủ của bạn rằng thông tin này là bắt buộc, nếu họ không tin bạn, hãy để họ thực sự ngồi xuống phía trước mã này trong khi bạn mô tả những gì bạn phải làm và cách bạn phải làm điều đó (kỹ thuật đảo ngược). Có một nhà tuyển dụng với một nền tảng về tính toán và lập trình sẽ thực sự hữu ích trong trường hợp đó!
Nếu chủ lao động của bạn không có nền tảng kỹ thuật như vậy, hãy yêu cầu anh ta đưa một lập trình viên/đồng nghiệp khác giải thích các bước của bạn cho anh ấy, thực sự sẽ cho anh ấy thấy bạn nghiêm túc và trung thực về nó vấn đề - không chỉ từ quan điểm của bạn (hãy chắc chắn có các đồng nghiệp biết về 'dự án' này).
Nếu có sẵn và khả thi, tôi cũng sẽ nói rõ ràng rằng các nhà phát triển/nhà duy trì hợp đồng (hoặc ít nhất là liên hệ) (nếu họ không còn làm việc cho công ty của bạn). sẽ là điều kiện tiên quyết để cải thiện thực tế mã trong một khoảng thời gian ngắn và để đảm bảo rằng nó có thể được duy trì dễ dàng hơn trong tương lai.
Nhấn mạnh rằng toàn bộ tình huống này là do thiếu sót trong quá trình phát triển phần mềm trước đó và các bước này sẽ giúp cải thiện cơ sở mã. Vì vậy, các cơ sở mã trong hình thức hiện tại của nó là một vấn đề đang phát triển và bất cứ điều gì được thực hiện ngay bây giờ để xử lý vấn đề này là một khoản đầu tư cho tương lai. Điều này cũng rất quan trọng để giúp họ đánh giá và hiểu tình hình của bạn: Để làm những gì bạn phải làm bây giờ là xa tầm thường, và họ nên biết về nó - nếu chỉ để đặt kỳ vọng của họ thẳng (ví dụ liên quan đến thời hạn và sự phức tạp của nhiệm vụ).
Ngoài ra, cá nhân tôi sẽ bắt đầu thêm bài kiểm tra đơn vị cho những phần mà tôi hiểu đủ tốt, để tôi có thể từ từ bắt đầu tái cấu trúc/viết lại một số mã. Nói cách khác, tài liệu tốt và bình luận mã nguồn là một điều, nhưng có một bộ kiểm thử toàn diện là một điều quan trọng khác, không ai có thể thực sự sửa đổi một cơ sở mã không quen thuộc mà không có bất kỳ cách nào để kiểm tra chức năng chính. Với mã 10K, tôi cũng sẽ xem xét các phần tử con thành các tệp riêng biệt để làm cho các thành phần dễ nhận biết hơn, tốt nhất là sử dụng trình bao bọc truy cập thay vì các biến toàn cục và các tên tệp trực quan. Ngoài ra, tôi sẽ xem xét các bước để cải thiện hơn nữa khả năng đọc mã nguồn bằng cách giảm độ phức tạp, có thói quen phụ với nhiều điểm nhập (và thậm chí cả chữ ký tham số khác nhau?) Trông giống như một cách chắc chắn để làm xáo trộn mã không cần thiết.
Tương tự, các thường trình phụ rất lớn cũng có thể được tái cấu trúc thành các phần nhỏ hơn để giúp cải thiện khả năng đọc. Vì vậy, một trong những điều đầu tiên, tôi sẽ xem xét việc xác định những thứ làm cho nó phức tạp hơn để bẻ khóa cơ sở mã và sau đó làm lại các phần đó, ví dụ bằng cách chia nhỏ các tiến trình phụ rất lớn với nhiều nhập các điểm vào các thủ tục phụ riêng biệt gọi nhau thay thế. Nếu không thể thực hiện việc này vì lý do hiệu suất hoặc phí gọi điện, hãy sử dụng macro thay thế. Ngoài ra, nếu nó là một lựa chọn khả thi, tôi sẽ xem xét từng bước phần mã bằng cách sử dụng một ngôn ngữ cấp cao hơn, hoặc bằng cách sử dụng một tập hợp con của C, hoặc ít nhất bằng cách sử dụng quá nhiều macro lắp ráp giúp tiêu chuẩn hóa cơ sở mã, mà còn giúp bản địa hóa các lỗi tiềm ẩn.
Nếu viết lại gia tăng trong C là một lựa chọn khả thi, một cách có thể để bắt đầu sẽ là chuyển tất cả các chức năng hiển thị thành hàm C có phần thân được sao chép/dán từ tệp lắp ráp, để bạn kết thúc với các hàm C với nhiều assembly nội tuyến.
Cá nhân, tôi cũng sẽ thử chạy mã trong một số simulator/emulator để dễ dàng bước qua mã và hy vọng bắt đầu hiểu các khối xây dựng quan trọng nhất (trong khi kiểm tra đăng ký và sử dụng ngăn xếp), trình mô phỏng 8051 tốt với trình gỡ lỗi tích hợp nên có sẵn cho bạn nếu bạn thực sự phải làm điều này phần lớn trên của riêng bạn.
Điều này cũng sẽ giúp bạn tìm ra trình tự khởi tạo và cấu trúc vòng lặp chính cũng như biểu đồ cuộc gọi.
Có lẽ, bạn thậm chí có thể tìm thấy một trình mô phỏng 80851 mã nguồn mở có thể dễ dàng sửa đổi để cung cấp một biểu đồ đầy đủ tự động, chỉ cần thực hiện tìm kiếm nhanh, tôi tìm thấy gsim51. cũng.
Nếu tôi ở trong tình huống của bạn, tôi sẽ xem xét việc gia công nỗ lực sửa đổi công cụ để đơn giản hóa việc làm việc với mã nguồn này, tức là nhiều dự án sourceforge chấp nhận quyên góp và có thể bạn nói chuyện với chủ nhân của bạn.
Nếu không về tài chính, có thể do bạn cung cấp các bản vá tương ứng cho nó?
Nếu bạn đang sử dụng sản phẩm độc quyền, bạn thậm chí có thể nói chuyện với nhà sản xuất phần mềm này và nêu chi tiết yêu cầu của bạn và hỏi họ xem họ có sẵn sàng cải tiến sản phẩm này hay không. một giao diện cho phép khách hàng thực hiện các tùy chỉnh như vậy (một số dạng API nội bộ hoặc thậm chí có thể là các kịch bản lệnh đơn giản).
Nếu họ không đáp ứng, chỉ ra rằng sử dụng lao động của bạn đã được nghĩ đến việc sử dụng một sản phẩm khác nhau trong một thời gian bây giờ và rằng bạn đang là người duy nhất nhấn mạnh vào sản phẩm cụ thể được sử dụng để ... ;-)
Nếu phần mềm mong đợi một số phần cứng và thiết bị ngoại vi I/O nhất định, bạn thậm chí có thể muốn xem xét viết một vòng mô phỏng phần cứng tương ứng để chạy phần mềm trong trình mô phỏng. Cuối cùng, tôi biết một thực tế rằng cá nhân tôi sẽ tận hưởng nhiều hơn quá trình tùy biến phần mềm khác để giúp tôi hiểu một con quái vật mã spaghetti như vậy, hơn là tự bước qua mã và chơi trình mô phỏng, bất kể có bao nhiêu gallon của cà phê tôi có thể nhận được.Nhận được một đồ thị có thể sử dụng từ một trình mô phỏng 8051 mã nguồn mở không nên mất nhiều thời gian hơn một ngày cuối tuần (nhiều nhất), bởi vì nó chủ yếu có nghĩa là tìm kiếm các mã CALL và ghi địa chỉ của chúng (vị trí và đích), để tất cả mọi thứ được đổ vào một tập tin để kiểm tra sau này.
Có quyền truy cập vào nội bộ của trình mô phỏng thực sự cũng là một cách tuyệt vời để kiểm tra mã, ví dụ để tìm các mẫu mã định kỳ (nói 20-50 +), có thể được tính vào các hàm/thủ tục độc lập , điều này thực sự có thể giúp giảm kích thước và độ phức tạp của cơ sở mã hơn nữa.
Bước tiếp theo có thể là kiểm tra ngăn xếp và đăng ký sử dụng. Và để xác định loại/kích thước của tham số chức năng được sử dụng, cũng như phạm vi giá trị của chúng - để bạn có thể thụ thai các phép thử đơn vị tương ứng.
Sử dụng các công cụ như dấu chấm/graphviz để trực quan hóa cấu trúc của trình tự khởi tạo và vòng lặp chính, sẽ là một niềm vui thuần khiết so với thực hiện tất cả các công cụ này theo cách thủ công.
Ngoài ra, bạn sẽ thực sự kết thúc với dữ liệu và tài liệu hữu ích có thể đóng vai trò là nền tảng cho tài liệu tốt hơn trong thời gian dài.
OUCH. –
Tình cảm của tôi chính xác! –
lời chia buồn của tôi! – none