최적 공사 실천: 어떻게 오류를 복구합니까?
우선, 왜 나는 버그를 복구하는 것이 가장 중요하다고 생각합니까?
오류가 항상 발생하기 때문이다.만약 네가 코드를 쓴다면, 너는 버그를 쓴다.
이것은 근본적으로 문제가 아니다.Repeatable Software Development Process, 우리가 견지하는 것은 이 기초 위에서 일하는 것이다. 사람들은 실수를 할 것이다.
얼마 전에 나는 그것에 관한 글을 한 편 썼다.
중요한 것은: 당신과 다른 사람들이 만든 버그에 어떻게 대처합니까?당신은 장래에 이런 상황이 발생하는 것을 방지하기 위해 어떤 조치를 취할 것입니까?너는 어떻게 이런 상황이 심지어 존재한다는 것을 알았니?
오류 발견
네가 진정으로 어떤 것을 복구하기 전에, 너는 부정확한 행위를 찾아내야 한다.
이것은 매우 까다로울 수 있다.다음 두 가지 상황을 고려합니다.
어떤 버그는 다른 버그보다 더 뚜렷하다.
몇 가지 요소가 결함의 발견성에 영향을 줄 수 있다.
Sentry 코드의 오류를 추적하는 데 도움을 줍니다.그것은 거의 모든 언어를 지원하며, 무료 위탁 관리 버전이 있다.그것은 또한 사용자로부터 직접적인 구두 피드백을 수집할 수 있다.
Prometheus는 가장 유행하는 모니터링 도구 중의 하나이다.
docker-compose up
to jump start를 통해 얻을 수 있습니다.NewRelic
, Wombat
, DataDog
및 기타 많은 서비스와 같은 유료 서비스도 있습니다.Sentry
부터 시작할 수 있습니다. 가장 간단한 설정으로 대부분의 수요를 충족시킬 것입니다.필요할 때 더 많은 서비스와 도구를 추가할 수 있습니다.오류 보고
일단 오류가 발견되면 보고가 필요하다.쉬워 보이지 않습니까?응, 사실 이것은 보기에는 매우 쉬워 보이지만, 그것은 틀림없이 이 과정에서 가장 중요한 부분이다.좋은 버그를 보고하려면 대량의 정보를 제출해야 합니다.질문은 다음과 같은 내용을 담고 있어야 합니다.
이제 같은 프로젝트에서 만든 두 개의 다른 버그의 예시를 봅시다.첫 번째는 버전, 거슬러 올라가는 범위에 대한 엄격한 요구이다.It is a good bug report .
The second one was reported by me . 이것은 잘못된 보고의 나쁜 예이다.
그것은 우리가 이전에 정의한 모든 규칙을 거의 위반했다.이것은 바쁜 과정이다. 나와 나의 한 사용자가 휴대전화 통화를 한 후에 이 표를 잊지 마라.그러지 마세요.
다음은 프로젝트에서 사용할 수 있는 실제 오류 보고서templates입니다.
github-issue-templates
repo에는 또 다른 버그 템플릿이 있습니다.당신은 그 중의 어떤 도구를 마음대로 사용하여 당신의 개발 과정을 개선할 수 있습니다!복제 오류
지금 이 버그를 복사해야 합니다.너의 손뿐만 아니라 너의 코드도 있다.기억해라. 너의 목표는 다시는 같은 실수를 하지 않는 것이다.그게 말이 돼?
너는 a regression test를 써야 실패할 것이다.
단원 테스트나 E2E 테스트일 수도 있습니다. 이것은 중요하지 않습니다.이것은 단지 실패한 테스트일 뿐, 당신이 해결하고자 하는 버그를 폭로했습니다.
Lifehack: 때때로 당신의 지점에 나쁜 코드를 제출하려고 할 수도 있습니다. 그러면 CI 구축을 촉발할 수 있습니다.생성되면 프로젝트에 저장됩니다.너의 동료는 이 문제와 연락할 수 있을 것이다.너의 다음 약속은 반드시 이 문제를 해결해야 한다.
어떤 기구가 당신이 복잡한 오류를 복제하는 것을 도울 수 있습니까?그래, 몇 개 있어.
너는 내가
wemake-python-styleguide
를 위해 만든 회귀 테스트를 좀 볼 수 있다.다음은 우리의 테스트 구조에 적용되는 잠재적인 최고치입니다.code_that_breaks = '''
def current_session(
telegram_id: int,
for_update: bool = True,
) -> TelegramSession:
...
'''
def test_regression112(default_options):
"""
There was a conflict between ``pyflakes`` and our plugin.
We were fighting for ``parent`` property.
Now we use a custom prefix.
See: https://github.com/wemake-services/wemake-python-styleguide/issues/112
"""
...
# It was failing on this line:
# AttributeError: 'ExceptHandler' object has no attribute 'depth'
flakes = PyFlakesChecker(module)
assert flakes.root
오류 수정
현재, 우리가 오류를 발견하고, 보고하고, 복사할 때, 우리는 반드시 실제적으로 그것을 복구해야 한다.
이것은 의외의 행동을 삭제하기 위해 코드 라이브러리를 실제로 수정하는 부분입니다.이것은 어쨌든 그렇게 어렵지 않아야 한다!
코드를 수정하고 커밋하면 CI 구성이 통과되어야 합니다.이 경우 오류가 수정되었습니다.하지만 한 가지 더 해야 할 일이 있습니다.
잠깐만, 뭐야?
네, 그리고 대부분의 개발자들이 하기 싫은 일이 하나 있습니다 postmortem.어떤 버그는 정말 쉽다. 이 단계는 필요 없지만, 어떤 버그는 우리에게 많은 시간과 돈을 썼다.우리는 반드시 각별히 그들에게 관심을 가져야 한다.부검은 비기술적인 이야기로 경영진에게 보여줄 수 있다.부검에는 무엇이 포함되어야 합니까?
후기
이것이 바로 고기능 엔지니어가 버그를 복구하는 방법이다.일부 실현은 다를 수 있지만 원칙은 항상 변하지 않는다. 발견, 보고, 복제, 복구, 기록이다.
나는 이 문장이 너의 프로젝트의 성장을 도울 수 있기를 바란다.Subscribe to my github 현재 개발자를 위해 어떤 도구를 구축하고 있는지 알고 싶으면 계정에 로그인하십시오.
Reference
이 문제에 관하여(최적 공사 실천: 어떻게 오류를 복구합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wemake-services/best-engineering-practices-how-to-fix-a-bug-58g5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)