오래된 주석은 도시 신화입니까?


38

나는 사람들이 "의견이 구식이되는 경향이있다"고 주장하는 것을 끊임없이 본다. 문제는 내 경력 전체에 2 ~ 3 개의 오래된 의견이있는 것 같습니다. 별도의 문서에있는 오래된 정보는 항상 발생하지만 내 경험상 코드 자체의 오래된 주석은 매우 드 exceed니다.

내가 함께 일하는 사람이 방금 운이 좋았습니까? 특정 산업이 다른 산업보다이 문제에 더 취약합니까? 당신은이 있는가 특정 사용자가 본 적이 최근 오래된 코멘트의 예를? 아니면 오래된 주석이 실제 문제보다 이론적 인 문제에 더 가깝습니까?


30
동의했다. 오래된 코드는 주석으로 만들어 졌으므로 이제는 많이 볼 수 있습니다.
pyvi

8
나는 무엇보다 의견이 부족하다는 것을 알았습니다. 불충분 한 명명 규칙과 결합하여 작업하는 내용 중 일부를 읽으려고하는 재미가 있습니다.
P.Brian.Mackey

2
나는 오래된 구식 의견을 많이 보았습니다. 일부는 평범한 오도 된 EVIL이었습니다. 확실히 신화는 없지만, 많은 사람들이 유지 관리하는 프로젝트 및 / 또는 복잡성이 증폭 된 프로젝트에 주로 유효합니다. 그러나 주석이 아닌 코드를 신뢰하는 법을 배웠습니다 (두 줄 이상을 초과하면 거의 읽지 않습니다).
MaR

나는 내 경력 전체에 걸쳐 아주 오래된 레거시 코드로 주로 작업 해 왔습니다. 이상한 30 년 된 Fortan77 코드에서 오래된 주석과 관련하여 몇 가지 심각한 문제가 있었지만, 주석이 적절한 코드의 0 %에 가깝습니다. 따라서 문제의 규모가 과장된 것 같습니다.
SK-logic

운 좋게도, 이것을 게시 한 후 1 년 동안 꽤 많이 보았습니다. 나는 무의식적으로 그들을 장기 기억에 넣을 충분한 생각을주지 않고 그것들을 믿지 말고 수정하고 계속하는 법을 배웠다고 생각합니다.
Karl Bielefeldt

답변:


33

지속적으로

나는 구식이며 오해의 소지가있는 유일한 수영 자라고 믿을 수 없습니다. 오프 기회에 이것은 이해하는 데 도움이됩니다.

아마도 코드의 나이에 따라 가장 중요합니다. 다음 요소는 직원의 이직률입니다.

나는 동등한 부품 R & D 및 유지 보수 작업을합니다. R & D는 새로운 코드이며 일반적으로 구타를 조금 벗어난 것입니다. 많은 동료들이 이미 라이브러리가없는 것을 시도 할 때 많은 설명을 믿습니다. 주석 대 코드 비율이 평소보다 높기 때문에 상황이 동기화되지 않을 가능성이 더 많습니다.

유지 보수 코드 ... 나는 10 세 이상이고 5 세 이상인 시스템에서 활발한 유지 관리 자입니다 .10 세 코드와 의견은 예상대로 끔찍합니다. 10 년 동안 코드베이스에 많은 도움을 받았고 더 이상 모든 것이 어떻게 작동하는지 아무도 모릅니다. 5 년 된 코드와 의견은 팀의 이직률이 매우 낮기 때문에 꽤 좋습니다.

저는 거의 모든 서비스를 제공합니다. 심지어 우리 제품은 특정 고객에 맞게 조정되어 있습니다.

구체적인 예 :

  • 메모리 내 복사본 방지와 같은 특정 방법론의 성능 향상을 설명하는 주석. Pentium 2의 최고급 시스템이 MB의 RAM을 가지고 있지만 지금은 거의 문제가되지 않습니다.

  • 할 일

  • 주석을 포함하여 복사하여 붙여 넣은 코드 블록. 의견은 원래 위치에서 의미가 있었지만 여기서는 거의 의미가 없습니다.

  • 주석 처리 된 코드 위에 주석 블록 (누가 몇 년 동안 있었는지 아는 사람).

이 모든 것에서는 주석과 코드를 소프트웨어와 동일한 수준으로 유지하지 않는 경향이 있습니다. IDE와 기본 개발자 습관은 이것으로 도움이되지 않습니다. 제 눈은 그것들을 지나치도록 훈련되었습니다. 필자는 구식이며 활동적인 프로젝트에서 구식을 피하는 것이 상대적으로 저렴하다고 생각합니다. 코드 / 코멘트 비율을 높게 유지할 수 있다면 최신 상태로 유지하는 것이 그리 중요하지 않습니다. 프로덕션 시스템에서 버그 수정을 위해 x 시간의 예산을 책정 할 때 이러한 것들을 사냥하는 것을 정당화하는 것이 조금 더 어렵습니다.


