วันพฤหัสบดีที่ 26 กรกฎาคม พ.ศ. 2555

ตามคำถามบทเรียนที่ 3-4



Gantt Chart

1. จงสร้างปผนภูมิแกนต์ (Gantt Chart)
    ตอบ


Gantt Chart

2. จงสร้างเครือข่าย PERT
    ตอบ


เครือข่าย PERT

3. โครงการนี้ใช้เวลาในการดำเนินงานกี่วัน
    ตอบ จากการพิจารณเครือข่าย PERT ในข้อที่ 2 สามารถนำมาคำนวณเป็นสายงานได้ 3 สายดังนี้
                   สายงานที่ 1 คือ P-Q-R-S = 31 วัน
                   สายงานที่ 2 คือ P-T-Z-S  = 32 วัน
                   สายงานที่ 3 คือ X-Y-Z-S = 34 วัน
             เนื่องจากโจทย์ไม่ได้กำหนดการเร่งระยะเวลาการดำเนินโครงการ ทำให้โครงการนี้มีระยะเวลา
             การดำเนินงาน 34 วัน

4. จงหาเส้นทางวิกฤตพร้อมระบุกิจกรรมวิกฤต
    ตอบ จากข้อที่ 3 สายงานวิกฤตคือ สายงานที่ 3 ซึ่งใช้ระยะเวลาดำเนินงานสูงสุด 34 วัน

ตอบคำถามบทเรียนที่ 2

1. จงเปรียบเทียบจุดเด่นจุดด้อยของระเบียบวิธีปฎิบัติของวิศวกรรมซอฟต์แวร์ ระหว่างวิธีเชิงโครงสร้าง (Structured Approach) และวิธีเชิงวัตถุ (Object-Oriented Approach) 
    ตอบ วิธีเชิงโครงสร้าง
              จุดเด่น  1. เป็นวิธีการวิเคราะห์ออกแบบเชิงโครงสร้าง
                           2. มีการแบ่งระบบออกเป็นส่วนย่อยๆ
                           3. มีลักษณะเป็นลำดับชั้น
              จุดด่อย 1. การวิเคราะห์และรวบรวมข้อมูลมีการแยกออกเป็นส่วนๆ ทำให้ใช้เวลานาน
                           2. ต้นทุนสูง
                           3. เนื่องจากใช้เวลานาน ทำให้เสี่ยงต่อการเปลี่ยนแปลงความต้องการของผู้ใช้
            วิธีเชิงวัตถุ
              จุดเด่น  1. การวิเคราะห์และออกแบบทำได้อย่างรวดเร็ว
                           2. รองรับระบบงานที่มีความซับซ้อนสูง
                           3. ทันต่อการเปลี่ยนแปลงความต้องการของผู้ใช้
              จุดด่อย 1. ต้องใช้ผู้ที่มีความสามารถความเชี่ยวชาญในการเขียนโปรแกรมสูง


 2. Waterfall model แตกต่างจาก Spiral model อย่างไร จงอธิบายตามความเข้าใจของนักศึกษา 
    ตอบ ตามความเข้าใจของผม Waterfall model แตกต่างจาก Spiral model 2 อย่างด้วยกัน คือ 1. ขั้นตอนในการพัฒนาระบบ และ 2. การวนกลับไปแก้ไขในขั้นตอนก่อนหน้า Waterfall model จะย้อนกลับไปแก้ไขในขั้นตอนก่อนหรือขั้นตอนที่ผ่านมาแล้ว ก็ต่อเมื่อเกิดปัญหาในการพัฒนา หรือต้องการเพิ่มความต้องการในด้านต่างๆ ให้กับระบบ ซึ่ง Spiral model จะต่างกันคือเป็นการวนซ้ำตั้งแต่ต้นจนจบแล้ววนซ้ำไปเรื่อยๆ 


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

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

ตอบคำถามบทเรียนที่ 1

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

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


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

