เนื้อหาส่วนใหญ่ที่จะมีในเรื่องของการพัฒนา Software
1. การเก็บ requirement
2. การออกแบบระบบ
3. การพัฒนาระบบ
4. การนำระบบมาประกอบกันใช้งาน
5. การปรับปรุงให้ทันสมัย
6. การบำรุงรักษาให้ใช้ได้ตลอดไป

ทำไมต้องเรียน Software Engineering

ปัจจุบันในประเทศที่พัฒนาแล้วทั้งหลาย Software Engineering มีบทบาทสำคัญมากในด้านเศรษฐศาสตร์ของเขา มันสำคัญในแง่ที่ว่า Software เป็นสินค้าหลักของเขา อย่างประเทศสหรัฐอเมริกา มูลค่ารายได้ที่มาจาก Software ในแต่ละปีสูงมาก และอีกลักษณะหนึ่งคือ ในกรณีที่ใช้งานด้วย ในหลายประเทศที่พัฒนาแล้วส่วนมากกิจการต่างๆในประเทศจะมีระบบคอมพิวเตอร์เข้ามาควบคุม ซึ่งแต่ละส่วน Softeware จะมีบทบาทด้วยทั้งนั้น เพราะฉะนั้นนอกจากจะมีบทบาทในแง่ของสินค้าแล้ว Software ยังมีบทบาทสำคัญที่จะทำให้ธุรกิจดำเนินไปได้อย่างมีประสิทธิภาพ พวกนี้แหละที่จะเป็นส่วนสำคัญในด้านเศรษฐศาสตร์และเศรษฐกิจของประเทศที่พัฒนาแล้ว นี่ก็เป็นสาเหตุหนึ่งที่ทำให้เราควรจะรู้จักวิธีการใช้,พัฒนา Software

เราจึงต้องมาเรียน Software Engineering กัน แต่ว่า Software Engineering ไม่ได้หมายถึงเครื่อง PC เท่านั้น แต่หมายถึง Software ทุกระดับ รวมไปถึงอุปกรณ์เล็กๆน้อยๆที่มีระบบคอมพิวเตอร์เข้ามาช่วยควบคุมการทำงาน Software ก็จะมีบทบาททั้งนั้น

ต้นทุนของ Software

ปกติเมื่อจะพัฒนาระบบ Software ระบบหนึ่งจะต้องประกอบด้วย Hardware , Softeware และ Peopleware เราจะพบว่าค่าใช้จ่ายของ Software ส่วนใหญ่จะสูง( หรือใกล้เคียง ) กับ Hardware แต่ถ้าถามหน่วยงานหรือบริษัทต่างๆถ้าต้องมีการเปลี่ยนแปลงให้เลือกระหว่าง Software กับ Hardware เขาจะเลือก Software เพราะง่ายกว่า ตัวอย่างเช่น กรมการขนส่งทางบก Hardware ที่ทำเป็น Server , Storage , UPS รวมน้ำหนักแล้วเป็น 10 ตัน ต้องมีการออกแบบห้องโดยเฉพาะในการวางอุปกรณ์เหล่านี้ แต่ยังไงก็ตาม Software ก็เป็นต้นทุนส่วนใหญ่ เราจึงต้องทำให้ Software เสียค่าใช้จ่ายน้อยที่สุด แต่มีประสิทธิภาพสูงสุด นั่นคือสาระสำคัญของวิชา Software Engineering

FAQ ที่เกี่ยวกับ Sottware Engineering (10 ข้อ)

FAQ 1. Software คืออะไร ?

คือ คอมพิวเตอร์โปรแกรมที่รวมถึง Documentation ด้วย

จากประสบการณ์( ของอาจารย์ )พบว่าในส่วนงานในองค์กรที่มีการพัฒนา Software ขึ้นมาใช้งานเอง มักจะไม่ทำเอกสารกัน ซึ่งจะเป็นเอกสารที่บันทึกข้อเท็จจริงเกี่ยวกับ Software ทั้งหมด เช่น Software ที่ออกแบบแบ่งเป็น Module ( หรือ Sub System )อะไรบ้าง แต่ละส่วนมีหน้าที่อะไร อะไรที่เป็น Input / Output

การขาดซึ่งเอกสารจะทำให้เกิดปัญหาตามมาภายหลังตอนที่ Software มีปัญหาต้องแก้ไขหรือต้องมีการปรับปรุงให้ดีขึ้น เพราะว่าเราจะจำไม่ได้ว่าทำอะไรไปบ้าง

Software ถูกพัฒนาขึ้นมา 2 ลักษณะ

  1. Customize software – เป็น Software ที่ถูกพัฒนาขึ้นมาใช้ภายในองค์กร
  2. Generic software – เป็น Software ที่ถูกพัฒนาขึ้นมาเพื่อขาย

Generic sw. มุมมองในการสร้างจะถูกเผื่อเอาไว้หมด แต่ Customize sw. จะทำเฉพาะที่ต้องการเท่านั้น เช่น ระบบบัญชี ถ้าเราจะพัฒนาขึ้นมาใช้ในองค์กร เราจะพัฒนาขึ้นมาเท่าที่ระบบบัญชีในบริษัทใช้เท่านั้น แต่ตรงข้ามถ้าพัฒนาเพื่อขาย เราต้องพิจารณาให้กว้างมากกว่า ว่าถ้าเกิดกรณีอื่นๆจะเป็นไงบ้าง ทำให้ Software 2 ตัวนี้มีความต่างกันมาก แต่ที่ต่างกันมากที่สุด คือ Requirement

FAQ 2. Software Engineering คืออะไร ?

คือ แนวคิดและข้อกำหนดต่างๆที่เราต้องทำตาม ที่เกี่ยวข้องกับทุกๆแง่มุมของ Software เช่น การเก็บ user requirement รวบรวมความต้องการของผู้ใช้ , การเอาความต้องการมาวิเคราะห์ว่า Software ควรมีฟังก์ชันอะไรบ้าง ทำงานอะไรบ้าง ซึ่งยังมีอีกหลายแง่มุมทั้งการพัฒนา การใช้งาน การบำรุงรักษา และการปรับปรุง แต่ละแง่มุมจะมีระเบียบแบบแผนในการทำงานที่ชัดเจน ซึ่งระเบียบแบบแผนที่ชัดเจนที่ครอบคลุมทุกแง่มุม เราเรียกว่าเป็น Software Engineering

FAQ 3. Software Engineering กับ Computer Science ต่างกันอย่างไร ?

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

ปัจจุบัน computer science อย่างเดียวนำมาใช้พัฒนาระบบไม่ได้ ต้องมี software engineering มาช่วย แต่ถ้าเป็นโปรแกรมขนาดเล็กจะไม่ค่อยเห็นประโยชน์ของ software engineering เท่าไร ต้องเป็น software ที่มีขนาดใหญ่ใช้งานในระดับองค์กร จึงจะเห็นประโยชน์ชัดเจน

FAQ 4. ความแตกต่างของ Software Engineering กับ System Engineering ?

system engineering คือกระบวนการพัฒนาระบบ ซึ่งรวมทุกอย่างทั้ง Hardware , Software , คน และกระบวนการในการทำงานด้วย ซึ่งงานทุกอย่างต้องมีขั้นตอน เช่น การสั่งซื้อสินค้า ขั้นแรกก็ต้อง request ใบราคามาเพื่อเปรียบเทียบราคา แล้วจึงตัดสินใจสั่งซื้อ , จัดทำใบสั่งซื้อ และการตรวจรับของ เป็นต้น ในวิชาของ information system การทำงานบางครั้งเราไม่ได้ไปยุ่งกับคอมพิวเตอร์อย่างเดียว บางครั้งเราก็ต้องยุ่งกับกระบวนการทำงานของตัวงานในองค์กรด้วย บางกระบวนการทำงานที่ไม่เหมาะสมหรือซ้ำซ้อนก็จะเปลี่ยนหรือตัดการทำงานนั้นทิ้งไป เรียกกันว่า Business process reengineering เช่นในธนาคารหลายแห่งก็ได้มีการทำกันแล้ว

Software engineering เป็นเพียงส่วนหนึ่งของ System engineering แต่อาจมองว่าทั้งสองเหมือนกัน เพราะว่าขั้นตอนในการพัฒนา Software engineering จะเหมือนหรือคล้ายกันขั้นตอนการพัฒนาของ System engineering เพียงแต่ว่าถ้าเราพูดถึง Software engineering เราก็จะพูดถึงแต่เรื่องของ Software เพียงอย่างเดียว

