Google지도의 '길 찾기'기능을 어떻게 테스트 하시겠습니까?


13

(나는 이것이 좋은 인터뷰 질문 일 것이라고 생각 하지만, 제 경우에는 그보다 실용적입니다.)

우리는 수십 가지 화학 성분 사이에서 매우 길고 정교한 화학 반응 과정을 모델링 하는 크고 복잡한 응용 프로그램 을 보유하고 있습니다. 우리는 응용 프로그램에 대한 합격 시험을 설계하는 단계에 있지만, 테스트 할 수있는 수 많은 경로에 다소 어려움을 겪고 있습니다. 우리의 상황은 '길 찾기'기능에서 경로 계획 알고리즘을 테스트 할 때 Google지도 개발자 팀이 직면했던 것과 매우 흡사합니다. 분명히 그들은 가능한 모든 경로를 테스트 (확인 및 검증) 할 수 없었습니다. 그렇다면 모든 상황에서 응용 프로그램이 작동한다는 확신을 어떻게 얻었습니까?

그리고 그들이 어떻게했는지 알지 못하므로 다음과 같이 물어보십시오. 문자 그대로 불가능할 때 주어진 응용 프로그램이 견고하다는 것을 만족시키기 위해 적절한 코드 범위로 테스트 스위트를 디자인하는 방법은 무엇 입니까? 시스템을 통해 모든 잠재적 인 경로를 조사하기 위해?

내가 찾고있는 것은 다루기 힘든 문제를 작고 다루기 쉬운 조각으로 나누는 데 사용하는 원칙입니다. 그 합은 전체를 만족스럽게 추정 할 수 있습니다. "모든 것을 테스트 할 수는 없지만 테스트 할 수는 있습니다. 이것과 이것으로 충분합니다. " 나는 "아마도 올바른"접근 방식을 찾고 있지 않지만 실제 예산 / 시간 제약 조건을 고려할 때 신중한 접근 방식을 찾고 있습니다.

(저는 Google지도 예제를 가능한 한 구체적인 답변을 요청하기위한 호일로 사용하고 있습니다.)


과거 Google지도는 나를 버스 전용 도로, 일방 통행 도로의 잘못된 길로 안내하고 존재하지 않는 교차로 (예 : 잔디밭 만있는 비행)에서 회전하려고했습니다. 나는 그들이 "잘못된 방향으로보고"기능을 가지고 있다고 생각하지만, 그것은 아마도 당신의 상황에서 작동하지 않을 것입니다. 모든 것을 테스트하는 것에 대한 답은? 그들은하지 않았으며 실제로 필요하지 않았습니다.
John Lyon

이런 종류의 질문과 마찬가지로 Nassim Nicholas Taleb의 책과 기사를 읽는 것이 좋습니다. 여기 수학에 관한 기술 기사 가 있지만 그의 책을 읽는 것이 좋습니다.
jfrankcarr

나는 당신이 충분히 복잡한 것에 대한 모든 경우를 다루는 테스트를 설계 할 수 있다고 생각하지 않습니다. 내부가 어떻게 작동하는지 안다면 모든 명백한 길에 대한 테스트를 할 수는 있지만 항상 아무도 생각하지 못한 것들이 있습니다. 당신은 당신이 할 수있는 한 많은 것을 생각하고 당신이 그리워하는 것이 너무 큰 문제가 아니기를 바랍니다.
Loren Pechtel

2
@ jozzas : 당신이 묘사하는 모든 것은 데이터베이스 오류이며 실제로 Google 방향 알고리즘의 문제는 아닙니다. 오늘 아침 내 satnav가 유지 관리되지 않은 도로로 나를 안내하려고했습니다. 다른 한편으로, 그것이 도로에 대한 차선 폐쇄 권고를했을 때 나는 그것이 실제적인 버그 인 것을 떠나려고했다. (자문은 분명히 다음의 경로가 아닌 현재의 도로 만 봅니다.)
Loren Pechtel

1
"베타"라고 부릅니다. 끝난. 구글 방식으로.
Paystey

답변:


10

저는 10 년 전에 카 내비게이션 분야에서 일했습니다.

단계 A) 참조 패키지를 사용하고 큰 샘플 세트를 선택하고 A / B 테스트를 실행하십시오. 정확성을 찾고, 특이 치를 찾고-참조 세트는 Reroute 1234를 10.34km로 표시했으며 123.5km를 계산했습니다.

단계 B)-소프트웨어 및 참조 소프트웨어 개선-더 많은 샘플을 추가하고 공차를 줄입니다.

C 단계)-전 세계 데이터 세트에서 로컬 지식을 사용한 사내 테스트.

단계 D) UAT ... "사용자 승인 테스트" "이 물건을 판매하고 고객이 가장 많이 불평하는 것을 확인하십시오"와 같이

1990 년대 중반-2000 년경에 매핑 제품을 사용한 적이 있다면, 매번 턴 방향으로 턴을 확인한 사람들이 무엇을 의미하는지 알 것입니다.

