코드 내에서 버그 수정 주석을 유지하는 것이 좋습니까?


15

우리 팀은 클리어 케이스를 버전 관리로 사용하고 있습니다. 내가 일하고있는 프로젝트는 7-8 년 전에 시작되지 않았습니다. 프로젝트의 전체 수명 동안 버그 수정 서비스 팩 등을 여러 릴리스했습니다. 버그 추적 시스템을 사용하여 문제를 추적하고 버그 수정 작업을하는 대부분의 사람들은 START / 날짜, 작성자, 버그 ID 등이있는 END 블록

나는 이것이 매우 관련이 없으며 코드를 어수선하게 만들고 유지 관리하기 쉽지 않다고 생각합니다. 이것은 작업 주석의 추가 수명주기 정보를 유지할 수있는 체크인 주석 / 레이블 등의 일부 여야합니다.

따라야 할 가장 좋은 방법은 무엇입니까?

이 코드를 검토 한 사람들 중 일부는 버그를 수정하고 삶을 편하게 해 줄 것을 고집합니다. 내 이해에서 그들은 파일을보기에 매핑하여 파일을 검토하고 지점의 변경 로그를 가져 와서 검토해야합니다. 검토를 위해 업데이트 된 코드를 제출하는 모범 사례를 얻을 수 있다면 도움이 될 것입니다.


3
진짜 질문은 왜 그렇게 하는가입니다. 소스 제어 이전의 매우 오래된 절차 일 수 있습니다.

@anderson-나는 그들이 소개되었을 때 clearcase를 사용하는 것에 대해 적절하게 이해하고 있다고 느낍니다. 그래서 그 연습은 더 나아
갔을 것입니다

알아낼 생각?


나는 그것이 나쁜 습관이라고 말하지 않을 것입니다. 어쨌든 소프트웨어 품질 측정 중 하나는 소스 코드를 통한 주석 백분율입니다.
Rudy

답변:


27

코드에 주석으로 버그 수정을 추가하는 문제는 전체 기사를 얻지 못한다는 것입니다. "이것은 버그 blah에 대한 수정"이라는 완벽하게 훌륭한 코드 조각을 보게되면 , 나의 첫 번째 반응은 "그래서 뭐?"라고 말하는 것입니다. 코드가 있으며 작동합니다. 코드를 유지 관리하기 위해 알아야 할 유일한 것은 코드의 기능을 알려주는 주석입니다.

더 좋은 방법은 SCM 커밋 로그에 버그 수정 참조를 추가하는 것입니다. 그러면 버그가 무엇인지, 버그가 어디에서 왔으며 어떻게 수정되었는지 알 수 있습니다. 또한 릴리스 시간이되면 SCM 로그를 추출하고 버그가 있음을 나타내는 글 머리 기호를 추가하면 수정 될 수 있습니다. 다른 브랜치 나 버전에서 동일한 버그가 발생하면 수정 프로그램을 쉽게 찾을 수 있으며 실제로 동일한 버그가 있으면 다시 적용 할 수 있습니다.

이 모든 것을 말하면서, 나는 또한 Charles의 대답에 동의합니다. 코드 조각에 대한 이유가 명확하지 않은 경우 반드시 관리자에게 코드가 이유가 있으므로주의해서 처리해야한다고 알립니다.


훌륭한 답변입니다. 내 질문에 몇 가지 점을 더 추가했습니다. 답을 확인하고 업데이트하십시오. 감사합니다. BTW, 특정 지점에서 커밋 로그를 가져 오기 위해 clearcase 명령을 사용하여 도와 줄 수 있습니까?
sarat

@Sarath 나는 ClearCase를 사용한 적이 없다. 물어 보려면 수퍼 유저를 사용하십시오. 알고 기꺼이 도와 줄 사람들이 많이 있다고 확신합니다.
Dysaster

4
JIRA와 같은 좋은 버그 추적기는 SCM의 커밋 로그를보고 버그에 대한 정보를 가져올 수 있습니다. 버그에 대해 무언가를 저지르고 버그 추적기는 버그를 참조한 X를 저지른 버그 보고서에 자동으로 메모를 추가합니다.

@Andersen-JIRA를 이용해 주셔서 감사합니다. 그러나 제대로 사용하고 있는지 확인해야합니다.
sarat

@ Thorbjørn 아, 당신은 쉽게있어. 나는 CVS / Bugzilla 콤보 (그리고 나중에 SVN / Bugzilla)로 그날 수동으로 다시해야했습니다. 내 커밋에 대한 bugfix 참조를 추가하고 bugzilla에 커밋 참조를 추가하십시오. 오류가 발생하기 쉬운 프로세스와 개발자는 둘 중 하나를 잊어 버리는 경향이있었습니다. 그러나 정보는 여러 번 매우 유용했습니다.
Dysaster

23

대부분 나쁜 연습입니다. 나는 절대로해서는 안된다고 말하지 않을 것입니다. 간혹 외부 API의 버그와 같은 문제가 발생하는 경우가 있습니다. 기본 버그에 대해 모르면 해결 방법이 완전히 죽어 보일 수 있습니다. 이 경우 코드에 버그를 문서화하는 것이 좋습니다. 따라서 동료 나 나중의 자아는 명백히 두뇌에 죽은 코드를 "수정"하려고하지 않습니다.


3
동의했다. 중요한 가치를 추가 할 때 이러한 종류의 주석을 추가하십시오. 그러나 핸들을 돌리기 위해서만하지 마십시오.
quick_now

니스, 이것은 몇 가지 코드가 "왜"라는 주석의 아이디어를 지원합니다. programmers.stackexchange.com/questions/1/…
Gabriel

