วิศวกรรมซอฟต์แวร์

จากวิกิพีเดีย สารานุกรมเสรี

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

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

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

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

วิศวกรรมซอฟต์แวร์[แก้]

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

ข้อตกลงทางวิศวกรรมซอฟต์แวร์ ปรากฏขึ้นครั้งแรกในการประชุมวิศวกรรมซอฟต์แวร์นาโต ที่จัดขึ้นในปี ค.ศ. 1968 และได้ให้ความสำคัญกับเหตุการณ์ "วิกฤติการณ์ซอฟต์แวร์" ในขณะนั้น ตั้งแต่นั้นเป็นต้นมา วิศวกรรมซอฟต์แวร์ก็ได้กลายมาเป็นศาสตร์และแขนงของการศึกษาเฉพาะ ในการสร้างซอฟต์แวร์ที่มีคุณภาพสูงขึ้น มีราคาถูกลงเป็นที่ยอมรับได้ ดูแลรักษาได้ง่าย และพัฒนาได้อย่างรวดเร็วขึ้น ตั้งแต่นั้นก็ยังคงมีการเปรียบเทียบวิศวกรรมซอฟต์แวร์กับวิศวกรรมแขนงอื่น ยังคงมีการถกเถียงกันว่าวิศวกรรมซอฟต์แวร์ที่แท้จริงคืออะไร และวิศวกรรมซอฟต์แวร์สมควรเป็นหนึ่งในสาขาวิศวกรรมหรือไม่ วิศวกรรมซอฟต์แวร์ได้ขยายวงกว้างอย่างไร้ขีดจำกัดไปยังผู้ที่มีส่วนเกี่ยวข้องกับซอฟต์แวร์ เช่น โปรแกรมเมอร์ การพัฒนาซอฟต์แวร์ในบางครั้งข้อตกลงอาจขึ้นอยู่กับผู้ที่มีส่วนสำคัญในอุตสาหกรรมซอฟต์แวร์ในการเปลี่ยนแปลงกระบวนการสร้างซอฟต์แวร์ แต่กระนั้นวิศวกรรมซอฟต์แวร์ก็ยังเป็นที่ใฝ่ฝันของวัยรุ่นในการประกอบอาชีพ ในนิตยสาร Money Magazine ได้กล่าวว่า อาชีพในแขนงวิศวกรรมซอฟต์แวร์มีแนวโน้มอนาคตที่สดใส[1] และในเว็บไซต์ Salary.com ได้กล่าวว่าอัตราเงินเดือนในอาชีพวิศวกรรมซอฟต์แวร์มีอัตราสูงที่สุดในสหรัฐในปี ค.ศ. 2006[2]

วิชาชีพ[แก้]

ในบางสาขาอาชีพ ยกตัวอย่างเช่น ในรัฐออนตาริโอ ประเทศแคนาดา ใบอนุญาตของวิศวกรทางด้านซอฟต์แวร์ ในหลาย ๆ พื้นที่ในโลก ไม่มีกฎหมายควบคุมอาชีพวิศวกรทางด้านซอฟต์แวร์ แต่มีข้อกำหนดบางอย่างจาก สถาบันวิศวกรไฟฟ้าและอิเล็กทรอนิกส์ (Institute of Electrical and Electronics Engineers: IEEE) และสมาคมคอมพิวเตอร์ (ACM) ซึ่งเป็นองค์กรหลักในด้านวิศวกรรมซอฟต์แวร์ ใน IEEE ได้กำหนดแนวทางไว้ในองค์ความรู้ด้านวิศวกรรมซอฟต์แวร์เมื่อปี ๒๕๔๗ ได้กำหนดแนวทางและกำหนดกรอบความรู้ที่วิศวกรด้านซอฟต์แวร์ควรรู้ และยังกำหนดจรรยาบรรณของวิศวกรซอฟต์แวร์ และนอกจากนี้ IEEE ยังมีการตีพิมพ์พจนานุกรมว่าด้วยวิศวกรรมซอฟต์แวร์และวิศวกรรมระบบ

การจ้างงาน[แก้]

ในปี 2004 ในสหรัฐ สำนักแรงงานสถิติ นับ 760840 ซอฟต์แวร์วิศวกร ถืองานในสหรัฐ; ในช่วงเวลาเดียวกันมีบาง 1.4 ล้านประกอบทำงานในสหรัฐในอื่น ๆ ทั้งหมดรวมวิศวกรรมฝึกหัด เนื่องจากความญาติเป็นความแปลกฟิลด์การศึกษาทางการศึกษาในวิศวกรรมซอฟต์แวร์ นั้นมักจะสอนเป็นส่วนหนึ่งของหลักสูตรด้านวิทยาศาสตร์คอมพิวเตอร์และเป็นผล มากที่สุดซอฟต์แวร์วิศวกรถือด้านวิทยาศาสตร์คอมพิวเตอร์องศา

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

