paint-brush
Cách tìm những phần hôi thối trong mật mã của bạn [Phần XXXIV]từ tác giả@mcsee
773 lượt đọc
773 lượt đọc

Cách tìm những phần hôi thối trong mật mã của bạn [Phần XXXIV]

từ tác giả Maximiliano Contieri7m2023/04/07
Read on Terminal Reader

dài quá đọc không nổi

Nó có mùi vì có thể có nhiều trường hợp nó có thể được chỉnh sửa hoặc cải thiện. Hầu hết những mùi này chỉ là gợi ý về điều gì đó có thể không ổn. Do đó, bản thân chúng không bắt buộc phải sửa… (Tuy nhiên, bạn nên xem xét nó.) Mùi mã trước đó Bạn có thể tìm thấy tất cả các mùi mã trước đó (Phần i - XXXIII) tại đây.
featured image - Cách tìm những phần hôi thối trong mật mã của bạn [Phần XXXIV]
Maximiliano Contieri HackerNoon profile picture

Nó có mùi vì có thể có nhiều trường hợp nó có thể được chỉnh sửa hoặc cải thiện.


Hầu hết những mùi này chỉ là gợi ý về điều gì đó có thể không ổn. Do đó, bản thân chúng không bắt buộc phải sửa… (Tuy nhiên, bạn nên xem xét nó.)

Mã Trước Mùi

Bạn có thể tìm thấy tất cả các mùi mã trước đó (Phần i - XXXIII) tại đây .


Tiếp tục đi...


Mã mùi 166 - Lỗi cấp thấp trên giao diện người dùng

Lỗi nghiêm trọng: Lỗi chưa phát hiện: Không tìm thấy lớp 'logs_queries_web' trong /var/www/html/query-line.php:78


Dấu vết ngăn xếp: #0 {main} được ném vào /var/www/html/query-line.php trên dòng 718


TL;DR: Bắt lỗi của bạn. Ngay cả những người bạn không mong đợi.

Các vấn đề

  • Bảo vệ


  • Xử lý lỗi


  • Ghi nhật ký lỗi


  • Trải nghiệm UX tồi

Các giải pháp

  1. Sử dụng trình xử lý cấp cao nhất.


  2. Tránh các ngôn ngữ có lợi cho mã trả về .


  3. Mong đợi cơ sở dữ liệu và lỗi cấp thấp.

Bối cảnh

Ngay cả trong năm 2022, chúng ta vẫn có thể thấy các trang web "nghiêm túc" hiển thị cho người dùng thông thường một ngăn xếp hoặc thông báo gỡ lỗi.

Mã mẫu

Sai

 <? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9

Phải

 <? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");

phát hiện

  • [x] Tự động

Chúng ta có thể sử dụng thử nghiệm đột biến để mô phỏng các vấn đề và xem liệu chúng có được xử lý chính xác hay không.

thẻ

  • Bảo vệ

Phần kết luận

Chúng ta cần tiếp tục trưởng thành.


Các giải pháp của chúng ta không nên cẩu thả.



Chúng ta cần cải thiện danh tiếng của mình với tư cách là những kỹ sư phần mềm nghiêm túc.

quan hệ

Mã Mùi 72 - Trả Lại Mã

Thêm thông tin

thất bại nhanh chóng

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ảnh của jesse orrico trên Bapt


80 phần trăm các vấn đề của tôi là lỗi logic đơn giản. 80% vấn đề còn lại là lỗi con trỏ. Các bài toán còn lại khó.

Đánh dấu Donner

Báo giá tuyệt vời về kỹ thuật phần mềm


Mã Mùi 167 - Băm So Sánh

Băm đảm bảo hai đối tượng khác nhau. Không phải là họ giống nhau.


TL; DR: Nếu bạn kiểm tra hàm băm, bạn cũng nên kiểm tra sự bằng nhau

Các vấn đề

Các giải pháp

  1. Kiểm tra hàm băm (nhanh), sau đó kiểm tra Đẳng thức (chậm)

Bối cảnh

Vào ngày 7 tháng 10 năm 2022, một trong những chuỗi khối lớn hơn đã phải tạm dừng.


Tin tức này gây sốc vì hầu hết các chuỗi khối được định nghĩa là phi tập trung.


Bạn có thể đọc một bài viết đầy đủ ở đây:

Hacker đã đánh cắp 566 triệu USD bằng cách khai thác mùi mã như thế nào

Mã mẫu

Sai

 public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }

Phải

 public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }

phát hiện

  • [x] Bán tự động

Nhiều kẻ nói dối có các quy tắc để xác định lại hàm băm và đẳng thức.


Với thử nghiệm đột biến, chúng ta có thể gieo các đối tượng khác nhau bằng cùng một hàm băm và kiểm tra các thử nghiệm của mình.

  • Danh tính
  • Bảo vệ

Phần kết luận

Mỗi cải tiến hiệu suất có nhược điểm của nó.


Bộ nhớ cache và bản sao là những ví dụ đáng chú ý.


Chúng ta có thể (phải) sử dụng chúng một cách cẩn thận.

quan hệ

Mã Mùi 49 - Lưu Trữ

Mã Mùi 150 - So Sánh ngang tài ngang sức

Thêm thông tin

Bình đẳng và Hash

Mã băm trong Java

Mã băm so với bằng

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.


