I. วุฒิภาวะของกระบวนการพัฒนาซอฟต์แวร์
รากฐานของคุณภาพซอฟต์แวร์อยู่ที่มาตรฐานของกระบวนการพัฒนา ปัจจุบันระดับความสามารถของ Automotive SPICE เป็นเกณฑ์มาตรฐานอุตสาหกรรมสำหรับความสมบูรณ์ของกระบวนการซอฟต์แวร์ แต่การบรรลุถึง CL2 หรือ CL3 นั้นเป็นเพียงพื้นฐานเท่านั้น สิ่งที่กำหนดคุณภาพการส่งมอบซอฟต์แวร์อย่างแท้จริงคือการควบคุมความเบี่ยงเบนระหว่างการดำเนินการตามกระบวนการ ตามตัวอย่างการจัดการความต้องการ ค่าเบี่ยงเบนทั่วไปคือหลังจากการเปลี่ยนแปลงข้อกำหนด กรณีทดสอบที่เกี่ยวข้องจะไม่ได้รับการอัปเดตพร้อมกัน ในโปรเจ็กต์หนึ่ง พบฟังก์ชันการอัปเกรด OTA หลังจาก SOP โดยมีปัญหาว่าเมื่อยานพาหนะมีประจุไฟเหลือน้อย งานดาวน์โหลด OTA จะถูกระงับโดยไม่มีกำหนดโดยไม่มีการรายงานข้อผิดพลาด สาเหตุที่แท้จริงคือเอกสารข้อกำหนดได้เพิ่มตรรกะการป้องกันการชาร์จในสถานะต่ำ แต่กรณีทดสอบที่เกี่ยวข้องยังคงครอบคลุมเฉพาะการตรวจสอบฟังก์ชันการดาวน์โหลดเท่านั้น โดยไม่รวมสถานการณ์การหยุดชะงักและการกู้คืน ตั้งแต่การแนะนำจนถึงการค้นพบ ข้อบกพร่องนี้ครอบคลุมสี่เวอร์ชันซ้ำ และค่าใช้จ่ายในการแก้ไขก็สูงกว่าที่พบตั้งแต่เนิ่นๆ เกือบสี่สิบเท่า เมทริกซ์การตรวจสอบย้อนกลับข้อกำหนดจำเป็นต้องฝังอยู่ในไปป์ไลน์การรวมอย่างต่อเนื่อง เมื่อสถานะความต้องการเปลี่ยนเป็นเปลี่ยนแปลง งานการตรวจทานสำหรับกรณีทดสอบที่เกี่ยวข้องควรถูกทริกเกอร์โดยอัตโนมัติ และกรณีทดสอบที่ไม่ผ่านการตรวจทานควรถูกทำเครื่องหมายเป็นรายการบล็อค การตรวจสอบโค้ดยังต้องมีการวัดปริมาณด้วย การวิจัยแสดงให้เห็นว่าโมดูลที่มีความคิดเห็นเกี่ยวกับบทวิจารณ์น้อยกว่าสองรายการต่อโค้ดพันบรรทัดมีความหนาแน่นของข้อบกพร่องหลังการเปิดตัวมากกว่าสามเท่ามากกว่าโมดูลที่มีความคิดเห็นมากกว่าห้ารายการต่อพันบรรทัด อย่างไรก็ตาม จำนวนความคิดเห็นในบทวิจารณ์ไม่สามารถใช้เป็นตัวบ่งชี้ที่แน่นอนได้ เนื่องจากความคิดเห็นที่มีคุณภาพต่ำ{14}}ก็มีอยู่เช่นกัน แนวทางที่มีประสิทธิภาพคือการจำแนกความคิดเห็นในการทบทวนออกเป็นห้าประเภท: ข้อผิดพลาดเชิงตรรกะ เงื่อนไขขอบเขตที่ขาดหายไป ความสามารถในการอ่านโค้ด ความเสี่ยงด้านประสิทธิภาพ และความเสี่ยงด้านความปลอดภัย โดยเน้นไปที่อัตราการตรวจจับของสองประเภทที่ร้ายแรงเป็นพิเศษ: ข้อผิดพลาดทางตรรกะและความเสี่ยงด้านความปลอดภัย
ครั้งที่สอง การบูรณาการอย่างต่อเนื่องและการทดสอบอย่างต่อเนื่อง
การเร่งความเร็วของการทำซ้ำซอฟต์แวร์จำเป็นต้องเลื่อนการทดสอบไปทางซ้าย ซึ่งหมายความว่าจะมีการตรวจสอบคุณภาพในขั้นตอนการคอมมิตโค้ด การทดสอบหน่วยเป็นแนวป้องกันด้านซ้ายสุด แต่ในโครงการจริง ความครอบคลุมของโค้ดการทดสอบหน่วยมักจะได้รับผลกระทบจากค่าที่สูงเกินจริง ในโครงการคอนโทรลเลอร์หนึ่งโครงการ รายงานการทดสอบหน่วยแสดงให้เห็นความครอบคลุมของบรรทัดที่ 92% แต่ยังพบข้อผิดพลาดพื้นฐานจำนวนมากในระหว่างการทดสอบการรวมระบบ การวิเคราะห์ย้อนหลังพบว่าถึงแม้บรรทัดของโค้ดที่มีข้อผิดพลาดเหล่านี้จะถูกดำเนินการ แต่การยืนยันการทดสอบไม่ได้ตรวจสอบผลลัพธ์ที่เกี่ยวข้อง การครอบคลุมบรรทัดบ่งชี้ว่าโค้ดถูกดำเนินการแล้ว ไม่ใช่ว่าเอาต์พุตได้รับการตรวจสอบแล้ว วิธีการปรับปรุงวิธีหนึ่งคือการแนะนำการทดสอบการกลายพันธุ์ ซึ่งสร้างรหัสกลายพันธุ์โดยอัตโนมัติเพื่อประเมินประสิทธิภาพของกรณีทดสอบ หากมนุษย์กลายพันธุ์ไม่ถูกฆ่า แสดงว่ายังมีช่องว่างในการยืนยันการทดสอบ ปัญหาอีกประการหนึ่งในไปป์ไลน์การรวมอย่างต่อเนื่องคือเวลาดำเนินการทดสอบมากเกินไป ในคลังซอฟต์แวร์ของ OEM แห่งหนึ่ง ชุดทดสอบการถดถอยที่สมบูรณ์ต้องใช้เวลามากกว่า 20 ชั่วโมงในการทำงาน ซึ่งหมายความว่านักพัฒนามักต้องรอจนถึงวันถัดไปจึงจะได้รับคำติชมหลังจากส่งโค้ด โซลูชันประกอบด้วยการทดสอบแบบขนาน การจัดลำดับความสำคัญของกรณีทดสอบ และการทดสอบส่วนเพิ่ม การทดสอบแบบขนานจะแยกชุดการทดสอบออกเป็นโหนดการดำเนินการหลายโหนด ช่วยลดเวลาในการดำเนินการลงเหลือประมาณหนึ่ง-ของเดิม การจัดลำดับความสำคัญของกรณีทดสอบขึ้นอยู่กับการกระจายข้อบกพร่องในอดีต โดยจัดลำดับความสำคัญ 20% ของกรณีทดสอบที่มีแนวโน้มที่จะตรวจพบข้อบกพร่องใหม่มากที่สุด ส่วนย่อยนี้สามารถจับข้อบกพร่องใหม่ได้ประมาณ 70% การทดสอบส่วนเพิ่มจะดำเนินการเฉพาะกรณีทดสอบที่เกี่ยวข้องกับการเปลี่ยนแปลงโค้ดปัจจุบัน โดยใช้การวิเคราะห์แบบคงที่เพื่อระบุขอบเขตของผลกระทบจากการเปลี่ยนแปลงเพื่อกรองขอบเขตการทดสอบแบบไดนามิก
ที่สาม การวัดข้อบกพร่องของซอฟต์แวร์และการวิเคราะห์สาเหตุที่แท้จริง
ตัวชี้วัดการวัดสำหรับข้อบกพร่องของซอฟต์แวร์จะต้องได้รับการปฏิบัติที่แตกต่างจากข้อบกพร่องของฮาร์ดแวร์ โดยทั่วไปข้อบกพร่องของฮาร์ดแวร์จะเน้นไปที่ความหนาแน่นของข้อบกพร่อง เช่น จำนวนข้อบกพร่องต่อล้านชิ้นส่วน อย่างไรก็ตาม การกระจายข้อบกพร่องของซอฟต์แวร์เป็นไปตามหลักการ Pareto โดยประมาณ 80% ของข้อบกพร่องร้ายแรงกระจุกตัวอยู่ใน 20% ของโมดูล ดังนั้น ตัวชี้วัดที่มีประสิทธิภาพมากกว่าคือแนวโน้มการบรรจบกันของข้อบกพร่องในระดับโมดูล- ซึ่งหมายถึงการเปลี่ยนแปลงสุทธิในข้อบกพร่องแบบเปิดสำหรับแต่ละโมดูลในการวนซ้ำ หากโมดูลแสดงการเพิ่มขึ้นสุทธิในข้อบกพร่องแบบเปิดสำหรับการวนซ้ำสามครั้งติดต่อกัน แสดงว่าเป็นปัญหาทางสถาปัตยกรรมพื้นฐานที่ต้องมีการตรวจสอบการปรับโครงสร้างใหม่ การวิเคราะห์สาเหตุของข้อบกพร่องเชิงลึกจะกำหนดประสิทธิภาพของการดำเนินการป้องกัน กรอบงานการจำแนกประเภทที่ใช้กันทั่วไปจัดหมวดหมู่สาเหตุของข้อบกพร่องของซอฟต์แวร์ออกเป็นห้าประเภท: การเบี่ยงเบนในการทำความเข้าใจความต้องการ ข้อบกพร่องตรรกะการออกแบบ ข้อผิดพลาดในการใช้งานการเขียนโค้ด ข้อผิดพลาดในการจัดการการกำหนดค่า และความแตกต่างในการพึ่งพาสิ่งแวดล้อม ข้อผิดพลาดในการจัดการการกำหนดค่าเป็นหมวดหมู่เฉพาะสำหรับโครงการซอฟต์แวร์ ตัวอย่างทั่วไป ได้แก่ การใช้ไลบรารีมิดเดิลแวร์เวอร์ชันที่ไม่ถูกต้อง การตั้งค่าตัวเลือกคอมไพเลอร์ที่ไม่สอดคล้องกัน และการแก้ไขที่สำคัญที่ขาดหายไปในระหว่างการรวมสาขา ในโครงการหนึ่ง มีการค้นพบข้อผิดพลาดในการควบคุมไฟเบรกในระหว่างการทดสอบรอบสุดท้ายก่อนส่งมอบ ข้อผิดพลาดถูกตรวจสอบย้อนกลับไปที่การรวมสาขาเมื่อสามเดือนก่อน ซึ่งนักพัฒนาได้เลือกที่จะละทิ้งการเปลี่ยนแปลงโมดูลควบคุมไฟเบรกทั้งหมดอย่างไม่ถูกต้อง เมื่อรวมโค้ดคุณลักษณะจากสาขาหลัก กรณีนี้ชี้ให้เห็นว่าการเปรียบเทียบความแตกต่างหลังจากการรวมสาขาควรกลายเป็นประตูบังคับ โดยมีบุคลากรที่ได้รับมอบหมายให้รับผิดชอบในการตรวจสอบคำขอรวม
IV. การเรียกคืนซอฟต์แวร์และการจัดการ OTA
ด้วยการนำเทคโนโลยี OTA มาใช้อย่างแพร่หลาย วิธีการแก้ไขข้อบกพร่องของซอฟต์แวร์จึงอยู่ระหว่างการเปลี่ยนแปลงขั้นพื้นฐาน การเรียกคืนซอฟต์แวร์แบบดั้งเดิมกำหนดให้ยานพาหนะต้องไปที่ศูนย์บริการเพื่อทำการแฟลช ซึ่งมีค่าใช้จ่ายสูง ใช้เวลานาน- และประสบปัญหาจากการปฏิบัติตามข้อกำหนดของผู้ใช้ต่ำ การเรียกคืน OTA สามารถทำได้โดยตรงผ่านการพุชระยะไกล แต่เป็นไปตามข้อกำหนดด้านกฎระเบียบ





