직장에서 우리는 매우 복잡한 시스템을 가지고 있습니다. 이 시스템을 System_A라고하겠습니다. Google의 품질 관리팀에서 System_A를 테스트하기 위해이 시스템을 System_B라고하는 다른 시스템을 만들었습니다.
System_B가 사용되는 방식은 다음과 같습니다. IN (System_B 자체를 사용하여) 입력을 생성하고 이러한 입력을 System_B를 통해 다시 처리하고 출력 O_B를 생성합니다. 따라서 프로세스는 다음과 같습니다.
System_B(IN) -> O_B
.
그런 다음 System_A에서 자체 출력 O_A를 생성하기 위해 동일한 작업을 수행합니다.
System_A(IN) -> O_A
.
언제든지 O_B는 예상 출력이고 O_A는 관찰 / 실제 출력이라고 가정합니다. O_B가 "골드"소스 (진실)임을 암시합니다. 그러나 우리는 문제의 조합에 부딪쳤다.
- O_A가 틀렸어 O_B가 맞아
- O_A가 맞아 O_B가 맞아
- O_A가 잘못되었습니다. O_B가 잘못되었습니다.
- O_A가 맞아 O_B가 틀렸다
O_B가 항상 옳다고 가정하면 무엇이 옳은지를 결정합니까 (또는 예상되는 것)? 글쎄, O_B는 때로는 인간 검사 및 분석에 잘못 (또는 종종) 잘못되었습니다. 이 프로세스를 사용하여 품질 보증을 통과하면 실제 사용자가 불만을 제기하고 결국 O_B가 잘못되었다는 사실로 되돌아갑니다.
문제는 이것입니다 : 실제 시스템을 테스트하기 위해 "테스트 시스템"을 만드는 것은 나쁜 습관입니까?
- 미끄러운 경사면은 어떻습니까? 그렇다면 "테스트 시스템"을 테스트하기 위해 또 다른 시스템이 필요하다고 주장 할 수 없습니까?
- 개발자는 이제 System_B의 복잡성이 System_A보다 큰 최소 2 개의 코드 기반을 학습해야하므로 비용이 엄청나게 엄청나게 비쌉니다. System_B가 조직에 얼마나 좋은지 나쁜지 어떻게 정량화 할 수 있습니까?
- System_B를 생성 한 최초의 "압착"이유 중 하나는 테스트를 "자동화"하는 것이 었습니다. System_B는 입력을 생성하여 자체적으로 출력을 생성하는 프로세스를 부트 스트랩하기 때문에 완전히 자동화 된 것을 매우 자랑스럽게 생각합니다. 그러나 우리는 양을 정할 수없는 방식으로 더 많은 피해를 입히고 더 많은 복잡성을 도입했다고 생각합니다. QA의 업무가 완전히 자동화됩니까? 병렬 시스템을 만들기에 충분한 이유가 있습니까?
- 우리가 모두 System_B가 잘못되었다는 것을 알고 있지만 내 진짜 관심사는 이것입니다. System_B가 입력을 처리하는 데 능숙하고 출력이 금 소스라면 System_A를 System_B로 바꾸지 않겠습니까? 이를 위해 직장에서 아무도 만족스러운 대응을 할 수 없습니다.
이 문제에 대한 모든 지침을 부탁드립니다.