มีความถกเถียงในอนาคตโอกาสการจ้างงานสำหรับวิศวกรและซอฟต์แวร์อื่น ๆ ไอที ผู้เชี่ยวชาญด้าน ตัวอย่างเช่นออนไลน์ล่วงหน้าตลาดที่เรียกว่า "อนาคตของ ITJOBS ไอทีงานในอเมริกา" พยายามตอบว่าจะมีเพิ่มเติมไอทีงานรวมทั้งซอฟต์แวร์วิศวกรในกว่า 2012 มีใน ค.ศ. 2002

การรับรอง[แก้]

การรับรองวิชาชีพของ วิศวกรซอฟต์แวร์ ยังเป็นเรื่องโต้แย้งกันอยู่ บ้างก็เห็นว่าใบรับรองเป็นเครื่องมือสำหรับยกระดับหลักปฏิบัติของมืออาชีพ และ วัตถุประสงค์ของการให้ใบรับรองวิชาชีพวิศวกรซอฟต์แวร์ เป็นการปกป้องสาธารณะ[1] สมาคมคอมพิวเตอร์หรือ ACM มีการรับรองวิชาชีพในปี 1980 และถูกยกเลิกไปเนื่องจากขาดความสนใจ ACM ได้มีการตรวจสอบความเป็นไปได้ของการรับรองวิชาชีพ วิศวกรรมซอฟต์แวร์ในปี 1990 แต่ในที่สุดการรองดังกล่าวก็ถูกตัดสินว่าไม่เหมาะสมในเรื่องการรับรองวิชาชีพในอุตสาหกรรมของวิศวกรรมซอฟต์แวร์ ในปี 2006 สมาคม IEEE ได้มีการรับรองวิชาชีพซอฟต์แวร์เกิน 575 ราย ในประเทศแคนาดา Canadian Information Processing Society ได้สร้างกฎหมายที่รู้จักเพื่อรองรับอาชีพข้อมูลระบบผู้เชี่ยวชาญ สถาบันวิศวกรรม ซอฟต์แวร์ได้ให้การรับรองที่ระบุหัวข้อขึ้น เช่นความปลอดภัย การปรับปรุงกระบวนการของสถาปัตยกรรมซอฟต์แวร์ การรับรองโปรแกรมส่วนใหญ่ในอุตสาหกรรมไอทีเป็นการรับรองเชิงเฉพาะด้านเทคโนโลยี และมีการจัดการโดยผู้ขายเทคโนโลยีเหล่านี้ โปรแกรมเหล่านี้มีการรับรองที่เหมาะสมกับสถาบันที่จะว่าจ้างให้บุคคลที่ใช้กับเทคโนโลยีนั้น

ผลกระทบของโลกาภิวัตน์[แก้]

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

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

การศึกษา[แก้]

ความรู้ทางด้านการเขียนโปรแกรมคอมพิวเตอร์เป็นความรู้พื้นฐานสำหรับอาชีพของวิศวกรซอฟต์แวร์ แต่เท่านั้นยังไม่เพียงพอ ส่วนใหญ่วิศวกรซอฟต์แวร์มีวุฒิการศึกษาในสาขาวิทยาการคอมพิวเตอร์ เนื่องจากอดีตยังไม่ค่อยมีหลักสูตรการเรียนการสอนระดับอุดมศึกษาในสาขาวิศวกรรมซอฟต์แวร์ อย่างไรก็ตามได้มีการเริ่มมีหลักสูตรสาขาวิศวกรรมซอฟต์แวร์ เปิดสอนมากขึ้น โดยเฉพาะอย่างยิ่งระดับปริญญาโทและปริญญาเอก ในช่วงปี ค.ศ. 2001-2004 ได้คณะวิชาการกลุ่มหนึ่งได้พัฒนาหลักสูตรต้นแบบ (อังกฤษ: Model Curriculum) สำหรับวิศวกรรมซอฟต์แวร์ระดับปริญญาตรี เรียกว่า SE2004 เพื่อให้เป็นมาตรฐานสากล การพัฒนาหลักสูตรต้นแบบดังกล่าวได้รับการสนับสนุนจากสมาคม ACM และสมาคมคอมพิวเตอร์แห่ง IEEE[2]

ในปี ค.ศ. 1998 มหาวิทยาลัยบัณฑิตศึกษาแห่งนาวาล (Naval Postgraduate School) ในสหรัฐ ได้ริเริ่มหลักสูตรปริญญาเอกสาขาวิศวกรรมซอฟต์แวร์เป็นครั้งแรกในโลก[ต้องการอ้างอิง] Steve McConnell ได้ให้ความเห็นว่า เป็นเพราะมหาวิทยาลัยส่วนใหญ่มีการเรียนการสอนวิทยาการคอมพิวเตอร์มากกว่าวิศวกรรมซอฟต์แวร์ จึงทำให้ขาดแคลนวิศวกรซอฟต์แวร์ที่แท้จริง ในปี ค.ศ. 2004 สมาคมคอมพิวเตอร์แห่ง IEEE ได้พัฒนา องค์ความรู้ สำหรับสาขาวิศวกรรมซอฟต์แวร์ หรือเรียกว่า Software Engineering Body of Knowledge จนได้รับการรับรองมาตรฐานสากล ISO (ISO/IEC TR 19759:2005) [3]

