Thursday, March 7, 2013

วิศวกรรมซอฟแวร์ (Software Engineering)


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

1.1        ซอฟแวร์ การเปลี่ยนแปลง และปัญหาที่พบ

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

1.        ซอฟแวร์ระบบ (System Software) เป็นซอฟแวร์ที่ประกอบด้วยกลุ่มของโปรแกรมย่อยที่ถูกเขียนขึ้นเพื่อให้บริการ โปรแกรมอื่น ไม่ว่าจะเป็นการบริการระบบ  สนับสนุนการทำงานอรรถประโยชน์อื่นๆ

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

3.        ซอฟแวร์ด้านวิทยาศาสตร์และวิศวกรรม (Scientific Software / Engineering) เป็นซอฟแวร์ที่ใช้เฉพาะงานด้านวิทยาศาสตร์และวิศวกรรมศาสตร์

4.        ซอฟแวร์แบบฝัง (Embedded Software) เป็นซอฟแวร์ที่ติดตั้งไว้ภายในอุปกรณ์อิเล็กทรอนิกส์ต่างๆ หรือภายในระบบงาน เพื่อควบคุมการทำงานของอุปกรณ์หรือระบบงานนั้นๆโดยไม่แสดงให้ผู้ใช้งานเห็น หรือจำกัดการมองเห็น

5.        ซอฟแวร์แบบสายการผลิต (Production-Line Software) เป็นซอฟแวร์เฉพาะด้าน ที่ลูกค้าหลายกลุ่มสามารถนำไปใช้งานได้เหมือนกัน หรืออาจเป็นกลุ่มลูกค้าเฉพาะ และลูกค้าตลาดใหญ่ที่เป็นผู้ใช้ทั่วไป

6.        เว็บแอปพลิเคชั่น ( Web Application) กรณีซอฟแวร์แอปพลิเคชั่นสามารถทำงานบนเว็บไซด์ เพื่อจัดการมูลในฐานข้อมูลจะเรียกว่า เว็บแอปพลิเคชั่น

7.        ซอฟแวร์ปัญญาประดิษฐ์ (Artificial Intelligence Software) เป็นซอฟแวร์ที่ถูกออกแบบให้มีอัลกอริธึมในการทำงานที่ซับซ้อนเลียนแบบสมอง มนุษย์ เพื่อแก้ปัญหาที่มีความซับซ้อนสูงด้วยการวิเคราะห์ตามหลักของเหตุละผล
อุตสาหกรรมการผลิตซอฟแวร์ จะเปรียบซอฟแวร์เป็นผลิตภัณฑ์เช่นเดียวกับสินค้า
โดยที่วิศวกรซอฟแวร์จะต้องผลิตซอฟแวร์ทั้งหมด  2  ประเภท ได้แก่

1.        Generic Product เป็นผลิตภัณฑ์ซอฟแวร์หรือระบบที่ถูกผลิตขึ้นโดยผู้ผลิตซอฟแวร์รายใหญ่ เพื่อจำหน่ายให้กับลูกค้าในตลาดทั่วไปที่ต้องการซื้อไปเพื่อใช้งานตามความ สามารถของซอฟแวร์ โดยไม่ยึดตามความต้องการของลูกค้า
2.        Customized Product เป็นผลิตภัณฑ์ซอฟแวร์หรือระบบ สำหรับลูกค้าเฉพาะรายที่ตกลงทำสัญญาว่าจ้างกันไว้โดยการผลิตจะยึดตามความ ต้องการของลูกค้า
1.2        วิศวกรรมซอฟแวร์และความสำคัญ

ได้มีผู้ให้คำจำกัดความของคำว่า วิศวกรรมซอฟแวร์ ไว้หลายความหมายดังนี้
วิศวกรรมซอฟแวร์ หมายถึง การนำแนวทางที่เป็นระบบ  มีระเบียบ กฎเกณฑ์ และสามารถวัดผลในเชิงปฏิบัติได้ มาประยุกต์ใช้ในการพัฒนา ปฏิบัติการ และบำรุงรักษาซอฟแวร์
วิศวกรรมซอฟแวร์ หมายถึง การผสมผสานระหว่างศาสตร์และศิลป์เพื่อการผลิตซอฟแวร์เชิงพาณิชย์ โดยเริ่มต้นตั้งแต่การจัดทำข้อกำหนดคุณสมบัติของระบบ ตลอดจนการบำรุงรักษาระบบให้เป็นปกติ โดยแบ่งนัยสำคัญออกเป็น 2 ประเด็นคือ
1.        สหวิทยาการจัดการด้านวิศวกรรม หมายถึง การผสมผสานระหว่าศาสตร์และศิลป์ เพื่อการผลิตซอฟแวร์โดยการประยุกต์ศาสตร์ด้านต่างๆ ไม่ว่าจะเป็นทฤษฎี ระเบียบวิธีการปฏิบัติ เครื่องมือ และเทคนิค ตลอดจนการใช้ศิลปะในการบริหารจัดการด้านการจัดสรรทรัพยากร คุณภาพ งบประมาณและเวลาอย่างเหมาะสม

