Làm thế nào nên thay đổi phi chức năng?


8

Tôi đang làm việc với một cơ sở mã di sản vừa và nhỏ và khi làm việc với một vé tôi sẽ bắt gặp mã cần được dọn sạch hoặc tôi cần phải dọn sạch để có thể hiểu được ứng dụng.

Một ví dụ thực tế là:

if( !a && b ){
     doSomething1();
     doSomething2();
     doSomething3();
     doSomething4();
     doSomething5();
}else if( a ){
     doSomething1();
     doSomething2();
     doSomething3();
     doSomething4();
     doSomething5();
}else if( !b && ( a || c )  ){
     doSomething1();
     doSomething2();
     doSomething3();
     doSomething4();
     doSomething5();
}

Một cách khác là sửa lỗi chính tả và Tham gia vào các bình luận và tài liệu trên một tá tệp nguồn.

Tuy nhiên, thường thì việc dọn dẹp này kết thúc không liên quan đến vấn đề chính và tôi tự hỏi làm thế nào là tốt nhất để thực hiện việc dọn dẹp. Theo cách tôi thấy, có ba lựa chọn:

  1. Trước khi sửa lỗi: điều này hoạt động theo trình tự thời gian vì đây là thứ tự xảy ra nhưng nếu chúng phá vỡ một cái gì đó, chúng làm phức tạp việc sửa chữa và làm cho việc khắc phục sự cố với sản phẩm trở nên khó khăn hơn. Nó cũng giới thiệu một cam kết bổ sung đó là tiếng ồn.
  2. Với bản sửa lỗi: nhưng điều đó che khuất sự thay thế thực tế của mã bị lỗi bằng các tệp findGeoragphyđúng findGeography.
  3. Sau khi sửa lỗi: việc này đòi hỏi phải gỡ bỏ và dọn sạch mà bạn đã thực hiện giúp bạn hiểu mã và sau đó kiểm tra lại sửa chữa, cam kết sửa lỗi, sau đó quay lại và làm lại việc dọn dẹp. Điều này cho phép khác biệt rõ ràng nhất với mã bị lỗi, nhưng trùng lặp nỗ lực và cũng có thể dẫn đến các cam kết giả.

tl; dr: Vậy, phương pháp tốt nhất để cam kết mã dọn dẹp là gì?

Bối cảnh: Chúng tôi không có bài kiểm tra đơn vị và tiến trình phát triển bằng cách chạy các thay đổi và theo dõi chúng và ném chúng lên tường để QA xác nhận thông qua các bản sửa lỗi hồi quy thủ công. Ngoài ra, nếu chúng ta không thực hiện một số hình thức dọn dẹp, mã sẽ trở nên khó hiểu. Tôi biết điều này là xa lý tưởng, nhưng đây là nhà phát triển doanh nghiệp thực sự đặt thức ăn trên bàn của tôi và không phải là sự lựa chọn của tôi.


Không có bài kiểm tra đơn vị? Tại sao không viết nó trước khi sửa chữa? (nếu thích hợp)
Wolf

Mã không phải là đơn vị kiểm tra được vì nó phụ thuộc rất nhiều vào cơ sở dữ liệu và không có thông số kỹ thuật về việc cần làm, vì vậy các kiểm tra đơn vị sẽ là "testStillDoesWhatItDoes ()" thay vì hành vi hoặc ngữ nghĩa và vi phạm phân lớp. thực sự khó khăn để chế nhạo là tốt. Ngoài ra, rất nhiều thay đổi trong đó có cơ hội như sửa tên phương thức Engrish khi tôi đến nhưng không có thời gian để viết bài kiểm tra và họ vẫn ở lại Engrish.
Sled

Câu trả lời:


11

Tôi làm theo một quy trình tương tự như câu trả lời của Karl. Tôi thích một cam kết riêng về dọn dẹp / tái cấu trúc trước khi thay đổi tính năng vì một vài lý do:

  • Tách hai cam kết sẽ giải thích quá trình của bạn và suy nghĩ tốt hơn cho những người khác nhìn vào nhật ký.
  • Nó cung cấp một tập hợp các thay đổi cụ thể hữu ích trong quá trình xem xét mã.
  • Điều đó có nghĩa là nếu bạn muốn khôi phục các thay đổi tính năng của mình, bạn vẫn tiếp tục dọn dẹp / tái cấu trúc.
  • Các thay đổi dọn dẹp có thể được kiểm tra riêng và trước khi cập nhật tính năng.

6

Tôi thích các cam kết thêm trước khi sửa chữa. Điều này phân tách rõ ràng hai nhiệm vụ bạn đang làm và cho phép người khác thấy những gì đã được dọn dẹp so với những gì là một sửa lỗi. Ngoài ra, dọn dẹp (ít nhất là đối với tôi) thường nhanh hơn rất nhiều, vì vậy nếu tôi thực hiện sửa lỗi dọn dẹp, tôi không phải lo lắng nhiều về việc ai đó thực hiện thay đổi khó hợp nhất trong khi tôi làm việc lâu hơn bài tập.

Tôi đã sử dụng phương pháp "cam kết với sửa chữa" tại các địa điểm có chính sách yêu cầu ID yêu cầu thay đổi với mỗi cam kết và không cho phép các nhà phát triển tạo yêu cầu thay đổi mới chỉ cho mã dọn dẹp. Vâng, chính sách như vậy là không hiệu quả, nhưng nơi làm việc như thế tồn tại.


5
Về đoạn thứ hai: Trong những tình huống như vậy, đôi khi tôi sử dụng lại ID vé của bản sửa lỗi mà tôi đang thực hiện, nhưng vẫn đặt việc dọn dẹp trong một cam kết riêng.
Bart van Ingen Schenau

0

Nếu bản sửa lỗi có thể phải được vá vào một bản phát hành hiện có, bạn nên kiểm tra bản sửa lỗi trước, và sau đó dọn dẹp sau đó, hoặc bạn (ít nhất là một thời gian) làm cho người cần áp dụng bản sửa lỗi làm việc chăm chỉ hơn họ cần (để hiểu những gì đã thay đổi hoặc vá các thay đổi mỹ phẩm trước khi vá sửa chữa thực sự (tôi sẽ lưu ý rằng tôi đã thực hiện nhiều hơn một vài thay đổi mỹ phẩm liên quan đến việc phá vỡ một thứ gì đó, vì vậy vá nhiều hơn thay đổi tối thiểu để sửa lỗi có thể làm tăng nguy cơ phát hành thứ gì đó xấu).

Vâng, đây là công việc làm thêm. Vâng, đó là một nỗi đau. Nhưng vâng, đó là cách đúng đắn để làm mọi việc. Quy trình công việc bình thường của tôi là thực hiện mọi thứ trong một hộp cát (dọn dẹp và sửa lỗi), sau đó tạo một hộp cát mới, chỉ áp dụng thay đổi sửa lỗi tối thiểu từ nó, kiểm tra thay đổi này trong hộp cát ban đầu và kiểm tra sạch lên mã. Theo kinh nghiệm của tôi, đó không phải là việc làm thêm.

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.