การถดถอยของซอฟต์แวร์

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

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

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

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

การป้องกันและการตรวจจับ

มีการเสนอเทคนิคที่พยายามป้องกันไม่ให้เกิดการถดถอยในซอฟต์แวร์ในขั้นตอนต่างๆ ของการพัฒนา ดังที่อธิบายไว้ด้านล่าง

ก่อนวางจำหน่าย

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

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

ก่อนดำเนินการ

เนื่องจาก การ ดีบักและการแปลสาเหตุหลักของการถดถอยของซอฟต์แวร์อาจมีราคาแพง[10] [11]ยังมีวิธีการบางอย่างที่พยายามป้องกันไม่ให้เกิดการถดถอยในที่เก็บโค้ดตั้งแต่แรก ตัวอย่างเช่นGit Hooks ช่วยให้นักพัฒนาสามารถเรียกใช้สคริปต์ทดสอบได้ก่อนที่จะส่งการเปลี่ยนแปลงโค้ดหรือส่งไปยังที่เก็บโค้ด [12]นอกจากนี้การวิเคราะห์ผลกระทบจากการเปลี่ยนแปลงยังถูกนำไปใช้กับซอฟต์แวร์เพื่อคาดการณ์ผลกระทบของการเปลี่ยนแปลงโค้ดบนส่วนประกอบต่างๆ ของโปรแกรม และเพื่อเสริมการเลือกกรณีทดสอบและการจัดลำดับความสำคัญ [13] [14] ซอฟต์แวร์ Lintersมักจะถูกเพิ่มเข้ามาเพื่อคอมมิต hook เพื่อให้แน่ใจว่ารูปแบบการเข้ารหัสที่สอดคล้องกัน ช่วยลดปัญหาด้านโวหารที่สามารถทำให้ซอฟต์แวร์มีแนวโน้มที่จะถดถอย [15]

การโลคัลไลเซชัน

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

การถดถอยของฟังก์ชัน

เทคนิคทั่วไปที่ใช้ในการแปลการถดถอยเชิงฟังก์ชันคือbisectionซึ่งรับทั้งคอมมิตแบบบั๊กกี้และคอมมิตที่ทำงานก่อนหน้านี้เป็นอินพุต และพยายามค้นหาสาเหตุที่แท้จริงด้วยการค้นหาแบบไบนารีบนคอมมิตระหว่างนั้น [16] ระบบ ควบคุมเวอร์ชันเช่น Git และMercurialมีวิธีในตัวเพื่อดำเนินการ bisection บนคู่ของคอมมิตที่กำหนด [17] [18]

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

การถดถอยของประสิทธิภาพ

การ ทำโปรไฟล์จะวัดประสิทธิภาพและการใช้ทรัพยากรของส่วนประกอบต่างๆ ของโปรแกรม และใช้เพื่อสร้างข้อมูลที่เป็นประโยชน์ในการดีบักปัญหาด้านประสิทธิภาพ ในบริบทของการถดถอยประสิทธิภาพของซอฟต์แวร์ นักพัฒนามักจะเปรียบเทียบแผนผังการโทร (หรือที่เรียกว่า "ไทม์ไลน์") ที่สร้างโดยผู้สร้างโปรไฟล์สำหรับทั้งเวอร์ชันบั๊กกี้และเวอร์ชันที่ใช้งานได้ก่อนหน้านี้ และมีกลไกเพื่อทำให้การเปรียบเทียบนี้ง่ายขึ้น [22] โดยทั่วไปแล้ว เครื่องมือในการพัฒนาเว็บจะช่วยให้นักพัฒนาสามารถบันทึกโปรไฟล์ประสิทธิภาพเหล่านี้ได้ [23] [24]

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

วิธีการเพิ่มเติมรวมถึงการเขียนการทดสอบหน่วยที่คำนึงถึงประสิทธิภาพเพื่อช่วยในการแปลเป็นภาษาท้องถิ่น[27]และการจัดลำดับระบบย่อยตามการเบี่ยงเบนของตัวนับประสิทธิภาพ [28]การแบ่งสองส่วนยังสามารถนำไปใช้ใหม่สำหรับการถดถอยของประสิทธิภาพโดยพิจารณาการกระทำที่ดำเนินการด้านล่าง (หรือสูงกว่า) ค่าพื้นฐานบางอย่างเป็นข้อผิดพลาด และรับด้านซ้ายหรือด้านขวาของการกระทำตามผลของการเปรียบเทียบนี้