그래서 기본적으로 당신은 단순히 너무 엉망이되어 상황을 악화 시키므로 주석을 완전히 무시한다고 말합니다. 놀랍지 않습니다.
Steven Jeuris

5
@ 스티븐-나 개인적으로. 나는 점진적 개선을 믿는 사람입니다. 나는 완전히 해독 할 수없는 코드의 snarls가 충분한 점진적 노력으로 꽤 괜찮은 것으로 바뀌는 것을 보았습니다. 그러나 내 경험에서 무시하는 것은 확실히 표준입니다. 분류해야 할 몇 주 간의 문제가있는 여러 개의 서로 연결된 10000 개의 라인 클래스가 발생할 때 매우 이해하기 쉽습니다. 오래된 주석은 우선 순위 목록의 맨 아래로 떨어집니다.
Steve Jackson

1
@Steve : 귀하의 상황에서 나는 모든 주석을 제거하고 필요한 곳에서 처음부터 주석을 시작하는 스크립트를 작성합니다. :)
Steven Jeuris

1
내가 일했던 주 코드베이스는 적어도 절반의 주석과 거의 주석이 달린 코드였습니다. 오래된 의견은 인생의 사실이었고 정확한 의견은 매우 드물었 고 나는 심지어 문서에 대해 언급하지 않을 것입니다 !!! 시력 ...이 직업 후 나는 적은 것이 좋다는 것을 배웠다, 당신이 코드를 주석이 필요하면, 일을보다 명확하게하기 위해 리 팩터가 필요합니다 ...
Newtopian

4
의 몇 가지 끔찍한 예를 보았습니다 Blocks of copy-pasted code including comments. Comment may have made sense in its original location, but hardly makes sense here. 예를 들어, 수업 수준의 의견은 다른 수업에 대해 이야기합니다.
피터 테일러

18

"의견은 구식이되는 경향이 있습니다."

나는 이것이 문제가 될 수 있음을 알기에 충분히 일어나는 것을 보았다.

문제는 내 경력 전체에 2 ~ 3 개의 오래된 의견이있는 것 같습니다.

모든 사람이 의견을 충분히 처리하고 유지하는 환경에서 일하는 것이 완벽하게 가능해야한다고 생각합니다. 편집중인 코드 근처의 주석을보고 적절한 경우 주석을 업데이트하는 것이 약간의 추가 노력 일뿐입니다. 주석이 너무 멀리 떨어져있어 즉시 눈에 띄지 않는 경우 어쨌든 나쁜 주석이므로 처음에는 추가해서는 안됩니다 (적어도 존재하지 않음).

또한 일반적으로 의견이 구식이된다는 진술과 함께, 가독성을 줄이고 사람들을 혼란스럽게한다는 진술을 따릅니다. 이것은 내가 아직 경험하지 않은 것입니다. 오래된 주석이 발생할 때마다 변경 사항을 명확하게 확인하고 추가 노력이 필요하지만 최신 코드를 나타내도록 주석을 업데이트합니다.


Roehm 등 의 최근 연구 . 2012 년 은 다음을 관찰합니다.

21 명의 참가자 (28 명 중)는 소스 코드 와 인라인 주석 으로부터 주요 정보를 얻는다고보고 한 반면, 4 명만이 문서가 주요 정보 출처라고 답했습니다.

이것은 일반적으로 코드 자체의 주석이 여전히 매우 유용하다고 여겨지는 의심과 일치합니다. 이것은 오래된 문서와 오래된 주석 사이에 명확한 선이 그려 져야 함을 나타냅니다 .

Roehm, T., Tiarks, R., Koschke, R. 및 Maalej, W. (2012, June). 전문 개발자는 소프트웨어를 어떻게 이해합니까? 2012 년 국제 소프트웨어 공학 회의 (pp. 255-265) 진행. IEEE 프레스.


나아질수록 일반적인 플러그 앤 처그 코드에서 어떤 코드가 작동하는지 파악하기 위해 주석이 덜 필요하다는 것을 알았습니다.
Paul Nathan

3
@ 폴 나단은 코멘트 설명해서는 안 어떤 코드가 더 잘 설명 - 코드가 않습니다. 댓글은, 거기에 설명되어 코드가 무엇을 수행합니다.
SK-logic

