회귀 테스트에 감사드립니다. 그곳에서 저는 이번 주 초에 제가 작성한 새로운 코드에 대해 정말 기분이 좋았고 (나는 생각했다) 디버깅했다. 이진 시간 값을 세분화된 시간 구조(C 전문가를 위한 "스트럿 트럼")로 변환하는 OpenVOS POSIX 기능을 향상시키는 중입니다. 1998년 POSIX 환경에서 작동하도록 이러한 루틴을 수정했을 때 바로 가기를 가져와 기본 VOS 커널 하위 루틴이라고 불렀습니다. 이 접근 방식은 빠르고 간단했지만 VOS가 해당 날짜를 처리하지 않기 때문에 POSIX 런타임이 1970년과 1980년 사이에 날짜를 처리할 수 없다는 것을 의미했습니다. 최근에는 OpenVOS 17.0에 몇 가지 주요 새로운 오픈 소스 패키지를 이식했습니다. 나는 우리가 날짜의이 범위를 처리 할 수 없기 때문에 테스트의 무리를 실패했다는 것을 발견했다. 그래서 VOS와 UNIX Epochs(1970~2048년)의 모든 날짜를 처리하기 위해 코드를 수정하는 작업을 설정했습니다. 나는이 작업이 오류가 발생하기 쉬운 것이라는 것을 알고 있었고, 나는 코드에서 모든 버그를 갈아 낼 수있는 방법을 찾기로 결정했다. 날짜 작업에서 좋은 점 중 하나는 세트가 유한하다는 것입니다. 게다가, 현대 컴퓨터는 매우 빠르기 때문에, 그것은 단지 그들이 가능한 모든 조합을 통해 위기와 무슨 일이 일어나는지 볼 수 있도록 모든 어려운 아니다. 1970년과 1971년 을 처리한 코드 영역을 테스트하고 싶었는데, 그 이유는 제가 여기에 들어가지 않을 것입니다. 그래서 저는 1970년 1월 1일부터 현재까지 연장되는 하루에 2번 변환하는 시험을 썼습니다. 그것은 CPU 시간의 초의 일부만 사용. 물론, 내 코드에서 울타리 오류 오류를 발견했다. 오류를 수정한 다음 테스트가 통과되었습니다. 나는이 과정에 대해 꽤 좋은 느낌이었고, 감사원은 변경 사항에 서명하고, 나는 내가 끝났다고 생각했다. 그런 다음, 내 동료는 내 변화를 통해 회귀 테스트 스위트 룸을 실행. 컴파일러와 런타임을 변경할 때마다 이 작업을 수행하여 실수로 아무 것도 중단하지 않도록 합니다. 불행히도, 회귀 테스트의 몇 가지 실패. 시험의 명백한 철저함에도 불구하고, 내 테스트가 그것을 잡지 않은 이유를 발견했을 때, 나는 문제가 2038 년까지 발생하지 않았다는 것을 발견했다. 1970년부터 1980년까지 10년을 시간 루틴에 추가했지만, 2038년부터 2048년까지 10년을 쉬었다. 물론, 내가 다시 가서 범위에서 매일 테스트 할 때, 나는 내 테스트가 문제를 잡았을 것이라는 것을 증명했다, 단지 내가 그것을 요청했다면.
여기서 교훈은 무엇입니까? 가장 명백한 것은 모든 조합을 테스트 할 수 있다면 실제로 모든 조합을 테스트할 수 있다는 것입니다. 아마도 더 중요한 교훈은 회귀 테스트 제품군을 구축하는 데 시간을 하는 것입니다. 그들은 시간과 노력의 가치가있다. 코드를 향상하면 비용을 절감하고 문제를 찾고 해결하는 시간을 단축할 수 있습니다. 회귀 테스트 제품군을 만드는 비용을 정당화하기 위해 고객보고에 대한 문제를 많이 피할 필요가 없습니다. 소프트웨어 문제를 해결하는 데 드는 비용이 프로세스의 각 추가 단계와 함께 크기 순서로 올라가는 것으로 추정됩니다. 모든 프로세스(설계, 코드, 테스트, 배포)에 최소 4단계가 있기 때문에 비용이 매우 빠르게 듭니다.