วันพุธที่ 25 กรกฎาคม พ.ศ. 2555

บทที่ 3


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




กระบวนการวิศวกรรมระบบ
        กระบวนการวิศวกรรมระบบ ประกอบไปด้วยขั้นตอนการทำงานทั้งหมด 7 เฟส ได้แก่
                1. การกำหนดความต้องการ (Requirement Definition)
กระบวนการของวิศวกรรมระบบ เริ่มต้นด้วยการวิเคราะห์ภาพรวมของทั้งองค์กร เพื่อกำหนดนิยามความต้องการของระบบให้ชัดเจน ด้วยการกำหนดหน้าที่ว่าระบบควรทำอะไรได้บ้าง
                2. การออกแบบระบบ (System Design)
                                เป็นการกำหนดรายละเอียดของฟังก์ชั่นในแต่ละส่วนประกอบของระบบ โดยมีกระบวนการย่อยดังนี้
                1. แบ่งส่วนความต้องการ (Partition Requirement) วิเคราะห์ความต้องการและจัดโครงสร้างด้วยการแบ่งกลุ่มความต้องการด้วยวิธีที่เหมาะสม
                2. กำหนดระบบย่อย (Identify Sub-System) นำระบบใหญ่มาแบ่งส่วนออกเป็นระบบย่อย ด้วยวิธีการหรือแนวทางที่เหมาะสม
                3. กำหนดความต้องการในแต่ละระบบย่อย (Assign Requirement) กำหนดความต้องการของแต่ละระบบย่อย ซึ่งต้องสอดคล้องกับความต้องการทั้งหมดของระบบ และจะซับซ้อนขึ้นเมื่อความต้องการมีการเปลี่ยนแปลง
                4. กำหนดฟังก์ชันของแต่ละระบบย่อย (Specify Sub-system Functionality) ซึ่งต้องสอดคล้องกับความต้องการของแต่ละระบบย่อยด้วย
                5. กำหนดส่วนประสานของระบบย่อย แต่ละระบบย่อยจะต้องเตรียมส่วนประสานไว้บริการระบบย่อยอื่นๆ เพื่อการผนวกรวมระบบ
        3. การพัฒนาระบบย่อย (Sub-system Development)
เป็นการนำระบบย่อยที่ถูกกำหนดรายละเอียดไว้แล้วในระยะการออกแบบ มาสร้างตามรายละเอียดที่กำหนดไว้ ตามกระบวนการที่เหมาะสม การพัฒนาระบบย่อยโดยทั่วไปจะดำเนินการแบบขนาน เมื่อพบปัญหาจะต้องย้อนกลับไปแก้ไขทันที เนื่องจากการแก้ไขระบบหลังจากการผลิตเสร็จเรียบร้อยแล้วนั้น จะทำให้เกิดต้นทุนที่สูงมาก จึงต้องหันมาแก้ไขที่ซอฟต์แวร์เอง ซึ่งความซับซ้อนของซอฟต์แวร์นั้นมีลักษณะเป็นลูกโซ่ คือ ต้องเริ่มแก้ตั้งแต่ข้อกำหนดความต้องการ งานออกแบบ มาจนถึงโค้ดโปรแกรม จึงทำให้การแก้ไขซอฟต์แวร์นั้นเป็นเรื่องยาก
        4. การผนวกรวมระบบ (System Integration)
ระบบย่อยใดที่พัฒนาเสร็จสิ้นแล้ว จะถูกผนวกรวมเข้าด้วยกันจนกลายเป็นระบบที่เสร็จสิ้นสมบูรณ์ โดยใช้แนวทางที่เรียกว่า Big Bang ซึ่งเป็นการผนวกรวมระบบย่อยทั้งหมดในคราวเดียวกัน ซึ่งมองเห็นข้อผิดพลาดได้ยาก Incremental Integration Process เป็นการผนวกรวมระบบย่อยที่ละระบบ ทำให้มองเห็นความผิดพลาดของระบบได้ง่าย เมื่อผนวกรวมระบบแล้วต้องมีการทดสอบระบบอีกครั้ง

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

                                                                                                                               นายอดุลวิทย์  อาหมัด 510702473611