2
@ SK-logic : 나는 논쟁을 이해하지만 너무 광범위하다고 생각합니다. 함수 (또는 코드 단락 / 블록)의 주석은 함수가 이름보다 훨씬 더 (그리고 더 빨리) 명확하게 할 수 있습니다. 이것은 특히 공공 기능에 필요합니다. 코드를 쉽게 읽을 수 있기 때문에 10- 라이너 코드에 대한 2- 라이너 설명을 읽는 것이 여전히 빠릅니다. "what" 문서 가없는 자주 사용하는 API로 작업한다고 상상해보십시오 . 당신은 그 기능에 대해 훨씬 덜 확신합니다.
Steven Jeuris

그렇다, 나는 문서 (예를 들어, Javadoc)를 포함하지 않았다 – 그것은 단지 " 주석 " 이라고 불릴 정도로 구성되어있다 .
SK-logic

17

오래된 의견은 직업 냄새입니다. 구식이거나 방치 된 단위 테스트를하는 것과 같습니다. 상점에서 한 번 활성화 된 좋은 프로세스가 카우보이 코드로 변하고 있음을 보여줍니다. 일을 제대로하기 위해 시간을내는 적절한 "엔지니어링 문화"가 무너졌습니다. 프로젝트 / 회사가 기술 부채에 빠질 수 있습니다.

요컨대, 당신은 운이 좋았습니다. 당신이 당신의 경력에서 지금까지 합리적으로 잘 운영되는 상점을 가지고 있다면, 이것을 많이 보지 못할 수도 있습니다. 그러나 덜 일반적이고 덜 운영되는 상점에서는 다른 혼란과 평행을 이룹니다.


"오래된 의견은 직업 냄새입니다." 잘 넣어! 마찬가지로 자기 문서화 코드를 단지 의견없이 솔루션,하지만 게으른 '해킹'이 아니다.
Steven Jeuris

10

주석은 테스트와 비슷하지만 최신 상태 일 때는 매우 좋지만 코드가없는 경우 코드를 이해하기가 더 어려워 질 수 있습니다.

오래된 코멘트를 본 적이 없다면 매우 운이 좋았습니다.

내가 작업 한 대부분의 코드베이스는 오래된 주석으로 가득 차 있었고 일반적으로 주석 대신 혼란의 원인이되므로 주석을 완전히 무시합니다.


당신이 일한 산업을 물어볼 수 있습니까? 이것이 다른 사람들보다 더 일반적인지 궁금합니다.
Karl Bielefeldt

저는 유럽의 3 개 국가에서 대기업과 소기업 컨설턴트로 일했습니다. 최근 SaaS 개발 하우스에서.
Kim.Net


10

오래된 주석은 종종 JavaDoc에 나타납니다.

  • 더 이상 존재하지 않는 인수 나열
  • 모든 주장을 설명하지는 않음
  • 예외 등의 유사한 사항

또한 대부분의 성능 고려 사항이 코드 자체보다 더 빨리 부실 해지는 경향이있는 경우 "댓글을 작성하려면 여기에 수행"과 같은 내용이 언급됩니다.


3
(비판이 아님-해결책 제시) IDE 경고는이를 방지하기 위해 먼 길을 갈 수 있습니다. 보다 과감한 조치가 필요한 경우 javadoc 빌드 경고 / 오류에서 빌드에 실패하십시오.
Michael K

1
이것은 내가 많이 보지 못한 이유를 설명 할 수 있습니다. JavaDoc 스타일 주석을 사용하는 곳에서는 일한 적이 없습니다.
Karl Bielefeldt