ดูเพิ่มเติมที่

อ้างอิง

  1. ^ วงศ์ ว. วชิรเอริค; ฮอร์แกน เจอาร์; ลอนดอน ซาอูล; อกราวัล, ฮิระ (1997). "การศึกษาการทดสอบการถดถอยที่มีประสิทธิภาพในทางปฏิบัติ". การดำเนินการของการประชุมวิชาการระดับนานาชาติครั้งที่แปดเกี่ยวกับวิศวกรรมความน่าเชื่อถือของซอฟต์แวร์ (ISSRE 97 ) อีอีอี ดอย : 10.1109/ISSRE.1997.630875 . ISBN 0-8186-8120-9. S2CID  2911517 .
  2. ^ เยฮูได อามิรัม; Tyszberowicz, ชมูเอล; เนียร์, ดอร์ (2007). การหาจุด บกพร่องของ การถดถอย การประชุมการตรวจสอบไฮฟา ดอย : 10.1007/978-3-540-77966-7_18 . สืบค้นเมื่อ10 มีนาคม 2561 .
  3. ^ ซาง เหวยยี่; ฮัสซัน, อาเหม็ดอี.; นัสเซอร์, โมฮาเหม็ด; ฟลอร่า Parminder (11 ธันวาคม 2014). "การตรวจจับการถดถอยของประสิทธิภาพโดยอัตโนมัติโดยใช้แบบจำลองการถดถอยบนตัวนับประสิทธิภาพแบบคลัสเตอร์" (PDF ) {{cite journal}}: Cite journal requires |journal= (help)
  4. อองรี, ฌ็อง-ฌาค ปิแอร์ (2008) เครือข่ายการทดสอบ: แนวทางหนึ่งเดียวในการทดสอบกิจกรรมในโครงการซอฟต์แวร์ขนาดใหญ่ สื่อวิทยาศาสตร์และธุรกิจของสปริงเกอร์ หน้า 74. ISBN 978-3540785040.
  5. ^ ริชาร์ดสัน จาเร็ด; กวัลท์นีย์, วิลเลียม จูเนียร์ (2006). จัดส่ง! คู่มือปฏิบัติสำหรับโครงการซอฟต์แวร์ที่ประสบความสำเร็จ Raleigh, NC: ชั้นวางหนังสือเชิงปฏิบัติ น.  32, 193 . ISBN 978-0-9745140-4-8.
  6. ^ เหลียง Hareton KN; ไวท์, ลี (พฤศจิกายน 1990). "การศึกษาการทดสอบการรวมและการถดถอยของซอฟต์แวร์ในระดับบูรณาการ" การดำเนินการของการประชุมระหว่างประเทศว่าด้วยการบำรุงรักษาซอฟต์แวร์ ซานดิเอโก แคลิฟอร์เนีย สหรัฐอเมริกา: IEEE ดอย : 10.1109/ICSM.1990.131377 . ISBN 0-8186-2091-9. S2CID  62583582 .
  7. ^ รอเทอร์เมล เกร็กก์; แฮร์โรลด์, แมรี่ จีน; เดเธีย, เจเนย์ (2000). "การเลือกการทดสอบการถดถอยสำหรับซอฟต์แวร์ C++ " การทดสอบซอฟต์แวร์ การตรวจสอบ และความน่าเชื่อถือ 10 (2): 77–109. ดอย : 10.1002/1099-1689(200006)10:2<77::AID-STVR197>3.0.CO;2-E . ISSN 1099-1689 . 
  8. วียูเคอร์ อีเจ; Vokolos, FI (ธันวาคม 2000) "ประสบการณ์กับการทดสอบประสิทธิภาพของระบบซอฟต์แวร์: ปัญหา แนวทาง และกรณีศึกษา" . ธุรกรรม IEEE เกี่ยวกับวิศวกรรมซอฟต์แวร์ 26 (12): 1147–1156. ดอย : 10.1109/32.888628 . ISSN 1939-3520 . 
  9. ^ เดลี่ เดวิด; บราวน์, วิลเลียม; อินโก, เฮนริก; โอเลียรี่, จิม; แบรดฟอร์ด, เดวิด (20 เมษายน 2020). "การใช้การตรวจจับจุดเปลี่ยนเพื่อระบุการถดถอยของประสิทธิภาพของซอฟต์แวร์ในระบบการรวมอย่างต่อเนื่อง" การดำเนินการของการประชุมนานาชาติด้านวิศวกรรมประสิทธิภาพ . สมาคมเครื่องจักรคอมพิวเตอร์. หน้า 67–75. ดอย : 10.1145/3358960.3375791 . ISBN 978-1-4503-6991-6. S2CID  211677818 .
  10. นิสเตอร์ เอเดรียน; เจียง, เทียน; Tan, Lin (พฤษภาคม 2013). "การค้นพบ รายงาน และแก้ไขข้อบกพร่องด้านประสิทธิภาพ" การดำเนินการประชุมเชิงปฏิบัติการเกี่ยวกับที่เก็บซอฟต์แวร์การขุด (MSR ) น. 237–246. ดอย : 10.1109/MSR.2013.6624035 . ISBN 978-1-4673-2936-1. S2CID  12773088 .
  11. ^ อัครวาล, ปรายา; Agrawal, อรุณปรากาช (17 กันยายน 2014). "เทคนิคการระบุตำแหน่งผิดพลาดสำหรับระบบซอฟต์แวร์: การทบทวนวรรณกรรม" . หมายเหตุวิศวกรรม ซอฟต์แวร์ACM SIGSOFT 39 (5): 1–8. ดอย : 10.1145/2659118.2659125 . ISSN 0163-5948 . S2CID 12101263 .  
  12. ^ "Git - Git Hooks" . git-scm.com _ สืบค้นเมื่อ7 พฤศจิกายนพ.ศ. 2564 .
  13. ^ ออร์โซ อเลสซานโดร; อภิวัฒนพงศ์, ทวีทรัพย์; แฮร์โรลด์, แมรี่ จีน (1 กันยายน พ.ศ. 2546) "การใช้ประโยชน์จากข้อมูลภาคสนามสำหรับการวิเคราะห์ผลกระทบและการทดสอบการถดถอย " หมายเหตุวิศวกรรม ซอฟต์แวร์ACM SIGSOFT 28 (5): 128–137. ดอย : 10.1145/949952.940089 . ISSN 0163-5948 . 
  14. ^ ฉู่ เซียว; อัจฉริยา, มิถุน; โรบินสัน, ไบรอัน (กันยายน 2555). "การเลือกการกำหนดค่าโดยใช้การวิเคราะห์ผลกระทบการเปลี่ยนแปลงโค้ดสำหรับการทดสอบการถดถอย" การดำเนินการของการประชุมระหว่างประเทศว่าด้วยการบำรุงรักษาซอฟต์แวร์ หน้า 129–138 ดอย : 10.1109/ICSM.2012.6405263 . ISBN 978-1-4673-2312-3. S2CID  14928793 .
  15. ↑ Tómasdóttir , คริสติน ฟโยลา; อนิเช่, เมาริซิโอ; van Deursen, Arie (ตุลาคม 2017). "ทำไมและวิธีที่นักพัฒนา JavaScript ใช้ Linters" การดำเนินการของการประชุมนานาชาติว่าด้วยวิศวกรรมซอฟต์แวร์อัตโนมัติ หน้า 578–589. ดอย : 10.1109/ASE.2017.8115668 . ISBN 978-1-5386-2684-9.
  16. กรอส, โธมัส (10 กันยายน พ.ศ. 2540) "การดีบักสองส่วน". การดำเนินการของการประชุมเชิงปฏิบัติการระหว่างประเทศเกี่ยวกับการดีบักอัตโนมัติ สำนักพิมพ์อิเล็กทรอนิกส์มหาวิทยาลัยLinkøping. น. 185–191.
  17. ^ "เอกสาร Git - git-bisect " git-scm.com _ สืบค้นเมื่อ7 พฤศจิกายนพ.ศ. 2564 .
  18. ^ "hg - แบ่งครึ่ง" . www.selenic.com . เมอร์คิวรี_ สืบค้นเมื่อ7 พฤศจิกายนพ.ศ. 2564 .
  19. ^ "การอ่าน 11: การดีบัก" . เว็บ . mit.edu เอ็มไอที
  20. ^ บูเซ เบ็น; เหว่ย โธมัส; จาง, จือเฉียง; มิลิเซวิช, อเล็กซานดาร์; Gligoric, Milos (พฤษภาคม 2019). "VeDebug: เครื่องมือดีบักการถดถอยสำหรับ Java" การดำเนินการของการประชุมนานาชาติด้านวิศวกรรมซอฟต์แวร์: Companion Proceedings (ICSE-Companion ) น. 15–18. ดอย : 10.1109/ICSE-Companion.2019.00027 . ISBN 978-1-7281-1764-5. S2CID  174799830 .
  21. ^ ตาฮา, A.-B.; Thebaut, เอสเอ็ม; หลิว, S.-S. (กันยายน 1989). "วิธีการโลคัลไลเซชันข้อบกพร่องของซอฟต์แวร์และการตรวจสอบซ้ำตามการวิเคราะห์การไหลของข้อมูลที่เพิ่มขึ้น" การดำเนินการของการประชุมซอฟต์แวร์และแอปพลิเคชันคอมพิวเตอร์นานาชาติประจำปี อีอีอี หน้า 527–534. ดอย : 10.1109/CMPSAC.1989.65142 . ISBN 0-8186-1964-3. S2CID  41978046 .
  22. โอคาริซา, โฟรลิน เอส.; Zhao, โปยาง (2021). "การระบุตำแหน่งการถดถอยของประสิทธิภาพซอฟต์แวร์ในเว็บแอปพลิเคชันโดยการเปรียบเทียบไทม์ไลน์การดำเนินการ " การทดสอบซอฟต์แวร์ การตรวจสอบ และความน่าเชื่อถือ 31 (5): e1750. ดอย : 10.1002/stvr.1750 . ISSN 1099-1689 . S2CID 225416138 .  
  23. ^ "วิเคราะห์ประสิทธิภาพรันไทม์ " นักพัฒนา Chrome กูเกิล. สืบค้นเมื่อ7 พฤศจิกายนพ.ศ. 2564 .
  24. ^ "ข้อมูลอ้างอิงการวิเคราะห์ประสิทธิภาพ - การพัฒนา Microsoft Edge " docs.microsoft.com . ไมโครซอฟต์. สืบค้นเมื่อ7 พฤศจิกายนพ.ศ. 2564 .
  25. ^ เหยา กุนดี; บี. เดอ ปาดัว, กิลแอร์เม; ชาง เหวยยี่; สปอร์, สตีฟ; โทมา, อังเดร; Sajedi, Sarah (30 มีนาคม 2018). "Log4Perf: การแนะนำตำแหน่งการบันทึกสำหรับการตรวจสอบประสิทธิภาพของระบบบนเว็บ" การดำเนินการของการประชุมนานาชาติด้านวิศวกรรมประสิทธิภาพ . สมาคมเครื่องจักรคอมพิวเตอร์. น. 127–138. ดอย : 10.1145/3184407.3184416 . ISBN 978-1-4503-5095-2. S2CID  4557038 .
  26. ^ หลี่ เฮง; ชาง เหวยยี่; อดัมส์ แบรม; Sayagh, โมฮัมเหม็ด; Hassan, Ahmed E. (30 มกราคม 2020). "การศึกษาเชิงคุณภาพเกี่ยวกับประโยชน์และต้นทุนของการบันทึกจากมุมมอง ของนักพัฒนา" ธุรกรรม IEEE เกี่ยวกับวิศวกรรมซอฟต์แวร์ 47 (12): 2858–2873. ดอย : 10.1109/TSE.2020.2970422 . S2CID 213679706 . 
  27. ^ เฮเกอร์ คริสตอฟ; เกิดขึ้น เจนส์; Farahbod, Roozbeh (21 เมษายน 2013). "รูทอัตโนมัติทำให้เกิดการแยกการถดถอยของประสิทธิภาพในระหว่างการพัฒนาซอฟต์แวร์" การดำเนินการของการประชุมนานาชาติด้านวิศวกรรมประสิทธิภาพ . สมาคมเครื่องจักรคอมพิวเตอร์. น. 27–38. ดอย : 10.1145/2479871.2479879 . ISBN 978-1-4503-1636-1. S2CID  2593603 .
  28. ^ มาลิก ฮารูน; อดัมส์ แบรม; Hassan, Ahmed E. (พฤศจิกายน 2010). "การระบุระบบย่อยที่รับผิดชอบการเบี่ยงเบนประสิทธิภาพในการทดสอบโหลด" การประชุมวิชาการระดับนานาชาติว่าด้วยวิศวกรรมความน่าเชื่อถือของ ซอฟต์แวร์ น. 201–210. ดอย : 10.1109/ISSRE.2010.43 . ISBN 978-1-4244-9056-1. S2CID  17306870 .