อ่าน 2 นาที
ความสามารถในการขยาย
ความสามารถในการขยาย (Extensibility) เป็น หลักการ ทางวิศวกรรมซอฟต์แวร์ และ การออกแบบระบบ ที่ช่วยให้รองรับการเติบโตในอนาคต ความสามารถในการขยายเป็นตัววัดความสามารถในการขยาย ระบบ...
ความสามารถในการขยาย
ความสามารถในการขยาย (Extensibility)เป็น หลักการ ทางวิศวกรรมซอฟต์แวร์และการออกแบบระบบที่ช่วยให้รองรับการเติบโตในอนาคต ความสามารถในการขยายเป็นตัววัดความสามารถในการขยายระบบและระดับความพยายามที่จำเป็นในการดำเนินการขยายนั้น การขยายอาจทำได้โดยการเพิ่มฟังก์ชันใหม่หรือโดยการปรับเปลี่ยนฟังก์ชันที่มีอยู่ หลักการนี้ช่วยให้สามารถปรับปรุงระบบได้โดยไม่กระทบต่อฟังก์ชันที่มีอยู่ของระบบ
ระบบที่ขยายได้คือระบบที่มีโครงสร้างภายในและการไหลของข้อมูลได้รับผลกระทบน้อยที่สุดหรือไม่ได้รับผลกระทบเลยจากฟังก์ชันการทำงานใหม่หรือที่ได้รับการแก้ไข ตัวอย่างเช่น อาจไม่จำเป็นต้องคอมไพล์ใหม่หรือเปลี่ยนแปลงซอร์สโค้ด เดิม เมื่อต้องการเปลี่ยนแปลงพฤติกรรมของระบบ ไม่ว่าจะเป็นโดยผู้สร้างหรือโปรแกรมเมอร์คนอื่น[ 1 ]เนื่องจากระบบซอฟต์แวร์มีอายุการใช้งานยาวนานและจะได้รับการแก้ไขเพื่อเพิ่มคุณสมบัติใหม่และฟังก์ชันการทำงานเพิ่มเติมตามความต้องการของผู้ใช้ ความสามารถในการขยายได้ช่วยให้นักพัฒนาสามารถขยายหรือเพิ่มขีดความสามารถของซอฟต์แวร์และอำนวยความสะดวกในการนำกลับมาใช้ใหม่อย่างเป็นระบบ แนวทางบางประการได้แก่ สิ่งอำนวยความสะดวกที่อนุญาตให้แทรกรูทีนโปรแกรมของผู้ใช้เองและความสามารถในการกำหนดประเภทข้อมูลใหม่ ตลอดจนการกำหนดแท็กมาร์กอัปการจัดรูปแบบใหม่[ 2 ]
การออกแบบที่ขยายได้
การออกแบบที่ขยายได้ในวิศวกรรมซอฟต์แวร์คือการยอมรับว่าไม่ใช่ทุกอย่างที่จะสามารถออกแบบล่วงหน้าได้ จึง มีการจัดเตรียม เฟรมเวิร์กซอฟต์แวร์ ขนาดเล็ก ที่อนุญาตให้มีการเปลี่ยนแปลงแทน มีการสร้างคำสั่งขนาดเล็กเพื่อป้องกันการสูญเสียองค์ประกอบของการขยายได้ โดยยึดหลักการแยกองค์ประกอบงานออกเป็นหน่วยที่เข้าใจได้ เพื่อหลีกเลี่ยง ปัญหา การพัฒนาซอฟต์แวร์ แบบดั้งเดิม รวมถึง การรวมตัวกันต่ำ และ การเชื่อมโยงสูงและอนุญาตให้มีการพัฒนาอย่างต่อเนื่อง การยอมรับการเปลี่ยนแปลงเป็นสิ่งสำคัญในการออกแบบที่ขยายได้ ซึ่งจะมีการเพิ่มเติมอย่างต่อเนื่อง แต่ละส่วนของระบบจะสามารถใช้งานได้กับการเปลี่ยนแปลงใดๆ และแนวคิดของการเปลี่ยนแปลงผ่านการเพิ่มเติมเป็นศูนย์กลางของการออกแบบระบบทั้งหมด การออกแบบที่ขยายได้สนับสนุนการจัดลำดับความสำคัญใหม่บ่อยครั้งและอนุญาตให้มีการใช้งานฟังก์ชันการทำงานทีละเล็กทีละน้อยตามคำขอ ซึ่งเป็นหลักการที่ได้รับการสนับสนุนจากวิธีการ Agile และการพัฒนาแบบวนซ้ำ การขยายได้ทำให้เกิดการพึ่งพาที่น้อยลงและสะอาดขึ้นในระหว่างการพัฒนา รวมถึงการเชื่อมโยงที่ลดลงและนามธรรมที่สอดคล้องกันมากขึ้น ตลอดจนอินเทอร์เฟซที่กำหนดไว้อย่างดี[ 3 ]
ความสำคัญ
ความไม่แน่นอนเป็นพื้นฐานของซอฟต์แวร์ทั้งหมดเนื่องจากปรากฏการณ์ของมนุษย์ เนื่องจากซอฟต์แวร์เป็น "เอนทิตีที่กำลังพัฒนา" ซึ่งได้รับการพัฒนาและบำรุงรักษาโดยมนุษย์ ทำให้เกิดการเปลี่ยนแปลงระบบอย่างต่อเนื่องในข้อกำหนดและการใช้งานซอฟต์แวร์ ส่วนประกอบของซอฟต์แวร์มักได้รับการพัฒนาและใช้งานโดยบุคคลที่ไม่เกี่ยวข้องโดยอิสระ ส่วนประกอบซอฟต์แวร์ที่ปรับเปลี่ยนได้เป็นสิ่งจำเป็น เนื่องจากส่วนประกอบจากผู้จำหน่ายภายนอกไม่น่าจะเข้ากับสถานการณ์การใช้งานเฉพาะได้ทันที โดยคำนึงถึงผู้ใช้บุคคลที่สามนอกเหนือจากผู้ผลิต ระบบซอฟต์แวร์และสายผลิตภัณฑ์ซอฟต์แวร์จำนวนมากได้มาจากระบบพื้นฐาน ซึ่งมีสถาปัตยกรรมซอฟต์แวร์ ร่วมกัน หรือบางครั้งก็มีฟังก์ชันการทำงานและการใช้งานส่วนใหญ่ร่วมกัน แต่ก็อาจมีส่วนประกอบที่แตกต่างกันซึ่งต้องการระบบพื้นฐานที่ขยายได้[ 4 ]
การสร้างระบบซอฟต์แวร์ที่สามารถขยายได้โดยอิสระถือเป็นความท้าทายที่สำคัญ ระบบ ที่สามารถขยายได้โดยอิสระไม่เพียงแต่ช่วยให้คนสองคนสามารถพัฒนาส่วนขยายของระบบได้โดยอิสระเท่านั้น แต่ยังช่วยให้สามารถรวมส่วนขยายทั้งสองเข้าด้วยกันได้โดยไม่ต้องตรวจสอบความสมบูรณ์โดยรวมอีกด้วย[ 5 ]
การจำแนกประเภทของกลไกการยืดหยุ่น
การขยายขีดความสามารถของซอฟต์แวร์มีสามรูปแบบ ได้แก่ การขยายแบบไวท์บ็อกซ์ การขยายแบบเกรย์บ็อกซ์ และการขยายแบบแบล็กบ็อกซ์ ซึ่งขึ้นอยู่กับส่วนประกอบต่างๆ และวิธีการเปลี่ยนแปลงส่วนประกอบเหล่านั้น
กล่องสีขาว
ภายใต้รูปแบบการขยายระบบนี้ ระบบซอฟต์แวร์สามารถขยายได้โดยการแก้ไขซอร์สโค้ดซึ่งเป็นรูปแบบที่ยืดหยุ่นที่สุดและมีข้อจำกัดน้อยที่สุด การขยายระบบแบ่งออกเป็นสองรูปแบบย่อย คือ การขยายระบบแบบเปิดกล่อง (open-box extensibility) และการขยายระบบแบบปิดกล่อง (glass-box extensibility) ขึ้นอยู่กับวิธีการเปลี่ยนแปลงที่นำไปใช้
กล่องเปิด
ในระบบเปิดที่สามารถขยายได้ การเปลี่ยนแปลงมักทำโดยการแทรกแซงโค้ดต้นฉบับโดยตรง จำเป็นต้องมีโค้ดต้นฉบับที่สามารถเข้าถึงได้และใบอนุญาตการแก้ไขที่อนุญาต การขยายได้ในระบบเปิดมีความเกี่ยวข้องมากที่สุดกับการแก้ไขข้อผิดพลาดการปรับโครงสร้างโค้ด ภายใน หรือการสร้างซอฟต์แวร์เวอร์ชันถัดไป
กล่องแก้ว
การขยายระบบแบบกล่องแก้ว (หรือเรียกว่าเฟรมเวิร์กที่ขับเคลื่อนด้วยสถาปัตยกรรม) ช่วยให้ระบบซอฟต์แวร์สามารถขยายได้ด้วยซอร์สโค้ดที่มีอยู่ แต่ไม่อนุญาตให้แก้ไขโค้ด การขยายจะต้องแยกออกจากระบบเดิมในลักษณะที่ระบบเดิมไม่ได้รับผลกระทบ ตัวอย่างหนึ่งของการขยายระบบในรูปแบบนี้คือเฟรมเวิร์กแอปพลิเคชันเชิงวัตถุ ซึ่งโดยทั่วไปจะขยายระบบโดยใช้การสืบทอดและการผูกแบบไดนามิก
กล่องดำ
ใน การขยายระบบ แบบกล่องดำ (หรือเรียกว่าเฟรมเวิร์กที่ขับเคลื่อนด้วยข้อมูล) จะไม่มีการใช้รายละเอียดเกี่ยวกับการใช้งานของระบบในการปรับใช้หรือขยายระบบ จะ มีเพียง ข้อกำหนดของอินเทอร์เฟซ เท่านั้น ที่ถูกนำมาใช้ วิธีการนี้มีข้อจำกัดมากกว่าวิธีการแบบกล่องขาวต่างๆ การขยายระบบแบบกล่องดำมักทำได้ผ่านแอปพลิเคชันการกำหนดค่าระบบหรือการใช้ภาษาสคริปต์เฉพาะแอปพลิเคชันโดยการกำหนดอินเทอร์เฟซของส่วนประกอบ
กล่องสีเทา
ความสามารถในการขยายแบบกล่องสีเทาเป็นการประนีประนอมระหว่างแนวทางกล่องสีขาวบริสุทธิ์และแนวทางกล่องสีดำบริสุทธิ์ ซึ่งไม่ได้อาศัยการเปิดเผยซอร์สโค้ดอย่างเต็มที่ โปรแกรมเมอร์อาจได้รับอินเทอร์เฟซเฉพาะของระบบซึ่งแสดงรายการนามธรรมที่มีอยู่ทั้งหมดสำหรับการปรับแต่งและข้อกำหนดเกี่ยวกับวิธีการพัฒนาส่วนขยาย[ 6 ]
ความสามารถในการขยายเพิ่มเติมเทียบกับความสามารถในการนำกลับมาใช้ใหม่
ความสามารถในการขยายและการนำกลับมาใช้ใหม่มีคุณสมบัติที่เน้นย้ำร่วมกันหลายประการ รวมถึงการเชื่อมโยงต่ำ ความเป็นโมดูลาร์ และความสามารถขององค์ประกอบที่มีความเสี่ยงสูงในการสร้างระบบซอฟต์แวร์ที่แตกต่างกันมากมาย ซึ่งได้รับแรงบันดาลใจจากการสังเกตว่าระบบซอฟต์แวร์มักใช้องค์ประกอบร่วมกัน การนำกลับมาใช้ใหม่ควบคู่ไปกับความสามารถในการขยายทำให้เทคโนโลยีสามารถถ่ายโอนไปยังโครงการอื่นได้โดยใช้เวลาในการพัฒนาและบำรุงรักษาน้อยลง รวมถึงความน่าเชื่อถือและความสม่ำเสมอที่เพิ่มขึ้น[ 7 ]
ความปลอดภัย
ระบบปฏิบัติการสมัยใหม่รองรับการขยายผ่านไดรเวอร์อุปกรณ์และโมดูลเคอร์เนลที่โหลดได้ แอปพลิเคชันสมัยใหม่จำนวนมากรองรับการขยายผ่านปลั๊กอินภาษาส่วนขยายแอปเพล็ตฯลฯ แนวโน้มของการขยายที่เพิ่มขึ้นส่งผลเสียต่อความปลอดภัยของซอฟต์แวร์[ 8 ]
CGI ( Common Gateway Interface ) เป็นหนึ่งในวิธีการหลักที่เว็บเซิร์ฟเวอร์ใช้ในการขยายขีดความสามารถ บางคนมองว่าสคริปต์ CGI เป็น "ช่องโหว่ด้านความปลอดภัยขนาดใหญ่" [ 9 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
ความหมายของคำว่า " ความสามารถในการขยาย"จากพจนานุกรมวิกิพีเดีย