동료가 자신과 함께 일하는 것을 이해하지 못합니다. 무엇을해야합니까? [닫은]


13

동료가 만든 라이브러리에서 매우 모호한 버그를 디버깅하는 데 3 일을 보냈습니다.이 버그는 매우 드물게 발생합니다. 결국 나는이 버그가 잠금없이 객체에 대한 스레드 간 액세스로 인해 발생한다는 것을 알았습니다. 실제로 이것은 이런 종류의 첫 번째 버그가 아니며 비슷한 버그가있었습니다. 그는 방금 단위 테스트를 수행하고, 실패하면 무언가를 잠급니다. 그리고 아무것도 실패하면, 그의 코드는 완벽합니다. 스레딩 안전에 대해 전혀 모르는 것 같습니다. 아직 드러나지 않은 비슷한 버그가 많이 있다고 확신합니다. PM은 스레딩을 이해하지 못하는 것 같습니다.
문제는 그가 나보다 회사에서 더 많은 시간을 일한다는 것입니다. 어쨌든, 나는 "이 남자는이 지역에서 무능하다"라고 말할 수는 없습니다. 왜냐하면 이것은 항상 당신을 "나쁜 팀 플레이어"로 보여주기 때문입니다.


이것은 어느 나라입니까?

국제적인 회사입니다.
tika April

2
그것이 정말로 큰 문제이고 동료가 실수를 저지르고 있다고 100 % 확신한다면, 첫 번째 것은 그가 위협받지 않는 방식으로 정중하게 지적하는 것입니다. 두 번째는 동료가 듣지 않으면 현금의 잠재적 피해를 지적하는 것입니다. 그것이 모든 관리자의 말에 귀를 기울이는 것입니다. 설명과 같은 스레딩 문제가 발생하면 잠재적으로 매우 위험 할 수 있으며, 진술 내용을 100 % 확신하지 않는 한 계속 진행하십시오.
NB

프로젝트 관리 SE 사이트 에 속해있을 가능성이 있습니다.
Bernard

1
Project Management SE 사이트에는이 질문에 포함 된 "멀티 스레딩"태그가 없습니다.
RalphChapin 1

답변:


13

PM에게 그러한 버그를 피하기 위해서는 팀의 스레드 작업에 대한 노하우가 개선되어야하며 워크샵이나 프리젠 테이션과 같은 것을 기꺼이 조직 할 것이라고 말하십시오. 당신과 당신의 동료 사이에 개인적인 것을 만들지 마십시오.


그가 생각하기 때문에 나는이 그 사람에 의해 환영하지 않습니다 두려워 이다 이 분야 전문 (모든 사람에게 자신을 가르 칠 수 있습니다.) 하지만 시도해 볼 수 있습니다.
tika

아 그렇습니다. 큰 문제가 있습니다. 영어는 모국어가 아닙니다.
tika

동료와 PM 모두 스레딩 및 스레드 안전성에 대한 지식이 제한되어 있다면 교육이 가장 좋은 방법입니다. 한 사람의 무능함이 아닙니다. 문제가되는 것은 팀의 역량입니다.
boisvert

1
워크샵은 여러분 모두 자신의 지식을 쏟을 수있는 곳이며, 여러분 모두는 그로부터 무언가를 배워야합니다. 동료가 스레딩에 대해 알고 있다고 생각하면 그 에게서도 배울 수 있습니다.
Doc Brown

8

버그를 보여주는 단위 테스트를 작성하여 수정을 요청하십시오.


1
그는 이미이 버그를 알고 있습니다. 그는 이유를 찾을 수 없습니다.
tika

3 일 동안의 디버그 세션에서 이유를 찾지 못했습니까? 아니면 질문을 잘못 읽습니까?

1
@scarfridge 플랫폼에 따라 다릅니다. Java의 경우 바이트 코드 계측 또는 Aspect 지향 프로그래밍을 사용하여 문제가있는 위치에 정확하게 대기를 삽입하거나 JVMTI를 사용하여 실행을 제어 할 수 있습니다. 할 수 있습니다!

1
순서의 문제 만이 아닙니다. 코드를 실행하는 코어, GC가 발생할 때 객체를 이동하는 방법, 변경이 한 코어의 캐시에서 다른 코어로 전파되는 방법 등 많은 다른 요소가 관련됩니다.
tika

1
실제로 수십억 번 반복되는 일련의 메소드 호출입니다. 그러나 이것은 중요하지 않습니다. 실제 이유는 잠금없이 (즉, 메모리 장벽이없는) 2 개의 스레드에서 사전 개체에 액세스하기 때문입니다. 스레드 A가이를 작성하고 스레드 B가이를 읽습니다.
tika

4
  • 코드를 검토하고 개선을 제안하는 것은 선임 개발자의 작업입니다.
  • 당신은 그의 작업 후에 확인할 것이 없습니다. 누군가가 내 모든 변경 사항을 다시 확인하여 문제가 발생했는지 개인적으로 싫어합니다.
  • 그가 당신의 조언을 받아들이지 않는다면, 커뮤니케이션 문제를 해결하는 것이 PM의 일입니다.
  • 단위 테스트의 스레딩 문제로 인해이 테스트가 실제로 통합 또는 구성 요소 테스트가 아닌 단위 테스트인지 궁금합니다.

나는 당신의 아이디어를 얻는다. 당신의 명령에 순종하십시오.
tika

2
문제를 나타내는 테스트를 "단위 테스트"또는 "통합 테스트"라고하면 문제가 무엇입니까? 전체 상황은 동일하게 유지됩니다.
Doc Brown

1
저의 우려는 그의 동료가 단위 테스트와 구성 요소 테스트의 차이점을 알지 못하므로이 문제를 해결하기 위해 추가 교육이 필요할 수 있다는 것입니다.
CodeART

