E N D
วิศวกรรมซอฟแวร์ อ.วิวัฒน์ ชินนาทศิริกุล
แนะนำรายวิชา เนื้อหาวิชาครอบคลุมพื้นฐานทางวิทยาศาสตร์สำหรับวิศวกรรมซอฟต์แวร์โดยเรียนรู้กระบวนการพัฒนาและ วัฏจักรในการพัฒนาซอฟต์แวร์ ซึ่งมุ่งเน้นไปที่การนำหลักการเชิงวัตถุมาใช้กับรูปแบบการพัฒนาซอฟต์แวร์ รวมทั้งครอบคลุมถึงกลยุทธ์ต่างๆ ที่ใช้ในการพัฒนาซอฟต์แวร์
วิศวกรรมซอฟต์แวร์ (Software Engineering)คืออะไร • การวางรากฐานโดยใช้หลักการทางวิศวกรรมเพื่อให้ซอฟท์แวร์มีความน่าเชื่อถือและสามารถใช้งานได้อย่างมีประสิทธิภาพ ในราคาต่ำที่สุด • วิศวกรรมซอฟต์แวร์ คือกระบวนการสร้างสรรค์โปรแกรมโดยใช้หลักทางวิศวกรรมเข้ามาช่วยในการดำเนินการสร้าง (อ.สมหมาย สุขคำ) • “Software Engineering is systematic approach to the development operation , maintenance , retirement of software” (IEEE 83b)
วิศวกรรมซอฟต์แวร์ (Software Engineering)คืออะไร • “วิชาการว่าด้วยการออกแบบโปรแกรมคอมพิวเตอร์ ตลอดจนการบริหารงานการพัฒนาเพื่อที่จะได้มาซึ่ง ผลิตผลซอฟต์แวร์ที่มีคุณภาพสูง ราคาถูก และภายในเวลาที่กำหนดให้”(สุชาย ธนวเสถียร)
ปัจจัยที่ทำให้เกิด Software Engineering • ความก้าวหน้าของเทคโนโลยี • ราคาของฮาร์ดแวร์ และซอฟท์แวร์ - เป็นค่าใช้จ่ายหลักของระบบ - ราคาของซอฟท์แวร์จะสูงกว่าฮาร์ดแวร์เสมอ - ค่าบำรุงรักษาซอฟท์แวร์จะสูงกว่าค่าใช้จ่ายในการพัฒนา • ความสำคัญของการบำรุงรักษา • ความต้องการในการใช้งานที่เพิ่มมากขึ้น • ขนาดและความซับซ้อนของระบบงานที่เพิ่มขึ้น
Software Engineering VS Software Programming • Software Programming • จำนวนโปรแกรมเมอร์น้อย ใช้เวลาในการพัฒนาและใช้งานสั้นๆ • นักพัฒนาทำหน้าที่หลายอย่าง - เป็นโปรแกรมส่วนใดส่วนของระบบงานที่มีอยู่ - พัฒนาจากจุดเริ่มต้นเสมอ - ค่าบำรุงรักษาน้อย
Software Engineering VS Software Programming • Software Engineering - ทำงานเป็นทีม ทำหน้าที่แตกต่างกัน - ระบบงานที่มีความซับซ้อนสูง - มีอายุการใช้งานยาวนาน - Reusability - ค่าบำรุงรักษาจะสูงกว่าค่าใช้จ่ายในการพัฒนาคิดได้เป็น 60% ของค่าใช้จ่ายทั้งหมด
ทำไมต้องมี Software Engineering ? • โปรเจคขนาดใหญ่ที่ประสบความสำเร็จโดยไม่ได้ใช้วิธีทางวิศวกรรมซอฟท์แวร์ - ซอฟท์แวร์ที่จำหน่ายออกมาแล้วไม่มีการนำมาแก้ไขใหม่ • โปรเจคที่ประสบความล้มเหลวเนื่องจากไม่ได้ใช้วิธีทางวิศวกรรมซอฟท์แวร์ - โปรแกรมเมอร์เปลี่ยนงาน - ขาดความเข้าใจกับระบบที่ถูกต้อง - โปรเจคสามารถส่งมอบได้แต่ขาดคุณภาพ - การเปลี่ยนแปลงทางเทคโนโลยีในระหว่างการพัฒนา
ทำไมต้องมี Software Engineering ? • ซอฟท์แวร์มีราคาแพง • ความสามารถของซอฟท์แวร์ที่ต่ำกว่าที่คาดหวัง • การส่งมอบช้ากว่ากำหนด • เอกสารประกอบที่ไม่ชัดเจน ขาดความสมบูรณ์ • ใช้งานไม่ตรงความต้องการของผู้ใช้ • บำรุงรักษาได้ยาก • อาจเกิดความไม่เข้ากันของซอฟท์แวร์กับสภาพแวดล้อมเมื่อทำการติดตั้งใช้งาน • การใช้งานที่ไม่น่าเชื่อถือ
ทำไมต้องมี Software Engineering ? • สถิติต่างที่เกี่ยวข้อง • หนึ่งในสี่ของระบบที่พัฒนาไม่สามารถส่งมอบงานได้ • การเปลี่ยน Staff จำนวน 20% เป็นเรืองปกติ • งานหลักๆ ใช้เวลาพัฒนาเกินกว่า 30 เดือน • โปรเจคขนาดใหญ่ใช้เวลา 3-5 ปี • บริษัททั่วไปจะใช้งบปริมาณเกี่ยวกับการพัฒนา IT ถึง 20% ของงบประมาณทั้งหมด • 25% พัฒนาไม่เสร็จ • 100% เกินงบประมาณทั้งสิ้น
ทำไมต้องมี Software Engineering ? • สถิติต่างที่เกี่ยวข้อง • หนึ่งในสี่ของระบบที่พัฒนาไม่สามารถส่งมอบงานได้ • การเปลี่ยน Staff จำนวน 20% เป็นเรืองปกติ • งานหลักๆ ใช้เวลาพัฒนาเกินกว่า 30 เดือน • โปรเจคขนาดใหญ่ใช้เวลา 3-5 ปี • บริษัททั่วไปจะใช้งบปริมาณเกี่ยวกับการพัฒนา IT ถึง 20% ของงบประมาณทั้งหมด • 25% พัฒนาไม่เสร็จ • 100% เกินงบประมาณทั้งสิ้น
ความเป็นจริง ? • ทำไมซอฟท์แวร์ถึงใช้เวลานานในการพัฒนา ? • ทำไมค่าใช้จ่ายในการพัฒนาซอฟท์แวร์จึงสูง ? • ทำไมข้อผิดพลาดของซอฟท์แวร์จึงไม่พบก่อนที่จะส่งมอบให้แก่ผู้ใช้ ? • ทำไมค่าใช้จ่าย เวลา และคุณภาพของซอฟท์แวร์ในการพัฒนาจึงไม่สามารถประมาณการได้ ? • ทำไมจึงเกิดผลกระทบอย่างมากเมื่อมีการเปลี่ยนแปลงของซอฟท์แวร์ ?
ความเป็นจริง ? • Development Life Cycle • งบที่บานปลาย • ความล่าช้าในการส่งมอบ • คุณภาพของนักพัฒนา • Operation Life Cycle • ค่าใช้จ่ายในการบำรุงรักษาที่สูงมาก • ความลมเหลวจากการทำงานที่เกิดขึ้นจาก • System Down Time • Poor Quality
หนทางข้างหน้า... • อุตสาหกรรมซอฟท์แวร์ที่มีขนาดใหญ่ขึ้น ขยายขอบเขตไปทุกส่วนงาน มีผลให้วิถีชีวิตเปลี่ยนไป • Software Crisis • แนวโน้มในการพัฒนาเน้นที่ • คุณภาพของ Product • ความสำเร็จในการพัฒนาโดยอาศัย Process
Product and Process • เป็นหัวใจหลักของวิศวกรรมซอฟท์แวร์ • การเปลี่ยนแนวความคิดจาก Product ไปเน้นที่ Process • Structure Programming – Product • Structure Analysis and Design – Process • Data Encapsulation (OO Language) – Product • Capability Maturity Model/ISO9000 – Process • Software Product จะต้องมีคุณภาพ โดยผ่านการจัดการที่ดีมีการทำงานถูกต้อง สามารถแข่งขันในตลาดได้
Software Product • ความแตกต่างกับ Hardware Product • การพัฒนาซอฟท์แวร์ต่างจากอุสาหกรรมการผลิตอื่นๆ • ซอฟท์แวร์ไม่มีการเสียหายและอายุการใช้งาน • ซอฟท์แวร์สร้างแบบ Custom-Built ไม้ได้เกิดจากการประกอบของชิ้นส่วนต่างๆ • Software Product ต้องมีคุณสมบัติดังนี้ • ทำงานถูกต้องตามกำหนด มีคามน่าเชื่อถือ • มีประสิทธิภาพ บำรุงรักษาง่าย • มีส่วนติดต่อผู้ใช้ที่เหมาสม • มีอายุการใช้งานที่เหมาะสม
Software Product ประกอบไปด้วย • โปรแกรม • ข้อมูล • เอกสารประกอบการใช้งาน • Product สามารถแบ่งได้เป็น 2 แบบคือ • Generic – ระบบที่ใช้งานทั่วไปซึ่งถือเป็นซอฟท์แวร์ที่พบเห็นส่วนใหญ่ • Bespoke – ระบบที่ออกแบบมาเฉพาะการทำงานตามความต้องการของลูกค้า
นิยามของซอฟแวร์ • ในปทานุกรมศัพท์การประมวลผลสารสนเทศตามาตรฐาน JIS (JIS X 001-1987)ได้นิยามคำว่าซอฟแวร์ว่า “ซอฟต์แวร์เป็นสิ่งสร้างสรรค์เชิงปัญญา เพื่อทำให้ระบบทำการประมวลผลข้อมูล ซอฟต์แวร์ประกอบจากโปรแกรม กระบวนการ ข้อกำหนด และเอกสารที่เกี่ยวข้อง”
ซอฟแวร์ที่ดี เป็นอย่างไร ?? • ขึ้นอยู่กับมุมมองของผู้ใช้งาน หรือ ผู้พัฒนาโปรแกรม มุมมองของ ผู้พัฒนาซอฟต์แวร์และผู้ใช้ มุมมองของ ผู้พัฒนาซอฟต์แวร์
วงจรชีวิตของซอฟแวร์ • วงจรชีวิต ของซอฟแวร์ มี 3 ขั้นตอนใหญ่ๆคือ 1. วางแผน -> สรุปความต้องการ ออกแบบภายนอก 2. พัฒนา -> ออกแบบภายใน ลงรหัส ทดสอบ 3. ใช้งาน บำรุงรักษา -> ใช้งาน บำรุงรักษา การบำรุงรักษา หมายถึง งานปรับแก้ซอฟต์แวร์เพื่อแก้ไขข้อบกพร่องที่พบระหว่างการใช้งาน เพื่อป้องกันความผิดพลาดที่อาจเกิดขึ้น และให้ตอบสนองความต้องการใหม่
สัดส่วนต้นทุนของซอฟแวร์สัดส่วนต้นทุนของซอฟแวร์
ลักษณะของวิศวกรรมซอฟต์แวร์ • เกี่ยวข้องกับการสร้างโปรแกรมขนาดใหญ่ • สามารถจัดการเกี่ยวกับความซ้ำซ้อนได้ • เน้นการทำงานร่วมกันของบุคลากร • สามารถเปลี่ยนแปลงได้ง่ายเมื่อจำเป็น • เน้นการพัฒนาให้มีประสิทธิภาพ • สนองความต้องการของผู้ใช้
องค์ประกอบของการวิศวกรรมซอฟต์แวร์องค์ประกอบของการวิศวกรรมซอฟต์แวร์ • ประกอบด้วย 1. วิธีการ (Methodology) เป็นตัวกำหนดว่าจะต้องใช้วิธีใดในการพัฒนาซอฟแวร์ ผู้เกี่ยวข้องแต่ละคนมีบทบาท หน้าที่อย่างไร ทำอย่างไรจึงจะทราบความคืบหน้าในการพัฒนาซอฟแวร์ 2. เทคนิค (Technique) ประกอบด้วยเทคนิคในการวางแผน และเทคนิคในขั้นตอนการออกแบบและพัฒนา
องค์ประกอบของการวิศวกรรมซอฟต์แวร์ (ต่อ) 3. สิ่งแวดล้อม (Environment) หรืออาจเรียกว่า ทูล (Tool) หรือเครื่องมือในการพัฒนา หากเลือกใช้ภาษาและเครื่องมือที่เหมาะสมการพัฒนาก็จะมีประสิทธิภาพ
องค์ประกอบของการวิศวกรรมซอฟต์แวร์ (ต่อ) • แบบน้ำตก • แบบเกลียว • แบบสตรักเจอร์ • แบบ Object Oriented วิธีการ การบริหาร โครงการ การพัฒนา ซอฟต์แวร์ สิ่งแวดล้อม เทคนิค • พีซี • ระบบปฏิบัติการ • ระบบไคลเอนต์เซิร์ฟเวอร์ • สิ่งแวดล้อมในการพัฒนา • อินเทอร์เน็ต • OS • เทคนิคแบบ Object Oriented • อัลกอริทึม • ภาษาที่ใช้เขียนโปรแกรม • CASE Tool
คุณลักษณะของกระบวนการวิศวกรรมซอฟต์แวร์คุณลักษณะของกระบวนการวิศวกรรมซอฟต์แวร์ • Understandability : มีการนิยามขอบเขตของกระบวนการที่ชัดแจ้งและง่ายต่อการเข้าใจ • Visibility : ทำให้กิจกรรมกระบวนการชัดเจนที่สุดเพื่อสามารถมองเห็นจากภายนอกได้ชัดเจน • Supportability : เครื่องมือช่วยการวิศวกรรมซอฟต์แวร์ (CASE)สามารถช่วยสนับสนุนกิจกรรมกระบวนการในขอบเขตใด
คุณลักษณะของกระบวนการวิศวกรรมซอฟต์แวร์คุณลักษณะของกระบวนการวิศวกรรมซอฟต์แวร์ • Acceptability : กระบวนการที่กำหนดสามารถยอมรับและใช้โดยวิศวกรซอฟต์แวร์ในการผลิตผลิตภัณฑ์ซอฟต์แวร์ • Reliability : กระบวนการถูกออกแบบในแนวทางซึ่งความผิดพลาดของกระบวนการถูกหลีกเลี่ยงก่อนที่จะส่งผลต่อความผิดพลาดของผลิตภัณฑ์ซอฟต์แวร์ • Robustness : กระบวนการสามารถทำงานต่อได้แม้นว่ามีปัญหาที่ไม่คาดการณ์เกิดขึ้น
คุณลักษณะของกระบวนการวิศวกรรมซอฟต์แวร์คุณลักษณะของกระบวนการวิศวกรรมซอฟต์แวร์ • Maintainability : กระบวนการสามารถวิวัฒนาการเพื่อตอบสนองการเปลี่ยนแปลงความต้องการขององค์กร • Rapidity : กระบวนการสามารถทำให้ส่งมอบผลิตภัณฑ์ได้เร็วนับจากที่รูปแบบคุณลักษณะของซอฟต์แวร์(Software specifications) ถูกกำหนด