Google Haritalar "Yol Tarifi Al" özelliğini nasıl test edersiniz?


13

(Bunun iyi bir röportaj sorusu olacağını düşünüyorum , ancak benim durumumda bundan daha pragmatik.)

Düzinelerce kimyasal bileşen arasında son derece uzun ve sofistike bir kimyasal reaksiyon sürecini modelleyen geniş ve karmaşık bir uygulamaya sahibiz . Uygulama için Kabul Testleri tasarlama aşamasındayız, ancak test edilmesi mümkün olmayan yolların sayısı bizi biraz korkutuyor. Durumumun, Google Haritalar geliştirici ekibinin, "Yol Tarifi Al" özelliklerinde rota planlama algoritmasını test etme zamanı geldiğinde karşılaştığı şey gibi olduğu aklıma geldi. Açıkçası, olası her yolu test edemediler (doğrulayamadılar ve doğrulayamadılar). Peki, uygulamalarının her durumda işe yarayacağına nasıl güven duydular?

Ve nasıl yaptıklarını öğrenmeyi beklemediğim için size sormama izin verin: Belirli bir uygulamanın sağlam olduğunu - tam anlamıyla imkansız olduğunda - kendinizi tatmin etmek için yeterli kod kapsamına sahip bir test paketi tasarlamaya nasıl devam edersiniz? sistemdeki her potansiyel yolu araştırmak için?

Aradığım şey, toplamı bütünü tatmin edici bir tahmin sağlayan daha küçük, izlenebilir parçalara ayırmak için kullanacağınız ilkelerdir: "Her şeyi test edemiyorum, ama bunu test edebilirim , bu ve bu - ve bu yeterli. " Ben gerçek anlamda bütçe / zaman kısıtlamaları göz önüne alındığında , "makul olarak doğru" bir yaklaşım değil, ihtiyatlı bir yaklaşım arıyorum .

(Mümkün olduğunca spesifik yanıtlar almak için Google Haritalar örneğini bir folyo gibi kullanıyorum.)


Geçmişte Google Haritalar, beni yalnızca otobüs sokaklarına, tek yönlü sokaklardan yanlış yola yönlendirmeye ve var olmayan kavşaklara dönüş yapmaya (örneğin, yalnızca offramplı bir köprü) denemeye çalıştı. Ben bir "yanlış yönleri rapor" özelliği var inanıyorum, ama bu muhtemelen sizin durumunuzda işe yarayacak bir şey değil. Her şeyi test etmeleriyle ilgili biraz cevap? Yapmadılar ve gerçekten ihtiyaç duymadılar.
John Lyon

Her zaman olduğu gibi bu soruda da Nassim Nicholas Taleb'in kitaplarını ve makalelerini okumanızı tavsiye ederim. İşte matematiğe giren teknik bir makale ama kitaplarını okumanızı tavsiye ederim.
jfrankcarr

Yeterince karmaşık bir şey için tüm vakaları kapsayan bir test tasarlayabileceğinize inanmıyorum. İç kısımların nasıl çalıştığını biliyorsanız, her bariz yol için testler yapabilirsiniz, ancak hiç kimsenin aklına gelmeyecek şeyler olacaktır. Sadece olabildiğince çok düşünün ve özlediklerinizin çok büyük bir sorun olmadığını umuyorsunuz.
Loren Pechtel

2
@jozzas: Açıkladığınız her şey, aslında Google'ın yön algoritmasıyla ilgili bir sorun değil, veritabanı hatalarıdır. Eşdeğer bir sabah bu sabah satnav beni bakımsız bir yolda yönlendirmeye çalıştı. Öte yandan, bana bir yol hakkında bir şerit kapatma danışmanlık verdiğinde bu gerçek bir hata bırakmak üzereydim. (Danışma,
izlediğiniz

1
Buna "Beta" deyin. Bitti. Bu Google yoludur.
Paystey

Yanıtlar:


10

On yıl önce araba navigasyon alanında çalıştım.

Adım A) Bir referans paketi kullanın ve büyük bir örnek seti seçin, A / B testlerini çalıştırın. Kesinlik aramıyor, aykırı değerler arıyor - Referans seti Reroute 1234'ü 10.34km olarak gösterdi ve 123.5km hesapladık.

Adım B) - Yazılımımızı ve referans yazılımımızı hassaslaştırın - Daha fazla örnek ekleyin ve toleransları azaltın.

Adım C) - Global veri kümelerinde yerel bilgileri kullanarak kurum içi testler.

Adım D) UAT ... "Kullanıcı Kabul Testi" bölümünde olduğu gibi "Bu ürünleri satıp müşterilerin en çok şikayet ettiklerini görün"

1990'lı yılların ortalarından 2000'li yıllara kadar haritalama ürünleri kullandıysanız, ne demek istediğimi biliyorsunuz, her seferinde dönüş yönünü hala kontrol eden bizleriz.

