More Related Content
Similar to บทที่ 2 การเขียนโปรแกรม
Similar to บทที่ 2 การเขียนโปรแกรม (20)
More from Patcharee Pawleung
More from Patcharee Pawleung (16)
บทที่ 2 การเขียนโปรแกรม
- 2. กระบวนการพัฒนาซอฟตแวร
กระบวนการการพัฒนาซอฟตแวรที่ดีควรหาขอผิดพลาดใหได แตตองไมสับสนเรื่อง
ขั้นตอนในการพัฒนา ถาผลิตอยางมีขั้นตอน ก็ควรมีความยืดหยุนพอสมควร และไมยึดติดกับ
ขั้นตอนมากเกินไป จนทําใหโครงการลาชา หรือลมเหลว เพราะเลือกใชขั้นตอนที่ไมเหมาะสมกับ
ประเภทของซอฟตแวร
ถาพบขอผิดพลาดชวงแรกๆ ก็จะชวยลดระยะเวลา และคาใชจาย ในการพัฒนาซอฟตแวรไดมาก
การศึกษาเรื่องคาใชจายดานซอฟตแวรของบริษัทไอบีเอ็ม (ibm) บริษัทจีทีอี (gte) และบริษัททีอาร
ดับเบิลยู (trw) โดยนายแบรี่ บีม (barry boehm)ในป ค.ศ. ๑๙๓๖ พบวา ถาแกไขขอผิดพลาด เมื่อ
พัฒนาซอฟตแวรเสร็จแลว แทนที่จะแกไขตั้งแตตอนที่กําหนดคุณลักษณะของซอฟตแวร ก็จะตอง
เสียคาใชจายเพิ่มขึ้นเปนรอยเทา ตัวอยางของปญหานี้เห็นไดอยางชัดเจน ในการแกปญหา
คอมพิวเตอร ป ค.ศ. ๒๐๐๐ หรือที่เรียกวา ปญหาวายทูเค (y2k) บริษัที่ออกแบบซอฟตแวรใหใชกับ
ปที่มีเลขสี่หลักตั้งแตตนแทบจะไมเดือดรอนในการแกไขเลย แตซอฟตแวรอื่นๆ ที่ทั้งผูผลิตและ
ผูใชตางละเลยปญหานี้ โดยยังคงใชปเปนเลขสองหลักอยู บางรายใชอยูเปนสิบๆ ป เมื่อถึงเวลา
แกไขขอผิดพลาดของซอฟตแวร ก็ปรากฏวาตองใชเงินเปนจํานวนมากถึงหลายสิบลานบาท รอย
ลานบาท หรือมากกวานั้น
- 3. การพัฒนาซอฟตแวรอยางมีขั้นตอน
มีหลายแบบและยังมีวิวัฒนาการอยูอยางตอเนื่องเพราะสาขาทางวิศวกรรมซอฟตแวรนี้ เพิ่งเกิดขึ้นในครึ่งหลังของ
ศตวรรษที่ ๒๐ หากเทียบกับระยะเวลา ที่มนุษยชาติศึกษากระบวนการสรางที่อยูอาศัย ที่มีมาเปนพันๆ ปแลว ก็นับได
วา สาขาวิชานี้ยังใหมอยูมาก ดังนั้น ในการเลือกกระบวนการการพัฒนาซอฟตแวรจะตองตั้งคําถามวา กระบวนการ
ใด"เหมาะ" ที่สุด สําหรับโจทยปญหา และประเภทของซอฟตแวรไมใชกระบวนการใด "ดี" ที่สุด
การพัฒนาซอฟตแวรไมใชกระบวนการที่มีจุดเริ่มตน และจุดสิ้นสุดที่แนนอน เหมือนเชนผลิตภัณฑอื่นๆ เนื่องจาก
ซอฟตแวรใชสําหรับสั่งใหคอมพิวเตอรชวยแกโจทยปญหาบางอยาง ใหแกมนุษย เมื่อสภาพของโจทยปญหา หรือ
คอมพิวเตอรเปลี่ยนแปลงไป ซอฟตแวรก็ตองเปลี่ยนแปลงตามซอฟตแวรที่ขาดการทํานุบํารุง จึงเสื่อมคุณภาพ ทั้งที่
ไมไดสึกหรอ ทั้งนี้เพราะไมสามารถนําไปใชแกปญหาไดอยางมีประสิทธิภาพอีกตอไป
ในสมัยแรกๆ การผลิตซอฟตแวรมักไมมีขั้นตอน คือ เริ่มตนดวยการเขียนซอฟตแวรเลย เมื่อมีปญหาก็แกไข เขียน
แลวแกสลับกันไปจนกวาจะไดคุณลักษณะที่ตองการผลก็คือ จะไดซอฟตแวรที่ซับซอนมาก หากตองมีการปรับปรุง
แกไขในภายหลัง และผูที่แกไข ไมใชผูเขียนซอฟตแวรนั้นเอง ก็จะมีปญหามากมักทําใหตองเสียคาใชจาย ในการทํานุ
บํารุงซอฟตแวร เกินกวางบประมาณที่กําหนดไว
- 4. ๑. กําหนดคุณลักษณะซอฟต์แวร์ (Definition)
เนนวาจะ "สร้างอะไร" โดยใหคําตอบวา "โจทย์ปัญหาที่ต้องการแก้คืออะไร" และ "สิ่งที่จะใช้แก้ปัญหานี้
คืออะไร"
๒. สร้างซอฟต์แวร์ (Development)
เนนวาจะ "สร้างอย่างไร" โดยใหคําตอบเรื่อง "ทําอย่างไรจึงจะสร้างสิ่งที่นํามาใช้แก้ปัญหาได้" และ "ทํา
อย่างไรจึงจะตรวจสอบหาข้อบกพร่องของสิ่งที่สร้างขึ้นได้ ตลอดจนสิ่งที่นํามาใช้แก้ปัญหา รวมทั้ง
ซอฟต์แวร์ และเอกสารอธิบายซอฟต์แวร์"
๓. วิวัฒนาการของซอฟต์แวร์ (Evolution)
เนนวาจะ "เปลี่ยนแปลงอย่างไร" โดยใหคําตอบเรื่อง "เมื่อสภาพการ หรือปัญหาเปลี่ยนแปลงไปต้องทํา
อย่างไร จึงจะสามารถปรับปรุงสิ่งนั้นให้ยังคงใช้แก้ปัญหาได้"
ต่อมาได้มีการนําหลักวิศวกรรมมาประยุกต์ใช้ในการพัฒนาซอฟต์แวร์
การพัฒนาซอฟต์แวร์ จึงแบ่งได้เป็น ๓ ระยะ คือ
- 7. ขั้นตอนหลักๆ ของแมแบบขั้นน้ําตก มีดังนี้
๑. วิเคราะห์ความเป็นไปได้
ปญหาทุกอยางในโลกนี้ ไมใชจะเปนปญหา ซึ่งเหมาะที่จะใชคอมพิวเตอร และซอฟตแวร
แกไขเสมอไป หรือถึงแมจะใชได ก็อาจเสียคาใชจายมากเกินไป หรือตองใชเวลานานมาก ดังนั้น ใน
ขั้นตอนแรก จึงตองมีการพิจารณาความเหมาะสม และความเปนไปไดในสวนนี้กอน
๒. วิเคราะห์โจทย์หรือความต้องการของผู้ใช้
โจทยปญหาเปนสาเหตุที่ทําใหลักษณะของซอฟตแวรมีความหลากหลาย เพราะซอฟตแวร
ถูกพัฒนาขึ้นมา เพื่อแกโจทยปญหาที่มีมากมาย หลายรูปแบบ โจทยปญหาอาจเปนความตองการของ
ผูใช ที่ตองการใหคอมพิวเตอรชวยทํางานแทน หรืออาจเปนโจทยปญหาทางวิทยาศาสตร ที่พยายาม
ทําใหคอมพิวเตอรสามารถคิดไดเหมือน มนุษย หรืออาจเปนการควบคุมการทํางานของ อุปกรณ
อิเล็กทรอนิกสตางๆ ที่ควบคุมการสื่อสารของคอมพิวเตอรบนเครือขายคอมพิวเตอร ฯลฯ
เนื่องจากโจทยปญหาดังกลาวอาจจะเปนปญหาใหญ ดังนั้น จะตองมีการวิเคราะห และแยก
ยอยปญหา (Problem Decomposition)กําหนดขอบเขตปญหาที่จะใหซอฟตแวรแกไข (software
scope) และตองทําความเขาใจใหไดวา ผูใชตองการอะไร งานสวนนี้จะเปนประเด็นสําคัญในการ
วางแผนพัฒนาซอฟตแวร รวมทั้งประเมินระยะเวลา และคาใชจายดวย
- 8. ๓. เขียนคุณลักษณะซอฟต์แวร์
คุณลักษณะซอฟตแวร (Software Specification) เปนขอกําหนดลักษณะหนาที่ และวิธีการทํางานของ
ซอฟตแวรวา ซอฟตแวรนี้ตองทําอะไรบาง จึงจะสนองความตองการของผูใชเชน จะตองใชขอมูลอะไร จะ
จัดเก็บขอมูลอะไร จะผลิตหรือประมวลผลขอมูลอะไร ลักษณะของขอมูลเปนอยางไร มีขอบเขตขอจํากัด
อะไร ฯลฯ
การกําหนดคุณลักษณะซอฟตแวรสามารถ ทําไดหลายวิธี เชน
สอบถามผูใชโดยตรงวา ตองการใหซอฟตแวรทําหนาที่อะไรบาง การสอบถามตองมีเทคนิคในการสื่อสารที่
ดี โดยอาจจะมีการยกตัวอยางสภาพการณ(scenario-based requirement analysis) ในแนววา "ถ้า
(สถานการณ์) เกิดขึ้น จะทําอย่างไร" เชน ถาโจทยคือ การจัดการพัสดุของรานคานักวิเคราะหระบบอาจถาม
วา "ถ้าสินค้าที่สั่งซื้อไม่มาส่งตามกําหนด ทางร้านจะทราบได้เมื่อใด และจะดําเนินการอย่างไร"
ศึกษาวิธีการดําเนินงานตามปกติกอนนําคอมพิวเตอรมาใช และหาจุดออนที่จะตองนําซอฟตแวรเขามาใช
เพื่อเพิ่มประสิทธิภาพ
สํารวจความตองการของตลาดวา คนสวนใหญตองการใหคอมพิวเตอรชวยงานดานใดในลักษณะใด และ
ตองการความบันเทิงจากคอมพิวเตอรอยางไร ฯลฯ
ศึกษาจากลักษณะของซอฟตแวรเกาที่ทํางานดานนี้อยูแลว ฯลฯ
- 9. สรุปผลการวิเคราะห์ข้อกําหนดลักษณะของซอฟต์แวร์สามารถแบ่งได้เป็น ๓ รูปแบบ คือ รูปแบบ
ข้อมูล รูปแบบหน้าที่งาน และรูปแบบการทํางาน วิธีการนําเสนออาจแสดงเป็นแผนผังแบบต่างๆ เช่น
แสดงด้วยแผนผังการไหลของข้อมูล (Data Flow Diagram) แสดงด้วยแผนผังความสัมพันธ์ของข้อมูล
(Entity - Relationship Diagram) ฯลฯ ส่วนศัพท์ว่าข้อมูลใดคืออะไร จะต้องอธิบายอยู่ในพจนานุกรม
ข้อมูล (Data Dictionary)
- 10. ๔. ออกแบบซอฟต์แวร์
การออกแบบซอฟตแวรจะเริ่มเนนดานเทคนิค โดยรวมถึงการออกแบบโครงสรางของซอฟตแวรหนวยตางๆ ของ
ซอฟตแวร ซึ่งสามารถนําเสนอไดดวยแผนผังหลายแบบ เชน แผนผังโครงสรางระบบ (Structure Chart) และรายละเอียด
ขั้นตอนในการแกปญหา (algorithm) ของแตละหนวยนอกจากนี้ ยังรวมถึงการออกแบบวิธีที่ซอฟตแวรจะสื่อสารกับผูใช
เชน ออกแบบหนาจอ ออกแบบวิธีรับคําสั่งจากผูใช (จะใหผูใชพิมพคําสั่ง หรือกดปุมเรียก หรือพูดดวย ฯลฯ)
๕. เขียนซอฟต์แวร์
การเขียนซอฟตแวร หรือโปรแกรม เปนการเขียนชุดคําสั่งใหคอมพิวเตอรทํางาน ภาษาที่ใชเขียนซอฟตแวรมีอยูหลากหลาย
ไดแก ภาษาเบสิก (BASIC)ภาษาฟอรแทรน (FORTRAN)ภาษาโคบอล (COBOL)ภาษาซี (C) ภาษาวิชวลเบสิก (Visual
Basic) ภาษาจาวา (Java) ภาษาเพิรล (PERL) ภาษาเดลไฟ (Delphi) ฯลฯซึ่งควรจะเขียนเปน หนวยเล็กๆ กอน โดยแตละ
ภาษาอาจจะมีรูปแบบ หนวยที่ตางกัน
เมื่อเขียนเสร็จแลว ก็ควรจะทดสอบความถูกตองในการทํางานของแตละหนวย ดวยการทดสอบซอฟตแวร (software
testing) วาถูกตองตามขอกําหนด ตรงตามความตองการของผูใช มีคุณภาพตามตองการ และหาขอผิดพลาด เพื่อแกไข
ชุดคําสั่งใหกําจัดขอบกพรองนั้นๆ (software debugging)
- 11. ๖. รวมหนวยยอยของซอฟตแวร
ขั้นตอนนี้เปนการรวมชุดคําสั่งที่อยูในหนวยยอยใหเปนซอฟตแวรที่มีขนาดใหญ และทดสอบ
ความถูกตองวา หนวยตางๆ ยังทํางานรวมกันไดอยางถูกตองและมีประสิทธิภาพหรือไม
๗. นําซอฟตแวรไปใช
การนําเสนอซอฟตแวรไปใชในเบื้องตนจะชวยใหผูใชไดเห็นวา ใชไดสะดวกหรือไม และตรงกับ
ความตองการหรือไม เมื่อนําไปใชแลว สามารถแกปญหาที่กําลังประสบอยูไดหรือไม ฯลฯ หากไม
ตรงกับความตองการ ก็จะไดใหคนที่เขียนโปรแกรมนั้นแกไขใหม
๘. ใชซอฟตแวรในการทํางานจริง
ขั้นตอนนี้เปนการนําซอฟตแวรไปใชประกอบการทํางานจริง ซึ่งอาจทําใหวิธีการทํางาน
เปลี่ยนแปลงไป ซอฟตแวรที่ดีจะตองทําใหการทํางานมีประสิทธิภาพสูงขึ้น
- 12. การทํานุบํารุงซอฟตแวร
ขณะที่ใชซอฟตแวรอยู ก็ยังตองมีการทํานุบํารุงซอฟตแวร เชน
(๑) แกไขซอฟตแวร (correction) เมื่อพบขอผิดพลาด
(๒) ขยายหนาที่ของซอฟตแวร (enhancement) เมื่อผูใชปรับเปลี่ยนความตองการไป
(๓) ปรับใหซอฟตแวรทํางานในสภาพแวดลอมที่เปลี่ยนไป (adaptation) เชน มี
กฎระเบียบใหมออกมา ทําใหโจทยปญหาเปลี่ยนไป หรือคอมพิวเตอรเปลี่ยนรุน ฯลฯ
(๔) การรื้อแลว สรางใหม (software re-engineering) เพื่อปรับโครงสราง
ซอฟตแวรเกา พัฒนาซอฟตแวรใหม ใหมีคุณภาพ และทําใหการแก-ขยาย-ปรับ ทําไดอยาง
สะดวก และประหยัดในระยะยาว
การตรวจสอบความถูกตองควรจะทําในทุกขั้นตอน และถาพบขอผิดพลาด ก็ตองรีบยอนกลับ
ไปแกไข
- 13. วิธีการตรวจสอบแกไข
จะแตกตางกันไป ในแตละขั้นตอน สําหรับขั้นตอนแรกๆ อาจจะเปนการสํารวจความพอใจ
ของผูใชวา การวิเคราะหโจทย และความตองการถูกตองหรือไม การเขียนขอกําหนด
ซอฟตแวร และการออกแบบซอฟตแวร จะทําใหซอฟตแวร ทําหนาที่ชวยงานไดตาม
ความตองการหรือไม
ในขั้นตอนหลังๆ เมื่อมีการเขียนโปรแกรมขึ้นมาแลว ก็สามารถทําการทดสอบได ทั้ง
ความถูกตองตามขอกําหนด (Verification) และความพอใจของผูใชวา ซอฟตแวร
มีคุณภาพ และประสิทธิภาพตามที่ตองการหรือไม (Validation)
- 14. การทดสอบความตองการ
รวมถึงการจัดทํากรณีทดสอบ (test case) การทดสอบ และการหาจุดบกพรองใน
โปรแกรม ที่ตองแกไข กรณีทดสอบทั่วไปมักระบุขอมูลขาเขาที่เปนอินพุต (input) ของ
ซอฟตแวร และระบุขอมูลขาออก หรือลักษณะการโตตอบที่ควรเปนเอาตพุต (output)
ของซอฟตแวร การจัดทํากรณีทดสอบที่ดีควรครอบคลุม ทั้งภายนอก (Black - box
testing) และภายใน (White-box testing) การทดสอบครอบคลุมภายนอก ถามี
การณีที่ทดสอบอินพุต และเอาตพุต ทุกประเภท หรือการทดสอบครอบคลุมภายใน ถามีกรณี
ที่ทดสอบทุกโปรแกรมยอยภายใน โดยตองทําใหทุกคําสั่งในซอฟตแวรถูกเรียกใช
การทดสอบใหครอบคลุมมักมีกรณีทดสอบเปนจํานวนมาก เทคนิคในการทดสอบ (testing
technique) มักเสนอวิธีเลือกกรณีทดสอบใหมีพอประมาณ แตก็ยังครอบคลุมประเด็น
หลักๆ อยู ตัวอยางเชน การทดสอบโปรแกรมหาเศษจากการหารเลขที่คืนคาเศษที่เปนเลข
หลัก อินพุตจะ เปนตัวตั้ง และตัวหาร สวนเอาตพุตจะเปนคําตอบ
- 15. อินพุต ทุกประเภทของทั้งตัวตั้ง และตัวหาร จะแยกไดเปน ประเภทตัวเลขที่โปรแกรม
รับ และประเภทตัวเลขที่โปรแกรมไมรับ ซึ่งประเภทตัวเลขที่โปรแกรมรับ อาจแยกได
เปน ๓ แบบ ไดแก เลขหลักเดียว เลขหลายหลัก และเลขติดลบ ประเภทตัวเลขที่
โปรแกรมไมรับอาจแยกไดเปน ๒ แบบ ไดแก ตัวอักษรอื่นๆ ที่ไมใชตัวเลข และเลข
ศูนย นอกจากนี้ยังมี ๓ กรณี ที่เทียบคาระหวางตัวตั้ง และตัวหาร ไดแก ตัวตั้งมีคา
มากกวาตัวหาร ตัวหารมีคามากกวาตัวตั้ง และตัวตั้งมีคาเทากับตัวหาร
- 16. เอาตพุต ทุกประเภทแยกไดเปน ๓ กรณี คือ หารลงตัว หารไมลงตัว และหารไมได
หากรวมการทดสอบทุกรูปแบบแลว ก็จะมี กรณีมากถึง ๓ x ๒ x ๓ x ๓ คือ ๕๔ กรณี แต
เนื่องจากระยะเวลาในการทดสอบมักมีจํากัด กรณีที่ทดสอบจริงอาจเลือกเพียง ๑๐ กรณี ไดแก
๑. ตัวตั้งและตัวหารเปนเลขหลักเดียว หารลงตัว
๒. ตัวตั้งและตัวหารเปนเลขหลักเดียว หารไมลงตัว
๓. ตัวตั้งและตัวหารเปนเลขหลายหลัก หารลงตัว
๔. ตัวตั้งและตัวหารเปนเลขหลายหลัก หารไมลงตัว
๕. ตัวหารเปนศูนย หารไมได
๖. ตัวตั้งหรือตัวหารไมไดเปนตัวเลข หารไมได
๗. ตัวตั้งหรือตัวหารเปนเลขติดลบ
๘. ตัวตั้งมีคามากกวาตัวหาร
๙. ตัวตั้งมีคานอยกวาตัวหาร
๑๐. ตัวตั้งมีคาเทากับตัวหาร