2.        ผู้เชี่ยวชาญด้านการผลิตซอฟแวร์ หมายถึง วิศวกรซอฟแวร์ที่มีความชำนาญในการผลิตซอฟแวร์ โดยใช้เทคนิค กระบวนการ และเครื่องมือต่างๆ ในการพัฒนาได้อย่างมีประสิทธิภาพ
วิศวกรรมซอฟแวร์ หมายถึง การนำหลักวิชาด้านวิศวกรรมมาดูและกระบวนการผลิตซอฟแวร์ ตั้งแต่ขั้นตอนแรกจนถึงขั้นตอนการบำรุงรักษาหลังการใช้งาน เพื่อให้ซอฟแวร์ที่ได้มีคุณภาพสูงสุดภายใต้ข้อจำกัดด้านเวลาและการลงทุน
ความสำคัญองวิศวกรรมซอฟแวร์
วิวัฒนาการของซอฟแวร์และเทคโนโลยีคอมพิวเตอร์เกิดขึ้นอย่างต่อเนื่อง จากยุค 70 แอปพลิเคชั่นต่างๆ ทำงานบนคอมพิวเตอร์ที่มีการประมวลผลแบบเดี่ยว ที่นิยมใช้บนเครื่องเมนเฟรม นิยมเก็บในแถบแม่เหล็ก การทำงานกับข้อมูลยังคงเป็นแบบง่ายๆ ปัจจุบันการทำงานได้เปลี่ยนแปลงไปจากเดิมเป็นอย่างมาก มีความสลับซับซ้อนขึ้น มีการประมวลผลแบบ Multiprocessing ไม่ได้ทำงานบนเครื่องคอมพิวเตอร์เพียงเครื่องเดียว มีการทำงานในระบบเครือข่าย  โดยต้องมีการแชร์ข้อมูลทั้งภายในและภายนอกในรู้ แบบของเว็บเพจ กระบวนการที่ใช้พัฒนาแบบ Waterfall ไม่สามารถรองรับระบบที่ซับซ้อนในปัจจุบันได้อีกต่อไป
สามารถสรุปปัจจัยการเปลี่ยนแปลงที่ทำให้งานด้านวิศวกรรมซอฟแวร์มีความสำคัญได้ 7 ประการ ดังนี้
1.        การเปลี่ยนแปลงของระยะเวลาการเปิดตัวของผลิตภัณฑ์เร็วขึ้น ทำให้การผลิตสั้นลง
2.        การเปลี่ยนแปลงในอุตสาหกรรมคอมพิวเตอร์ ทำให้มีการพัฒนาซอฟแวร์เพิ่มขึ้น และการบำรุงรักษามากขึ้น
3.        บุคคลหรือบริษัทขนาดเล็ก มีอำนาจในการซื้อคอมพิวเตอร์มากขึ้น เนื่องจากมีราคาที่ถูกลง
4.        การแพร่หลายของการเชื่อมต่อเครือขายทั้งแบบท้องถิ่นและแบบระยะไกล
5.        ความสามารถในการดัดแปลงการใช้เทคโนโลยีเชิงวัตถุเข้ากับระบบงานได้
6.        การเปลี่ยนแปลงด้านส่วนประสานงานกับผู้ใช้เป็นแบบกราฟฟิกมากขึ้น
7.        แบบจำลองการผลิตซอฟแวร์แบบ Waterfall ไม่สามารถคาดการณ์ความต้องการของผู้ใช้ได้อีกต่อไป

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

