2008-09-21 5 views
5

도요타 제조 라인에서는 부품이 어느 경로를 통과했는지 항상 알고 있습니다. 단지 그들이 뭔가 잘못되었다고 고칠 수 있다고 확신 할 수 있습니다. 이것은 소프트웨어에도 적용 가능합니까?결코 소프트웨어에서 알려지지 않은 경로를 만들지 않습니까? [도요타의 원칙]

모든 오류 메시지는 그들이 여행 한 경로를 정확히 알려 주어야합니다. 일부는 스택 추적을 사용하는 오류 메시지입니다. 이것은 올바른 해석입니까? 다른 곳에서 사용할 수 있습니까?

다음은 팟 캐스트입니다. 나는이 좋은 방법입니다

http://itc.conversationsnetwork.org/shows/detail3798.html

답변

5

좋은 아이디어 실행 가능한 경우. 불행히도 일반적으로 기계 상태의 전체 기록을 추적하는 것은 매우 어렵습니다. 당신은 각 데이터 구조에 당신이 가져온 곳을 태그 할 수없고, 의 모든 상태는 객체입니다. 외부 이벤트 만 저장하면 모든 것이 생겨나는 방식으로 재생할 수 있습니다.

몇 가지 예 :

나는 그것을 실행 가능했던 프로젝트에 대한 작업을했고, 그것은 대단히 도움이되었습니다. 우리가 배송에 가까워지고 버그 수정이 없어지면 컴퓨터가 문자와 로케일의 모든 변형을 가지고 밤새도록 반복적으로 게임을하는 "제로 플레이 모드"로 게임을하게됩니다. 주장하면 일치를 시작한 임의의 키가 표시됩니다. 우리가 아침에 일하러 왔을 때 우리는 화면에서 키를 쓰고 (보통 하나였습니다) 그 키를 사용하여 다시 시작했습니다. 그렇다면 주장이 나올 때까지 그냥 지켜 볼 것입니다. 중요한 것은 오류가 발생했던 모든 원래 입력을 다시 만들 수 있고 다시 컴파일 한 후에도 원하는만큼 여러 번 다시 실행할 수 있다는 것입니다 (제한 내에서 ... 난수 생성기에서 가져온 수를 변경할 수 없음 , 비주얼 게임과 같은 비 게임용으로는 별도의 RNG가 있었지만). 이는 따뜻한 재부팅 후에 각 일치가 시작되고 입력으로 매우 적은 양의 데이터 만 사용했기 때문에 효과가있었습니다.

나는 번지가 헤일로 수준에 나쁜 형상을 발견하려고 유사한 방법을 사용하는 것을 들었습니다.그들은 devest 키트가 파괴 불가능한 주인공이 무작위로 이동하고 점프하는 특수 모드에서 밤새 실행되도록 설정할 것입니다. 아침에 그는 그들이 나올 수없는 어떤 위치의 도형에 갇혀 있는지 살펴보고 보았습니다. 수류탄이 관련되었을 수도 있습니다.

다른 프로젝트에서 우리는 실제로 모든 사용자 상호 작용에 타임 스탬프를 기록하여 재생할 수있었습니다. 가능한 한 훌륭하게 작동하지만 대부분의 사람들은 전체 상태가 그렇게 쉽게 저장되지 않을 수있는 변화하는 DB와 상호 작용합니다.

+0

좋은 지적. 또한 처리 도구에 대해 "정보를 유지하라"방식을 사용했기 때문에 출력이 손상되거나 늦게 실패한 입력 오류가 추적 될 수 있습니다 (예 : 오류가있는 입력 파일의 행). – steffenj

+0

마크, 나는이 대답을 읽고 있었고, 나는 생각했다. "나는 그 일을 전에 보았다." 그때 당신의 이름을 보았습니다. 우리가 함께 일했음을 깨달았습니다. – Nosredna

0

재미라고 생각합니다. 그러나 로깅을 너무 많이해서는 안됩니다. 그렇지 않으면 모든 잡음에서 흥미로운 정보를 찾을 수 없으며 전체 성능이 저하됩니다 (예 : 언어에 따라 익명 개체 생성).

2

소프트웨어는 그다지 중요하지 않습니다. 소프트웨어에서 문제가 발생하면 일반적으로 오류를 재현하여 포로 상태로 분석 할 수 있습니다. 1000 번에 1 번만 발생하더라도 모든 로깅을 전환하고 1000 번 실행 (간단한 침투 테스트) 할 수 있습니다. 불가능되는 지점으로, 훨씬 더 많은 비용과 시간이 많이 드는 제조 라인에서의

. 그것이 잘못되면 가능한 한 처음으로 한 많은 정보가 갖는

더 나쁜 것은 없지만 도요타에 그대로 나에게 중요하지 않습니다. 전체 스택 추적과 오류 메시지를 생산

0

은 일반적으로 나쁜 보안 연습 입니다.
한편 , 도요타의 의도에 맞춰 더, 모든 개발 모듈은 원래 프로그래머 (들)에 다시 추적해야한다 - 그리고 그들은 등 겉만 번지르르 한 작업, 버그 수정, 보안 취약점,하지에 대한 책임을 져야한다 징계 목적이지만 필요한 경우 유지 관리 및 교육을 모두 포함합니다. 그리고 어쩌면 보너스를 들어, 반대로 상황에서 ... ;-)

0

Google Video에이 대화를 상기시켜줍니다. "역방향 디버깅"에 대해. 나는 드물게 (절대로) 디버거를 사용하지 않는다 (그리고 jocular 스피커를 참을 수 없었다). 그래서 나는 그 이야기를 생략했다. 아마 그것은 당신에게 흥미 롭군요?

관련 문제