การทดสอบแบบฝังตัวในการทดสอบซอฟต์แวร์คืออะไร?

⚡ สรุปอย่างชาญฉลาด

การทดสอบระบบฝังตัวจะตรวจสอบพฤติกรรมทั้งด้านการทำงานและด้านที่ไม่ใช่การทำงานของซอฟต์แวร์และฮาร์ดแวร์ไปพร้อมกัน เนื่องจากในระบบฝังตัวทั้งสองส่วนมีความเชื่อมโยงกันอย่างแน่นหนา และไม่สามารถตรวจสอบความถูกต้องของส่วนใดส่วนหนึ่งได้อย่างเหมาะสมหากแยกตรวจสอบเพียงส่วนเดียว

  • 🔘 การเชื่อมต่อแบบแน่นหนา: ฮาร์ดแวร์ถูกสร้างควบคู่ไปกับซอฟต์แวร์ ดังนั้นสภาพแวดล้อมการทดสอบจริงจึงมักมาถึงช้ากว่า
  • ☑️ ห้าระดับ: การทดสอบระดับหน่วยซอฟต์แวร์ การบูรณาการ การทดสอบระดับหน่วยระบบ การบูรณาการระบบ และการตรวจสอบความถูกต้องของระบบ แต่ละการทดสอบมุ่งเป้าไปที่ขอบเขตของโมดูลที่แตกต่างกัน
  • หลักประกันความปลอดภัย: ผลิตภัณฑ์ทางการแพทย์ ระบบราง การบิน และยานยนต์ จำเป็นต้องผ่านการทดสอบอย่างเข้มงวดและมีเอกสารประกอบอย่างครบถ้วนก่อนที่จะได้รับการรับรอง
  • 🧪 การตั้งค่ากล่องสีเทา: การทดสอบหน่วยระบบจะสังเกตทรัพยากรภายในและข้อความของระบบปฏิบัติการแบบเรียลไทม์ (RTOS) ดังนั้นวิธีการแบบกล่องเทาจึงเหมาะสมที่สุด
  • 🛠️ อุปสรรคสำคัญ: การเข้าถึงฮาร์ดแวร์ที่จำกัด ส่วนประกอบโอเพนซอร์ส ข้อบกพร่องทั้งด้านซอฟต์แวร์และฮาร์ดแวร์ และข้อบกพร่องที่ไม่สามารถจำลองซ้ำได้

การทดสอบซอฟต์แวร์และฮาร์ดแวร์แบบฝังตัวในระบบฝังตัว

ระบบสมองกลฝังตัวคืออะไร?

ระบบฝังตัว ระบบฝังตัว (Embedded systems) คืออุปกรณ์ที่ควบคุมด้วยระบบอิเล็กทรอนิกส์ โดยที่ซอฟต์แวร์และฮาร์ดแวร์เชื่อมโยงกันอย่างแน่นหนา ระบบฝังตัวอาจประกอบด้วยอุปกรณ์ประมวลผลหลากหลายชนิด เช่น คอมพิวเตอร์ส่วนบุคคลที่ถูกรวมเข้ากับอุปกรณ์อื่น ๆ เพื่อทำงานตามฟังก์ชันเฉพาะของแอปพลิเคชัน โดยปกติแล้วผู้ใช้ปลายทางจะไม่รู้ด้วยซ้ำว่ามีระบบเหล่านี้อยู่

การทดสอบแบบฝัง

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

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

วิธีดำเนินการทดสอบซอฟต์แวร์แบบฝังตัว

โดยทั่วไป คุณทดสอบด้วยเหตุผลสี่ประการ:

  • เพื่อค้นหาจุดบกพร่องในซอฟต์แวร์
  • ช่วยลดความเสี่ยงทั้งต่อผู้ใช้งานและบริษัท
  • ลดต้นทุนการพัฒนาและบำรุงรักษา
  • เพื่อปรับปรุงประสิทธิภาพ

ในการทดสอบระบบฝังตัว จะมีการดำเนินการดังต่อไปนี้:

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

ประเภทการทดสอบซอฟต์แวร์แบบฝัง

โดยพื้นฐานแล้ว มีการทดสอบอยู่ห้าระดับที่สามารถนำมาใช้กับซอฟต์แวร์ฝังตัวได้

การทดสอบหน่วยซอฟต์แวร์