ความแตกต่างของวิศวกรรมซอฟแวร์และวิศวกรรมระบบ
วิศวกรรมระบบ (System Engineering) เกี่ยวกับทุกๆ ด้านของการพัฒนาและการเปลี่ยนแปลงของระบบที่มีความสลับซับซ้อน โดยมีซอฟแวร์เป็นแกนหลักในการทำงานของระบบ ดังนั้นวิศวกรรมระบบจึงเกี่ยวข้องกับการพัฒนาฮาร์ดแวร์ นโยบาย ออกแบบ พัฒนากระบวนการและระบบไปพร้อมๆ กัน วิศวกรรมระบบเป็นการประทำที่ก่อให้เกิดการกำหนดระบบ ระบุถึงสถาปัตยกรรมทั้งระบบ แล้วนำส่วนประกอบที่แตกต่างกันมาประสานเข้าด้วยกันจนกลายเป็นระบบ 1 ระบบ
ความแตกจ่างของวิศวกรรมซอฟแวร์กับการวิเคราะห์ออกแบบระบบ
การวิเคราะห์ออกแบบระบบ (System Analysis and Design) เป็นการศึกษา วิเคราะห์ และแยกปัญหาที่เกิดขึ้นในระบบ แล้วทำการออกแบบระบบ และกำหนดคุณสมบัติทางเทคนิค แต่ขั้นตอนของวิศวกรรมซอฟแวร์จะมีมากกว่าขั้นตอนของการวิเคราะห์และออกแบบ ระบบ ที่มีเพียงกิจกรรมที่สำคัญคือ การจัดทำความต้องการ การวิเคราะห์ และการออกแบบ เท่านั้น
บุคคลที่เกี่ยวข้องกับงานวิศวกรรมซอฟแวร์
ผู้ผลิตซอฟแวร์ต้องติดต่อสื่อสารกับบุคคลหลายกลุ่มแตกต่างกันไป ขึ้นอยู่กับขนาดและระดับความยากของโครงการผลิตซอฟแวร์ โดยทั่วไปสามารถจำแนกออกเป็น 3 กลุ่ม ได้แก่ ผู้ใช้ (User) ลูกค้า (Customer) และนักพัฒนา (Developer)
ลูกค้า อาจเป็นบุคคล องค์กร หรือบริษัท ที่ต้องการให้มีการผลิตซอฟแวร์ และเป็นผู้จ่ายเงิน นักพัฒนา อาจเป็น บุคคล บริษัท หรือองค์กรก็ได้เช่นกัน แต่เป็นผู้ทำหน้าที่สร้างซอฟแวร์อาจจำแนกเป็น  ผู้ที่มีหน้าที่หลักในการ วิศวกรรมซอฟแวร์ นั่นคือ วิศวกรซอฟแวร์  ผู้ใช้คือ ผู้ใช้ระบบที่แท้จริง ที่ต้องใช้งานคอมพิวเตอร์และซอฟแวร์ของระบบเป็นงานประจำ

ความสัมพันธ์ระหว่างกลุ่มบุคคลที่เกี่ยวข้องกับงานวิศวกรรมซอฟแวร์