4
@Michael, IDE 경고는 경미한 경우에 도움이됩니다. . 잘못 사용되는 경우 (((십오, 자바 독 불행에 기여할 수 크게 우리의 코드베이스에서 쓰레기의 Javadoc의 대부분은 분명히 자동 생성되었다 - : 우리의 기존 코드베이스는 관심을 중지 한도를 초과의 방법이 있음을, 20,000 Checkstyle 경고를 생성합니다.
Péter Török

4

나는 때때로 오래된 주석을 처리합니다. 확실히 도시 신화가 아닙니다. 사람들은 최악의 관행 목록에서 그것을 자주 언급하기 때문에가 아니라 그렇게 할 때 일반적으로 많은 시간과 노력이 들기 때문에 언급합니다.

우리의 코드베이스에서 가장 오래된 주석은 메서드 선언 근처가 아니라 호출 근처에서 메서드 동작을 설명하는 (반) 패턴을 사용하여 발생합니다. 누군가가 한 번에 한 번만 호출되는 메소드로 긴 코드 조각을 추출한 다음 메소드 호출에 주석을 달 때 발생합니다. 따라서 다음과 같은 결과가 나타납니다.

featureList = GetFeatures();

// Sorting features and deleting empty ones from the list...
ProcessFeatures(featureList);

그리고 방법은 주석없이 아래 어딘가에 선언됩니다. 사람들은 몇 년 동안 사양 변경 및 버그 수정을 처리하면서 이러한 방법을 혼란스럽게 생각하며 결국 목록을 정렬하지 않고 빈 기능을 찾으면 예외를 던지는 방법으로 끝납니다. 따라서 위의 주석은 오래된 주석이므로 결국 디버거에서 시간이 걸립니다. 이것은 일부 코드베이스에서 발생합니다.


3

스스로에게 물어보십시오. 코드 줄을 변경하고 관련 주석을 변경하거나 새로운 주석을 추가하지 않은 적이 있습니까?

나는 많은 레거시 코드로 작업했으며 주석은 때로는 관련성이 거의 없습니다.


2

대부분의 경우 내 경험은 귀하의 경험과 일치하지만 코드베이스 전체에서 사실이었던 한 가지 사례를 실행했습니다. 그것은 더 이상 클라이언트와 "좋은 조건"에 있지 않은 컨설팅 상점에 의해 몇 년 전에 작성된 앱이었습니다.

이 회사는 코드에 대해 언급하면서 예외적 인 작업을 수행했지만 원래 핸드 오프 이후로 코드를 유지 한 프로그래머는 "절대적으로 변경해야 할 사항 만 변경"사고 방식의 일부였으며 그 자체로는 나쁘지 않았습니다. 불행히도, 그들은 주석에 대해서도 같은 태도를 유지하여 시간이 지남에 따라 주석과 코드가 상당히 분리되었습니다.


2

설명적인 주석이 너무 오래되지는 않지만 몇 년 동안 TODO 주석이 많이 있습니다. 나는 그들이 타임 캡슐과 같으면 좋았고 다음과 같이 말했습니다.

//TODO: In 15 years AND NO SOONER... actually implement this method.

1
이 경우 문제는 아마도 TODO의 오용일 것입니다. TODO는 코드가 실제로 작동하지만 나중에 개선 될 수있을 때만 사용해야한다고 생각하므로 TODO: implement일종의 주석은 존재하지 않아야하며 실제로 아무도 돌아 오지 않았다는 사실은 중요하지 않습니다. 안타깝게도 많은 사람들이이 규칙을 따르지 않으며 어느 시점에서 생산 코드에 게시 한 것과 같은 의견을보고 싶다는 데 전적으로 동의합니다. 그것은 내 하루를 만들 것입니다.
pwny

1
C #에서는 이러한 목적으로 NotImplementedException 을 사용 합니다.
Steven Jeuris

2
@ pwny, 나는 체크인하기 전에 쓰려고하는 것들에 대해서만 TODO를 사용하여 그것을 커버하는지 확인합니다. 그것보다 더 긴 용어는 버그 트래커에 속한다고 생각합니다.
Karl Bielefeldt

@Karl Bielefeldt 그것도 많은 의미가 있습니다.
pwny

2

내가 작업 한 마지막 3 개의 프로젝트는 코드베이스에서 오래되고 오해의 소지가 있으며 쓸모없는 주석을 제거하는 데 며칠을 보냈습니다. 가능하고 필요한 곳에서는 더 적절한 주석으로 대체하지만, 종종 주석을 삭제하고 계속 진행하는 문제가 아닙니다.

나는 다른 사람들로부터 인수 한 거의 모든 코드베이스에 대해 거의 동일한 작업을 수행했습니다. 보통 오랫동안 유지되지 않았고 원래 소유자는 오랫동안 이동하지 않았거나 적절한 핸드 오버를 할 수 없거나 의지 할 수 없었습니다.


1

주석 사용이 줄어들 수 있습니다. 자격을 갖춘 사람의 코드는 얼마입니까? 예를 들어 누군가가 실제로 구식이 되려면 주석을 포함시켜야합니다. 둘째, 주석 처리 된 코드를 변경해야합니다. 높은 백분율의 코드가 적합한 지 확실하지 않습니다.

많은 응용 프로그램을 망치고 많은 시간을 낭비하기 위해서는 하나의 나쁜 의견에 의존해야합니다.


0

많은 코드를 생성하는 조직에서는 주석을 동기화하기가 어렵습니다. 무슨 일이 일어나고 있는지 이해하는 가장 좋은 방법은 작업중인 모듈의 제어 흐름도를 그리는 소프트웨어를 사용하는 것입니다. 이것이 소프트웨어가하는 일을 계속 느끼게하는 유일한 방법입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.