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)
- กรณีนี้เกิดขึ้นเมื่อนักพัฒนาซอฟต์แวร์เขียนโค้ดเผื่อไว้สำหรับความต้องการในอนาคต กรณีนี้มักจะสามารถลบออกไปได้