คุณจะทดสอบคุณลักษณะ "ขอเส้นทาง" ของ Google แผนที่อย่างไร


13

(ฉันคิดว่านี่จะเป็นคำถามสัมภาษณ์ที่ดีแต่ในกรณีของฉันมันเป็นประโยชน์มากกว่านั้น)

เรามีแอปพลิเคชั่นขนาดใหญ่และซับซ้อนที่จำลองกระบวนการปฏิกิริยาเคมีที่ยาวและซับซ้อนระหว่างส่วนประกอบทางเคมีหลายสิบชนิด เราอยู่ในขั้นตอนของการออกแบบการทดสอบการยอมรับสำหรับแอปพลิเคชัน แต่เราค่อนข้างหวาดกลัวด้วยจำนวนเส้นทางที่เป็นไปได้ในการทดสอบ มันเกิดขึ้นกับฉันว่าสถานการณ์ของเราเป็นเหมือนสิ่งที่ทีมงาน Google แผนที่ต้องเผชิญเมื่อถึงเวลาต้องทดสอบอัลกอริทึมการวางแผนเส้นทางในคุณลักษณะ "ขอเส้นทาง" เห็นได้ชัดว่าพวกเขาไม่สามารถทดสอบ (ตรวจสอบและตรวจสอบ) ทุกเส้นทางที่เป็นไปได้ ดังนั้นพวกเขาจึงมั่นใจได้อย่างไรว่าแอปพลิเคชันของพวกเขาจะทำงานได้ในทุกสถานการณ์

และเนื่องจากฉันไม่ได้คาดหวังว่าพวกเขาจะทำมันได้อย่างไรให้ฉันถามคุณ: คุณจะออกแบบชุดทดสอบที่มีรหัสครอบคลุมเพียงพอได้อย่างไร สำรวจทุกเส้นทางที่อาจเกิดขึ้นผ่านระบบ

สิ่งที่ฉันกำลังมองหาคือหลักการที่คุณจะใช้ในการแยกแยะปัญหาที่ยากจะแยกออกเป็นชิ้นเล็ก ๆ ซึ่งหยั่งรู้ได้ผลรวมของการประเมินทั้งหมดเป็นที่น่าพอใจ: "ฉันไม่สามารถทดสอบทุกอย่างได้ แต่ฉันสามารถทดสอบสิ่งนี้ได้ นี่และนี่ - และก็เพียงพอแล้ว " ฉันไม่ได้มองหาวิธีการที่ "ถูกต้อง" แต่เป็นวิธีที่รอบคอบให้ข้อ จำกัด ด้านงบประมาณ / เวลาในโลกแห่งความเป็นจริง

(ฉันใช้ตัวอย่าง Google maps เป็นฟอยล์เพื่อขอคำตอบเฉพาะเจาะจงที่สุดเท่าที่จะทำได้)


Google Maps ในอดีตพยายามพาฉันไปที่ถนนรถบัสเท่านั้นทางที่ผิดไปตามถนนเดินรถทางเดียวและเพื่อเลี้ยวที่สี่แยกที่ไม่มีอยู่ (เช่นสะพานลอยที่มีทางแยกเท่านั้น) ฉันเชื่อว่าพวกเขามีคุณสมบัติ "รายงานเส้นทางที่ไม่ถูกต้อง" แต่นั่นอาจไม่ใช่สิ่งที่จะทำงานในสถานการณ์ของคุณ คำตอบของพวกเขาเกี่ยวกับการทดสอบทุกอย่าง? พวกเขาไม่ได้และพวกเขาไม่ต้องการจริงๆ
John Lyon

เช่นเคยกับคำถามประเภทนี้ฉันขอแนะนำให้คุณอ่านหนังสือและบทความของ Nassim Nicholas Taleb นี่คือบทความทางเทคนิคที่เข้าสู่คณิตศาสตร์ แต่ฉันขอแนะนำให้อ่านหนังสือของเขา
jfrankcarr

ฉันไม่เชื่อว่าคุณสามารถออกแบบการทดสอบที่ครอบคลุมทุกกรณีสำหรับบางสิ่งที่ซับซ้อนเพียงพอ หากคุณรู้ว่าอวัยวะภายในทำงานอย่างไรคุณสามารถทดสอบกับเส้นทางที่ชัดเจนทุกเส้นทาง แต่จะมีบางสิ่งที่ไม่เคยมีใครคิด คุณแค่คิดให้มากที่สุดเท่าที่จะทำได้และหวังว่าสิ่งที่คุณคิดถึงจะไม่เป็นปัญหาใหญ่เกินไป
Loren Pechtel