วิศวกรซอฟแวร์ ที่ต้องรับผิดชอบงานส่วนใหญ่ของวิศวกรรมซอฟแวร์ จะต้องเป็นผู้ที่มีความรู้ และทักษะต่างๆ ตลอดจนมีบุคลิกภาพดังต่อไปนี้
ความรู้ทางด้านการผลิตซอฟแวร์ เกี่ยวกับทักษะ เครื่องมือ กระบวนการจัดการ ที่ช่วยสนับสนุนการผลิตซอฟแวร์
ความรู้ทางด้านการบริหารโครงการ เกี่ยวกับการวางแผน การกำหนดกิจกรรม การจัดสรรทรัพยากร การติตามและการควบคุมการดำเนินการต่างๆ
ความรู้ด้านการจัดการ เกี่ยวกับกระบวนการนำทรัพยากรการบริหารมาใช้ให้บรรลุวัตถุประสงค์ตามขั้นตอน การบริหารคือ การวางแผน การจัดการองค์กร การชี้นำและการควบคุมงานให้สัมฤทธิ์ผล
ความรู้ทางด้านธุรกิจ เกี่ยวกับกิจกรรมต่างๆ ของการซื้อขายสินค้า หรือการบริหารจัดการตามความต้องการของผู้บริโภค ตลอดจนกลยุทธ์ต่างๆ ที่จะช่วยให้ได้เปรียบคู่แข่งขัน
ความรู้ทางต้านงานประชาสัมพันธ์ เกี่ยวกับการติดต่อสื่อสารกับผู้รับข่าวสาร ไม่ว่าจะเป็นลูกค้า หรือแม้แต่เพื่อนร่วมงานในองค์กร
ความน่าเชื่อถือ เกี่ยวกับการสร้างความน่าเชื่อถือให้กับลูกค้า ทีมงานและบุคคลทุกฝ่าย ที่เกี่ยวข้องให้ยอมรับในศักยภาพของตน
ความรู้สึกไว เกี่ยวกับการรับรู้และการคาดคะเนผลกระทบของปัญหาที่เกิดขึ้นระหว่างตนกับ บุคคลอื่น พร้อมที่จะเจรจาไกล่เกลี่ยปัญหาที่เกิดข้อพิพาทขึ้น
ความเป็นผู้นำ เกี่ยวกับการใช้อำนาจหน้าที่และจูงใจให้บุคคลอื่นปฏิบัติตาม
ความอดทนต่อภาวะความกดดัน เกี่ยวกับความตึงเครียด ซึ่งจะส่งผลกระทบต่อการปฏิบัติโครงการ และสามารถแก้ไขปัญหาต่างๆ ที่เข้ามาได้อย่างมีประสิทธิภาพ
ความรับยืดหยุ่นสูง เกี่ยวกับความสารมารถในการปรับตัวในการเปลี่ยนแปลงของสภาพแวะล้อม โดยอยู่บนพื้นฐานของผลประโยชน์ร่วมกัน
ความรับผิดชอบสูง เกี่ยวกับการรับมอบหมายงานหรือหน้าที่ ซึ่งจะต้องบริหารโครงการผลิตซอฟแวร์ให้ประสบความสำเร็จ ตามเจตนารมณ์ขององค์กร
ความยุติธรรม เกี่ยวกับความถูกต้อง เละจริยธรรมอันดีงาม โดยปราศจาการาเลือกปฎิบัติเอนเอียงไปด้านใดด้านหนึ่งโดยขาดเหตุผลอันสมควร
1.3        องค์ประกอบของวิศวกรรมซอฟแวร์
องค์ประกอบของวิศวกรรมซอฟแวร์แบ่งออกเป็น 2 ส่วน ตามการแบ่งของ Waman S Jawadekar ดังนี้
ส่วนที่ 1 วิศวกรรมระบบ หมายถึง กระบวนการศึกษาและวิเคราะห์ของระบบที่มีความสลับซับซ้อน เพื่อสนับสนุนการทำงานในส่วนที่ 2
ส่วนที่ 2 วิศวกรรมการผลิต หมายถึง กระบวนการแปลสภาพความต้องการของระบบ ให้กลายเป็นซอฟแวร์อันเป็นเป้าหมายสำคัญทางด้านวิศวหรรมซอฟแวร์


องค์ประกอบของวิศวกรรมซอฟแวร์

ในส่วนวิศวกรรมระบบ มีกิจกรรมต่างๆ ที่จะต้องดำเนินการตามขั้นตอนดังต่อไปนี้
1.        กำหนดวัตถุประสงค์ของระบบ
2.        กำหนดขอบเขตของระบบ
3.        แบ่งระบบออกเป็นส่วนต่างๆ ตามฟังก์ชันงานหรือคุณสมบัติของระบบ
4.        พิจารณาความสัมพันธ์ของส่วนประกอบต่างๆ ที่เกี่ยวข้องกันทั้งหมด
5.        กำหนดความสัมพันธ์ของปัจจัยนำเข้า ประมวลผล และผลลัพธ์
6.        พิจารณาปัจจัยที่มีส่วนเกี่ยวข้องในระบบ ไม่ว่าจะเป็นฮาร์ดแวร์ ซอฟแวร์ ฐานข้อมูล หรือแม้แต่ผลิตภัณฑ์ซอฟแวร์อื่นๆ
7.        กำหนดความต้องการในส่วนของปฏิบัติการ (Operation) และฟังก์ชันการทำงานทั้งระบบ
8.        การสร้างแบบจำลอง เพื่อใช้วิเคราะห์และพัฒนาให้สอดคล้องกับแบบจำลองซอฟแวร์ที่สร้างขึ้น
9.        นำเสนอและและเปลี่ยนข้อคุดเห็นกับผู้ที่เกี่ยวข้องกับระบบ ไม่ว่าจะเป็นผู้ใช้ระบบ เจ้าของระบบ หรือแม้แต่ผู้ที่เกี่ยวข้องกับผลประโยชน์ที่มีต่อระบบ