예제 질문으로 돌아 가기 당신이 요구하는 것은 소프트웨어가 올바른지 증명하는 방법입니다. 수학적 증거를 원한다면 실제 예산을 초과하는 가격으로 복잡한 소프트웨어 패키지를위한 단순한 소프트웨어의 경우, 아직 연구중인 것입니다. NASA는 매우 안정적인 소프트웨어를 작성하기위한 모델을 가지고 있습니다. DoD 및 항공 산업과 마찬가지로 경제적으로 관리 가능한 가격 내에서 대부분의 경우 지불 할 의사가있는 것보다 훨씬 높습니다. 결국, 얼마를 지불 할 준비가 되었습니까? ....

편집 : 방금 OP를 다시 읽었습니다. 복잡한 소프트웨어의 품질을 테스트하는 빠르고 저렴한 방법 인 것 같습니다. 품질 테스트는 할 수 없습니다. 빌드 된 것이 올바르게 작동한다는 것을 알기 위해서는 강력한 프로세스가 필요합니다. 그것이 올바른지 증명하는 방법에 대해 생각하고 이미 "크고 복잡한 응용 프로그램"을 가지고 있다면 너무 늦습니다.


5

우리는 Google의 경쟁자 중 하나입니다. 우리의 대답? 기본적으로 2입니다.

먼저 완벽한 주소-주소 솔루션을 계산합니다. 예, 그것은 큰 매트릭스입니다. 더 나쁜 것은 하루 종일 모든 요일에 그렇게하는 것입니다. 입력 도메인에는 중간 결과를 캐시하기에 충분한 유사성이있어 문제를 다루기 쉽습니다. 여전히 하드 디스크에서 대량 요금을 받으십시오.

이 오프라인 계산은 다른 알고리즘을 사용하여 수행됩니다. 테스트하려는 알고리즘보다 훨씬 많은 메모리를 사용하지만 선형 적으로는 더 많은 메모리를 사용하지 않습니다 (즉, 수천 개의 경로를 계산할 때 1000 배 미만의 메모리를 사용함).

둘째, 참여 사용자는 실제 결과를 제공합니다. 우리는 수백만 개의 노선을 운행합니다. 실제 경로는 예상대로 빠릅니까?

그리고 그런 식으로 버그를 찾을 수 있습니다. 항상 예를 들어 "로컬 교통 전용 구역"*으로 양쪽에 묶여있는 도로의 뻗기. 테스트에서 찾을 수있는 한 가지 방법이 있습니다. 이는 특정 도로로의 경로를 계획 할 때입니다.

* "로컬 트래픽 전용 영역"은 해당 영역에서 경로를 시작하거나 종료 할 때만 사용할 수 있습니다. 따라서 중앙의 스트레치는 주 도로망에서 분리됩니다. 이것은 구역 지정 또는 맵 결함입니다.


3

Google이 전 세계의 모든 주소 쌍에 대해 별도의 코드를 작성하는 것과는 다릅니다. 더 큰 규모의 휴리스틱을 제외하고 3 레그 이동 알고리즘은 3000 레그와 동일합니다. 더 짧은 경로를 철저히 테스트하고 유도를 사용하여 테스트가 더 긴 경로에도 적용됨을 보여줍니다.

실제 경로의 건강한 샘플을 골라서 인간의 결과와 비교하십시오. 당신은 지불 많은 첫 번째 릴리스 사용자의 피드백을 끝까지 관심을, 그리고 그들에게 그것을 제공하기 쉬운을합니다. 가장 좋은 경로가 실제로 목적지에서 잠시 동안 이동해야하거나 거리에 따라 가장 짧은 경로가 약간 더 긴 더 직접적인 경로와 비교하여 18 번 회전하는 경우와 같이 경계 조건을 테스트합니다. 캘리포니아에서 하와이로 운전하는 등의 부정적인 테스트를 수행하고 영리한 부활절 달걀이 제자리에 있는지 확인하십시오.


나는 당신이 제안한 모든 것이 정확하다고 확신하지만, 여전히 충분히 엄격하지 않다고 생각할 수는 없습니다. "건강한 경로 샘플을 선택하는 것"은 세계적 수준의 개발 팀이 생각하는 것보다 대학 용어 프로젝트에서 할 수있는 것과 비슷합니다. 3-leg vs 3000-leg 노선에 대한 귀하의 의견에 동의하지만, 3-leg 노선의 많은 부분까지 테스트하는 것은 여전히 ​​야심 찬 것처럼 보입니다. 우리에게는 여전히 근본적인 것이 빠져 있다고 생각합니다.
kmote

@kmote : "하지만 도움이 될 수는 없지만 여전히 충분히 엄격하지 않다고 생각합니다."왜 소프트웨어 산업에서 한 세대 동안 일했으며 곧 대체 될 것이라는 신호는 없습니다. 우리는 완벽한 코드를 작성하지 말고 돈을 버는 코드를 작성해야합니다. 그것은 의학, 공학 및 거의 모든 직업에서 사용되는 것이 무엇인지 생각하고 그 산업을 적절하게 수행하는 것처럼 보입니다.
mattnz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.