2
@jozzas: ทุกสิ่งที่คุณอธิบายคือข้อผิดพลาดของฐานข้อมูลไม่ใช่ปัญหากับอัลกอริทึมการกำหนดทิศทางของ Google เมื่อเช้านี้ Satnav ของฉันพยายามที่จะชี้แนะทางให้ฉันไปตามถนนที่ไม่มีคนดูแล ในทางกลับกันเมื่อฉันให้คำแนะนำการปิดถนนเกี่ยวกับถนนที่ฉันกำลังจะออกไปนั่นเป็นข้อผิดพลาดที่เกิดขึ้นจริง (คำแนะนำชัดเจนแค่มองดูถนนที่คุณอยู่ไม่ใช่เส้นทางที่ติดตาม)
Loren Pechtel

1
เรียกมันว่า "เบต้า" เสร็จสิ้น เป็นวิธีของ Google
Paystey

คำตอบ:


10

ฉันทำงานในฟิลด์การนำทางรถยนต์เมื่อทศวรรษที่แล้ว

ขั้นตอน A) ใช้แพ็คเกจอ้างอิงและเลือกชุดตัวอย่างขนาดใหญ่ทำการทดสอบ A / B ไม่มองหาความถูกต้องมองหาค่าผิดพลาด - ชุดอ้างอิงแสดง Reroute 1234 เป็น 10.34km และเราคำนวณ 123.5km

ขั้นตอน B) - ปรับแต่งซอฟต์แวร์และซอฟต์แวร์อ้างอิงของเรา - เพิ่มตัวอย่างเพิ่มเติมและลดความคลาดเคลื่อน

ขั้นตอน C) - การทดสอบภายในโดยใช้ความรู้ท้องถิ่นทั่วทั้งชุดข้อมูลทั่วโลก

ขั้นตอน D) เอือด ... "การทดสอบการยอมรับของผู้ใช้" ใน "ขายสิ่งนี้และดูว่าลูกค้าบ่นอะไรมากที่สุด"

หากคุณเคยใช้ผลิตภัณฑ์การทำแผนที่ประมาณกลางปี ​​1990 - 2000 คุณรู้ว่าสิ่งที่ฉันหมายถึงพวกเราที่ยังคงตรวจสอบการเลี้ยวโดยการเลี้ยวทุกครั้ง

กลับไปที่คำถามตัวอย่าง สิ่งที่คุณถูกถามคือวิธีการพิสูจน์ว่าชิ้นส่วนซอฟต์แวร์ถูกต้อง ถ้าคุณต้องการการพิสูจน์ทางคณิตศาสตร์มันก็แสดงให้เห็นว่ามันสามารถทำได้ - สำหรับซอฟต์แวร์ที่เรียบง่ายในราคาที่เกินงบประมาณจริงสำหรับแพ็คเกจซอฟต์แวร์ที่ซับซ้อนและยังคงเป็นงานวิจัย .... NASA มีแบบจำลองสำหรับการเขียนซอฟต์แวร์ที่เชื่อถือได้สูง ภายในราคาที่จัดการได้ในเชิงเศรษฐกิจเช่นเดียวกับกระทรวงและอุตสาหกรรมการบิน - แม้ว่าจะยังสูงกว่าคนส่วนใหญ่ก็เต็มใจที่จะจ่าย ในที่สุดมันก็ลงมาเท่าใดคุณพร้อมที่จะจ่าย .....

แก้ไข: ฉันเพิ่งอ่าน OP คุณ ดูเหมือนว่าสิ่งที่คุณกำลังมองหาเป็นวิธีที่รวดเร็วและประหยัดในการทดสอบคุณภาพของซอฟต์แวร์ที่ซับซ้อน คุณไม่สามารถทดสอบคุณภาพ คุณต้องมีกระบวนการที่แข็งแกร่งเพื่อให้คุณรู้ว่าสิ่งที่สร้างขึ้นทำงานได้อย่างถูกต้อง หากคุณต้องคิดเกี่ยวกับวิธีการพิสูจน์ว่าถูกต้องและคุณมี "แอปพลิเคชันขนาดใหญ่และซับซ้อน" อยู่แล้วคุณก็สายเกินไป


5

เราเป็นหนึ่งในคู่แข่งของ Google คำตอบของเรา? โดยทั่วไปสอง

อันดับแรกเราทำการคำนวณโซลูชัน address-to-address ที่สมบูรณ์ ใช่นั่นคือเมทริกซ์ตัวใหญ่ ยิ่งแย่ไปกว่านั้นเราทำเช่นนี้ตลอดเวลาทั้งวันทุกวันในสัปดาห์ มีความคล้ายคลึงกันเพียงพอในโดเมนอินพุตเพื่อแคชผลลัพธ์ระดับกลางซึ่งทำให้เกิดปัญหาซึ่งสามารถจัดการได้ง่าย ยังคงพยายามที่จะได้รับอัตราจำนวนมากในฮาร์ดดิสก์