ในส่วนวิศวกรรมการผลิต มีกิจการรมต่างๆ ที่จะต้องดำเนินการตามขั้นตอนดังต่อไปนี้

1.        กำหนดความต้องการและจัดทำข้อกำหนดคุณสมบัติ
2.        ออกแบบแนวทางแก้ไขปัญหาให้สอดคล้องกับความต้องการ
3.        พิจารณาสถาปัตยกรรมให้สอดคล้องกับแนวทางแก้ไขปัญหา
4.        วางแผนโครงการผลิตซอฟแวร์
5.        ทดสอบซอฟแวร์ในแต่ละคอมโพเน้นท์
6.        ผนวกคอมโพเน้นท์ต่างๆ รวมเป็นระบบเดียวกัน
7.        ทดสอบการผนวกรวมระบบ พร้อมตรวจสอบความถูกต้องและความสอดคล้องกับความต้องการที่ได้กำหนดไว้
8.        พิจารณากลยุทธ์ในการนำไปใช้งาน
9.        นำไปใช้งาน
10.        ปรับเปลี่ยนกระบวนการจัดการ
11.        บำรุงรักษาและติดตั้งซอฟแวร์

1.4        วิวัฒนาการของวิศวกรรมซอฟแวร์

วิศวกรรมซอฟแวร์ ได้มีวิวัฒนาการอย่างต่อเนื่องจากอดีตจนถึงปัจจุบัน สามารถแบ่งออกเป็น 3 ช่วง โดยมีรายละเอียด ดังนี้
ช่วงระหว่างปี ค.ศ. 1945 ถึง 1965 จุดเริ่มต้นของวิศวกรรมซอฟแวร์
คำว่า วิศวกรรมซอฟแวร์ ได้กล่าวขานและนำไปใช้งานเป็นครั้งแรกปลายปี ค.ศ. 1950 จนถึงปี ค.ศ. 1960 ซึ่งขณะนั้นรู้จักกันเพียงกลุ่มของวิศวกรซอฟแวร์ที่เกี่ยวข้องกับแวดวง วิศวกรรมคอมพิวเตอร์ อิเล็กทรอนิกส์ และสถาปนิก เท่านั้น การผลิตจะมุ่งเน้นที่ซอฟแวร์เป็นสำคัญ จนกระทั้งองค์กรนาโต้ ได้มีการจัดสัมมนาวิศวกรรมซอฟแวร์ถึงสองครั้ง (ปี ค.ศ. 1968 และ ค.ศ. 1969) ณ ประเทศเยอรมัน ทำให้วิศวกรรมซอฟแวร์เป็นที่รู้จักและเป็นที่ยอมรับกันอย่างแพร่หลายในระดับ มืออาชีพในเวลาต่อมา
ช่วงระหว่างปี ค.ศ. 1965 ถึง ค.ศ. 1985 วิกฤติซอฟแวร์
วิศวกรรมซอฟแวร์ได้มาถึงจุดวิกฤติในช่วงปี ค.ศ. 1960 ถึง ค.ศ. 1980 ทั้งนี้ปัญหาที่เกิดขึ้นอันเนื่องจากโครงการผลิตซอฟแวร์นั่นเอง ไม่ว่าจะเป็นเรื่องของต้นทุนของค่าใช้จ่ายที่เกินงบประมาณ หรือแม้แต่ตารางกำหนดระยะเวลาในการดำเนินงานยังไม่เหมาะสมเพียงพอ ซึ่งเป็นสาเหตุสำคัญที่ก่อให้เกิดความเสียหาย และสงผลให้โครงการต้องประสบความล้มเหลว จนเป็นวิกฤติที่ต้องว่าจ้างวิศวกรซอฟแวร์ระดับมืออาชีพที่สามารถผลิตซอฟแวร์ คุณภาพสูงได้ โดยจะแสดงกรณีตัวอย่างไว้พอสังเขปดังนี้
ซอฟแวร์ระบบปฏิบัติการ OS/360 ใช้ระยะเวลาในการพัฒนานานถึง 10 ปี และใช้เงินลงทุนถึงพันล้านเหรียญและจำนวนวิศวกรซอฟแวร์ถึง 1000 คน
ซอฟแวร์ระบบรักษาความปลอดภัยของฐานจรวดนำวิถีแอร์เรียน พบว่าระบบมีช่องโหว่ของระบบ ทำให้แฮกเกอร์เจาะเข้าสู่ระบบได้ และขโมยรหัสผ่านในการควบคุมฐานปล่อยจรวดจนเป็นเหตุให้เกิดระเบิดขึ้นในเวลา ต่อมา
ซอฟแวร์ควบคุมระบบการแผ่รังสีสำหรับเครื่องรักษาผู้ป่วยด้วยรังสีวิทยา พบข้อล้มเหลวในขณะปฏิบัติงานทำให้กัมมันตรังสีจากหลอดบรรจุไหลออกจากหลอก บรรจุเข้าสู่ผู้ป่วยจนทำให้เสียชีวิต
ช่วงปี ค.ศ. 19855 ถึง ปัจจุบัน ฟองสบู่แตก
ตลอดเวลาที่ผ่านมาการแก้ปัญหาวิกฤติซอฟแวร์ยังคงดำเนินต่อไปเฉพาะในแวดวงงาน วิจัย เท่านั้น และต่อมาเทคโนโลยีสมัยใหม่ และวิธีการพัฒนาซอฟแวร์ในรูปแบบต่างๆ ได้หลั่งไหลเข้ามาอย่างต่อเนื่องมากมาย ไม่ว่าจะเป็นเครื่องมือ เทคนิค กระบวนการ สหวิทยาการ หรือแม้แต่เส้นทางไปสู่มืออาชีพ จนกล่าวได้ว่าเป็นยุคของการแก้ปัญหาวิกฤติซอฟแวร์อย่างแท้จริง โดยมีปัจจัยที่เป็นแรงขับเคลื่อนดังนี้
เครื่องมือ มีการคิดค้นและพัฒนาเครื่องมือขึ้นมาเพื่ออำนวยความสะดวกในการพัฒนาซอฟแวร์ ได้แก่การโปรแกรมมิ่งเชิงโครงสร้าง การโปรแกรมมิ่งเชิงวัตถุ เคสทูล ภาษาเอด้า เอกสารควบคุมการผลิต มาตรฐาน และยูเอ็มแอล
สหวิทยาการ มีผู้ที่เกี่ยวข้องเป็นจำนวนมากพาดพิงถึงกรณีวิกฤติซอฟแวร์ อันเนื่องมาจากวิศวกรซอฟแวร์ส่วนใหญ่ ยังขาดทักษะการผสมผสานระหว่างศาสตร์และศิลป์เข้าด้วยกัน
วิธีการที่ถูกแบบแผน มีความเชื่อว่าหากนำวิธีการหรือระเบียบปฏิบัติอันเป็นที่ยอมรับด้านวิศวกรรม ที่เหมาะสมมาใช้ในการผลิตซอฟแวร์แล้ว จะสามารถคาดการณ์ได้ว่าการผลิตซอฟแวร์จะเป็นอีกแขนงหนึ่งของวิศวกรรมศาสตร์ ซึ่งจะเป็นหนทางที่จะพิสูจน์ความถูกต้องของซอฟแวร์เอง
กระบวนการ มีการเสนอกระบวนการหลากหลายรูปแบบ และระเบียบวิธีปฏิบัติต่างๆ ที่มีลักษณะคล้ายกับแนวทางของ CMM ที่ใช้ปรับปรุงกระบวนการผลิต
ความเป็นมืออาชีพ นำพาไปสู่การผลิตซอฟแวร์ที่ถูกจริยธรรม การมีใบอนุญาตการประกอบอาชีพ
1.5        คุณลักษณะของซอฟแวร์ที่มีคุณภาพ