Örnek soruya geri dönelim. Size sorulan şey, bir yazılımın doğru olduğunu nasıl kanıtlayacağınızdır. Matematiksel kanıt istiyorsanız, yapılabileceği gösterilmiştir - basit yazılımlar için herhangi bir gerçekçi bütçeyi aşan bir fiyata, karmaşık bir yazılım paketi için, bu hala araştırmadır .... NASA'nın son derece güvenilir yazılım yazma modelleri vardır DoD ve havacılık endüstrisi gibi ekonomik olarak yönetilebilir fiyatlar dahilinde - yine de çoğudan daha yüksek ödeme yapmaya razı. Sonunda, ne kadar ödemeye hazır olduğunuza iniyor .....

Düzenleme: Ben sadece OP yeniden okuyorum. Aradığınız şey karmaşık bir yazılımın kalitesini test etmenin hızlı ve ucuz bir yoludur. Kaliteyi test edemezsiniz. Sağlanan bir sürecin olması gerekir, böylece yerleşik olanın doğru çalıştığını bilirsiniz. Doğru olduğunu nasıl kanıtlayacağınızı düşünmeniz gerekiyorsa ve zaten "büyük ve karmaşık bir uygulamaya" sahipseniz, çok geç kaldınız.


5

Google'ın rakiplerinden biriyiz. Cevabımız? Temelde iki.

İlk olarak, adres-adres çözümünün tamamını hesaplıyoruz. Evet, bu büyük bir matris. Daha da kötüsü, bunu günün her saati, haftanın her günü yapıyoruz. Girdi etki alanında ara sonuçları önbelleğe almak için yeterli benzerlik vardır, bu da sorunu izlenebilir hale getirir. Yine de sabit disklerde toplu bir oran elde etmeye çalışın.

Bu çevrimdışı hesaplamanın farklı bir algoritma kullanılarak yapıldığını unutmayın. Test etmek istediğimiz algoritmadan çok daha fazla bellek kullanır, ancak doğrusal olarak daha fazla bellek kullanmaz (yani bin rotayı hesaplarken 1000 kattan az bellek kullanır).

İkinci olarak, katılan kullanıcılar bize gerçek dünya sonuçları sağlar. Milyonlarca güzergahı onaylıyoruz. Gerçek rotalar tahmin edildiği kadar hızlı mı?

Ve elbette, hataları bu şekilde bulursunuz. Her zaman. Örneğin, "yalnızca yerel trafik bölgesi" * ile her iki tarafta sınırlandırılmış bir yol. Tek bir yol var;) bunu testte bulacağınız ve o zaman o yola giden bir rota planladığınız zaman.

* "Yalnızca yerel trafik bölgesi" yalnızca böyle bir bölgedeki bir rotayı başlatırken veya sonlandırırken kullanılabilir. Bu nedenle ortadaki streç ana yol ağından ayrılır. Bu bir imar veya harita hatasıdır.


3

Google, dünyadaki her adres çifti için ayrı kod yazıyor gibi değil. Daha büyük bir ölçekte ortaya çıkan sezgisel tarama hariç, 3 ayaklı bir yolculuk için algoritma 3000 ayaklı ile aynıdır. Kısa yolları iyice test edersiniz ve testin daha uzun yollara da uygulandığını göstermek için indüksiyonu kullanırsınız.

Gerçek dünya rotalarından sağlıklı bir örnek alırsınız ve bir insanın neyle karşılaştığını kontrol edersiniz. Sen öde çok ilk sürümlerde kullanıcı geribildirim sonuna kadar dikkat ve onlara bunu sağlamak için kolay yapmak. Sınır koşullarını test edersiniz, örneğin en iyi rota aslında bir süre hedeften uzaklaşmayı gerektiriyorsa veya mesafeye göre en kısa rotanın biraz daha uzun olan daha doğrudan bir rotaya kıyasla 18 dönüşü varsa. California'dan Hawaii'ye sürmeye çalışıyorsanız ve akıllı paskalya yumurtalarının yerinde olduğundan emin olun.


Eminim önerdiğiniz her şey doğrudur, ancak yine de yeterince titiz olmadığını hissetmiyorum. "Sağlıklı bir rota örneği seçmek", üniversite dönemindeki bir proje için yapabileceğim şeylere, dünya standartlarında bir geliştirme ekibinin geliştireceğinden daha çok benziyor. Ve 3 ayaklı - 3000 ayaklı rotalar hakkındaki gözleminize katılıyorum, ancak 3 ayaklı rotaların büyük bir kısmını bile test etmek oldukça iddialı görünüyor. Burada hala temel bir şeyi kaçırdığımızı hissediyorum.
kmote

@kmote: "ama yine de yeterince titiz olmadığını hissetmiyorum ama hissediyorum" Neden olmasın, bir nesil için yazılım endüstrisi için çalıştı ve yakın zamanda yerini almak üzere olduğuna dair gerçek bir işaret yok. Mükemmel kod yazmamak için para kazandıran kod yazmak için para alıyoruz. Tıp, Mühendislik ve neredeyse tüm mesleklerde ne kullandığını düşünmeye gel ve bu endüstrileri yeterince iyi yapıyor gibi görünüyor.
mattnz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.