European Commission ภายในโปรแกรม Erasmus Mundus สำหรับนักศึกษาจากยุโรป และประเทศอื่น ๆ. นี่เป็นการร่วมกันของ4มหาวิทยาลัยในยุโรป [4]

สาขาวิชาย่อย[แก้]

วิศวกรรมซอฟต์แวร์สามารถแบ่งออกไปได้อีก 10 สาขาวิชาย่อย คือ[4]

  • การวิเคราะห์ความต้องการของซอฟต์แวร์: การศึกษาวิเคราะห์ข้อกำหนดและข้อกำหนดสำหรับการตรวจสอบความถูกต้องของซอฟต์แวร์.
  • การออกแบบซอฟต์แวร์: การออกแบบซอฟต์แวร์มักใช้เครื่องมือช่วยในการออกแบบ Computer-Aided Software Engineering (CASE) และใช้การออกแบบที่เป็นมาตรฐานที่เป็นที่ยอมรับโดยทั่วไปเช่น การออกแบบโดยใช้ภาษายูเอ็มแอล (UML) เป็นต้น
  • การพัฒนาซอฟต์แวร์: การพัฒนาซอฟต์แวร์ด้วยภาษาการเขียนโปรแกรมคอมพิวเตอร์ต่าง ๆ
  • การทดสอบซอฟต์แวร์: การทดสอบการทำงานของซอฟต์แวร์
  • การบำรุงรักษาซอฟต์แวร์: ระบบซอฟต์แวร์ต่าง ๆ มักมีปัญหาหลาย ๆ อย่าง หลังจากพัฒนาเสร็จแล้วยังจำเป็นต้องมีการเพิ่มเติมเรื่อย ๆ เป็นเวลาอีกยาวนาน
  • การจัดการการตั้งค่าซอฟต์แวร์: เนื่องจากซอฟต์แวร์เป็นระบบที่มีคววมซับซ้อนสูง การกำหนดค่า (เช่นการควบคุมเวอร์ชันและการควบคุมซอร์ซโค๊ด) ต้องได้รับการจัดการตามมาตรฐานและกรรมวิธีที่ถูกต้อง
  • การจัดการวิศวกรรมซอฟต์แวร์: การบริหารจัดการระบบซอฟต์แวร์เรียนแบบมาจากการบริหารโครงการ แต่มีข้อแตกต่างกันเล็กน้อย ซึ่งจะพบแค่ในสาขาของซอฟต์แวร์
  • กระบวนการพัฒนาซอฟต์แวร์: กระบวนการพัฒนาซอฟต์แวร์เป็นหัวข้อที่มีผู้พูดถึงเป็นอย่างมาก เช่น กระบวนการพัฒนาซอฟต์แวร์แบบเอจายล์ (อังกฤษ: Agile) หรือ กระบวนการพัฒนาซอฟต์แวร์แบบน้ำตก (Waterfall)
  • เครื่องมือในวิศวกรรมซอฟต์แวร์
  • คุณภาพซอฟต์แวร์: การควบคุมคุณภาพซอฟต์แวร์ และการประกันคุณภาพให้กับการพัฒนาซอฟต์แวร์
  • ซอฟต์แวร์ท้องถิ่น: เป็นหนึ่งสาขาของอุตสาหกรรมนี้ที่เกี่ยวกับภาษาท้องถิ่น

ดูเพิ่ม[แก้]

อ้างอิง[แก้]

  1. Kruchten, Philippe (2008). "Licensing Software Engineers?" (PDF). คลังข้อมูลเก่าเก็บจากแหล่งเดิม (PDF)เมื่อ 2011-06-29. สืบค้นเมื่อ 2009-05-20. {{cite journal}}: Cite journal ต้องการ |journal= (help); ไม่รู้จักพารามิเตอร์ |month= ถูกละเว้น (help); ไม่รู้จักพารามิเตอร์ |pubhisher= ถูกละเว้น แนะนำ (|publisher=) (help)
  2. ""Software Engineering 2004"". IEEE Computer Society. สืบค้นเมื่อ 20 พฤษภาคม พ.ศ. 2552. {{cite web}}: ตรวจสอบค่าวันที่ใน: |accessdate= (help)
  3. ""ISO/IEC TR 19759:2005"". ISO.org. สืบค้นเมื่อ 20 พฤษภาคม พ.ศ. 2552. {{cite web}}: ตรวจสอบค่าวันที่ใน: |accessdate= (help)
  4. 4.0 4.1 executive editors, Alain Abran, James W. Moore ; editors, Pierre Bourque, Robert Dupuis. (2004). Guide to the Software Engineering Body of Knowledge - 2004 Version. IEEE Computer Society. p. 1-1. ISBN 0-7695-2330-7. {{cite book}}: |author= มีชื่อเรียกทั่วไป (help); ไม่รู้จักพารามิเตอร์ |editors= ถูกละเว้น แนะนำ (|editor=) (help)CS1 maint: multiple names: authors list (ลิงก์)