Điều này sẽ khiến một số độc giả của bạn ngạc nhiên, nhưng mối quan tâm chính của tôi không phải là bảo mật máy tính. Tôi chủ yếu quan tâm đến việc viết phần mềm hoạt động như dự định.

Wietse Venema

Báo giá tuyệt vời về kỹ thuật phần mềm


Mã Mùi 168 - Quyết định không có giấy tờ

Chúng ta cần thực hiện một số thay đổi. Chúng ta cần phải rõ ràng về lý do tại sao

TL; DR: Hãy tuyên bố về các quyết định thiết kế hoặc triển khai của bạn.

Các vấn đề

  • Nhận xét mã
  • Thiếu khả năng kiểm tra

Các giải pháp

  1. Hãy rõ ràng về những lý do.
  2. Chuyển đổi nhận xét thành một phương thức.

Bối cảnh

Đôi khi chúng tôi thấy các quy tắc tùy ý không dễ kiểm tra.


Nếu chúng ta không thể viết một bài kiểm tra thất bại, chúng ta cần phải có một chức năng với một tên khai báo và xuất sắc thay vì một bình luận.

Mã mẫu

Sai

 // We need to run this process with more memory set_memory("512k) run_process();

Phải

 increase_memory_to_avoid_false_positives(); run_process();

phát hiện

  • [x] Bán tự động

Đây là một mùi ngữ nghĩa.


Chúng tôi có thể phát hiện các bình luận và cảnh báo chúng tôi.

Thẻ

  • Bình luận

Phần kết luận

Mã là văn xuôi. Và các quyết định thiết kế nên được tường thuật.

quan hệ

Mã Mùi 05 - Kẻ Lạm Dụng Bình Luận

Mã Mùi 75 - Comments Inside a Method

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ảnh của Goh Rhy Yan trên Bapt


Các chương trình, giống như mọi người, già đi. Chúng ta không thể ngăn ngừa lão hóa, nhưng chúng ta có thể hiểu nguyên nhân của nó, hạn chế tác động của nó và đảo ngược một số thiệt hại.

Mario Fusco

Báo giá tuyệt vời về kỹ thuật phần mềm


Mã Mùi 169 - Phương Pháp Dán

Đừng làm hai hoặc nhiều thứ cùng một lúc.

TL; DR: Cố gắng trở nên nguyên tử nhất có thể trong các phương pháp của bạn

Các vấn đề

  • Mã kết hợp
  • Khó kiểm tra hơn
  • Khó đọc hơn

Các giải pháp

  1. Phá vỡ phương pháp

tái cấu trúc

https://maximilianocontieri.com/refactoring-002-extract-method

Bối cảnh

Nếu bạn đặt tên một phương thức bằng 'And', có thể bạn đang bỏ lỡ cơ hội trích xuất và ngắt phương pháp.

Mã mẫu

Sai

 calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities

Phải

 calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them

phát hiện

  • [x] Bán tự động

Một số kẻ nói dối có thể cảnh báo chúng ta về các phương pháp bao gồm thuật ngữ 'và'.

Thẻ

  • khớp nối

Phần kết luận

Khi thực hiện các phương pháp, điều rất quan trọng là chơi một số câu chuyện về chú vịt cao su và tự nhủ liệu chúng ta có đang làm đúng hay không.

quan hệ

%[ https://maximilianocontieri.com/code-smell-85-and-functions ]

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ảnh của Scott Sanker trên Bapt


Học nghệ thuật lập trình, giống như hầu hết các môn học khác, đầu tiên bao gồm việc học các quy tắc và sau đó học khi nào nên phá vỡ chúng.

Joshua Bloch


Code Mùi 170 - Tái Cấu Trúc Với Thay Đổi Về Chức Năng

Phát triển là tuyệt vời. tái cấu trúc là tuyệt vời. Đừng làm điều đó cùng một lúc

TL;DR: Đừng thay đổi chức năng và tái cấu trúc cùng một lúc.

Các vấn đề

  • Khó xem xét các giải pháp
  • hợp nhất xung đột

Các giải pháp

  1. Không bao giờ thay đổi chức năng trong khi tái cấu trúc

Bối cảnh

Đôi khi chúng tôi phát hiện việc tái cấu trúc là cần thiết để phát triển thêm.


Chúng tôi là những chuyên gia về học tập.


Chúng ta nên tạm dừng giải pháp của mình. Làm việc trên việc tái cấu trúc và tiếp tục với giải pháp của chúng tôi.

Mã mẫu

Sai

 getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code

Phải

 getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename

phát hiện

Đây là một mùi tái cấu trúc.

  • [x] Hướng dẫn sử dụng

thẻ

  • tái cấu trúc

Phần kết luận

Chúng ta nên sử dụng mã thông báo vật lý.


Hoặc chúng ta đang ở giai đoạn tái cấu trúc hoặc giai đoạn đang phát triển.

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ảnh của Dannie Jing trên Bapt


Khi tôi học viết mã, việc tái cấu trúc đưa tôi đến những mức độ hiểu biết cao hơn mà nếu không thì tôi sẽ bỏ lỡ. Những người coi việc tái cấu trúc khả năng hiểu là vô ích khi loay hoay với mã không nhận ra rằng họ không bao giờ nhìn thấy những cơ hội ẩn sau sự nhầm lẫn.

Martin Fowler


5 mùi mã khác sắp ra mắt…