บทที่ 2



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

3.             ในฐานะที่นักศึกษาเป็นวิศวกซอฟตแวร์ ควรจะเลือกพิจารณาใช้แบบจำลองกระบวนการผลิต
ซอฟตแวร์(Software Parocess Model) แบบใด เพราะเหตุใด จงให้เหตุผล
                Incremental Model ข้อดี Incremental model
1. เราสามารถส่งมอบงานได้เร็ว
2. ลดอัตราเสี่ยงการเลิกจ้าง
3. เราและ Customer สามารถมองเห็นความก้าวหน้าของโครงการได้

สรุปบทที่ 2
The software process คือกระบวนการที่ทำการพัฒนา Software ให้ประสบผลสำเร็จ แบ่งเป็น 4Process ใหญ่ๆคือ
- Specification – เป็นกระบวนการกำหนดคุณสมบัติของ software ที่พัฒนา
- Development – เป็นขั้นตอนการพัฒนา software
- Validation – เป็นขั้นตอนการตรวจสอบความถูกต้องของ software ให้ตรงกับความต้องการ
- Evolution – เป็นกระบวนการทำให้ software มีวิวัฒนาการ เป็นการปรับเปลี่ยนเพิ่มสิ่งดีๆเข้ามาและเอาสิ่งที่ไม่ดีหรือไม่จำเป็นออกไป ซึ่งจะเปลี่ยนแปลงไปตามเทคโนโลยีหรือตามความต้องการของผู้ใช้

Waterfall Model ประกอบด้วย 5 ขั้นตอน
- Requirement Definition : การกำหนดหรือระบุความต้องการของระบบและคุณสมบัติของความต้องการ
- System and Software Design : ออกแบบระบบ
- Implementation and Unit testing : ลงมือพัฒนาและทำการทดสอบ
- Integration and System testing : เอาแต่ละส่วนย่อยๆมาประกอบรวมกัน
- Operation and Maintenance : ติดตั้งใช้งานจริงและขั้นตอนการบำรุงรักษา โดยที่สามารถย้อนกลับไปทำขั้นตอนเดิมๆได้เมื่อเกิดปัญหา
ข้อดี : เราทำตามขั้นตอนได้ชัดเจน เพราะมีการบ่งบอกว่าแต่ละขั้นตอนต้องทำอะไร และติดตามความคืบหน้าได้ชัดเจน
ข้อเสีย : เมื่อผ่านขั้น Requirement ไปแล้ว และเราไปทำขั้นตอนอื่นๆ จะมายุ่งกับ Requirement อีกไม่ได้แล้วจนกว่าจะจบกระบวนการถึงจะกลับไปทำ Requirement อีกทีได้ ทำให้เสียเวลาสิ้นเปลืองทรัพยากร

Evolutionary Development
-                   การพัฒนาซอฟต์แวร์ในลักษณะพัฒนาเป็นวิวัฒนาการไปเรื่อยๆ
-                   เป็นการพัฒนาคุณสมบัติที่ต้องพัฒนาเพิ่มขึ้นเรื่อยๆ
Reuse-Oriented Development
1. พัฒนา ซอฟต์แวร์ใหม่ล้วนๆเลย โดยพัฒนาเป็นลักษณะ Object เพื่อเอากลับมาใช้ได้ใหม่อีก
2. พัฒนา ซอฟต์แวร์ไม่ทั้งหมด 100% แต่เราหา ซอฟต์แวร์อื่นๆที่พัฒนาแล้วมาเชื่อมกับของเรา                          

Process Iteration
การวนรูปพัฒนาซ้ำๆโดยที่วิธีการพัฒนาที่ทำซ้ำมี 2 ลักษณะใหญ่ๆคือ
- Incremental Development
- Spiral Development

Incremental Development
จะสอดคล้องกับ Model ต่างๆที่กล่าวไว้เป็นส่วนใหญ่ จะทำเป็นทีละส่วนย่อยๆแล้วนำไปทำการทดสอบหรือไม่ก็ส่งงานไปเหมือนกับเป็น Milestone ย่อยๆไป
ข้อดี :
- ถ้า Requirement เปลี่ยนแปลงก็สามารถนำรวมเข้าไปได้เรื่อยๆ

Spiral modal
แบ่งการพัฒนาเป็น 4 โซน
1. เป็นโซนของการวางแผนสำหรับ Phase ถัดๆไป
2. เป็นโซนที่จะพิจารณาว่าวัตถุประสงค์ของสิ่งที่พัฒนา ณ เวลานั้นมีอะไรบ้าง และมีปัญหาที่จะต้องแก้ไขหรืออุปสรรคอะไรบ้าง
3. เป็นการวิเคราะห์ว่าจะมีความเสี่ยงอะไรบ้าง และสามารถสร้างทางเลือกเพื่อแก้ปัญหาอะไรได้บ้าง
4. ลงมือพัฒนาและทดสอบระบบ

ขั้นตอนที่เกี่ยวข้องกับ Requirement
1. ศึกษาความเป็นไปได้ - เป็นสิ่งแรกที่ควรจะทำในการพัฒนาระบบหรือ SW ใดๆ ซึ่งจะเป็นการศึกษาว่าคุ้มทุนหรือเปล่าที่จะสร้างหรือสร้างแล้วจะพบกับปัญหาอะไรมากน้อยแค่ไหน
2. เก็บรวบรวมและวิเคราะห์ Requirement - เกิดจากการสัมภาษณ์ผู้บริหารและผู้ปฏิบัติ ,ดูเอกสารและแบบฟอร์มต่างๆ , สังเกตจากการทำงานจริง และนำมาวิเคราะห์ได้ออกมาเป็น System model
3. กำหนด Specification – ซึ่งก็จะมีการวนกลับไปมาระหว่างการกำหนด Spec. และเก็บ Req.เพิ่มเติม ได้ออกมาเป็น User Requirement กับ System Requirement เขียนมาเป็นข้อๆชัดเจนว่าต้องการให้ระบบทำอะไรบ้าง
4. ตรวจสอบ Requirement ว่าถูกต้อง, ไม่คลุมเครือ และนำไปให้ผู้บริหารหรือผู้ใช้อ่านอีกครั้งว่าใช่หรือไม่ ซึ่งจะได้ออกมาเป็น Requirement document

กระบวนการออกแบบ
1.             Software specification
2.             Software design
3.             Software validation
4.             Software evolution

                                                                                                           นายอดุลวิทย์  อาหมัด 510702473611

บทที่1 SE

บทที่ 1
1.             จงยกตัวอย่างของผลกระทบของซอฟต์แวร์ ทั้งทางด้านบวกและลบที่มีต่อสังคม
มีผลกระทบทั้งในด้านบวกและลบ  เช่น
-                   มีการปรับปรุงคุณภาพชีวิตที่ดีขึ้น  ผู้คนสามารถสั่งซื้อสินค้าและบริการต่าง ๆ   แบบ Online ได้ โดยไม่ต้องเดินทางออกจากบ้าน  ไม่ต้องวุ่นวายกับสภาพการจราจรและประหยัดเวลาได้มาก
-                   ในเรื่องการดูแลสุขภาพ ( Health Care) มีการปรับปรุงโดยนำเทคโนโลยีมาใช้มากขึ้น
-                   มีแนวโน้มจะใช้ Robots  มากขึ้น
-                   มีการก่ออาชญากรรมด้านคอมพิวเตอร์มากขึ้น  ผู้คนบนโลก Cyber ขาดจริยธรรม  และความมีน้ำใจของผู้คนก็อาจลดลงในขณะที่ความเห็นแก่ตัวมีมากขึ้น
-                   คนถูกลดความสามารถลง    และมีซอฟต์แวร์คอมพิวเตอร์เข้ามาทำงานแทนที่   ลดอัตราการจ้างงานเนื่องจากเจ้าของกิจการลงทุนในเครื่องจักรแทนการทำงานด้วยคน
2.             จงอธิบายเกี่ยวกับ Software Crisis ตามความเข้าใจของนักศึกษา
Software Crisis หรือแปลตรงตัวก็คือ วิกฤตการณ์ซอฟต์แวร์ ซึ่งเป็นเหตุการณ์ที่บริษัทพัฒนาซอฟต์แวร์มากมายพัฒนาโปรแกรมขึ้นมาได้อย่างไม่มีคุณภาพ โปรแกรมเสร็จจริง แต่มีปัญหาใช้ไม่ได้ มีข้อผิดพลาดมากมาย ดังนั้นเพื่อให้เกิดคุณภาพจึงได้มีการนำหลักการของ Engineering ซึ่งมีทั้งการหลักการของการวิเคราะห์และออกแบบเข้ามาประยุกต์กับ Software จึงทำให้เกิดศาสตร์ทางด้าน Software Engineering ขึ้นมา
3.             จงยกตัวอย่างซอฟต์แวร์ที่นักศึกษาว่าเป็นซอฟต์แวร์ที่มีคุณภาพ แล้วนำมาวิเคราะห์หาคุณลักษณะของซอฟต์แวร์ที่ดี ว่าตรงตามคุณลักษณะใดบ้าง
                  1. การบำรุงรักษาไฟล์ที่ใช้งานของโปรแกรม Microsoft office นั้น เมื่อมีการปรับปรุงและเปลี่ยนแปลงของโปรแกรม ไฟล์งานเดิมจากรุ่นเก่ายังจะสามารถใช้งานได้อยู่
                  2. ความสามารถในการพึ่งพา ความน่าเชื่อMicrosoft Office เป็นที่เป็นที่นิยมเป็นอย่างมาก เนื่องมาจากเสถียรภาพของโปรแกรมนั้นมีประสิทธิภาพ และมาตรฐานการทำงานที่สูง มีความน่าเชื่อน้อยมากที่จะเกิดความผิดพลาดในการทำงาน
                  3. ความสามารถด้านประสิทธิภาพ Microsoft Office เป็นโปรแกรมที่ได้รับการยอมรับในประสิทธิภาพการทำงาน เนื่องจากส่วนติต่อกับผู้ใช้ที่(User Interface) ใช้งานง่าย ตรงตามความต้องการของผู้ใช้ และการใช้งานทรัพยากรทางด้าน Hardware ไม่สูงมากทำให้ประหยัดทรัพยากรการทำงาน
                  4. ความสามารถในการใช้งานส่วนติดต่อกับผู้ใช้ง่ายต่อการใช้งานตรงตามความต้องการของผู้ใช้สามารถศึกษาการใช้งานได้ด้วยตนเอ
4.             นักศึกษาคิดว่า นักวิศวกรซอฟต์แวร์ควรมีทักษะความรู้ ความเชี่ยวชาญในด้านใดบ้าง จงอธิบาย
-                   ต้องมีความสามารถในการเขียน และอ่านแบบจำลองของโปรแกรม เพื่อให้สามารถเข้าใจการทำงานของระบบ
-                   ต้องมีความสามารถ และทักษะในการเขียนโปรแกรมมากกว่า 1 ภาษา
-                   ต้องมีความรับผิดชอบ และเคารพในสิทธิทางปัญญาของผู้อื่น และใช้ความรู้ความสามารถในทางที่ถูกต้องตามจริยธรรมคอมพิวเตอร์ของนักวิศวกรรมซอฟต์แวร์
-                   นักวิศวกรรมซอฟต์แวร์ต้องเคารพและทำตามประมวลจริยธรรมพื้นฐานของนักวิศวกรรมซอฟต์แวร์




สรุปบทที่ 1
Software Cost
        การใช้งานซอฟต์แวร์ที่มีลิขสิทธิ์นั้นมีต้นทุนค่าใช้จ่ายที่แพงกว่าฮาร์ดแวร์
        1. ต้นทุนหรือค่าใช้จ่ายในการปรับเปลี่ยน บำรุงรักษาซอฟต์แวร์จะเท่ากับหรือใกล้เคียงกับต้นทุน
            ของฮาร์ดแวร์
        2. ต้นทุนในการบำรุงรักษาซอฟต์แวร์จะมีค่ามากกว่าการพัฒนาซอฟต์แวร์ขึ้นมาใหม่
        3. นักวิศวกรรมซอฟต์แวร์จะต้องมีการวิเคราะห์ และพิจารณาในการบำรุงรักษา หรือปรับเปลี่ยน
            ระบบโดยพิจารณาจากต้นทุนเป็นหลัก
ซอฟต์แวร์ คืออะไร ?
        1. ซอฟต์แวร์ คือ ชุดคำสั่งที่ใช้ในการควบคุมการทำงานของคอมพิวเตอร์ หรือเอกสารประกอบ
        2. ซอฟต์แวร์ คือ โปรแกรมคอมพิวเตอร์ และเอกสารประกอบ
        ซอฟต์แวร์ที่ ผลิตขึ้นมี 2 ลักษณะ คือ
                1. พัฒนาขึ้นเพื่อใช้งานภาพในองค์กร
                2. พัฒนาขึ้นเพื่อจำหน่ายในเชิงพาณิชย์
Software Engineering ?
         คือ การนำหลักการทางวิศวกรรมมาใช้กับทุกขั้นตอนของการของการพัฒนาซอฟต์แวร์ ตั้งแต่ก่อนพัฒนา จนได้ซอฟต์แวร์
         ความท้าทายทางด้านวิศวกรรมซอฟต์แวร์
                  1.Legacy การพัฒนาโปรแกรมใหม่ให้สามารถทำงานร่วมกับโปรแกรมเดิมได้
                  2.Heterogeneity ความไม่เข้ากันของฮาร์ดแวร์และซอฟต์แวร์
                  3. Delivery ความจำกัดด้านเวลา ความผิดพลาดในเรื่องของเวลา


ความแตกต่างของ Computer Science และ Software Engineering
         1. Computer Science จะเน้นทางด้านทฤษฎี หลักการความรู้พื้นฐานที่จะเป็นต่อการนำไปประยุกต์
             ใช้ในชีวิตประจำวัน
         2. Software Engineering จะเน้นการปฎิบัติจริงโดยนำ ทฤษฎีของ Computer Science  มาใช้ในทุก
             ขั้นตอนของการผลิตซอฟต์แวร์

ความแตกต่างระหว่าง System Engineering และ Software Engineering
         - System Engineering จะเกี่ยวข้องกับทุกๆ ขั้นตอนของการพัฒนาระบบ ทั้งด้าน ฮาร์ดแวร์ ซอฟต์แวร์ และโพรเสซ
         - System Engineering จะเกี่ยวข้องกับการกำหนดรายละเอียดของระบบ การออกแบบระบบทางด้านสถาปัตยกรรม การรวมระบบและพัฒนา

Software Process คือ กระบวนการที่พัฒนาซอฟต์แวร์ให้ประสบความสำเร็จ แบ่งออกเป็น 4 ขั้นตอน
        1. Specification การกำหนดความต้องการของระบบ โดยสอบถามจาก User
        2.Development การพัฒนาระบบ รวมถึงการออกแบบระบบ
        3.Validation การทวนสอบ คือขั้นตอนของการทดสอบการทำงานของระบบว่าตรงตามความ
            ต้องการของผู้ใช้งานหรือไม่
        4. Evolution การปรับปรุงระบบ ในอนาคตเมื่อความต้องการในการใช้งานระบบเปลี่ยนไป จะต้อง
            ทำงานปรับปรุงระบบให้ตรงกับความต้องการที่เปลี่ยนไปด้วย

Software Process Model คือ แบบจำลองในการพัฒนาซอฟต์แวร์ มีอยู่ 3 มุมมอง(แบบ)
        1. Workflow มุมมองเน้นกิจกรรมของโปรแกรม นิยมเขียนด้วย Flowchart
        2.Data-Flow มุมมองเกี่ยวข้องกับข้อมูลเป็นหลัก นิยมเขียนด้วย Data flow Diagram
        3.Role/Action มุมมองที่ให้คววามสำคัญว่าใครทำอะไร นิยมเขียนด้วย User case Diagram
       แบบจำรองทั่วๆไป

CASE (Computer-Aided Software Engineering) คือ ซอฟต์แวร์ที่พัฒนาขึ้นมาเพื่อใช้สร้างซอฟต์แวร์
       - Upper-CASEขั้นตอนการพัฒนาในช่วงแรก เครื่องมือที่ใช้ เช่น MS-Project, Visio, E-Draw
       -Lower-CASEขั้นตอนการเขียนโปรแกรม การทดสอบ เครื่องมือที่ใช้ เช่น MS-Studio, Eclipse,
          Edit Plus


คุณสมบัติของซอฟต์แวร์ที่ดี
       1.Maintainability ต้องมีความสามารถในการบำรุงรักษา จะต้องมีการเปลี่ยนแปลงเพื่อตอบสนองต่อ
           ความต้องการของผู้ใช้ที่เปลี่ยนแปลงไป การเปลี่ยนแปลงจะต้องไม่ส่งผลกระทบต่อการทำงาน
           ของระบบ
       2.Dependability ความสามารถในการพึ่งพา ความน่าเชื่อถือ ต้องผ่านการตรวจสอบในทุกฟังก์ชัน
       3. Efficiency ความสามารถในด้านประสิทธิภาพ เช่น ประหยัดทรัพยากรของเครื่อง
       4. Usability ความสามารภในการใช้งาน เช่น ความสะดวก ความปลอดภัย สามารถเรียนรู้การใช้งาน
           ได้เร็ว

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

ACM ได้ร่วมมีกับ IEEE กำหนด Code of Ethics ขึ้น ซึ่งก็คือประมวลเบื้องจ้นที่นักวิศวกรรมซอฟต์แวร์ต้องปฎิบัติร่วมกัน มีทั้งหมด 8 ข้อ
         1. Public จะต้องทำหน้าที่โดยคำนึงถึงผลประโยชน์ส่วนรวมด้วย
         2.Client and Employer ต้องคำนึงถึงความต้องการของลูกค้าและนายจ้าง
         3.Product จะต้องผลิตผลงานด้วยมาตรฐานสูงสุดตามหลักวิชาการ
         4.Judgment ต้องตัดสินใจได้อย่างอิสละ และเป็นตัวของตัวเอง
         5.Management หากนักวิศวกรรมซอฟต์แวร์ เป็นผู้บริหารหรือผู้จัดการจะต้องสนับสนุนและเผยแพร่
             หลักจริยธรรม
         6.Profession ต้องยึดมั่นในคุณธรรม รักษาชื่อเสียงในวิชาชีพของตนเอง
         7.Colleagues ต้องมีความเป็นธรรมและสนับสนุนเพื่อนร่วมงาน
         8. Self จะต้องพัฒนาตนเองอยู่เสมอ


                                                                                                                                          นายอดุลวิทย์  อาหมัด 510702473611