ทำไมต้องเรียน Software Engineering ?

ก่อนที่เราจะตั้งคำถามว่าทำไมต้องเรียน Software Engineering เราต้องทำความรู้จักก่อนว่าวิชาเรียนเกี่ยวกับอารัยแล้วเราจะได้คำตอบที่ต้องการ

วิชาวิศวกรรมซอฟต์แวร์(Software Engineering) คือวิชาว่าด้วยเรื่องอะไร?

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

เรียน Software Engineering ไปทำไม เขียนโค้ดเลยอย่างเดียวไม่พอหรือ?

   Software มีความสำคัญเกี่ยวข้องกับชีวิตเรามากขึ้นเรื่อยๆ ไม่ว่าจะเกี่ยวข้องกับวัตถุในชีวิตประจำวันมนุษย์เช่นโทรศัพท์ เครื่องซักผ้า รถยนต์ รถไฟฟ้า หรือเกี่ยวกับธุรกิจเช่นธนาคาร ดังนั้นการสร้าง Software ต้องสร้างให้ได้คุณภาพดี ไว้ใจได้นักศึกษากล้านั่งรถไฟฟ้าที่ตนเองเป็นคนเขียน Software ควบคุมการเบรคหรือไม่ ปัญหาการสร้าง Software ในปัจจุบันยังเป็นวิกฤต คือไม่น่าเชื่อถือ ทำงานไม่ถูกต้องไม่ได้ตามที่คาดไว้ สร้างไม่สำเร็จ ไม่ทันตามกำหนดเวลา งบประมาณ หรือต้องล้มเลิกกลางคันจำนวนมาก ยกตัวอย่างเช่น ระบบควบคุมการส่งยานอวกาศ Ariane 5 ของยุโรปต้องกดระเบิดยานทิ้งเพราะวิถีการเคลื่อนที่ผิดพลาดมาก ระบบจัดการรถพยาบาลของLondon (London Ambulance) ที่ทำงานไม่ถูกต้องและต้องยกเลิกการใช้หลังเสียเงินไปจำนวนมาก ระบบเอ็กซเรย์ Therac-25 ทำให้คนตายไป 2 คนจากการใช้รังสีมากเกินไป ระบบป้องกันมิซซาย Patriot มีข้อผิดพลาดไม่สามารถป้องกันขีปนาวุธ scud ทำให้ทหารอเมริกาตายไป 28 บาดเจ็บ 98 .ในปี 1991 ระหว่างสงครามอิรัก วันที่ 9 พ.ย. 1979 ระบบควบคุมการสั่งการทางทหาร (WWMCCS World Wide Military Command and Control System) ของสหรัฐเกือบสั่งยิงหขีปนาวุธไปที่รัสเซียเนื่องจากระบบตีความว่ารัสเซียได้ปล่อยขีปนาวุธมาที่อเมริกา IBM ไม่สามารถพัฒนาระบบให้กรมศุลกากรของไทยได้สำเร็จ ล่าช้าไปนาน โชคดีตกลงกันได้ จากเหตุการณ์ต่างๆ แสดงให้เห็นวิกฤตของการสร้าง Software ปึ ค.ศ. 1968 NATO จึงได้เริ่มกำหนดสาขา Software Engineering เพื่อมุ่งหวังจะแก้ปัญหาวิกฤต เวลาผ่านไปเกือบ 40 ปี การสร้าง Software ก็ยังเป็นวิกฤตอยู่

ทำไมสร้าง Software ถึงได้ยากเย็น ล้มเหลวจนเป็นวิกฤตกัน

   หากแยก Software เป็นประเภทจะได้ 3 ประเภทคือ System Program หรือ Embedded System ซึ่ง Software ทำงานร่วมกับ Hardware และ โค้ดเกี่ยวกับการทำงานแบบขนาน (Concurrency) เกี่ยวกับเวลา (Real-time) และเกี่ยวกับประสิทธิภาพ (Performance) เช่นบัตร Smart Card ระบบปฏิบัติการ

   Utility Program โปรแกรมอรรถประโยชน์เช่น Compiler Word Processor

   Business Application โปรแกรมเชิงธุรกิจที่ต้องสนับสนุนงานทางธุรกิจ ให้ทำงานได้สะดวกใช้ง่าย ตรงตามความต้องการของผู้ใช้ที่มักไม่ใช่นักคอมพิวเตอร์