4. นักศึกษาคิดว่า "นักวิศวกรรมซอฟต์แวร์" ควรมีทักษะความรู้ ความเชี่ยวชาญในด้านใดบ้าง จงอธิบาย
     ตอบ      1. ต้องมีความสามารถในการเขียน และอ่านแบบจำลองของโปรแกรม เพื่อให้สามารถเข้าใจ                    
                       การทำงานของระบบ
                   2. ต้องมีความสามารถ และทักษะในการเขียนโปรแกรมมากกว่า 1 ภาษา
                   3. ต้องมีความรับผิดชอบ และเคารพในสิทธิทางปัญญาของผู้อื่น และใช้ความรู้ความ
                       สามารถในทางที่ถูกต้องตามจริยธรรมคอมพิวเตอร์ของนักวิศวกรรมซอฟต์แวร์
                   4. นักวิศวกรรมซอฟต์แวร์ต้องเคารพและทำตามประมวลจริยธรรมพื้นฐานของ
                       นักวิศวกรรมซอฟต์แวร์

สรุปบทเรียนที่ 1 Introduction to Software Engineering


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
       แบบจำรองทั่วๆ ไป เช่น
              1. Waterfall แบบจำลองน้ำตก
              2. Evolutionary development แบบจำลองของการพัฒนาแล้วเพิ่มเติมไปเลื่อยๆ
              3. Formal transformation แบบจำลองที่เป็นระเบียบชัดเจนผิดพลาดไม่ได้
              4. Integration from reusable มุมมองการนำ Component กลับมาใช้ใหม่


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 จะต้องพัมนาตนเองอยู่เสมอ

อุปสรรคในการรักษา ประมวลเบื้องต้น 8 ข้อ
         1. ขัดแย้งในหลักการของผู้บริหารสูงสุด
         2. นายจ้างปฎิบัติอย่างไม่เป็นธรรม
         3. เข้าร่วมการสร้างอาวุธทำลายล้างร้ายแรง


สรุปบทเรียนที่ 2 Software Process

The Software Process

ขั้นตอนการพัฒนาระบบ สามารถแบ่งออกได้เป็น 4 ขั้นตอน

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

>แบบจำลองที่ใช้ในการพัฒนาระบบมี 4 แบบจำลอง

        1. Waterfall Model (แบบน้ำตก)
        2. Evolutionary Development (ปรังปรุง Version ไปเรื่อยๆ จนลูกค้าพอใจจึงจะเสร็จ)
        3. Component-based software engineering (การนำ Component ที่มีอยู่แล้วกลับมาใช้ใหม่)
        4.  Process iteration (การพัฒนาซ้ำๆ)


1. Waterfall Model



Waterfall Model

          เป็นแบบจำลองที่ประกอบขึ้นด้วยขั้นตอนที่ต่อเนื่องเป็นลำดับ ตั้งแต่ลำดับแรกจนถึงลำดับสุดท้ายว่ามีอะไรบ้าง ไหลจากที่สูงลงสู่ที่ต่ำ สามารถย้อนกลับไปแก้ไขในขั้นตอนก่อนหน้าได้ (ข้อเสีย)แต่จะมีความยุ่งยากในการในการปรับเปลี่ยน เช่น ต้องการในขั้นตอนที่ 3 ก็ต้องย้อนกลับไปขั้นตอนที่ 1, 2 ด้วย

2. Evolutionary development



Evolutionary Model

          การพัฒนาแบบนี้ทำให้เกิดการปรับปรุง ปรับเปลี่ยนความต้องการให้อยู่ในรูปแบบของ Version มี 4 ขั้นตอน 
      1. Requirement วิเคราะห์ความต้องการ
      2. System Design ออกแบบระบบ
      3. Coding and Testing ขั้นตอนการเขียนและทดสอบระบบ
      4. Assignment การประเมินผล

ปัญหา
      1. ขาดความชัดเจนในการทำงาน
      2. ระบบที่สร้างขึ้นมาไม่ค่อยเป็นระบบเท่าไร
      3. ผู้ใช้ระบบ ต้องมีความชำนาญสุูง

ข้อเสีย
      1. อาจจะรบกวนเวลาทำงานของลูกค้า ทำให้เกิดความลำคาญใจ
      2. บอกความคืบหน้าในการทำงานลำบาก

การนำแบบจำลองไปใช้
      1. ใช้กับระบบเล็กหรือขนาดกลาง
      2. นำไปใช้ในส่วนของระบบงานขนาดใหญ่
      3. นำไปใช้ในโครงงานที่มีอายุการดำเนินงานสั้นๆ

3. CBSE (Component-Based Software Engineering)



Reuse-oriented development
ข้อดี
      1. รวดเร็วขึ้น
      2. ประหยัดต้นทุน
      3. ระบบมีความเชื่อมั่นเพิ่มมากขึ้น
      4. ความเสี่ยงที่จะเกิดความล้มเหลวลดลง

ข้อเสีย
      1. หา Component ที่ตรงตามความต้องการได้ยาก
      2. ยากในการปรับปรุง Component ให้ตรงตามความต้องการ 

4. Process Iteration
       การพัฒนาแบบวนซ้ำๆ (loop) มี 2 วิธี
             1. Increment delivery การส่งระบบเพิ่มเติมไปเรื่อยๆ ทีละชุดจนเสร็จ
             2. Spiral delivery พัฒนาแบบก้หอย

   4.1 Increment delivery



Increment delivery

      ประโยชน์
         1. ลูกค้าได้รับประโยชน์ในการส่งมอบเร็วขึ้น คือการที่ลูกค้าสามารถนำระบบบางส่วนไปใช้งานได้
         2. ลดความเสี่ยงที่โครงการจะล่ม
         3. ฟังก์ชันที่มีความเสี่ยงจะถูกทดสอบมากที่สุด ทำให้เกิดความผิดพลาดได้น้อย

  4.2 Spiral delivery


Spiral Development

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



สรุปบทเรียนที่ 2 Software Process(ต่อ)


Process Activity

Process Activity คือ กิจกรรมขั้นตอนการจัดทำ Software
         1. Software Specification
         2. Software Design and implementation
         3. Software validation
         4. Software evolution


ขั้นตอนที่ 1 Software Specification กระบวนกำหนดความต้องการ
      คือ กระบวนการวิศวกรรมความต้องการ ซึ่งก็คือการกำหนดความเป็นไปได้ให้กับระบบ
               Requirements engineering process


Requirements engineering process

                    1. Feasibility Study ศึกษาความเป็นไปได้ เช่น งบประมาณ เวลา Software Hardware
                    2. Requirement elicitation and analysis สกัดความต้องการเพื่อให้รู้ความต้องการของระบบ
                    3. Requirement specification กำหนดความต้องการ
                    4. Requirement validation ขั้นการตรวจสอบว่าตรงจามความต้องการหรือไม่



ขั้นตอนที่ 2 Software design and implementation
       Design เป็นขั้นตอนการออกแบบและเขียนโปรแกรม
       Implementation การนำไปใช้งาน

   Debugging process แบบจำลองการแก้่ไขโปรแกรม


      1. หาตำแหน่งที่ผิดพลาดของโปรแกรม
      2. ออกแบบว่าจะแก้ไข ข้อผิดพลาดที่เกิดขึ้นอย่างไร
      3. ซ่อมบำรุง ทำการแก้ไข
      4. ทดสอบการแก้ไข ว่าถูกต้องและผ่านหรือไม่


ขั้นตอนที่ 3 Software validation  การทดสอบซอฟต์แวร์
    Verification ทดสอบว่าซอฟต์แวร์ที่พัฒนาขึ้นตรงกัยความต้องการหรือไม่ โปรแกรมเมอร์ทดสอบ
    Validation    ทดสอบว่าตรงกับความต้องการของลูกค้าหรือไม่
  
   Testing Process

Testing Process

      1. Component or unit testing การทดสอบทีละส่วน ทีละระบบ
      2. System testing การทดสอบทั้งระบบรวมกัน
      3. Acceptance testing การทดสอบเพื่อการยอมรับ จากผู้ใช้งานจริง และใช้ข้อมูลจริง