หน่วยโมดูลอาจเป็นฟังก์ชันหรือคลาส การทดสอบหน่วยจะดำเนินการโดยทีมพัฒนา โดยส่วนใหญ่คือนักพัฒนา และมักดำเนินการในรูปแบบการตรวจสอบโดยเพื่อนร่วมงาน กรณีทดสอบจะถูกพัฒนาขึ้นโดยอิงตามข้อกำหนดของโมดูล

การทดสอบการผสานรวม

การทดสอบบูรณาการ สามารถแบ่งออกได้เป็นสองส่วน:

  • การทดสอบการรวมซอฟต์แวร์
  • การทดสอบการบูรณาการซอฟต์แวร์/ฮาร์ดแวร์

ในท้ายที่สุดแล้ว จะมีการทดสอบปฏิสัมพันธ์ระหว่างส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ ซึ่งอาจรวมถึงการตรวจสอบปฏิสัมพันธ์ระหว่างอุปกรณ์ต่อพ่วงในตัวและซอฟต์แวร์ด้วย

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

การทดสอบหน่วยระบบ

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

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

การทดสอบการรวมระบบ

โมดูลที่จะทดสอบเริ่มต้นจากชุดส่วนประกอบภายในโหนดเดียว จุดควบคุมและสังเกต (PCOs) คือส่วนผสมของโปรโตคอลการสื่อสารที่เกี่ยวข้องกับเครือข่ายและเหตุการณ์ RTOS เช่น ข้อความเครือข่าย นอกจากส่วนประกอบแล้ว ตัวทดสอบเสมือนยังสามารถทำหน้าที่เป็นโหนดได้อีกด้วย

การทดสอบการตรวจสอบระบบ

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

ความแตกต่าง: การทดสอบแบบฝังและการทดสอบซอฟต์แวร์

ตารางด้านล่างเปรียบเทียบการทดสอบแบบฝังตัวกับการทดสอบแบบดั้งเดิม การทดสอบซอฟต์แวร์.

การทดสอบซอฟต์แวร์ การทดสอบแบบฝัง
การทดสอบซอฟต์แวร์เกี่ยวข้องกับซอฟต์แวร์เท่านั้น การทดสอบแบบฝังเกี่ยวข้องกับทั้งซอฟต์แวร์และฮาร์ดแวร์
โดยเฉลี่ยแล้ว การทดสอบทั่วโลก 90% เป็นการทดสอบด้วยมือล้วนๆ การทดสอบกล่องดำ. การทดสอบระบบฝังตัว (Embedded testing) ทำกับระบบหรือชิปฝังตัว และอาจเป็นการทดสอบแบบกล่องดำ (black box) หรือแบบอื่นๆ การทดสอบแบบกล่องขาว.
ขอบเขตหลักของการทดสอบคือการตรวจสอบ GUI การทำงาน การตรวจสอบ และการทดสอบฐานข้อมูลบางระดับ ส่วนหลักของการทดสอบคือพฤติกรรมของฮาร์ดแวร์เมื่อได้รับอินพุตจำนวนต่างๆ
การทดสอบซอฟต์แวร์ดำเนินการเป็นหลักบนแอปพลิเคชันที่ทำงานบนไคลเอนต์-เซิร์ฟเวอร์ เว็บและมือถือ โดยทั่วไป การทดสอบแบบฝังตัวจะดำเนินการกับฮาร์ดแวร์
เช่น, Google Mail, Yahoo Mail, Android การใช้งาน ตัวอย่างเช่น เครื่องมือทางการแพทย์ ไมโครคอนโทรลเลอร์ที่ใช้ในคอมพิวเตอร์

ความท้าทาย: การทดสอบซอฟต์แวร์แบบฝังตัว

ความท้าทายบางประการที่อาจพบเจอได้ระหว่างการทดสอบซอฟต์แวร์ฝังตัว ได้แก่:

การพึ่งพาฮาร์ดแวร์

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

ซอฟต์แวร์โอเพ่นซอร์ส

ส่วนประกอบซอฟต์แวร์ฝังตัวส่วนใหญ่เป็นโอเพนซอร์ส ไม่ได้พัฒนาขึ้นภายในองค์กร และไม่มีชุดทดสอบที่สมบูรณ์ให้ใช้งาน จึงมีชุดการทดสอบและสถานการณ์ทดสอบที่หลากหลาย