@CodeRush-동료 리뷰를 믿지 않습니까? 프로덕션에서 충돌이 아닌 다른 사람이 코드를 다시 확인했다는 사실을 실제로 이해하려면 무엇이 필요합니까?

아이디어를 얻었지만 이전 작업에서 효과적으로 작동하는 것을 보지 못했습니다. 선임 개발자의 리뷰가 더 나은 피드백 메커니즘이라고 생각합니다.
CodeART

-5

귀하의 회사는 멀티 스레딩을 사용하지 않아야한다고 생각합니다.

대규모 멀티 스레드 프로젝트를 수행 한 후 두 가지 기술이 작동하는 데 중요하다는 것을 알았습니다. 먼저 코드를 올바르게 작성해야했습니다. 모든 필드는 수동으로 검사하여 참조 된 곳에서 올바르게 선언되고 올바르게 동기화되었는지 확인해야했습니다. (경고 : 나는 대답을 짧게 또는 더 짧게 유지하기 위해 여기에서 약간을 단순화하고 있습니다.) 둘째 , 단일 멀티 코어 머신 에서 코드를 평평하게 실행하여 코드를 테스트해야했습니다. 각 코어의. (그리고 그것이 나에게 자주했던 것처럼 각 코어의 2 % 만 사용하면 버그이기도합니다.)

이를 관리 할 수는 있지만 조직은 관리 할 수 ​​없습니다. 그들이 모르는 문제를 이해하더라도 전문 지식이 없습니다.

대부분의 언어는이를 피할 수있는 방법을 제공합니다. 일반적으로 자체 스레드가있는 소켓 리더가있는 경우 가능한 빨리 기본 스레드에 정보를 가져 오십시오. 더 나은 방법은, 읽기의 스레드 부분을 처리 할 시스템 클래스 / 함수를 찾는 것입니다. 대부분의 GUI API처럼 "이벤트"를 차례로 실행하는 큐를 사용하십시오. (이 문제에 대해서는 GUI API의 이벤트 큐 자체를 사용하십시오.) 병렬 처리가 필요한 경우 데이터 / 필드를 단일 스레드로 유지하여 모든 전송을 처리 할 수있는 일종의 "작업자 스레드"를 찾을 수 있습니다.

멀티 스레딩의 모든 위험에 중점을 둡니다. (무서운 이야기 : 내가 좋아하는 버그는 다음과 같은 두 줄과 관련이 있습니다. int i = 5; i = i * i;, i35의 값을 얻었 습니다 . 많이 본 것 중 하나 if (thing != null) thing.reset();는 null 포인터 예외를 던지는 것입니다.) 완전히 새롭고 이상한 세계로 발을 디딘다면 아마도 한 걸음 물러서야 할 것입니다.

멀티 스레딩 어떻게 처리 해야하는지 잘 모르겠습니다 . 한 사람에게 직업을 줄 수 있고 그들이 실패 할 때 버리는 모든 것은 괜찮습니다. 그러나 팀은 가장 약한 멤버만큼 강할 것이며, 훌륭한 프로그래머조차도 본격적인 멀티 스레딩에 어려움을 겪을 것입니다. 사람들이 언어를 안전하게 만들 수있는 방법을 찾길 바랍니다. 유용한 소프트웨어가 몇 가지 있습니다. 그러나 실행 시간이 중요 하고 우수한 프로그래머 또는 검증 된 팀을 사용할 수 없다면 멀티 스레딩을 피하는 것이 가장 좋습니다 .


2
회사가 무엇인지 또는 그들이 무엇을하고 있는지 모릅니다 . "이것을 관리 할 수는 있지만 조직이 할 수는 없습니다" 라는 의견 은 다소 근거가 없습니다. . 그들이 누구든지, 멀티 스레딩이 문제를 해결하는 가장 좋은 방법 일 것입니다. 상황에 맞는 상황이 많이 있습니다. 그리고 모든 것을 제쳐두고, 문제는 멀티 스레딩에 관한 것이 아니라 전문 지식 부족으로 인해 문제를 일으키는 동료를 다루는 것입니다.
anaximander

@anaximander : 멀티 스레딩은 재현하기 매우 어렵고 추적하기 어려운 버그를 생성합니다. 사용 가능하고 수정 가능한 MT 소프트웨어를 생성하려면 최소한 위험을 인식하는 프로그래머와 관리자가 있어야합니다. 티카의 조직 은이를 제대로 처리 할 수 없었다 . 나는 테스트 / QA 사람들이 프로그래머가 모든 버그에 대해 많은 테스트와 수정을 요구함으로써 사운드 코드를 작성하도록 강요하는 것을 보았습니다. MT에서는 작동하지 않습니다. 동료에게 능력, 관심 및 동기 부여가 부족한 경우 MT에서 멀어지게하십시오.
RalphChapin

@anaximander : Microsoft보다 더 나은 경험이 있어야합니다. 공정하기는하지만, 멀티 스레딩 버그처럼 보이는 것을 본 적이 없습니다. .... 그리고 의견을 주셔서 감사합니다.
RalphChapin

1
그럼에도 불구하고 "전문 지식이 부족한 동료를 어떻게 처리해야합니까?"라는 질문이있을 때 "귀하의 회사에서 소프트웨어를 잘못 작성하고 있습니다"라고 대답하는 것이 옳지 않다고 생각합니다. 어느 조직에서나 방대하고 지식이 많더라도 항상 지식에 차이가있는 조직이있을 것입니다. 조직이 누구인지 또는 소프트웨어가 무엇을하는지 알지 못하면 회사가 무엇을하고 있는지 알지 못하거나 멀티 스레딩없이 문제를 해결할 수 있다고 판단 할 수 없습니다.
anaximander
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.