แน่นนอนว่าองค์กรผู้ผลิตซอฟแวร์ยอมต้องการซอฟแวร์ที่มีคุณภาพ ดังนั้นในระหว่างการทำงาน นอกจากวิศวกรซอฟแวร์จะต้องคำนึงถึงคุณภาพของซอฟแวร์แล้ว ยังต้องค้นหาวิธีที่จะวัดคุณภาพของซอฟแวร์ ให้อยู่ในระดับที่องค์กร หรือเจ้าของโครงการยอมรับได้ โดยเบื้องต้นสามารถพิจารณาจากคุณลักษณะของซอฟแวร์ ดังนี้
ความสามารถในการบำรุงรักษา (Maintainability)
ซอฟแวร์จะต้องง่ายต่อการบำรุงรักษา สามารถเปลี่ยนแปลง ปรับเปลี่ยนให้เหมาะสม และตอบสนองได้อย่างรวดเร็วและทันท่วงที ในกรณีที่เกิดวิกฤติที่ไม่พึงประสงค์
ความสามารถในการพึงพา (Dependability)
ซอฟแวร์จะต้องคงไว้ซึ่งความสามารถในการสร้างความน่าเชื่อถือ ได้อย่างมีประสิทธิภาพ โดยจะต้องผ่านการทวนสอบและตรวจรับ การทำงานของฟังก์ชันทั้งหมด รวมไปถึงการป้องกันและรักษาความปลอดภัยอันเกิดจากสถานการณ์ที่ไม่พึงประสงค์
ประสิทธิภาพ (Efficiency)
ซอฟแวร์จะต้องก่อให้เกิดความประหยัด หรือสิ้นเปลืองน้อยที่สุด สามารถใช้ทรัพยากรต่างๆ ได้อย่างคุ้มค่าและเหมาะสม ในระดับที่ไม่เกินขีดความสามารถของทรัพยากรที่มีอยู่ ไม่ว่าจะเป็นการจัดสรรหน่วยความจำ ขนาดของพื้นที่จัดเก็บข้อมูล ความรวดเร็วในการประมวลผล หรือแม้แต่ความรวดเร็วในการตอบสองกับผู้ใช้งาน ทั้งนี้ขึ้นอยู่กับโครงสร้างหรือสถาปัตยกรรมของซอฟแวร์ที่ถูกออกแบบไว้
ความสามารถในการใช้งาน (Usability)
ซอฟแวร์จะต้องสะดวกและง่ายต่อการใช้งาน สามารถเสริมสร้างการเรียนรู้ได้อย่างรวดเร็ว ไม่ว่าจะเป็นการออกแบบจอภาพที่นำทางการใช้งานของผู้ใช้ได้ หรือแม้แต่คู่มือประกอบการติดตั้งและใช้งานที่เหมาะสม เป็นต้น
1.6        ระเบียบปฏิบัติของวิศวกรรมซอฟแวร์

