การตรวจสอบโค้ดอัตโนมัติ
การตรวจสอบโค้ดอัตโนมัติหมายถึง การใช้เครื่องมือและเทคนิคซอฟต์แวร์เพื่อช่วยหรือทำให้กระบวนการตรวจสอบซอร์สโค้ด เป็นไปโดยอัตโนมัติอย่างสมบูรณ์ เพื่อหาข้อบกพร่อง ปัญหาด้านรูปแบบ ช่องโหว่ด้านความปลอดภัย และข้อกังวลด้านการบำรุงรักษา เครื่องมือดังกล่าวถูกใช้กันอย่างแพร่หลายในวิศวกรรมซอฟต์แวร์สมัยใหม่ โดยเฉพาะอย่างยิ่งภายในไปป์ไลน์การรวมอย่างต่อเนื่อง (CI) และการส่งมอบอย่างต่อเนื่อง (CD) [ 1 ]
ภาพรวม
การใช้วิธีการวิเคราะห์เพื่อตรวจสอบและทบทวนซอร์สโค้ดเพื่อตรวจจับข้อบกพร่องหรือปัญหาด้านความปลอดภัยถือเป็นแนวทางการพัฒนามาตรฐานทั้งในซอฟต์แวร์โอเพนซอร์สและซอฟต์แวร์เชิงพาณิชย์[ 2 ]กระบวนการนี้สามารถทำได้ทั้งด้วยตนเองและโดยอัตโนมัติ[ 3 ] [ 4 ]ด้วยระบบอัตโนมัติ เครื่องมือซอฟต์แวร์จะให้ความช่วยเหลือใน กระบวนการ ตรวจสอบและทบทวนโค้ดโปรแกรมหรือเครื่องมือตรวจสอบมักจะแสดงรายการคำเตือน (การละเมิดมาตรฐานการเขียนโปรแกรม) โปรแกรมตรวจสอบยังสามารถให้วิธีการแก้ไขปัญหาที่พบโดยอัตโนมัติหรือโดยความช่วยเหลือจากโปรแกรมเมอร์ได้อีกด้วย นี่เป็นองค์ประกอบหนึ่งสำหรับการเรียนรู้ซอฟต์แวร์ได้อย่างง่ายดาย ซึ่งมีส่วนช่วยใน การปฏิบัติงานด้าน ซอฟต์แวร์อัจฉริยะกระบวนการนี้มักเรียกว่า "linting" เนื่องจากหนึ่งในเครื่องมือแรกสำหรับการวิเคราะห์โค้ดแบบคงที่เรียกว่า Lint
เครื่องมือ วิเคราะห์โค้ดแบบคงที่บางตัวสามารถใช้เพื่อช่วยในการตรวจสอบโค้ดอัตโนมัติได้ แม้ว่าจะไม่สามารถเปรียบเทียบได้ดีกับการตรวจสอบด้วยตนเอง แต่ก็สามารถทำได้เร็วกว่าและมีประสิทธิภาพมากกว่า เครื่องมือเหล่านี้ยังรวบรวมความรู้เชิงลึกเกี่ยวกับกฎและความหมายพื้นฐานที่จำเป็นในการวิเคราะห์ประเภทนี้ ทำให้ไม่จำเป็นต้องให้ผู้ตรวจสอบโค้ดที่เป็นมนุษย์มีความเชี่ยวชาญในระดับเดียวกับผู้ตรวจสอบที่เป็นมนุษย์ผู้เชี่ยวชาญ[ 3 ]สภาพแวดล้อมการพัฒนาแบบบูรณาการหลายแห่งยังให้ฟังก์ชันการตรวจสอบโค้ดอัตโนมัติขั้นพื้นฐาน ตัวอย่างเช่นEclipse [ 5 ]และMicrosoft Visual Studio [ 6 ] IDE รองรับปลั๊กอินต่างๆ ที่ช่วยอำนวยความสะดวกในการตรวจสอบโค้ด
นอกจาก เครื่องมือ วิเคราะห์โค้ดแบบคงที่ แล้ว ยังมีเครื่องมือที่วิเคราะห์และแสดงภาพโครงสร้างซอฟต์แวร์และช่วยให้มนุษย์เข้าใจสิ่งเหล่านี้ได้ดียิ่งขึ้น ระบบดังกล่าวมุ่งเน้นไปที่การวิเคราะห์มากกว่า เนื่องจากโดยทั่วไปแล้วจะไม่มีชุดกฎที่กำหนดไว้ล่วงหน้าเพื่อตรวจสอบซอฟต์แวร์ เครื่องมือบางอย่างเหล่านี้ (เช่นImagix 4D , Resharper , SonarJ , Sotoarc, Structure101 , ACTool [ 7 ] ) อนุญาตให้กำหนดสถาปัตยกรรมเป้าหมายและบังคับใช้ว่าข้อจำกัดของสถาปัตยกรรมเป้าหมายจะไม่ถูกละเมิดโดยการใช้งานซอฟต์แวร์จริง
งานวิจัยล่าสุดยังได้สำรวจการใช้โมเดลภาษาขนาดใหญ่ (LLMs)เป็นส่วนประกอบในเวิร์กโฟลว์การตรวจสอบโค้ดอัตโนมัติ โมเดลโค้ดอเนกประสงค์ที่ฝึกฝนบนโค้ดโอเพนซอร์สได้รับการประเมินในการตั้งค่า "zero-shot"ซึ่งโมเดลจะถูกขอให้เสนอวิธีแก้ไขช่องโหว่ด้านความปลอดภัยโดยตรงจากซอร์สโค้ดและการวินิจฉัยที่เกี่ยวข้อง การศึกษาเหล่านี้รายงานว่า LLMs สามารถซ่อมแซมช่องโหว่ที่ง่ายหรือสังเคราะห์ได้ แต่ประสิทธิภาพของมันจะลดลงเมื่อเจอบั๊ก ที่ซับซ้อนในโลกแห่งความเป็นจริง โดยแพตช์ที่สร้างขึ้นมักจะไม่สมบูรณ์หรือทำงานผิดพลาด ด้วยเหตุนี้ งานปัจจุบันจึงถือว่า LLMs เป็นผู้ช่วยที่มีศักยภาพที่สามารถแนะนำแพตช์ที่เป็นไปได้เพื่อให้ได้รับการตรวจสอบโดยเครื่องมือวิเคราะห์แบบดั้งเดิมและผู้ตรวจสอบที่เป็นมนุษย์ มากกว่าที่จะเป็นระบบตรวจสอบโค้ดแบบสแตนด์อะโลนที่เชื่อถือได้[ 8 ]
แอปพลิเคชัน
การตรวจสอบโค้ดอัตโนมัติถูกนำไปใช้ใน:
- โครงการโอเพนซอร์สขนาดใหญ่ที่โฮสต์บนแพลตฟอร์มต่างๆ เช่น GitHub ซึ่งบริการการรวมระบบอย่างต่อเนื่องจะเรียกใช้การสร้างและชุดทดสอบโดยอัตโนมัติบนชุดการเปลี่ยนแปลง[ 9 ]
- อุตสาหกรรมที่สำคัญด้านความปลอดภัย เช่น อุตสาหกรรมยานยนต์และการบินและอวกาศ ซึ่งใช้การวิเคราะห์แบบคงที่และการตรวจสอบอัตโนมัติที่เกี่ยวข้องเพื่อสนับสนุนการปฏิบัติตามมาตรฐานความปลอดภัยเชิงฟังก์ชันและลดความเสี่ยงของข้อบกพร่องของซอฟต์แวร์ในระบบที่ใช้งานอยู่[ 10 ]
- เวิร์กโฟลว์การพัฒนาที่เน้นความปลอดภัย โดยที่เครื่องมือทดสอบความปลอดภัยของแอปพลิเคชันแบบคงที่ (SAST) และตัววิเคราะห์ที่เกี่ยวข้องจะถูกรวมเข้ากับไปป์ไลน์ CI/CD เพื่อสแกนซอร์สโค้ดหาช่องโหว่โดยอัตโนมัติ[ 11 ] [ 10 ]