ซอฟต์แวร์กับข้อบกพร่องของฮาร์ดแวร์

อีกแง่มุมหนึ่งคือเมื่อมีการพัฒนาซอฟต์แวร์สำหรับฮาร์ดแวร์ที่สร้างขึ้นใหม่ ในระหว่างกระบวนการนี้อาจพบข้อบกพร่องของฮาร์ดแวร์ได้ในอัตราสูง ข้อบกพร่องที่พบนั้นไม่จำกัดเฉพาะซอฟต์แวร์เท่านั้น อาจเกี่ยวข้องกับฮาร์ดแวร์ด้วยเช่นกัน

ข้อบกพร่องที่ทำซ้ำได้

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

อัพเดตซอฟต์แวร์อย่างต่อเนื่อง

ระบบฝังตัวต้องการการอัปเดตซอฟต์แวร์เป็นประจำ เช่น การอัปเกรดเคอร์เนล การแก้ไขช่องโหว่ด้านความปลอดภัย ไดรเวอร์อุปกรณ์ต่างๆ เป็นต้น ข้อจำกัดที่เกี่ยวข้องกับการอัปเดตซอฟต์แวร์ทำให้การระบุข้อบกพร่องทำได้ยาก นอกจากนี้ยังเพิ่มความสำคัญของขั้นตอนการสร้างและการติดตั้งใช้งานอีกด้วย

คำถามที่พบบ่อย

โดยทั่วไปแล้ว ชุดเครื่องมือจะรวมการวิเคราะห์แบบคงที่ ชุดเครื่องมือทดสอบหน่วยสำหรับภาษา C และ C++เครื่องวิเคราะห์บัส tracดีบักเกอร์ที่รองรับระบบอิเล็กทรอนิกส์และอุปกรณ์ฮาร์ดแวร์ในวงจร รวมถึง ทดสอบระบบอัตโนมัติ ดังนั้นชุดทดสอบการถดถอยจึงทำงานโดยอัตโนมัติ

ระบบ Hardware-in-the-loop (HIL) จะรันเฟิร์มแวร์จริงบนตัวควบคุมจริง ในขณะที่โปรแกรมจำลองจะส่งสัญญาณที่ระบบโดยรอบจะสร้างขึ้น เพื่อจำลองสภาวะความผิดพลาดที่ไม่ปลอดภัยหากสร้างขึ้นจริง

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

IEC 61508 เป็นมาตรฐานความปลอดภัยเชิงฟังก์ชันทั่วไป โดยมีเวอร์ชันเฉพาะสำหรับแต่ละภาคส่วน ได้แก่ ISO 26262 สำหรับยานยนต์บนท้องถนน, DO-178C สำหรับซอฟต์แวร์บนเครื่องบิน, IEC 62304 สำหรับอุปกรณ์ทางการแพทย์ และ EN 50128 สำหรับระบบควบคุมทางรถไฟ

โมเดล AI คัดกรองข้อมูลบันทึกขนาดใหญ่และ tracปริมาณที่เครื่องผลิตได้ จัดกลุ่มความล้มเหลวที่เกิดขึ้นซ้ำๆ และจัดลำดับความสำคัญของการทดสอบการถดถอยที่ควรดำเนินการก่อนบนฮาร์ดแวร์ที่มีจำกัด การตัดสินใจด้านความปลอดภัยขึ้นอยู่กับวิศวกร

นักบิน GitHub ร่างทดสอบสายไฟและส่วนต่อขยายสำหรับ C หรือ C++ โมดูลต่างๆ และช่วยเร่งกระบวนการจำลองซ้ำๆ พฤติกรรมการลงทะเบียนและข้อจำกัดด้านเวลาที่ระบบไม่เคยพบมาก่อนยังคงต้องได้รับการตรวจสอบ

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

การอ่าน C และ C++มีความคุ้นเคยกับวงจรและเครื่องวิเคราะห์ลอจิก ความเข้าใจในแนวคิดระบบปฏิบัติการแบบเรียลไทม์ (RTOS) และโปรโตคอลบัส รวมถึงการเขียนสคริปต์ งานที่เกี่ยวข้อง เช่น การทดสอบไอโอที วาดขึ้นบนพื้นฐานเดียวกัน

สรุปโพสต์นี้ด้วย: