วิศวกรรมซอฟต์แวร์เป็นสาขาวิศวกรรมที่เกี่ยวข้องกับทุกแง่มุมในการผลิตซอฟต์แวร์ตั้งแต่ขั้นเริ่มต้นของข้อกำหนดระบบจนถึงการบำรุงรักษาระบบหลังจากที่ได้เริ่มใช้งานแล้ว
- แง่มุมทางด้านวิศวกรรม -- การใช้ทฤษฎีและวิธีการที่เหมาะสมในการแก้ปัญหาที่เกิดขึ้นกับข้อจำกัดภายในองค์กรและการเงิน
- แง่มุมในการผลิตซอฟต์แวร์ -- ไม่ใช่เพียงแค่กระบวนการทางเทคนิคในการพัฒนาเท่านั้น ยังรวมถึงการบริหารโครงการ การพัฒนาเครื่องมือ และวิธีการอื่น ๆ เพื่อสนับสนุนการผลิตซอฟต์แวร์
ระบบซอฟต์แวร์มีหลายประเภทของ และไม่มีเทคนิคซอฟต์แวร์อเนกประสงค์หรือเทคนิคสำเร็จรูปที่สามารถใช้ได้กับการสร้างซอฟต์แวร์ได้ทุก ๆ รูปแบบ
วิธีการและเครื่องมือด้านวิศวกรรมซอฟต์แวร์ ขึ้นอยู่กับประเภทของแอพพลิเคชั่นที่พัฒนาขึ้น
- แตกต่างกันไปตามความต้องการของลูกค้า และพื้นฐานของทีมพัฒนา
- เป็นระบบ application ที่รันบนเครื่องคอมพิวเตอร์ (เช่นพีซี) ประกอบด้วยฟังก์ชันการทำงานที่จำเป็นทั้งหมดและไม่จำเป็นต้องเชื่อมต่อกับเครือข่าย
- Application ที่รันบนคอมพิวเตอร์ระยะไกลและเข้าถึงได้โดยผู้ใช้จากเครื่องพีซีหรือ terminal ของตนเอง ซึ่งรวมถึงweb application
- เป็นซอฟต์แวร์ที่ควบคุมและจัดการอุปกรณ์ฮาร์ดแวร์แบบฝังตัว ในโลกนี้มีระบบฝังตัวมากกว่าระบบอื่น ๆ
- เป็นระบบที่ออกแบบมาเพื่อประมวลผลข้อมูลเป็นกลุ่มใหญ่ สามารถนำข้อมูลจำนวนมากมาประมวลผลเพื่อสร้างผลลัพธ์ที่ต้องการ
- เป็นระบบที่เน้นใช้งานส่วนบุคคล และถูกออกแบบมาเพื่อความบันเทิงแก่ผู้ใช้เป็นหลัก
- เป็นระบบที่พัฒนาโดยนักวิทยาศาสตร์และวิศวกรในการจำลองกระบวนการหรือสถานการณ์ทางกายภาพซึ่งรวมถึงแบบจำลองของวัตถุหลายสิ่งที่แตกต่างกันแต่ทำงานประสานกัน
- เป็นระบบที่รวบรวมข้อมูลจากสภาพแวดล้อมโดยใช้ชุดเซ็นเซอร์และส่งข้อมูลเหล่านั้นไปยังระบบอื่น ๆ เพื่อการประมวลผล
- เป็นระบบที่ประกอบด้วยระบบซอฟต์แวร์อื่น ๆ จำนวนมาก
ถึงแม้ประเภทของซอฟต์แวร์จะมีหลากหลาย แต่หลักการพื้นฐานบางอย่าง ก็สามารถใช้ได้กับการสร้างซอฟต์แวร์ทุกประเภทโดยไม่คำนึงถึงเทคนิคการพัฒนาที่ใช้ เช่น
- ระบบควรได้รับการพัฒนาโดยมีความเข้าใจในกระบวนการพัฒนาอย่างถ่อมแท้ ถึงแม้ว่าจะมีกระบวนการที่แตกต่างกันไปสำหรับซอฟต์แวร์ประเภทต่างๆ
- ความเชื่อถือได้และประสิทธิภาพเป็นสิ่งสำคัญสำหรับระบบทุกประเภท
- ทำความเข้าใจและการจัดการข้อกำหนดและความต้องการของซอฟต์แวร์ (สิ่งที่ซอฟต์แวร์ควรทำ) ให้รอบคอบ เนื่องจากมีความสำคัญเป็นลำดับต้น ๆ
- ถ้าเป็นไปได้ (และเหมาะสม) ควรใช้ซอฟต์แวร์ที่พัฒนาแล้วแทนที่จะเขียนซอฟต์แวร์ใหม่
- ปัจจุบันนี้เว็บเป็นแพลตฟอร์มสำหรับการรัน application ที่ได้รับความนิยมมากขึ้นเรื่อย ๆ
- มีการพัฒนาระบบบนเว็บมากกว่าระบบ stand alone
- บริการเว็บ (web services) ช่วยให้สามารถเข้าถึง application ได้ผ่านทางเว็บ
- บริการเว็บช่วยให้เข้าถึงข้อมูลได้หลากหลาย ทั้งที่สดใหม่หรือเก็บถาวร
- Cloud computing เป็นแนวทางในการให้บริการคอมพิวเตอร์ซึ่ง application ทำงานจากระยะไกลบน 'cloud’
- ผู้ใช้ไม่ได้ซื้อซอฟต์แวร์ (หรือแม้แต่ฮาร์ดแวร์) แต่เป็นระบบที่จ่ายตามการใช้งาน
- การใช้ซอฟต์แวร์ซ้ำเป็นวิธีการที่สำคัญสำหรับการสร้างระบบบนเว็บ เมื่อจะสร้างระบบเหล่านี้เราควรนึกถึงการใช้งานส่วนประกอบและระบบซอฟต์แวร์ที่มีอยู่เดิมเป็นอันดับแรก
- ระบบเว็บได้รับการพัฒนาและแจกจ่ายออกมาเรื่อย ๆ ตามความต้องการที่เปลี่ยนไปทุกวัน
- ปัจจุบันนี้ได้รับการยอมรับโดยทั่วไปว่า เราไม่สามารถระบุข้อกำหนดทั้งหมดสำหรับระบบใดๆ ได้ล่วงหน้า ต้องทำไปแก้ไป พัฒนาเพิ่มเติมไปเรื่อย ๆ
- เทคนิคการพัฒนาแบบ Incremental และ agile จะช่วยให้พัฒนาซอฟต์แวร์ได้ทันความต้องการของตลาด
- ซอฟต์แวร์สามารถสร้างโดยใช้วิศวกรรมซอฟต์แวร์เชิงบริการ ซึ่งส่วนประกอบซอฟต์แวร์เป็นบริการเว็บแบบ stand-alone
- เมื่อเทคโนโลยีการพัฒนาอินเทอร์เฟซเช่น AJAX และ HTML5 เกิดขึ้น จะสนับสนุนการสร้าง interface ที่หลากหลายภายในเว็บเบราเซอร์
- วิศวกรรมซอฟต์แวร์เกี่ยวข้องกับ ความรับผิดชอบ มากกว่าเพียงแค่การใช้ ทักษะทางเทคนิค
- วิศวกรซอฟต์แวร์จะต้องปฏิบัติตนอย่างซื่อสัตย์และมีจริยธรรมหากต้องได้รับการยอมรับว่าเป็นมืออาชีพ
- พฤติกรรมทางจริยธรรมเป็นมากกว่าแค่การปฏิบัติตามกฎหมาย แต่เกี่ยวข้องกับการปฏิบัติตามหลักการที่ถูกต้องตามหลักศีลธรรม
- วิศวกรควรให้ความสำคัญกับการรักษาความลับของนายจ้างหรือลูกค้า โดยไม่คำนึงถึงว่าได้มีการลงนามในข้อตกลงการรักษาความลับอย่างเป็นทางการหรือไม่
- วิศวกรไม่ควรบิดเบือนความสามารถของตน ไม่ควรที่จะรับงานที่ตนไม่มีความสามารถ
- วิศวกรควรตระหนักถึงกฎหมายท้องถิ่น ที่เกี่ยวกับการใช้ทรัพย์สินทางปัญญา เช่น สิทธิบัตร ลิขสิทธิ์ ฯลฯ ควรระมัดระวังเพื่อให้แน่ใจว่าทรัพย์สินทางปัญญาของนายจ้างและลูกค้าได้รับความคุ้มครอง
- วิศวกรซอฟต์แวร์ไม่ควรใช้ทักษะทางเทคนิคในการใช้คอมพิวเตอร์ของผู้อื่นในทางที่ผิด การใช้คอมพิวเตอร์ในทางที่ผิดจากระดับง่าย ๆ (เช่น เล่นเกมบนเครื่องของนายจ้าง) ไปจนถึงการกระทำที่รุนแรงมาก (เช่น การเผยแพร่ไวรัส)
ACM/IEEE Code of Ethics
- The professional societies in the US have cooperated to produce a code of ethical practice.
- Members of these organisations sign up to the code of practice when they join.
- The Code contains eight Principles related to the behaviour of and decisions made by professional software engineers, including practitioners, educators, managers, supervisors and policy makers, as well as trainees and students of the profession.
-
Computers have a central and growing role in commerce, industry, government, medicine, education, entertainment and society at large. Software engineers are those who contribute by direct participation or by teaching, to the analysis, specification, design, development, certification, maintenance and testing of software systems.
-
คอมพิวเตอร์มีบทบาทสำคัญในการพาณิชย์ อุตสาหกรรม การแพทย์ การศึกษา ความบันเทิง และสังคมโดยรวม วิศวกรซอฟต์แวร์เป็นผู้ที่มีส่วนร่วมโดยตรงหรือโดยการถ่ายทอดความรู้สำหรับการวิเคราะห์ การออกข้อกำหนด การออกแบบ การพัฒนา การรับรอง การบำรุงรักษา และการทดสอบระบบซอฟต์แวร์
-
Because of their roles in developing software systems, software engineers have significant opportunities to do good or cause harm, to enable others to do good or cause harm, or to influence others to do good or cause harm. To ensure, as much as possible, that their efforts will be used for good, software engineers must commit themselves to making software engineering a beneficial and respected profession.
-
เนื่องจากบทบาทของพวกเขาในการพัฒนาระบบซอฟต์แวร์ วิศวกรซอฟต์แวร์มีโอกาสที่สำคัญ ในการทำดีหรือทำให้เกิดอันตราย เพื่อให้ผู้อื่นทำดีหรือทำให้เกิดอันตรายหรือ เพื่อให้ผู้อื่นทำผลงานได้ดีหรือเป็นอันตราย เพื่อให้มั่นใจว่าความพยายามของพวกเขาจะถูกนำมาใช้เพื่อประโยชน์สูงสุด วิศวกรซอฟต์แวร์ต้องมุ่งมั่นที่จะทำให้วิศวกรรมซอฟต์แวร์เป็นอาชีพที่เป็นประโยชน์และเป็นที่นับถือ