โปรแกรมทั้ง 3 ประเภทยากต่างกันแต่โดยรวมโปรแกรมที่ล้มเหลวคือโปรแกรมขาดคุณสมบัติต่อไปนี้(อ้างอิงจากหนังสือชื่อ Characteristics of Software Quality เขียนโดย Bary Boehm1978)
1. โปรแกรมมีคุณสมบัติตรงตามความต้องการของผู้ใช้
สำหรับผู้ใช้โดยตรง : ถูกต้องตามความต้องการ ใช้ได้อย่างมีประโยชน์
สำหรับผู้ใช้รายอื่น : นำไปถ่ายโอนใช้กับเครื่องคอมพิวเตอร์อื่นได้
สำหรับผู้ใช้ที่เป็นผู้บำรุงรักษาหรือปรับปรุง : สะดวกต่อการปรับปรุง บำรุงรักษา
2. โปรแกรมพัฒนาเสร็จก่อนหรือตามเวลาที่กำหนด
3. ใช้ได้สะดวก แก้ไขได้ตามสภาพที่เปลี่ยนไป
สรุป โปรแกรมที่ดีต้องมีคุณสมบัติ Reliability, Efficiency, Easy Use, Maintainability
นักศึกษาลองพิจารณาจากข้อเท็จจริงต่อไปนี้ที่สำรวจโดยบริษัท Standish Group (www.standishgroup.com) แล้วสรุปว่าสาเหตุใดเป็นสาเหตุสำคัญหนึ่งของวิกฤตการสร้างSoftware
28% ของโครงการพัฒนาซอฟต์แวร์ยุติกลางคัน (ใช้เงินไป$75 พันล้านดอลาร์ก่อนยุติ)
46% ของโครงการใช้งบประมาณเกินที่คาดไว้ (ใช้งบเกิน $22 พันล้านดอลลาร์)
26% เท่านั้นที่เสร็จตามเวลาและภายในงบที่ตั้งไว้
โครงการพัฒนาซอฟต์แวร์ทั้งขนาดเล็กและขนาดใหญ่มีอัตราความสำเร็จน้อยกว่า 60 % จากซอฟต์แวร์ขนาดใหญ่ทุกๆ 6 ระบบที่นำไปใช้ จะมี 2ระบบที่ถูกยกเลิกการใช้ซอฟต์แวร์ขนาดใหญ่ 3 ใน 4 ทำงานผิดพลาด

ทำอย่างไรจึงจะสร้าง Software ที่ดีได้?

   Project Management : ทำงานเป็นทีม และต้องบริหารควบคุมความก้าวหน้าของทีม ของโครงการพัฒนาซอฟต์แวร์

   Requirement Management : ต้องเข้าใจความต้องการของผู้ใช้ให้ชัดเจน ถูกต้อง กำหนดขอบเขตให้ชัดเจน

   Reuse Design and Code : กำจัดข้อผิดพลาดที่มีใน Design โดยนำความรู้ ประสบการณ์ การออกแบบกลับมาใช้ลดค่า Maintainance โดยระบบที่ออกแบบสร้างต้องเข้าใจง่ายเพื่อปรับง่าย ออกแบบเผื่อการเปลี่ยนแปลง พยายามอย่าให้เกิด Bug ในช่วง Maintainance

ความรู้ เทคนิค แนวคิด ที่ต้องใช้ในการพัฒนา Software คืออะไร?

1. Process ดี เพื่อที่จะ Manage ดี
2. Methodology ดีที่ใช้ร่วมกับ Process
แนวคิดเชิงวัตถุ : Object-Oriented Paradigm
แพทเทิร์นการออกแบบ : Design Pattern
เขียนแบบด้วยแผนภาพ UML : Visual Model using Unified Modeling Language
การสร้างโดยประกอบคอมโพเนนท์ : Component-based Development
การทำ Test ตั้งแต่เนิ่น : Test Early

เครื่องมือที่ใช้ในการผลิต Software คืออะไร?

   Microsft Project, Requisite PRO, Rational Rose, J2SDK (Java), Microsoft Access

Software Engineer ทำอะไรได้บ้าง

   Programmer คือคนเขียน code โปรแกรม
System Analysis เรียก สั้นๆว่า SA คือวิเคราะห์ระบบ
System Engineer เรียก สั้นๆว่า SE คือวิศวกรระบบ
Software developer คือนักพัฒนาซอฟต์แวร์ มีหน้าที่ code โปรแกรม แต่เพิ่มการdesign ,Architecture ,UML แต่บางคนเรียกรวมหรือสลับกับ programmer ก็ได้

คำอธิบายรายวิชา 

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

เรียนอะไรในวิชา

  • บทนำ-วิศวกรรมซอฟต์แวร์ (Introduction to Software Engineering)
  • ภาพรวมของกระบวนการ (A Generic View of Process)
  • แบบจำลองกระบวนการพัฒนาระบบ  (Process Model)
  • การประมาณการซอฟต์แวร์ (Software Estimation)
  • วิศวกรรมความต้องการ (Requirement Engineering)
  • การสร้างแบบจำลองการวิเคราะห์  (Analysis Model)
  • การวิเคราะห์เชิงวัตถุ (Object Oriented Analysis)
  • วิศวกรรมการออกแบบ (Design Engineering)
  • การออกแบบสถาปัตยกรรม (Architectural Design)
  • การออกแบบส่วนต่อประสานผู้ใช้ (User Interface Design)
  • การทดสอบซอฟต์แวร์ (Testing)

เรามาดูกันดีกว่า ว่า เงินเดือนที่เราจะได้รับเท่าไหร่กันน่ะ ต่อเดือน

    ดูจากสถิติข้อมูลเงินเดือนจากบริษัท Adecco ปี 2013 www.tatc.ac.th/files/0812250881616_13041922220320.pdf สำหรับ junior software engineer ประสปการณ์ 0-4 ปี ต่ำสุดเริ่มที่ 20k สูงสุดคือ 40k ครับโดยประมาน 

ที่มา : https://www.facebook.com/pages/Software-Engineering-วิศวกรรมซอฟแวร์
         http://dearnan.wordpress.com/software-engineering/

Dumrongchai Cheywut
at GlurGeek.Com
ทีมวิจัย และ พัฒนา Mobile print ทีมแรก และ ทีมเดียวใน คณะวิศวกรรมศาสตร์ มหาวิทยาลัยกรุงเทพ

Leave a Reply

Copyright © 2021 GlurGeek.Com. All Rights Reserved.