FAQ 5. Software Process คืออะไร ?

คือกระบวนการที่ทำการพัฒนา Software ให้ประสบผลสำเร็จ แบ่งเป็น 4 โปรเซสใหญ่ๆ( ในตำราแต่ละเล่มจะไม่เท่ากันแต่ต้องมี 4 โปรเซสนี้เป็นหลักอยู่ด้วย )
1. Specification – เป็นกระบวนการกำหนดคุณสมบัติของ software ที่พัฒนา
2. Development – เป็นขั้นตอนการพัฒนา software
3. Validation – เป็นขั้นตอนการตรวจสอบความถูกต้องของ software ให้ตรงกับความต้องการ
4. Evolution – เป็นกระบวนการทำให้ software มีวิวัฒนาการ เป็นการปรับเปลี่ยนเพิ่มสิ่งดีๆเข้ามาและเอาสิ่งที่ไม่ดีหรือไม่จำเป็นออกไป เช่น Ms Window95 , 98 ,ME , XP ซึ่งจะเปลี่ยนแปลงไปตามเทคโนโลยีหรือตามความต้องการของผู้ใช้

FAQ 6. Software Process Model คืออะไร ?

คือแบบจำลองของกระบวนการการพัฒนา software ของ 4 ขั้นตอนที่กล่าวมาข้างบน เราสามารถเขียนเป็นแผนภูมิหรือรูปภาพที่อ่านแล้วเข้าใจง่ายซึ่งจะเป็นแล้วแต่มุมมองของผู้ทำการพัฒนา

มุมมองที่น่าสนใจ
1. Work Flow - เป็นการให้ความสำคัญกับลำดับการทำงานเป็นหลัก ว่าจะทำงานโปรเซสอะไรก่อนหลัง
2. Data Flow – เป็นการให้ความสนใจกับข้อมูลเป็นหลัก ( นิยมใช้ DFDในการเขียน )
3. Role / Action – เป็นการสนใจว่าใคร ทำหน้าที่อะไรบ้าง , ก่อนหรือหลังหรือพร้อมกัน

วิธีการที่ใช้ในการพัฒนา
1. Waterfall Model – เป็นการทำงานเหมือนน้ำตกเป็นขั้นๆลงมา
2. Evolution Model – เป็นการทำไปปรับปรุงไปให้ดีขึ้นเรื่อยๆ
3. Formal Transformation Model – เป็นการพัฒนาอย่างเป็นทางการและเข้มงวด มีการวัดผลที่ชัดเจนและรัดกุม ส่วนใหญ่ใช้กับงานความปลอดภัยที่สำคัญ มีผลกระทบที่รุนแรง เช่น software ควบคุมการจราจรทางอากาศ , software ที่ใช้ติดตามอัตราการหายใจของคนไข้
4. Reusable Object Model – เป็นการพัฒนาเป็นชิ้นย่อยๆ โดยแต่ละชิ้นมีการออกแบบที่กว้างพอให้นำไปใช้ใหม่ในภายหลังได้

ต้นทุนในแต่ละขั้นของการพัฒนา software ส่วนใหญ่ 60% เป็นต้นทุนของการพัฒนา อีก 40% จะเป็นต้นทุนของการทดสอบ ( validation ) ถ้าใช้โมเดล evolution ในการพัฒนา ต้นทุนในการพัฒนาเวอร์ชันต่อไปจะสูง ตรงข้ามกับวิธีของ reusable ซึ่งจะใช้ต้นทุนต่ำ

FAQ 7. Methodology ในการพัฒนา (ไม่เน้น)

คือระเบียบวิธีที่ใช้ในการพัฒนา software ได้แก่
1. กำหนดโมเดลที่ใช้ โดยอาจใช้หลายโมเดลก็ได้ในกรณีที่ sofware มีขนาดใหญ่
2. กำหนดกฎข้อบังคับต่างๆที่ใช้ในโมเดล
3. ต้องมีข้อแนะนำในการออกแบที่ดี
4. ต้องมีแนวทางในการพัฒนาว่าควรมีโปรเซสใดก่อนหลังให้ชัดเจน

FAQ 8. CASE Tool (Computer Aided Software Engineering)

เป็น software ที่ถูกพัฒนาขึ้นมาเพื่อเป็นเครื่องมือในการสร้าง software ตัวอื่นๆ แบ่งออกเป็น 2 ชนิด
1. Upper CASE – มักจะถูกใช้ในขั้นตอนการพัฒนาในช่วงแรกๆ เช่น เก็บ requirement , ออกแบบ
2. Lower CASE – มักถูกใช้ในขั้นตอนช่วงหลัง เช่น การเขียนโปรแกรม , การตรวจสอบความถูกต้อง

*** อาจารย์แนะนำให้ลองไปใช้ ER-Win เป็น tool ที่ใช้ในการออกแบบ ER-Diagram ***

FAQ 9. คุณสมบัติของ sotware ที่ดี ( เท่าที่จำได้ในหนังสือจริงๆจะมีมากกว่านี้ )

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

<เพิ่มเติมเรื่อง FAQ 9. คุณสมบัติของ sotware ที่ดี >

2. Dependability

แต่ก่อนการพัฒนาเพื่อจะนำมาใช้เฉพาะกับองค์กรเท่านั้น แต่ในปัจจุบันจะมีการพัฒนาใหม่คือ ASP (Application Service Provider) คือแนวคิดของธุรกิจอีกลักษณะหนึ่งที่พัฒนา SW ขึ้นมาเป็นแบบ General โดย Application , Server อยู่ที่ผู้พัฒนา ถ้าลูกค้าสนใจจะใช้แบบเช่าเป็นรายเดือน การใช้งานจะผ่านระบบเครือข่ายหรือ Internet ตัวอย่างเช่น ระบบลงทะเบียนของมหาวิทยาลัย จะใช้วิธี ASP ซึ่งจะถูกกว่าการลงทุนสร้าง SW เป็นของตนเอง โดยข้อมูลทั้งหมดจะอยู่ที่บริษัทผู้ให้บริการ และดำเนินการผ่านระบบ Internet (ในประเทศไทย ASP ยังไม่เป็นที่นิยม)

ประเด็นสำคัญของธุรกิจแบบ ASP
- ข้อมูลต้องมีการสำรองไว้อย่างดี เชื่อถือได้ ไม่หายแน่นอน
- ความปลอดภัยต้องสูงมาก จะต้องไม่มีคนที่ไม่ได้รับอนุญาตเข้ามายุ่งกับข้อมูล
- ข้อมูลต้องเป็นความลับ

3. Efficiency

สมัยก่อนเราจะคำนึงถึง Resource เช่น Ram , HDD ,CPU แต่ในปัจจุบันจะมีการพัฒนาโปรแกรมบน Internet ประเภท Web Application มากขึ้น ทำให้ต้องคำนึงถึงเรื่องของ Bandwidth ด้วย

 

FAQ 10. ปัญหาที่พบใน Software Engineering

1. Legacy System – การที่เราต้องไปพัฒนา Software ให้ทำงานสอดคล้องกับงานระบบเก่า
2. Hetero Geneity – ความไม่เข้ากันของ Hardware , Software ของระบบเก่ากับระบบใหม่ เช่น ระบบเก่าใช้งานบน Unix แต่ระบบใหม่ใช้งานกับ Window
3. Delivery – ข้อจำกัดของเวลา ถึงแม้ว่าจะมีการวางแผนงานเรื่องเวลาแล้ว แต่เรามักจะเจอปัญหาที่ไม่คาดคิดเกิดขึ้นเสมอ

********************************************************************************

จริยะธรรมของ Software Engineering

1. Confidentiality – การรักษาความลับของลูกค้า
2. Completence – การรูจักประมาณการณ์ความสามารถของตนเอง ไม่รับงานที่เกินความสามารถของตน
3. Intellectual Property – การเคารพสิทธิลิขสิทธิ์ทางปัญญาของผู้อื่น ทั้งเรื่องของการพัฒนา software และของลูกค้า
4. Computer Misuse – การใช้คอมพิวเตอร์ในทางที่ถูกต้อง เช่น ไม่ไป hack ระบบของผู้อื่น

บรรยายเมื่อ 26 พย.2544 เทอม 2/44

Index Lesson 1 Lesson 2 Lesson 3 Lesson 4 Lesson 5 Mores