Skip to content

Latest commit

 

History

History
95 lines (95 loc) · 14.1 KB

13.3. Software maintenance.md

File metadata and controls

95 lines (95 loc) · 14.1 KB

Software maintenance Software maintenance

  • คือการแก้ไขโปรแกรมหลังจากการนำไปใช้งาน
  • คำนี้ส่วนใหญ่ใช้สำหรับการเปลี่ยนซอฟต์แวร์ที่กำหนดโดยผู้ใช้ (custom software)
  • ส่วนกรณีซอฟต์แวร์ทั่วไป (Generic software) มักใช้เมื่อสร้างเวอร์ชันใหม่ ๆ
  • การบำรุงรักษาจะเกี่ยวข้องกับการเปลี่ยนแปลงที่สำคัญในสถาปัตยกรรมของระบบ
  • การเปลี่ยนแปลงจะดำเนินการโดยการปรับเปลี่ยนคอมโพเนนต์ที่มีอยู่และเพิ่มส่วนประกอบใหม่ลงในระบบ Types of maintenance
  • ซ่อมแซมข้อบกพร่อง (Fault repairs)
  • การเปลี่ยนระบบเพื่อแก้ไขข้อบกพร่อง / ช่องโหว่และข้อบกพร่องเพื่อให้ถูกต้องตรงกับความต้องการของระบบ
  • การปรับตัวให้เข้ากับสภาพแวดล้อม (Environmental adaptation)
  • การบำรุงรักษาเพื่อปรับซอฟต์แวร์ให้เข้ากับสภาพแวดล้อมการทำงานที่แตกต่างกัน
  • การเปลี่ยนระบบเพื่อให้ทำงานในสภาพแวดล้อมที่แตกต่างกัน (คอมพิวเตอร์ OS ฯลฯ )
  • การเพิ่มฟังก์ชันและการแก้ไข (Functionality addition and modification)
  • การปรับเปลี่ยนระบบเพื่อตอบสนองความต้องการใหม่ ๆ Maintenance effort distribution Maintenance costs
  • มักจะสูงกว่าต้นทุนการพัฒนา (2 เท่าถึง 100 เท่า ขึ้นอยู่กับแอพพลิเคชั่น)
  • ได้รับผลกระทบทั้งจากปัจจัยด้านเทคนิคและไม่ใช่ทางเทคนิค
  • จะเพิ่มขึ้นเรื่อย ๆ ตราบเท่าที่ซอฟต์แวร์ยังคงอยู่
  • การบำรุงรักษาที่กระทบกระเทือนโครงสร้างซอฟต์แวร์ อาจเป็นผลให้การบำรุงรักษาทำได้ยากขึ้น
  • ซอฟต์แวร์ที่มีอายุมาก จะมีต้นทุนค่าใช้จ่ายในการสนับสนุนสูง
  • (เช่น ภาษาเก่า, คอมไพเลอร์ เป็นต้น) Maintenance costs
  • การเพิ่มคุณสมบัติใหม่ ๆ ให้กับระบบในระหว่างการบำรุงรักษา มักจะมีราคาสูงกว่าการเพิ่มคุณสมบัติเดียวกันในระหว่างการพัฒนา
  • ทีมใหม่ต้องศึกษาและทำความเข้าใจโปรแกรมที่จะบำรุงรักษา
  • การแยกการบำรุงรักษาและการพัฒนา อาจทำให้ไม่มีการสร้างแรงจูงใจให้ทีมพัฒนาเขียนซอฟต์แวร์ที่สามารถดูแลรักษาได้
  • การบำรุงรักษาโปรแกรมไม่เป็นที่นิยม
  • พนักงานซ่อมบำรุงมักไม่มีประสบการณ์และมีความรู้เกี่ยวกับโดเมนอย่างจำกัด
  • เมื่ออายุของโปรแกรมมากขึ้น ผ่านการบำรุงรักษามายาวนาน อาจทำให้ความเป็นโครงสร้างของโปรแกรมแย่ลงและกลายเป็นเรื่องยากที่จะบำรุงรักษา Maintenance prediction
  • การพยากรณ์การบำรุงรักษาเกี่ยวข้องกับการประเมินว่าส่วนใดของระบบอาจทำให้เกิดปัญหาและมีค่าใช้จ่ายในการบำรุงรักษาสูง
  • การยอมรับการเปลี่ยนแปลงขึ้นอยู่กับการบำรุงรักษาส่วนประกอบที่ได้รับผลกระทบจากการเปลี่ยนแปลง
  • การเปลี่ยนแปลงจะทำให้ความเป็นระบบลดลงและลดความสามารถในการบำรุงรักษา
  • ค่าบำรุงรักษาขึ้นอยู่กับจำนวนของการเปลี่ยนแปลงและค่าใช้จ่ายในการเปลี่ยนแปลงขึ้นอยู่กับการบำรุงรักษา Maintenance prediction Change prediction
  • หมายถึงการคาดการณ์จำนวนการเปลี่ยนแปลงที่ต้องการและการทำความเข้าใจความสัมพันธ์ระหว่างระบบกับสภาพแวดล้อม
  • ระบบที่ยึดแน่นกับสภาพแวดล้อม ต้องมีการเปลี่ยนแปลงทุกครั้งที่มีการเปลี่ยนแปลงสภาพแวดล้อม
  • ปัจจัยที่มีอิทธิพลต่อความสัมพันธ์ระหว่างระบบกับสภาพแวดล้อม ได้แก่
  • จำนวนและความซับซ้อนของอินเทอร์เฟซระบบ
  • จำนวนความต้องการของระบบที่เปลี่ยนแปลงไปตามธรรมชาติ
  • กระบวนการทางธุรกิจที่ใช้ระบบ Software reengineering
  • ปรับโครงสร้างหรือเขียนใหม่ (ในบางส่วนหรือทั้งหมดของระบบเก่า) โดยไม่ต้องเปลี่ยนฟังก์ชันการทำงาน
  • ทำได้เมื่อบางส่วนของระบบขนาดใหญ่ต้องการการบำรุงรักษาบ่อย ๆ
  • การรื้อปรับระบบช่วยเพิ่มความสะดวกในการบำรุงรักษา ระบบอาจได้รับการจัดโครงสร้างใหม่และจัดทำเอกสารใหม่ Advantages of reengineering
  • ลดความเสี่ยง
  • มีความเสี่ยงสูงในการพัฒนาซอฟต์แวร์ใหม่
  • อาจมีปัญหาในการพัฒนา ปัญหาเกี่ยวกับพนักงาน และปัญหาทางเทคนิค
  • ลดค่าใช้จ่าย
  • ค่าใช้จ่ายในการ reengineering มักจะน้อยกว่าค่าใช้จ่ายในการพัฒนาซอฟต์แวร์ใหม่ The reengineering process Reengineering process activities
  • การแปลรหัสต้นทาง (Source code translation)
  • แปลงรหัสเป็นภาษาใหม่
  • วิศวกรรมย้อนกลับ (Reverse engineering)
  • วิเคราะห์โปรแกรมเพื่อทำความเข้าใจ
  • การปรับปรุงโครงสร้างโปรแกรม (Program structure improvement)
  • ปรับโครงสร้างใหม่โดยอัตโนมัติเพื่อให้เข้าใจได้ง่าย
  • จัดทำโครงสร้างโปรแกรม (Program modularization)
  • จัดโครงสร้างโปรแกรมใหม
  • การรื้อปรับระบบข้อมูล (Data reengineering)
  • ทำความสะอาดและปรับโครงสร้างข้อมูลระบบ Reengineering approaches Reengineering cost factors
  • คุณภาพของซอฟต์แวร์ที่จะปรับรื้อปรับระบบใหม่
  • การสนับสนุนเครื่องมือสำหรับการปรับรื้อระบบ
  • ขอบเขตของการแปลงข้อมูลที่จำเป็น
  • ความพร้อมของเจ้าหน้าที่ผู้เชี่ยวชาญในการปรับรื้อระบบ
  • ปัญหานี้อาจเป็นปัญหากับระบบเก่าที่ใช้เทคโนโลยีซึ่งไม่มีการใช้กันอย่างแพร่หลาย Refactoring
  • การทำ Refactoring เป็นกระบวนการในการปรับปรุงโปรแกรมเพื่อชะลอการ degradation เนื่องจากการเปลี่ยนแปลง
  • Refactoring เป็น 'การบำรุงรักษาเชิงป้องกัน' ที่ช่วยลดปัญหาของการเปลี่ยนแปลงในอนาคต
  • Refactoring เกี่ยวข้องกับการปรับเปลี่ยนโปรแกรมเพื่อปรับปรุงโครงสร้างลดความซับซ้อนหรือทำให้เข้าใจง่ายขึ้น
  • เมื่อทำ refactor ไม่ควรเพิ่มฟังก์ชันการทำงาน แต่มุ่งเน้นที่การปรับปรุงโปรแกรม Refactoring and reengineering
  • การออกแบบใหม่ (Re-engineering) เกิดขึ้นหลังจากระบบได้รับการบำรุงรักษาเป็นระยะเวลาหนึ่งและค่าใช้จ่ายในการบำรุงรักษาเพิ่มขึ้น
  • เราใช้เครื่องมืออัตโนมัติในการประมวลผลและ re-engineering ระบบเดิมเพื่อสร้างระบบใหม่ที่สามารถดูแลรักษาได้มากขึ้น
  • การทำ Refactoring เป็นกระบวนการต่อเนื่องในการปรับปรุงตลอดกระบวนการพัฒนาและวิวัฒนาการ
  • มีจุดประสงค์เพื่อหลีกเลี่ยงการ degradation ของโครงสร้างโปรแกรม (รวมทั้ง code) ซึ่งจะเพิ่มต้นทุนและความยากลำบากในการบำรุงรักษาระบบ ‘Bad smells’ in program code
  • รหัสที่ซ้ำกัน (Duplicate code)
  • รหัสเดียวกันหรือคล้ายกันมากอาจกระจัดกระจายอยู่ในตำแหน่งต่าง ๆ ของโปรแกรม ซึ่งสามารถนำออกและนำมาใช้เป็น method หรือฟังก์ชันเดียวกัน
  • เมธอดที่ยาวเกินไป (Long methods)
  • หากเมธอดเกินไปควรออกแบบใหม่ด้วยเมธอดที่สั้นกว่า
  • คำสั่ง Switch (case)
  • คำสั่ง switch อาจกระจายอยู่ทั่วโปรแกรม ในภาษาเชิงวัตถุมักจะสามารถใช้ polymorphism เพื่อตอบสนองสิ่งเดียวกันนี้ ‘Bad smells’ in program code
  • ข้อมูลรวมกันเป็นก้อน ๆ (Data clumping)
  • กลุ่มข้อมูลเดียวกันอาจปรากฏครั้งในหลาย ๆ แห่งในโปรแกรม
  • กลุ่มข้อมูลเหล่านี้มักจะถูกแทนที่ด้วยวัตถุที่ encapsulates ข้อมูลทั้งหมด
  • การคาดเดา (Speculative generality)
  • กรณีนี้เกิดขึ้นเมื่อนักพัฒนาซอฟต์แวร์เขียนโค้ดเผื่อไว้สำหรับความต้องการในอนาคต กรณีนี้มักจะสามารถลบออกไปได้