코드 질문 할 때 써먹을 수 있는 MRE 형식 예제 코드
이 문서는 다음 문서의 번역본입니다: https://stackoverflow.com/help/minimal-reproducible-example
코드 관련 질문을 할 때 그 질문의 이해를 도우면서 문제를 해결할 때 도움을 줄 수 있는 예제 코드를 첨부한다면 더 나은 답변을 얻을 수 있을 겁니다. 이러한 예제 코드들은 최소 재현 가능(minimal reproducible example; reprex), 또는 최소 완전 검증 가능(minimal complete and verifiable example; mcve), 최소 실행 가능(minimal workable example; mwe) 이라고 부릅니다.
최소 재현 가능한 예제 코드를 작성하기 위해서는 예제 코드가 다음 원칙을 따르는지 확인해야 합니다.
최소성 - 해당 문제가 발생하는 코드를 최소한으로 줄여야 합니다.
완전성 - 다른 누군가가 해당 문제를 재현할 수 있게 모든 코드 조각을 제공해야 합니다.
재현 가능성 - 예제 코드가 해당 문제를 확실히 뱉어내는지 테스트해야 합니다.
지금부터 최소 재현 가능한 예제 코드를 작성하는 가이드라인에 대해 자세히 말씀드리겠습니다.
최소성
예제 코드의 길이가 길면 길수록 다른 사람이 문제 원인을 찾을 확률은 극히 낮아집니다. 다음 중 하나의 방법을 통해 예제 코드를 간소화할 수 있습니다.
스크래치에서 시작하기. 새 프로그램을 만들고, 해당 문제를 발생시킬 수 있을만한 최소한의 것들을 추가하세요. 함수명과 변수명으로 간단하고 어떤 역할을 하는지 유추할 수 있을만한 이름을 사용합니다. 여러분의 코드에 있는 이름을 사용하지 마세요.
분할 정복. 어디서 에러가 나는지 모르겠다면 코드 몇 개를 제거해서 계속 에러가 나는지 확인하세요. 만약 어떤 코드를 제거했는데 에러가 나지 않는다면 그 코드를 다시 추가합니다.
최소한의 가독성
간결함을 위해 명확성을 희생하면 안 됩니다. 일관된 명명 규칙과 들여쓰기 규칙을 사용하고, 필요하다면 주석을 달아 예제 코드의 이해를 높입니다. 코드를 재정렬하기 위해 코드 에디터의 단축키를 사용합니다(Visual Studio Code의 경우 Alt + Shift + F 또는 ⌥ + ⇧ + F). 탭 대신 스페이스 바를 사용하세요. 스택오버플로우에서 탭을 이용한 들여쓰기가 적용이 잘 안 될 수도 있습니다.
완전성
문제를 재현하기 위한 모든 정보가 질문에 포함되어 있는지 확인하세요.
서버단 코드(XML 기반 설정 파일 등)가 필요한 경우 질문에 포함시켜야 합니다. 만약 HTML이나 스타일시트, JavaScript가 필요한 웹 페이지의 경우 세 가지 모두 필요합니다. 문제의 원인이 여러분께서 생각하고 계신 그 코드에 없을 수도 있기 때문이죠.
아래와 같이 코드 블럭을 사용해 코드 조각을 작성하세요.
some_codes()
각 예제 코드를 작성한 목적에 대한 설명 역시 포함해야 합니다.
Stack Snippets를 이용해 실행 가능한 HTML, JavaScript, CSS 코드를 작성하세요.
절대로 스크린샷을 첨부하지 마세요! 코드 텍스트를 복사한 다음에 붙여넣기한 후, 텍스트를 이쁘게 꾸며주세요. 다른 사람들이 여러분의 예제 코드를 쉽게 읽고 테스트하기 위해 꼭 지켜주시기 바랍니다.
재현 가능성
문제를 효과적으로 해결하려면 아래 원칙들을 지켜야 합니다.
문제에 대한 설명이 필요합니다. “이거 안 되는데 해결법 아시는 분?” 같은 모호한 질문은 다른 사람이 여러분의 문제를 이해하는 데 충분하지 않습니다. 어떤 에러가 나는지 구체적으로 설명해 주세요. 에러 메시지가 무엇이고 어떤 줄에서 에러가 나는지 정확하게 알려주어야 합니다. 또 간단하지만 여러분의 문제를 대표할 수 있는 문장으로 제목을 작성하세요.
문제와 관련 없는 이슈들은 모두 제거합니다. 질문이 컴파일 에러와 관련이 없는 경우, 이 문제가 컴파일 타임에 발생한 게 아니라는 것을 확인해야 합니다. 인터프리터 언어의 경우 pylint, JSLint같은 린터를 통해 코드를 검증하세요.
예제 코드가 정말로 문제를 일으키는지 한번 더 확인하세요! 문제를 고쳤지만 아직 테스트하지 않은 경우, 이를 명시해 주어야 합니다. 시스템을 재시작하거나 환경을 초기화해서 예제 코드를 돌려보는 것도 필요합니다.
여러분의 프로그램을 디버깅하는 방법에 대해 자세히 알고싶다면 Eric Lippert의 훌륭한 블로그 글을 참고하세요: How to debug small programs.
최소 재현 가능한 예제 코드의 의미인 reprex라는 용어는 Jenny Bryan이 만든 R 패키지인 reprex에서 차용하였습니다.
댓글