편집하거나 개선할 수 있는 사례가 많을 가능성이 높기 때문에 냄새가 납니다.
이러한 냄새의 대부분은 문제가 있을 수 있다는 힌트일 뿐입니다. 그러므로 그 자체로 고칠 필요는 없습니다… (그렇지만 살펴봐야합니다.)
이전 코드 냄새(파트 i - XXXIII)는 여기에서 모두 찾을 수 있습니다.
계속하자...
치명적인 오류: 잡히지 않는 오류: /var/www/html/query-line.php:78에서 'logs_queries_web' 클래스를 찾을 수 없습니다.
스택 추적: 718행의 /var/www/html/query-line.php에 #0 {main}이 발생했습니다.
요약: 오류를 잡아보세요. 당신이 기대하지 않는 것조차도.
최상위 핸들러를 사용하십시오.
반환 코드를 선호하는 언어는 피하세요.
데이터베이스 및 낮은 수준의 오류가 예상됩니다.
2022년에도 일반 사용자에게 스택이나 디버깅 메시지를 보여주는 "심각한" 웹사이트를 볼 수 있습니다.
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
<? // 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");
돌연변이 테스트를 사용하여 문제를 시뮬레이션하고 문제가 올바르게 처리되는지 확인할 수 있습니다.
우리는 계속 성숙해져야 합니다.
우리의 솔루션은 엉성해서는 안됩니다.
우리는 진지한 소프트웨어 엔지니어로서 명성을 높여야 합니다.
코드 냄새는 단지 내 의견 일 뿐입니다.
내 문제의 80%는 단순한 논리 오류입니다. 나머지 문제의 80%는 포인터 오류입니다. 남은 문제는 어렵다.
마크 도너
해싱은 두 개체가 서로 다르다는 것을 보장합니다. 그것들이 똑같다는 것은 아닙니다.
요약: 해시를 확인하는 경우 동등성도 확인해야 합니다.
2022년 10월 7일에 대규모 블록체인 중 하나가 중단되었습니다.
대부분의 블록체인은 정의상 분산화되어 있기 때문에 이 소식은 충격적이었습니다.
여기에서 전체 기사를 읽을 수 있습니다.
해커가 코드 냄새를 악용하여 5억 6600만 달러를 훔친 방법
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 }
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 }
많은 린터에는 해시 및 동등성 재정의에 대한 규칙이 있습니다.
돌연변이 테스트를 통해 동일한 해시로 다양한 개체를 시드하고 테스트를 확인할 수 있습니다.
모든 성능 향상에는 단점이 있습니다.
캐시와 복제가 주목할만한 예입니다.
우리는 그것들을 조심스럽게 사용할 수 있습니다.
코드 냄새는 단지 내 의견 일 뿐입니다.
독자 중 일부는 놀라겠지만, 나의 주된 관심은 컴퓨터 보안이 아닙니다. 나는 주로 의도한 대로 작동하는 소프트웨어를 작성하는 데 관심이 있습니다.
비체 베네마
우리는 몇 가지 변화를 주어야 합니다. 우리는 그 이유를 분명히 해야 합니다.
핵심요약: 설계 또는 구현 결정을 선언적으로 작성하세요.
때때로 우리는 쉽게 테스트할 수 없는 임의의 규칙을 발견합니다.
실패한 테스트를 작성할 수 없다면 주석 대신 훌륭하고 선언적인 이름을 가진 함수가 필요합니다.
// We need to run this process with more memory set_memory("512k) run_process();
increase_memory_to_avoid_false_positives(); run_process();
이것은 의미 론적 냄새입니다.
우리는 댓글을 감지하고 경고할 수 있습니다.
코드는 산문이다. 그리고 디자인 결정은 서술적이어야 합니다.
코드 냄새는 단지 내 의견 일 뿐입니다.
사진: Goh Rhy Yan, Unsplash
사람과 마찬가지로 프로그램도 늙어갑니다. 노화를 예방할 수는 없지만 그 원인을 이해하고 그 영향을 제한하며 일부 손상을 되돌릴 수는 있습니다.
마리오 푸스코
한 번에 두 가지 이상의 것을 만들지 마십시오.
핵심요약: 메소드에서 가능한 원자성을 갖도록 노력하세요
https://maximilianocontieri.com/refactoring-002-extract-method
'And'로 메소드 이름을 지정하면 추출 및 중단 메소드 기회를 놓칠 가능성이 높습니다.
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
일부 린터는 'and'라는 용어를 포함한 메소드에 대해 경고할 수 있습니다.
방법을 만들 때 고무 오리 이야기를 하면서 우리가 제대로 만들고 있는지 스스로에게 말하는 것이 매우 중요합니다.
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
코드 냄새는 단지 내 의견 일 뿐입니다.
Unsplash 의 Scott Sanker 사진
대부분의 다른 분야와 마찬가지로 프로그래밍 기술을 배우는 것은 먼저 규칙을 배우고 그 규칙을 깨뜨릴 때를 배우는 것으로 구성됩니다.
조슈아 블로흐
개발은 훌륭합니다. 리팩토링은 놀랍습니다. 동시에 만들지 마세요.
핵심요약: 기능적 변경과 리팩터링을 동시에 하지 마세요.
때때로 우리는 추가 개발을 위해 리팩토링이 필요하다는 것을 감지합니다.
우리는 학습 전문가입니다.
우리는 해결책을 보류해야 합니다. 리팩토링 작업을 진행하고 솔루션을 계속 사용하세요.
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
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
이것은 리팩토링 냄새입니다.
물리적 토큰을 사용해야 합니다.
우리는 리팩토링 단계이거나 개발 단계에 있습니다.
코드 냄새는 단지 내 의견 일 뿐입니다.
사진: Dannie Jing , Unsplash
코드를 공부할 때 리팩토링을 통해 내가 놓칠 수 있는 더 높은 수준의 이해를 얻을 수 있습니다. 이해력 리팩토링을 쓸모없는 코드 조작으로 일축하는 사람들은 혼란 뒤에 숨겨진 기회를 결코 보지 못한다는 사실을 깨닫지 못합니다.
마틴 파울러
5개의 코드 냄새가 곧 추가될 예정입니다…