อ่าน 4 นาที
ซอฟต์แวร์ที่เสื่อมสภาพตามอายุการใช้งาน
ในวิศวกรรมซอฟต์แวร์การเสื่อมสภาพของซอฟต์แวร์หมายถึงแนวโน้มที่ซอฟต์แวร์ จะล้มเหลวหรือทำให้ระบบล้มเหลวหลังจากใช้งานต่อเนื่องเป็นระยะเวลาหนึ่ง...
ซอฟต์แวร์ที่เสื่อมสภาพตามอายุการใช้งาน
ในวิศวกรรมซอฟต์แวร์การเสื่อมสภาพของซอฟต์แวร์หมายถึงแนวโน้มที่ซอฟต์แวร์ จะล้มเหลวหรือทำให้ระบบล้มเหลวหลังจากใช้งานต่อเนื่องเป็นระยะเวลาหนึ่ง หรือเนื่องจากการเปลี่ยนแปลงอย่างต่อเนื่องในระบบที่อยู่รอบซอฟต์แวร์ การเสื่อมสภาพของซอฟต์แวร์มีสาเหตุหลายประการ รวมถึงความไม่สามารถของซอฟต์แวร์เก่าในการปรับตัวให้เข้ากับความต้องการที่เปลี่ยนแปลงไปหรือแพลตฟอร์มเทคโนโลยีที่เปลี่ยนแปลงไป และแนวโน้มของแพตช์ซอฟต์แวร์ที่จะทำให้เกิดข้อผิดพลาดเพิ่มเติม เมื่อซอฟต์แวร์มีอายุมากขึ้นก็จะไม่เหมาะสมกับวัตถุประสงค์และในที่สุดก็จะหยุดทำงานตามที่ควร จะเป็น การรีบูตหรือการติดตั้งซอฟต์แวร์ใหม่สามารถแก้ไขปัญหาได้ในระยะสั้น[ 1 ]วิธีการจัดการข้อผิดพลาดเชิงรุกเพื่อรับมือกับเหตุการณ์การเสื่อมสภาพของซอฟต์แวร์คือการฟื้นฟูซอฟต์แวร์วิธีนี้สามารถจัดเป็นเทคนิคความหลากหลายของสภาพแวดล้อมซึ่งมักจะดำเนินการผ่านตัวแทนการฟื้นฟูซอฟต์แวร์ (SRA)
ปรากฏการณ์นี้ได้รับการระบุครั้งแรกโดยDavid Parnasในบทความที่สำรวจว่าควรทำอย่างไรกับเรื่องนี้: [ 2 ]
โปรแกรมก็เหมือนกับคน ย่อมแก่ลง เราไม่สามารถป้องกันความแก่ชราได้ แต่เราสามารถเข้าใจสาเหตุของมัน ดำเนินการเพื่อจำกัดผลกระทบ ย้อนกลับความเสียหายที่เกิดขึ้นชั่วคราว และเตรียมพร้อมสำหรับวันที่ซอฟต์แวร์ไม่สามารถใช้งานได้อีกต่อไป[ 3 ]
จากมุมมองทั้งทางวิชาการและอุตสาหกรรม ปรากฏการณ์ซอฟต์แวร์ที่เสื่อมสภาพได้เพิ่มขึ้น การวิจัยล่าสุดมุ่งเน้นไปที่การชี้แจงสาเหตุและผลกระทบ[ 4 ]การขยายตัวและการรั่วไหล ของหน่วยความจำ รวมถึงการเสียหายของข้อมูลและการล็อกไฟล์ ที่ไม่ได้รับการปลดปล่อย เป็นสาเหตุเฉพาะของซอฟต์แวร์ที่เสื่อมสภาพ
การจัดการเชิงรุกเพื่อแก้ไขปัญหาซอฟต์แวร์ที่ล้าสมัย
ซอฟต์แวร์ที่เสื่อมสภาพตามอายุการใช้งาน
ความล้มเหลวของซอฟต์แวร์มีแนวโน้มที่จะทำให้เกิดการหยุดทำงานของระบบโดยไม่คาดคิดมากกว่าความล้มเหลวของฮาร์ดแวร์[ 5 ] [ 6 ]ทั้งนี้เนื่องจากซอฟต์แวร์มีอัตราความล้มเหลวเพิ่มขึ้นเรื่อยๆ เมื่อเวลาผ่านไป เนื่องจากการเสียหายของข้อมูล การสะสม ข้อผิดพลาดทางตัวเลขและการใช้ทรัพยากรอย่างไม่จำกัด ในซอฟต์แวร์ที่ใช้กันอย่างแพร่หลายและซอฟต์แวร์เฉพาะทาง การดำเนินการทั่วไปเพื่อแก้ไขปัญหาคือการรีบูต เนื่องจากความเสื่อมสภาพเกิดขึ้นจากความซับซ้อนของซอฟต์แวร์ซึ่งไม่เคยปราศจากข้อผิดพลาด การตรวจสอบอย่างสมบูรณ์ว่าซอฟต์แวร์ชิ้นหนึ่งปราศจากข้อบกพร่องนั้นแทบเป็นไปไม่ได้ แม้แต่ซอฟต์แวร์ที่มีชื่อเสียงอย่างWindowsและmacOSก็ต้องได้รับการอัปเดตอย่างต่อเนื่องเพื่อปรับปรุงประสิทธิภาพและแก้ไขข้อบกพร่อง การพัฒนาซอฟต์แวร์มักจะถูกขับเคลื่อนด้วยความต้องการที่จะทำตามกำหนดเวลาการวางจำหน่ายมากกว่าการรับประกันความน่าเชื่อถือในระยะยาว[ 7 ]การออกแบบซอฟต์แวร์ที่สามารถต้านทานความเสื่อมสภาพได้นั้นเป็นเรื่องยาก ซอฟต์แวร์ทั้งหมดจะไม่เสื่อมสภาพในอัตราเดียวกัน เนื่องจากผู้ใช้บางรายใช้ระบบอย่างเข้มข้นกว่าผู้ใช้รายอื่น[ 8 ]
การฟื้นฟู
เพื่อป้องกันการเกิดข้อผิดพลาดหรือการเสื่อมสภาพสามารถใช้การฟื้นฟูซอฟต์แวร์เชิง รุกได้ เนื่องจากอายุการใช้งานที่หลีกเลี่ยงไม่ได้จะนำไปสู่ความล้มเหลวในระบบซอฟต์แวร์ เทคนิคเชิงรุกนี้ได้รับการระบุว่าเป็นโซลูชันที่คุ้มค่าในระหว่างการวิจัยที่ ห้องปฏิบัติการ AT&T Bellเกี่ยวกับซอฟต์แวร์ที่ทนต่อข้อผิดพลาดในช่วงทศวรรษ 1990 [ 9 ]การฟื้นฟูซอฟต์แวร์ทำงานโดยการกำจัดเงื่อนไขข้อผิดพลาดที่สะสมและปลดปล่อยทรัพยากรระบบ ตัวอย่างเช่น โดยการล้างตารางเคอร์เนลของระบบปฏิบัติการ การใช้การเก็บขยะ การเริ่มต้นโครงสร้างข้อมูลภายในใหม่ และวิธีการฟื้นฟูที่เป็นที่รู้จักมากที่สุดอาจเป็นการรีบูตระบบ
มีเทคนิคที่เรียบง่ายและเทคนิคที่ซับซ้อนในการฟื้นฟูระบบ วิธีที่คนส่วนใหญ่คุ้นเคยคือการรีบูต ฮาร์ดแวร์หรือซอฟต์แวร์ ตัวอย่างทางเทคนิคเพิ่มเติมคือวิธีการฟื้นฟูระบบของซอฟต์แวร์เว็บเซิร์ฟเวอร์ Apache Apacheใช้การฟื้นฟูระบบรูปแบบหนึ่งโดยการฆ่าและสร้างกระบวนการใหม่หลังจากให้บริการคำขอจำนวนหนึ่ง[ 10 ] อีกเทคนิคหนึ่งคือการรีสตาร์ทเครื่องเสมือนที่ทำงานในสภาพแวดล้อมการประมวลผลแบบคลาวด์[ 11 ]
บริษัทโทรคมนาคมข้ามชาติAT&Tได้นำซอฟต์แวร์การปรับปรุงใหม่มาใช้ในระบบแบบเรียลไทม์ที่รวบรวมข้อมูลการเรียกเก็บเงินในสหรัฐอเมริกาสำหรับชุมสายโทรศัพท์ส่วนใหญ่[ 12 ]
ระบบบางระบบที่ใช้ซอฟต์แวร์ฟื้นฟูสภาพ ได้แก่: [ 13 ]
- ระบบประมวลผลธุรกรรม
- เว็บเซิร์ฟเวอร์
- ระบบยานอวกาศ
ในปี 2013 การประชุมวิชาการ นานาชาติ IEEE International Symposium on Software Reliability Engineering (ISSRE) ได้เป็นเจ้าภาพจัดการประชุมเชิงปฏิบัติการนานาชาติประจำปีครั้งที่ 5 ว่าด้วยการเสื่อมสภาพและการฟื้นฟูซอฟต์แวร์ ( woSAR ) โดยมีหัวข้อต่างๆ ดังนี้:
- การออกแบบ การดำเนินการ และการประเมินกลไกการฟื้นฟู
- การสร้างแบบจำลอง การวิเคราะห์ และการนำไปใช้ในการกำหนดตารางเวลาการฟื้นฟู
- การวัดประสิทธิภาพการฟื้นฟูซอฟต์แวร์
การรั่วไหลของหน่วยความจำ
ภาษาโปรแกรมบาง ภาษา เช่นCและC++อนุญาตให้โปรแกรมเมอร์จัดสรรหน่วยความจำฮีปได้นอกจากนี้ โปรแกรมเมอร์อาจต้องปล่อยหน่วยความจำเมื่อไม่จำเป็นต้องใช้หน่วยความจำอีกต่อไป การปล่อยหน่วยความจำเป็นสิ่งจำเป็นเนื่องจากระบบปฏิบัติการ บางระบบ (OS) ไม่ทำการเก็บขยะเมื่อกระบวนการเสร็จสิ้น เมื่อเวลาผ่านไป สิ่งนี้มีแนวโน้มที่จะใช้หน่วยความจำมากขึ้นเรื่อยๆ จนในที่สุดทำให้คอมพิวเตอร์หมดหน่วยความจำ[ 14 ]ในสภาวะที่มีหน่วยความจำเหลือน้อย คอมพิวเตอร์มักจะทำงานช้าลงเนื่องจากการสลับและการทำงานที่ หนักหน่วง เมื่อเกิดเหตุการณ์นี้ แอปพลิเคชันจะทำงานช้าลงหรือแม้แต่ไม่ตอบสนอง หากคอมพิวเตอร์หมดทั้งหน่วยความจำและพื้นที่สลับ ระบบปฏิบัติการอาจรีบูตโดยอัตโนมัติ หรือแย่กว่านั้นคือค้าง[ 15 ]
โปรแกรมที่เขียนด้วยภาษาโปรแกรมที่มีตัวจัดการหน่วยความจำอัตโนมัติ (เช่นJava ) มีโอกาสเกิดการรั่วไหลของหน่วยความจำน้อยกว่า เนื่องจากหน่วยความจำที่ไม่ถูกอ้างอิงอีกต่อไปจะถูกปล่อยให้ว่างโดยตัวจัดการหน่วยความจำอัตโนมัติ อย่างไรก็ตาม นี่ไม่ได้หมายความว่าจะเป็นไปไม่ได้ที่จะเขียนโค้ดที่ทำให้เกิดการรั่วไหลของหน่วยความจำในภาษาเหล่านั้น
บางครั้งส่วนประกอบที่สำคัญของระบบปฏิบัติการเองก็อาจเป็นสาเหตุของการรั่วไหลของหน่วยความจำได้ตัวอย่างเช่น ใน Microsoft Windows การใช้หน่วยความจำของปลั๊กอิน Windows Explorerอาจทำให้หน่วยความจำที่มีอยู่หมดลงจนถึงขั้นทำให้คอมพิวเตอร์ใช้งานไม่ได้เลยอาจจำเป็นต้องรีบูต เครื่อง [ 16 ]
การดำเนินการ
วิธีการสองวิธีในการดำเนินการฟื้นฟูสภาพ ได้แก่:
- การฟื้นฟูตามช่วงเวลา
- การฟื้นฟูสภาพผิวโดยอาศัยการทำนาย
หน่วยความจำบวม
การจัดการหน่วยความจำแบบอัตโนมัติ (Garbage collection) เป็นรูปแบบหนึ่งของ การจัดการ หน่วยความจำแบบอัตโนมัติ โดยระบบจะกู้คืนหน่วยความจำที่ไม่ได้ใช้งานโดยอัตโนมัติ ตัวอย่างเช่น . NET Frameworkจะจัดการการจัดสรรและการปล่อยหน่วยความจำสำหรับซอฟต์แวร์ที่ทำงานอยู่ภายใต้เฟรมเวิร์กนี้ แต่การติดตามวัตถุเหล่านี้โดยอัตโนมัติต้องใช้เวลาและไม่สมบูรณ์แบบ
เว็บเซอร์วิสที่ใช้ .NET จัดการหน่วยความจำเชิงตรรกะหลายประเภท เช่น สแต็ก ฮีปที่ไม่ได้จัดการ และฮีปที่จัดการ (พื้นที่ว่าง) เมื่อหน่วยความจำทางกายภาพเต็ม ระบบปฏิบัติการจะเขียนส่วนที่ใช้งานน้อยลงดิสก์ เพื่อให้สามารถจัดสรรใหม่ให้กับแอปพลิเคชันอื่น ซึ่งเป็นกระบวนการที่เรียกว่าการแบ่งหน้าหรือการสลับ แต่หากจำเป็นต้องใช้หน่วยความจำ จะต้องโหลดใหม่จากดิสก์ หากแอปพลิเคชันหลายตัวมีความต้องการสูง ระบบปฏิบัติการอาจใช้เวลาส่วนใหญ่ในการย้ายข้อมูลระหว่างหน่วยความจำหลักและดิสก์ ซึ่งเป็นกระบวนการที่เรียกว่าการทำงานหนักของดิสก์ [ 17 ] เนื่องจากตัวเก็บขยะต้องตรวจสอบการจัดสรรทั้งหมดเพื่อตัดสินใจว่าส่วนใดกำลังใช้งานอยู่ จึงอาจทำให้การทำงานหนักนี้รุนแรงขึ้น ส่งผลให้การสลับอย่างกว้างขวางอาจทำให้รอบการเก็บขยะยืดออกไปจากมิลลิวินาทีเป็นหลายสิบวินาที ซึ่งส่งผลให้เกิดปัญหาในการใช้งาน
ดูเพิ่มเติม
อ่านเพิ่มเติม
- R. Matias Jr. และ PJ Freitas Filho, "การศึกษาเชิงทดลองเกี่ยวกับการเสื่อมสภาพและการฟื้นฟูซอฟต์แวร์ในเว็บเซิร์ฟเวอร์," รายงานการประชุมวิชาการนานาชาติด้านซอฟต์แวร์และการประยุกต์ใช้งานคอมพิวเตอร์ประจำปีครั้งที่ 30 (COMPSAC'06), เล่มที่ 01, หน้า 189 – 196, 2006
- M. Grottke, R. Matias Jr. และ KS Trivedi, "พื้นฐานของการเสื่อมสภาพของซอฟต์แวร์", การประชุมเชิงปฏิบัติการเกี่ยวกับการเสื่อมสภาพและการฟื้นฟูซอฟต์แวร์ (WoSAR/ISSRE), 2008
- R. Matias Jr, P. Barbetta, K. Trivedi, P. Freitas Filho "การทดสอบการเสื่อมสภาพแบบเร่งที่ใช้กับการทดลองอายุการใช้งานของซอฟต์แวร์" IEEE Transactions on Reliability 59(1): 102–114, 2010
- M. Grottke, L. Li, K. Vaidyanathan และ KS Trivedi, "การวิเคราะห์การเสื่อมสภาพของซอฟต์แวร์ในเว็บเซิร์ฟเวอร์," IEEE Transactions on Reliability, เล่มที่ 55, ฉบับที่ 3, หน้า 411–420, 2006
- M. Grottke, K. Trivedi, "การต่อสู้กับบั๊ก: ลบ, ลองใหม่, ทำซ้ำ และฟื้นฟู," IEEE Computer 40(2): 107–109, 2007
- ดูเอกสารเพิ่มเติมเกี่ยวกับรายงานการประชุมเชิงปฏิบัติการเรื่องการเสื่อมสภาพและการฟื้นฟูซอฟต์แวร์ (WoSAR'08,'10, '11, '12, '13, '14) ได้ที่ IEEE Xplore
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ซอฟต์แวร์ที่เสื่อมสภาพตามอายุการใช้งาน
ในวิศวกรรมซอฟต์แวร์การเสื่อมสภาพของซอฟต์แวร์หมายถึงแนวโน้มที่ซอฟต์แวร์ จะล้มเหลวหรือทำให้ระบบล้มเหลวหลังจากใช้งานต่อเนื่องเป็นระยะเวลาหนึ่ง...
ซอฟต์แวร์ที่เสื่อมสภาพตามอายุการใช้งาน
ความล้มเหลวของซอฟต์แวร์มีแนวโน้มที่จะทำให้เกิดการหยุดทำงานของระบบโดยไม่คาดคิดมากกว่าความล้มเหลวของฮาร์ดแวร์ [ 5 ] [ 6 ] ทั้งนี้เนื่องจากซอฟต์แวร์มีอัตราความล้มเหลวเพิ่มขึ้นเรื่อยๆ เมื่อเวลาผ่านไป เนื่องจากการเสียหายของข้อมูล การสะสม ข้อผิดพลาดทางตัวเลข...
การฟื้นฟู
เพื่อป้องกันการเกิดข้อผิดพลาดหรือการเสื่อมสภาพสามารถใช้ การฟื้นฟูซอฟต์แวร์เชิง รุกได้ เนื่องจากอายุการใช้งานที่หลีกเลี่ยงไม่ได้จะนำไปสู่ความล้มเหลวในระบบซอฟต์แวร์ เทคนิคเชิงรุกนี้ได้รับการระบุว่าเป็นโซลูชันที่คุ้มค่าในระหว่างการวิจัยที่ ห้องปฏิบัติการ AT&T...
การรั่วไหลของหน่วยความจำ
ภาษาโปรแกรม บาง ภาษา เช่น C และ C++ อนุญาตให้โปรแกรมเมอร์จัดสรร หน่วยความจำฮีปได้ นอกจากนี้ โปรแกรมเมอร์อาจต้องปล่อยหน่วยความจำเมื่อไม่จำเป็นต้องใช้หน่วยความจำอีกต่อไป การปล่อยหน่วยความจำเป็นสิ่งจำเป็นเนื่องจาก ระบบปฏิบัติการ บางระบบ (OS) ไม่ทำการ เก็บขยะ...