ขั้นตอนที่ 4 Software evolution ขั้นตอนในการเปลี่ยนแปลงโปรแกรมตามความต้องการของ User *เป็นขั้นตอนการปรับปรุงโปรแกรมให้ทันยุคทันสมัย
     
The Rational Unified Process คือ คอมพิวเตอร์ที่ช่วยในการสร้างซอฟต์แวร์ RUP เขียนอยู่บน UML
      การเขียนโปรแกรมแบบ UML มี 3 มุมมอง
           1. แสดงขั้นตอนการทำงานให้เห็นเป็นขั้นๆ
           2. แสดงให้เห็นกิจกรรมว่ามีอะไรบ้าง
           3. แสดงให้เห็นถึงการปฎิบัติงานที่ดี

RUP phase model แบ่งออกเป็น 4 ขั้นตอน ***แต่ละขั้นมีการทำซ้ำบ่อยครั้ง
  ***สถาปัตยกรรม มีจุดเด่น คือ การค้นหาความเสี่ยงและวิเคราะความเสี่ยง

RUP Phase Model

      1. Inception ระยะเริ่มต้นของการดำเนินงาน กำหนดขอบเขตหน้าที่หลักของระบบ
      2. Elaboration ทำความเข้าใจระบบ
      3. Construction ออกแบบ เขียน ทดสอบ โดยแบ่งออกเป็นส่วนๆ โดยให้ Programmer ช่วยกัน
           เขียน แล้วค่อยนำมารวมกัน หลังจากนั้นจะได้ ซอฟต์แวร์ และ เอกสารของซอฟต์แวร์
      4. Transition ขั้นตอนการส่งมอบระบบ

ข้อปฎิบัติการใช้ RUP
      1. พัฒนาโปรแกรมแบบซ้ำๆ หากไม่สมบรูณ์ให้กลับไปทำใหม่
      2. บริหารความต้องการให้ดีว่า ความต้องการไหนมีความสำคัญกว่า
      3. ควรใช้งาน Component ที่มีอยู่แล้ว
      4. ยึด Model RUP มาช่วยในการออกแบบ
      5. ตรวจสอบคุณภาพของซอฟต์แวร์ให้ดีอยู่เสมอ
      6. ควบคุมการเปลี่ยนแปลงของซอฟต์แวร์ให้น้อยที่สุด


วันอังคารที่ 17 กรกฎาคม พ.ศ. 2555

สรุปบทเรียนที่ 3 Systems Engineering

Systems Engineering
    เป็นเรื่องของคนในองค์กร บุคคลที่ทำหน้าที่ออกแบบ สร้าง ซ่อมบำรุง ซอฟต์แวร์ และฮาร์ดแวร์ เพื่อให้ระบบดำเนินงานได้ตามต้องการ

Emergent properties *ความน่าเชื่อถือ เป็นคุณสมบัติของระบบ
       สามารถวัดได้จาก
             1. วัดน้ำหนักความสำคัญของระบบ
             2. วัดความเชื่อถือของระบบ
             3. วัดความสามารถในการใช้งานจริง

System Engineering Process *โปรเซส วิศวกรรมระบบ มีอยู่ 7 โปรเซส


System Engineering Process



       1. System requirement definition ขั้นตอนการเก็บรวบรวมความต้องการของระบบ 
           มี 3 ลักษณะ คือ
                   1 Functional requirement ฟังก์ชันการทำงานของระบบมีอะไรบ้าง
                   2 Non-Functional requirement คุณสมบัติที่ไม่เกี่ยวข้อกับการทำงานของระบบ
                         ที่แท้จริง
                   3 Unacceptable สิ่งที่ไม่ต้องการให้เกิดขึ้นกับระบบ เช่น ไฟดับ Server down เป็นต้น


         ปัญหาที่พบในการเก็บความต้องการ
                   1. ความต้องการเปลี่ยนโดยที่ระบบยังพัฒนาไม่เสร็จ อาจเกิดจากเวลาเปลี่ยนความ
                        ต้องการของคนเปลี่ยนตามเวลา เพราะเทคโนโลยีเปลี่ยน
                   2. ระยะเวลาในการพัฒนานาน ฮาร์ดแวร์เปลี่ยน ซอฟต์แวร์เปลี่ยน เทคโนโลยีเปลี่ยน
                   3. กำหนด Non-functional ได้ยาก เพราะสามารถมองเห้นได้เมื่อใช้งานไปแล้วเท่านั้น

      2. System design ขั้นตอนการออกแบบระบบ มี 5 ขั้นตอน

System Design Process

                   1. รวบรวมความต้องการมาแบ่งกลุ่มเป็นส่วนๆ
                   2. กำหนดว่าระบบใหญ่ควรมีระบบย่อยอะไรบ้าง
                   3. จับคู่ความต้องการเข้ากับระบบย่อย
                   4. กำหนดหน้าที่ของระบบย่อย
                   5. กำหนดส่วนติดต่อระหว่างระบบย่อยว่ามีการเชื่อมต่อ สื่อสารกันอย่างไร
           ปัญหาของการออกแบบระบบ
                   1. ไม่รู้ว่าใครเป็นผู้รับผิดชอบ
                   2. ปัญหาที่ยาก จะถูกผลักดันให้เป็นหน้าที่ของซอฟต์แวร์ ทำให้ซอฟต์แวร์มีขนาดใหญ่และ
                       ต้นทุนที่สูง
                   3. ฮาร์ดแวร์ ซอฟต์แวร์และ  Platform ไม่เหมาะกัน เช่น Windown, Max, Linux


      3. Sub system development ขั้นตอนการพัฒนาระบบ
                  - การพัฒนามักจะพัฒนาแบบคู่ขนานระหว่างฮาร์ดแวร์ ซอฟต์แวร์ และ Communication
                  - การพัฒนามักใช้ซอฟต์แวร์สำเร็จรูปมาใช้
                  - ระหว่างทีมพัฒนาในองค์กรอาจเกิดอุปสรรคได้

      4. System integration ขั้นตอนการนำระบบย่อยมารวมกัน
                  เริ่มจากการนำ Sub system ที่สำคัญที่สุดก่อน นำมาทำงานร่วมกัน เมื่อทำงานได้ก็นำ Sub
          system ต่อไป ทำไปเลื่อยๆ การรวมระบบในรูปแบบนี้จะทำให้ระบบล้ม หรือ เกิดความผิดพลาด
          น้อยลง>
     
      5. System installation ขั้นตอนการติดตั้งและนำไปใช้
             ปัญหาการติดตั้ง
                    1. สภาพแวดล้อมไม่เหมาะสม ไม่อำนวย
                    2. คนต่อต้านการนำระบบใหม่ไปใช้งาน เช่น กลัวหมดความสำคัญ
                    3. ระบบใหม่ที่พัฒนาขึ้นต้องทำงานคู่ขนานกับระบบเก่า ระบบอาจเข้ากันได้ลำบาก
                    4. พื้นที่การติดตั้งไม่เพียงพอ
                    5. การวางแผนอบรมการใช้งานระบบ
             ปัญหาการนำไปใช้งาน
                    1. ความต้องการที่ไม่คาดคิดจะโผล่ออกมา เมื่อพัฒนาเสร็จสิ้นแล้ว
                    2. ผู้ใช้งาน ไม่ใช้ระบบที่เราออกแบบ กรอกข้อมูลผิดตำแหน่ง
                    3. เวลาทำงานร่วมกับระบบอื่นอาจมีปัญหาได้
                          - ปัญหาทางกายภาพ
                          - ปัญหาการแปลงข้อมูล

      6. System evolution ขั้นตอนการปรับปรุงระบบ
                   เมื่อใช้งานไปแล้วต้องมีการพัฒนาโปรแกรมรุ่นใหม่ออกมา เพื่อให้มีการพัฒนาตาม
          ฮาร์ดแวร์ ซอฟต์แวร์ และ Technology ใหม่ๆ เมื่อปรับปรุงจะเกิดค่าใช้จ่าย

      7. System decommissioning ขั้นตอนการปลดละวาง เลิกใช้งาน
                   ปัญหาการเชื่อมโยงระหว่าง Database ตัวใหม่กับตัวเก่า