วิชา COMP342 วิศวกรรมซอฟต์แวร์ (Software Engineering) อาจารย์ผู้สอน อ. รติวัฒน์ ปารีศรี วท.ม. (เทคโนโลยีสารสนเทศ) สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง วท.บ. (คอมพิวเตอร์ศาสตร์) ม.รามคำแหง Web site : http://research.psru.ac.th/~learning/
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ความหมายของวิศวกรรมซอฟต์แวร์ (Software Engineer Meaning ) วิศวกรรมซอฟต์แวร์ (SE) หมายถึง วิธีการที่นำไปสู่การบริหารจัดการสำหรับ การสร้างหรือพัฒนาซอฟต์แวร์ขึ้นมาใช้งาน ซึ่งจากความหมายแล้วนั้นจะเห็นว่า วิธีการหรือกระบวนการเหล่านั้นมีอยู่กว้าง มากมาย แต่ตามหลักของ SE นั้นต้อง เป็นกระบวนการที่ดีที่สุด ทันสมัย มีประสิทธิภาพ รวดเร็ว และที่สำคัญมีการ ประหยัดค่าใช้จ่ายในการสร้างซอฟต์แวร์นั่นเอง ซึ่งในปัจจุบันมีวิธีการและเทคนิค ต่าง ๆ มากมายที่สามารถนำมาใช้ในการสร้างซอฟต์แวร์
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ความหมายของระบบ (System Meaning ) ระบบ (System) หมายถึง กลุ่มงาน (Set) ที่มีองค์ประกอบ (Component) หลาย ๆ ส่วน โดยแต่ละองค์ประกอบจะทำงานร่วมกันเพื่อ จุดประสงค์ (Purpose) เดียวกัน เช่น ระบบการทำงานของคอมพิวเตอร์ จะ ประกอบไปด้วยองค์ประกอบหลัก 3 ส่วนด้วยกันคือ อุปกรณ์ (Hardware) ซอฟต์แวร์ (Software) และผูใช้งาน (People ware) ทั้ง 3 ส่วนนี้จะทำงาน ร่วมกันโดยมีจุดประสงค์ในการประมวลผล เพื่อให้ได้มาซึ่งผลลัพธ์ที่ตรงตามความ ต้องการ
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ความเกี่ยวข้องระหว่างวิศวกรรมซอฟต์แวร์ (SE) กับระบบ (S) เราจะมองว่าในสร้างซอฟต์แวร์นั้นตั้งแต่กระบวนการแรกจนจบจะเป็นเรื่องของ SE ซึ่งต้องอาศัยวิธีการต่าง ๆ นา ๆ ซึ่งในส่วนของการสร้างซอฟต์แวร์นั้นจะมี รายละเอียดการทำงานมากมาย เพราะซอฟต์แวร์ 1 ซอฟต์แวร์จะมีหน้าที่การ ทำงานมากมายหลายอย่าง เราเลยมองหน้าที่การทำงานเหล่านั้นเป็นระบบ (System) นั่นเอง ดังนั้นเมื่อเราศึกษาเรื่อง SE ก็จำเป็นอย่างยิ่งที่เราต้องศึกษา เรื่องระบบ เช่นกัน เพราะการสร้างซอฟต์ขึ้นมาใช้งานจริงนั้นเราต้องเข้าใจการ ทำงานของซอฟต์แวร์นั้นเป็นอย่างดี นั่นก็คือต้องเข้าใจระบบการทำงานของมันด้วย
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ การวิเคราะห์ระบบ (System Analysis) เมื่อซอฟต์แวร์ที่เราใช้งานในปัจจุบัน ไม่สามารถทำงานให้เราตามวัตถุประสงค์ หรือ ทำงานได้แต่ไม่มีประสิทธิภาพ ทั้งนี้อาจเกิดจากสภาพแวดล้อมเปลี่ยนไป เราจึง จำเป็นต้องมีการปรับปรุง เปลี่ยนแปลง แก้ไขซอฟต์แวร์เหล่านั้น เพื่อให้สามารถใช้ งานได้ดีเหมือนเดิม ดังนั้นเราก็ต้องศึกษาระบบการทำงานของซอฟต์แวร์นั้น ๆ ว่า มีการทำงานอย่างไร จึงจำเป็นที่ต้องมีการวิเคราะห์ระบบ (System Analysis) นั่นเอง ดังนั้นต่อไปจะเป็นการพูดถึงในเรื่องของระบบ (System)
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ใครคือผู้วิเคราะห์ และออกแบบระบบ ? การวิเคราะห์ระบบ (System Analysis) การวิเคราะห์ระบบงาน เป็นการศึกษาถึงปัญหาที่เกิดขึ้นในระบบงานปัจจุบัน (Current System) เพื่อออกแบบระบบการทำงานใหม่ (New System) นอกจากจะสร้างระบบงานใหม่แล้ว เป้าหมายในการวิเคราะห์ระบบต้องการ ปรับปรุงและแก้ไขระบบเดิมให้มีทิศทางดีขึ้น โดยก่อนที่ระบบใหม่ยังไม่นำมาใช้งาน เราจะเรียกระบบงานที่กำลังใช้งานอยู่ว่า ระบบปัจจุบัน แต่หากนำเอาระบบใหม่มา ใช้งานเมื่อใด เราจะเรียกระบบปัจจุบันที่เคยใช้งานนั้นว่า ระบบเก่า (Old System) นั่นเอง
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ นักวิเคราะห์ระบบ (System Analyst: SA) SA หมายถึงคนที่ทำหน้าที่ศึกษาระบบงานเดิมเพื่อพัฒนาเป็นระบบงานใหม่ โดยเป็นผู้ประสานการติดต่อบุคคลต่าง ๆ ซึ่งจะต้องอาศัยกระบวนการต่าง ๆ ในการวิเคราะห์ระบบ
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ข้อแตกต่างระหว่างนักเขียนโปรแกรม กับ นักวิเคราะห์ระบบ โปรแกรมเมอร์ ( programmer ) หมายถึงบุคคลที่รับผิดชอบในด้านการเขียน โปรแกรม สิ่งที่เขาจะเชื่อมโยงนั้น ได้แก่ อุปกรณ์คอมพิวเตอร์ ระบบปฏิบัติ ( Operating System :OS ) หรือแม้กระทั่งภาษาที่ใช้ในการเขียน เช่น COBOL, BASIC และ C++ งานของโปรแกรมเมอร์จะเป็นไปในลักษณะที่มีขอบเขตที่แน่นอนคือ โปรแกรมที่เขาเขียนขึ้นนั้นถูกต้องตามจุดประสงค์หรือไม่ กิจกรรมงานของโปรแกรม จะเกี่ยวข้องกับคนจำนวนน้อย เช่น กับโปรแกรมเมอร์ด้วยกันเอง หรือกับนักวิเคราะห์ ระบบที่เป็นผู้วางแนวทางของระบบให้แก่เขา
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ข้อแตกต่างระหว่างนักเขียนโปรแกรม กับ นักวิเคราะห์ระบบ นักวิเคราะห์ระบบ หรือที่เรียกกันย่อๆ ว่า SA (SYSTEM ANALYSIS) นั้น นอกจาก จะต้องรับผิดชอบต่อการโปรแกรมคอมพิวเตอร์แล้ว ยังจะต้องรับผิดชอบงานในส่วนที่ เกี่ยวกับการจัดหาอุปกรณ์ต่างๆ เกี่ยวกับคอมพิวเตอร์ ผู้ที่จะใช้ระบบแฟ้มหรือ ฐานข้อมูลต่างๆ รวมทั้งข้อมูลดิบที่จะป้อนเข้าระบบงานของนักวิเคราะห์ระบบไม่ได้ อยู่ในลักษณะที่แน่นอนแบบโปรแกรมเมอร์ ไม่มีคำตอบที่แน่นอนจากระบบที่เขาวาง ไม่ว่าผิดหรือถูก งานของเขาเกิดจากการประนีประนอมและผสมผสานของปัจจัยต่างๆ ที่เกี่ยวข้องกับระบบงาน คือ ผู้ใช้ วิธีการ เทคโนโลยี และอุปกรณ์
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ คุณสมบัติของนักวิเคราะห์ระบบ (Property of System Analyst) หลังจากที่เราได้วิเคราะห์ว่า นักวิเคราะห์ระบบจะทำหน้าที่เป็นแกนกลางระหว่างนัก ธุรกิจ (BUSINESS PEOPLE) หรือผู้ใช้ระบบ (USERS) กับโปรแกรมเมอร์ (PROGRAMMERS) อย่างไรก็ตามธุรกิจหรือหน่วยงานต่างๆ จึงมักจะมีความคิดที่ว่า นักวิเคราะห์ระบบจะต้องมีพื้นฐานการเขียนโปรแกรมเป็นอันดับแรกแนวความคิดนี้ แท้จริงแล้วเป็นเพียงส่วนหนึ่งเท่านั้นในคุณสมบัติอันควรมีของนักวิเคราะห์ระบบ
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ คุณสมบัติของนักวิเคราะห์ระบบ (Property of System Analyst) นักวิเคราะห์ระบบจะต้องมีความสามารถที่จะพัฒนาระบบเพื่อแก้ปัญหาให้กับผู้ใช้ หรือธุรกิจอย่างมีเทคนิคและแบบแผน โปรแกรมเมอร์ที่เก่งมิได้หมายความว่าเขาจะ เป็นนักวิเคราะห์ระบบที่ดีได้ในทางตรงกันข้าม โปรแกรมเมอร์ที่ไม่เก่งมิได้หมายความ ว่าเขาจะเป็นนักวิเคราะห์ระบบที่ดีไม่ได้ หากเราจะพิจารณาถึงคุณสมบัติพื้นฐานที่นักวิเคราะห์ระบบควรมี โดยยึดตาม แนวทางของงานที่นักวิเคราะห์ระบบต้องใช้ปฏิบัติ ก็จะเป็นดังต่อไปนี้
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ คุณสมบัติของนักวิเคราะห์ระบบ (Property of System Analyst) มีความรู้ทางด้านระบบงานธุรกิจ มีความสามารถในการวิเคราะห์ ต้นทุน ผลตอบแทน มีภาวะความเป็นผู้นำ มีความรอบรู้เทคโนโลยี มีมนุษยสัมพันธ์ที่ดี มีความสามารถในการแก้ไขปัญหา ประสบการณ์จะสำคัญต่อ SA มีความรู้ในการเขียนโปรแกรม
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ทีมงานการพัฒนาระบบ (Team of System Development) คณะกรรมการดำเนินงาน ผู้สนับสนุนฝ่ายเทคนิค ผู้อำนวยการ/ผู้จัดการ/หัวหน้า เจ้าหน้าที่ นักวิเคราะห์ระบบ ผู้ใช้งาน นักเขียนโปรแกรม ขนาดของทีมงานขึ้นอยู่กับขนาดของงาน และองค์กร วิศวกรระบบ
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ วงจรชีวิตการพัฒนาระบบ (System Development Life Cycle) เป็นวงจรที่แสดงถึงขั้นตอนต่าง ๆ ตั้งแต่เริ่มจนกระทั่งสำเร็จ โดยในแต่ละขั้นตอนจะ ประกอบไปด้วยกิจกรรมต่าง ๆ มากมาย ขั้นตอนต่าง ๆ ประกอบด้วย 7 ขั้นตอน ด้วยกันคือ กำหนดปัญหา (Problem Definition) ทดสอบ (Testing) วิเคราะห์ (Analysis) ติดตั้ง (Implementation) ออกแบบ (Design) บำรุงรักษา (Maintenance) พัฒนา(Development)
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ การกำหนดปัญหา (Problem Definition) การกำหนดปัญหา เป็นขั้นตอนของการกำหนดขอบเขตของปัญหา สาเหตุของ ปัญหาจากการดำเนินที่เกิดขึ้น แล้วทำการสำรวจความต้องการ ต่าง ๆ จากผู้ใช้งาน (Users Requirement) แล้วทำการศึกษาความเป็นไปได้ในการแก้ปัญหา เหล่านั้น ซึ่งปัญหาอาจจะมีหลายข้อ เราก็ต้องสำรวจคววามเป็นไปได้ (Feasibility Study)ด้วยเสมอ ผลลัพธ์ที่ได้จากขั้นตอนนี้คือUser Requirement นั่นเอง
และรวบรวมความต้องการ Requirement Gathering หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ การกำหนดปัญหา (Problem Definition) กระบวนการทางธุรกิจ (Business Process) สารสนเทศทางธุรกิจ (Business Information) กฎของธุรกิจ (Business Rules) สร้างแบบจำลอง และรวบรวมความต้องการ Requirement Gathering กำหนดความต้องการ Requirement Specification
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ วิเคราะห์ (Analysis) การวิเคราะห์เป็นขั้นตอนการสำรวจการดำเนินงานของระบบปัจจุบัน โดยการนำ Requirement Specification ที่ได้จากขั้นตอนก่อนหน้านี้มาวิเคราะห์ใน รายละเอียดเพื่อพัฒนาเป็นแบบจำลองทางตรรกะ (Logical Model) ซึ่งจะใช้ เทคนิคของ แผนภาพกระแสข้อมูล (Data Flow Diagram) คำอธิบายการ ประมวลผลข้อมูล (Process Description) และแบบจำลองข้อมูล (Data Model) ในรูแบบของ ER-Diagram
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ วิเคราะห์ (Analysis) แบบจำลองตรรกะ Logical Model DFD System Flowchart Process Desc ERD ความต้องการ Requirement Specification วิเคราะห์ (Analysis)
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ การออกแบบ (Design) การออกแบบเป็นขั้นตอนของการนำผลลัพธ์ที่ได้จากการวิเคราะห์ทางตรรกะ มา พัฒนาเป็นแบบจำลองทางกายภาพ (Physical Model) ให้สอดคล้องกัน เช่น การออกแบบรายงาน (Report) การรับข้อมูล (Input) การแสดงผล (Output) และในส่วนของฐานข้อมูลต้องนำ ERD ที่อยู่ในแบบจำลองตรรก มา แปลงให้เป็น พจนานุกรมข้อมูล (Data Dictionary) ขั้นตอนนี้จะได้ตัวระบบที่ จะนำไปพัฒนาจริงๆ
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ การออกแบบ (Design) แบบจำลองตรรกะ Logical Model DFD System Flowchart Process Desc ERD Physical Model ออกแบบ Design
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ พัฒนา (Development) การพัฒนาเป็นขั้นตอนของการพัฒนาโปรแกรมด้วยการสร้างชุดคำสั่ง หรือเขียน โปรแกรมเพื่อสร้างระบบขึ้นมา ตามที่ได้ออกแบบไว้แล้ว Physical Model
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ทดสอบ (Testing) การทดสอบระบบ เป็นขั้นตอนหลังจากที่เราพัฒนาเสร็จแล้ว ก่อนที่จะนำระบบไป ใช้งานจริง ผู้พัฒนาและทีมงานจะต้องทำการทดสอบการทำงานเบื้องต้น ด้วยการ สร้างสถานะการแบบจำลองเหตุการณ์ ในการการใช้งานขึ้นมา อาจจะอาศัยผู้ใช้งาน จริงมาทดสอบระบบ การทดสอบจะมี 2 ส่วน - Syntax Testing Validation - Objective Testing Verification
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ ติดตั้ง (Implement) หลังจากที่ระบบผ่านการทดสอบแล้ว จะเป็นการนำระบบไปติดตั้งเพื่อใช้งานจริง โดยการติดตั้งระบบนั้น ต้องดำเนินการทกอย่าง ตั้งแต่การจัดหา Hardware , OS Software หรือส่วนประกอบอื่นที่มีความเกี่ยวข้องกับการใช้งานระบบ นั่น หมายความว่าในการใช้งานระบบ เราต้องเตรียมความพร้อมในเรื่องต่างๆ ให้พร้อม แล้วจึงทำการติดตั้งระบบเพื่อใช้งานจริง
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ บำรุงรักษา (Maintenance) เป็นขั้นตอนที่ค่อนข้างมีความสำคัญ เพราะเป็นขั้นตอนที่ต้องคอยดูแลรักษาระบบ ให้สามารถทำงานตามที่ผู้ใช้งานต้องการได้อย่างมีประสิทธิภาพ เนื่องจากระบบ หรือซอฟต์แวร์ที่สร้างขึ้นมาถึงแม้ว่าจะผ่านขั้นตอนการทดสอบมาแล้ว แต่เมื่อใช้ งานไปสักระยะอาจทำให้เจอปัญหาของโปรแกรมได้ ดังนั้นจึงต้องรีบแก้ไขเพื่อให้ ระบบพร้อมที่จะกลับมาใช้งานได้ดังเดิม
หน่วยที่1ความรู้เบื้องต้นเกี่ยวกับวิศวกรรมซอฟต์แวร์ การวิเคราะห์และออกแบบระบบ งานกลุ่ม อภิปรายหลังคาบ -ให้แต่ละกลุ่มคิดและอภิปรายถึง คุณสมบัติของซอฟต์แวร์ที่มีคุณภาพ ว่ามีลักษณะ เป็นอย่างไร - ให้แต่ละกลุ่มแสดงความคิดเห็นว่าขั้นตอนใดของ SDLC มีความสำคัญที่สุด งานกลุ่มส่งคาบหน้า ให้แบ่งกลุ่มเป็น 3 กลุ่มค้นคว้าในหัวข้อต่อไปนี้แล้วนำมาสรุปในห้องเรียน -Water Fall Model - Spiral Model -Incremental Model
วิศวกรรมซอฟต์แวร์ เศรษฐกิจของประเทศที่พัฒนาแล้วต้องพึ่งพาSoftware ซอฟต์แวร์เข้ามาควบคุมระบบต่างๆ มากขึ้น วิศวกรรมซอฟต์แวร์ เกี่ยวข้องกับ ทฤษฎี วิธี และเครื่องมือ สำหรับการ พัฒนาซอฟต์แวร์อ์อย่างมืออาชีพ ค่าใช้จ่ายกับซอฟต์แวร์คิดเป็นอัตราส่วนที่สำคัญต่อรายได้ประชาชาติในทุก ประเทศที่พัฒนาแล้ว