이 작업을 몇 번 수행했습니다. 언뜻보기에는 논리를 완전히 무시하는 코드 ( "f *는이 코드의 목적은 무엇입니까?")이지만 실제로는 매우 좋은 이유가 있으므로 사람들이주의해서 밟고 싶기를 원합니다. 그것. 그런 다음 해당 코드 의 이유 를 설명하는주의 주석을 추가하면 모든 사람의 삶이 쉬워 질 수 있습니다. 그런 다음 누군가가 원래 문제를 해결하는 더 좋은 방법을 생각할 수 있다면 모든 크레딧을 얻을 수 있다고 생각합니다. 브레인 데드 코드가 배치 된 이유와 달성 해야하는 것을 알고 있으므로 대안을 구현하는 것이 훨씬 쉽습니다. 해결책.
CVn

9

나쁜 연습. 주석이 오래되어 코드가 복잡해집니다. 필요한 경우 SCC 시스템의 버전 ​​기록에서 정보를 계속 사용할 수 있습니다.


3

나쁜 습관처럼 들립니다. 조직에서 다른 버그 추적 시스템으로 마이그레이션하기로 결정하면 어떻게됩니까? 제품을 현재 사용중인 도구에 너무 단단히 묶지 마십시오. 특정 버그 ID를 참조하는 대신 코드가 왜 그렇게 보이는지 명확하지 않은 이유는 코드의 주석으로 디자인 결정에 동기를 부여하는 것입니다.


이것은 이분법입니다. 필요할 때 디자인 주석 ( "이것이 xy z를 수행 한 이유")을 가질 수없고 커밋 메시지에서 버그 ID를 언급 할 수없는 이유는 무엇입니까?
Matthew Flaschen

당신이 할 수 없다고 말하는 곳은 어디입니까? VCS 커밋 메시지가 아닌 코드의 버그 ID를 언급하고있었습니다.
fejd

미안, 오해 했어 버그 ID를 어디에나 두는 것이 유용하지 않다고 생각했습니다.
Matthew Flaschen

문제 없습니다, 그것은 단지 내 대답이 충분히 명확하지 않다는 것을 의미합니다. :)
fejd

2

내 첫 번째 반응은 스스로 반복하지 않으므로 코드에서 SCM 로그로 가져 오는 것입니다. 함수, 작성자 이름 및 파일 및 함수의 작성 날짜에 대한 개정 주석에 대해 비슷한 논의를했습니다. 과거 (SCM이 사용되기 전에)이 모든 정보는 파일의 진화를 재구성 할 수 있도록 파일에 보관되었습니다.

개발자의 약 절반은이 정보가 한 곳에서 모든 정보를 가질 수 있기를 원합니다 (이로 인해 SCM에서 변경 사항을 검색하도록 트리거 함). 개발자의 나머지 절반은 coe에서 변경된 사항에 대한 단서를 찾기 시작하지 않지만 SCM에서 코드에 정보가 필요하지 않습니다. 우리는 이러한 의견으로 무엇을해야할지 아직 결정하지 않았습니다. 그것은 사람들이 일하는 방식에 달려 있으며 일부 사람들은 알려진 방법을 떠나는 것에 매우 고집이 있습니다. 코드 블록을 주석 처리하고 코드에 영원히 남겨 두는 것과 똑같은 것입니다.


주석 처리 된 코드는 SCM에서 확인해야하고 커밋조차 거부한다고 생각합니다 ... 미래에 가상의 날이 필요할 경우 SCM 기록에서 5 분의 검색을 얻기 위해 코드에 혼란을 더하고 있습니다. 뒤.
Julien Roncaglia

동의하지만 sourcesafe : D에서 구현하려고 시도하십시오 .D 프로젝트 팀에서 우리는 검토 작업을 해왔으므로 지금은 검토자가 블록을 거부합니다.
refro

오 SourceSafe ... 당신과 당신의 팀에게 죄송합니다.
Julien Roncaglia

아무것도 아닌 것보다 낫지 마십시오. 그리고 현재 모든 새로운 개발은 Subversion으로 이루어 지므로 매월 소스 안전과 관련이 없습니다.
refro

1

Dyaster et al. 에 추가하기 위해 . JIRA는 버그 수정과 관련된 변경 사항을 표시 할 수있는 훌륭한 기능을 가지고 있지만 버그 수정 을 문서화하는 가장 좋은 방법 은 테스트 케이스입니다. 수정 된 버그를 나타내는 주석없이 코드가 명확하지 않으면 "코드 냄새"입니다. 즉, 냄새를 정리할 시간이 없다면 주석은 테스트 사례를 참조해야하며, 코드가 왜 그 일을하고 있는지 훨씬 더 분명해야합니다. 버그 수정을 설명하는 테스트 사례를 작성할 시간이 없다면 버그가 아직 수정되지 않았으며 연기 된 것입니다.


1

코드 자체가 아닌 커밋 메시지에 버그 수정 ID를 추가하는 것에 동의합니다. 버그 ID에 대한 커밋 메시지를 자동으로 스크랩하는 버그 추적기는 매우 유용합니다.

또한 버전 제어 시스템 의 blame / annotate / praise 명령을 사용하여 이러한 주석을 대체 할 수 있습니다. 그런 다음 다음과 같은 것을 실행할 때 :

vcs blame file.ext

일반적으로 각 행을 변경 한 사람, 변경시기 및 커밋 ID를 포함한 유용한 정보를 볼 수 있습니다. 커밋 ID에서 버그 ID를 포함하는 전체 메시지를 얻을 수 있습니다.

좋은 VCS 시스템을 사용하면 누가 라인을 수정했는지 계산할 때 공백을 무시할 수 있습니다.

이 기능에 대한 Clear Case의 기능을 모릅니다.

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