วิศวกรรมซอฟแวร์เป็นงานที่แทรกซึมอยู่ในทุกขั้นตอนของกระบวนการผลิตซอฟแวร์ ดังนั้น ระเบียบวิธีปฏิบัติของวิศวกรรมซอฟแวร์ จึงเป็นไปตามแนวทางการพัฒนาซอฟแวร์ ซึ่งมีสองแนวทางที่รู้จักกันอย่างกว้างขวางคือ


1.        แนวทางเชิงโครงสร้าง  (Structured Approach)
เป็นแนวทางแบบตั้งเดิม มีการแบ่งระบบและความต้องการออกเป็นระบบย่อย ตามลักษณะฟังก์ชันงานและแต่ละระบบย่อยสามารถแบ่งออกเป็นส่วนย่อยลงไปได้อีก หากยังมีความสลับซับซ้อนอยู่ จึงเป็นโครงสร้างแบบสำดับชั้น ระเบียบวิธีการปฏิบัติชนิดหนึ่งที่นิยมนำมาใช้ในขั้นตอนการวิเคราะห์ออกแบบ ระบบ คือ การวิเคราะห์และโดย Yourdan & Demarco
2.        แนวทางเชิงวัตถุ (Object-Oriented Approach)
เป็นแนวทางใหม่ที่คิดค้นโดย Grady Booch, James Rubaugh และ Ivar Jacobson ด้วยวิธีการวิเคราะห์และอกแบบระบบเชิงวัตถุ เป็นการวิเคราะห์ระบบโดยหารมองทุกย่างในระบบเป็นอ็อบเจ็กต์ ซึ่งภายในอ็อบเจ็กต์นั้น จะมีทั้งส่วนข้อมูลและพฤติกรรมของระบบรวมอยู่ด้วย ทำให้การวิเคราะห์และออกแบบระบบเร็วขึ้นด้วย ซึ่งปัจจุบันได้รับความนิยมย่างสูงและกำลังเพิ่มขึ้นในอนาคตด้วย

เครดิต http://www.softwaresiam.com/index.php/software/28-software-engineering

No comments:

Post a Comment