โปรดทราบว่าการคำนวณออฟไลน์นี้ทำได้โดยใช้อัลกอริทึมที่แตกต่างกัน มันใช้หน่วยความจำมากกว่าอัลกอริทึมที่เราต้องการทดสอบ แต่จะไม่เป็นเชิงเส้นมากขึ้น (เช่นใช้หน่วยความจำน้อยกว่า 1,000 เท่าเมื่อทำการคำนวณเส้นทางนับพันครั้ง)

ประการที่สองผู้ใช้ที่เข้าร่วมจะให้ผลลัพธ์ที่แท้จริงแก่เรา เราตรวจสอบเส้นทางนับล้านที่ขับเคลื่อน เส้นทางจริงเร็วเท่าที่คาดการณ์ไว้หรือไม่?

และแน่นอนคุณจะพบข้อบกพร่องอย่างนั้น ทุกครั้ง. เช่นถนนที่ทอดยาวไปทั้งสองฝั่งด้วย "เขตการจราจรในท้องถิ่นเท่านั้น" * มีทางเดียวเท่านั้นคือ) ที่คุณจะพบว่าในการทดสอบและนั่นคือเมื่อคุณวางแผนเส้นทางไปยังถนนนั้น

* อาจใช้ "การจราจรในท้องถิ่นเท่านั้นโซน" เมื่อคุณเริ่มต้นหรือสิ้นสุดเส้นทางในโซนดังกล่าว การขยายตรงกลางจึงถูกตัดการเชื่อมต่อจากเครือข่ายถนนหลัก นี่เป็นทั้งการแบ่งเขตหรือข้อผิดพลาดของแผนที่


3

ไม่ใช่ว่า Google เขียนโค้ดแยกต่างหากสำหรับที่อยู่ทุกคู่ในโลก ด้วยข้อยกเว้นของฮิวริสติกที่เตะเข้ามาในขนาดที่ใหญ่กว่าอัลกอริทึมสำหรับการเดินทาง 3 ขานั้นเหมือนกับ 3000 ขา คุณทดสอบเส้นทางที่สั้นกว่าอย่างละเอียดและใช้การเหนี่ยวนำเพื่อแสดงการทดสอบที่ใช้กับเส้นทางที่ยาวขึ้นเช่นกัน

คุณเลือกตัวอย่างเส้นทางการบินที่มีสุขภาพดีและตรวจสอบกับสิ่งที่มนุษย์เกิดขึ้น คุณให้ความสนใจอย่างมากกับข้อเสนอแนะของผู้ใช้ในรุ่นแรกของคุณและทำให้ง่ายสำหรับพวกเขาที่จะให้มัน คุณทดสอบเงื่อนไขขอบเขตเช่นถ้าเส้นทางที่ดีที่สุดนั้นต้องเดินทางออกจากจุดหมายปลายทางชั่วระยะเวลาหนึ่งหรือหากเส้นทางที่สั้นที่สุดตามระยะทางมี 18 รอบเมื่อเทียบกับเส้นทางตรงที่ยาวกว่าเล็กน้อย คุณทำการทดสอบเชิงลบเช่นถ้าคุณพยายามขับรถจากแคลิฟอร์เนียไปฮาวายและตรวจสอบให้แน่ใจว่ามีไข่อีสเตอร์ที่ฉลาดอยู่


ฉันแน่ใจว่าทุกสิ่งที่คุณแนะนำนั้นถูกต้อง แต่ฉันก็อดไม่ได้ที่จะรู้สึกว่ามันยังไม่เข้มงวดพอ "การเลือกเส้นทางที่ดีต่อสุขภาพ" ฟังดูเหมือนว่าฉันจะทำอะไรกับโครงการวิทยาลัยในระยะยาวมากกว่าที่ทีมพัฒนาระดับโลกจะคิด และในขณะที่ฉันเห็นด้วยกับการสังเกตของคุณเกี่ยวกับเส้นทาง 3 ขา vs 3000- ขาการทดสอบแม้แต่เศษเสี้ยวของเส้นทาง 3 ขาขนาดใหญ่ก็ยังคงมีความทะเยอทะยาน ฉันรู้สึกว่าเรายังขาดพื้นฐานบางอย่างที่นี่
kmote

@kmote: "แต่ฉันอดไม่ได้ที่จะรู้สึกว่ามันยังไม่เข้มงวดพอ" ทำไมไม่มันทำงานให้กับอุตสาหกรรมซอฟต์แวร์มาหลายชั่วอายุคนแล้วและไม่มีวี่แววว่าจะถูกแทนที่ในไม่ช้า เราได้รับเงินเพื่อเขียนโค้ดที่ทำเงินไม่ใช่เพื่อเขียนโค้ดที่สมบูรณ์แบบ ลองคิดดูสิว่ามันเป็นอะไรที่ใช้ในการแพทย์วิศวกรรมและวิชาชีพเกือบทั้งหมดและดูเหมือนว่าอุตสาหกรรมเหล่านั้นจะทำได้ดีพอสมควร
mattnz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.