การออกแบบและการพัฒนาโปรแกรม
กระบวนการพัฒนาซอฟตแวร
กระบวนการการพัฒนาซอฟตแวรที่ดีควรหาขอผิดพลาดใหได แตตองไมสับสนเรื่อง
ขั้นตอนในการพัฒนา ถาผลิตอยางมีขั้นตอน ก็ควรมีความยืดหยุนพอสมควร และไมยึดติดกับ
ขั้นตอนมากเกินไป จนทําใหโครงการลาชา หรือลมเหลว เพราะเลือกใชขั้นตอนที่ไมเหมาะสมกับ
ประเภทของซอฟตแวร
ถาพบขอผิดพลาดชวงแรกๆ ก็จะชวยลดระยะเวลา และคาใชจาย ในการพัฒนาซอฟตแวรไดมาก
การศึกษาเรื่องคาใชจายดานซอฟตแวรของบริษัทไอบีเอ็ม (ibm) บริษัทจีทีอี (gte) และบริษัททีอาร
ดับเบิลยู (trw) โดยนายแบรี่ บีม (barry boehm)ในป ค.ศ. ๑๙๓๖ พบวา ถาแกไขขอผิดพลาด เมื่อ
พัฒนาซอฟตแวรเสร็จแลว แทนที่จะแกไขตั้งแตตอนที่กําหนดคุณลักษณะของซอฟตแวร ก็จะตอง
เสียคาใชจายเพิ่มขึ้นเปนรอยเทา ตัวอยางของปญหานี้เห็นไดอยางชัดเจน ในการแกปญหา
คอมพิวเตอร ป ค.ศ. ๒๐๐๐ หรือที่เรียกวา ปญหาวายทูเค (y2k) บริษัที่ออกแบบซอฟตแวรใหใชกับ
ปที่มีเลขสี่หลักตั้งแตตนแทบจะไมเดือดรอนในการแกไขเลย แตซอฟตแวรอื่นๆ ที่ทั้งผูผลิตและ
ผูใชตางละเลยปญหานี้ โดยยังคงใชปเปนเลขสองหลักอยู บางรายใชอยูเปนสิบๆ ป เมื่อถึงเวลา
แกไขขอผิดพลาดของซอฟตแวร ก็ปรากฏวาตองใชเงินเปนจํานวนมากถึงหลายสิบลานบาท รอย
ลานบาท หรือมากกวานั้น
การพัฒนาซอฟตแวรอยางมีขั้นตอน
มีหลายแบบและยังมีวิวัฒนาการอยูอยางตอเนื่องเพราะสาขาทางวิศวกรรมซอฟตแวรนี้ เพิ่งเกิดขึ้นในครึ่งหลังของ
ศตวรรษที่ ๒๐ หากเทียบกับระยะเวลา ที่มนุษยชาติศึกษากระบวนการสรางที่อยูอาศัย ที่มีมาเปนพันๆ ปแลว ก็นับได
วา สาขาวิชานี้ยังใหมอยูมาก ดังนั้น ในการเลือกกระบวนการการพัฒนาซอฟตแวรจะตองตั้งคําถามวา กระบวนการ
ใด"เหมาะ" ที่สุด สําหรับโจทยปญหา และประเภทของซอฟตแวรไมใชกระบวนการใด "ดี" ที่สุด
การพัฒนาซอฟตแวรไมใชกระบวนการที่มีจุดเริ่มตน และจุดสิ้นสุดที่แนนอน เหมือนเชนผลิตภัณฑอื่นๆ เนื่องจาก
ซอฟตแวรใชสําหรับสั่งใหคอมพิวเตอรชวยแกโจทยปญหาบางอยาง ใหแกมนุษย เมื่อสภาพของโจทยปญหา หรือ
คอมพิวเตอรเปลี่ยนแปลงไป ซอฟตแวรก็ตองเปลี่ยนแปลงตามซอฟตแวรที่ขาดการทํานุบํารุง จึงเสื่อมคุณภาพ ทั้งที่
ไมไดสึกหรอ ทั้งนี้เพราะไมสามารถนําไปใชแกปญหาไดอยางมีประสิทธิภาพอีกตอไป
ในสมัยแรกๆ การผลิตซอฟตแวรมักไมมีขั้นตอน คือ เริ่มตนดวยการเขียนซอฟตแวรเลย เมื่อมีปญหาก็แกไข เขียน
แลวแกสลับกันไปจนกวาจะไดคุณลักษณะที่ตองการผลก็คือ จะไดซอฟตแวรที่ซับซอนมาก หากตองมีการปรับปรุง
แกไขในภายหลัง และผูที่แกไข ไมใชผูเขียนซอฟตแวรนั้นเอง ก็จะมีปญหามากมักทําใหตองเสียคาใชจาย ในการทํานุ
บํารุงซอฟตแวร เกินกวางบประมาณที่กําหนดไว
 ๑. กําหนดคุณลักษณะซอฟต์แวร์ (Definition)
เนนวาจะ "สร้างอะไร" โดยใหคําตอบวา "โจทย์ปัญหาที่ต้องการแก้คืออะไร" และ "สิ่งที่จะใช้แก้ปัญหานี้
คืออะไร"
 ๒. สร้างซอฟต์แวร์ (Development)
เนนวาจะ "สร้างอย่างไร" โดยใหคําตอบเรื่อง "ทําอย่างไรจึงจะสร้างสิ่งที่นํามาใช้แก้ปัญหาได้" และ "ทํา
อย่างไรจึงจะตรวจสอบหาข้อบกพร่องของสิ่งที่สร้างขึ้นได้ ตลอดจนสิ่งที่นํามาใช้แก้ปัญหา รวมทั้ง
ซอฟต์แวร์ และเอกสารอธิบายซอฟต์แวร์"
๓. วิวัฒนาการของซอฟต์แวร์ (Evolution)
เนนวาจะ "เปลี่ยนแปลงอย่างไร" โดยใหคําตอบเรื่อง "เมื่อสภาพการ หรือปัญหาเปลี่ยนแปลงไปต้องทํา
อย่างไร จึงจะสามารถปรับปรุงสิ่งนั้นให้ยังคงใช้แก้ปัญหาได้"
ต่อมาได้มีการนําหลักวิศวกรรมมาประยุกต์ใช้ในการพัฒนาซอฟต์แวร์
การพัฒนาซอฟต์แวร์ จึงแบ่งได้เป็น ๓ ระยะ คือ
แมแบบแบบขั้นน้ําตก
 แมแบบของกระบวนการการพัฒนาซอฟตแวรที่เปนขั้นตอนที่เกาแกที่สุดนั้น เรียกกัน
วา แมแบบแบบขั้นน้ําตก (Waterfall Model) ซึ่งเมื่อลากเสนเชื่อมตอแต
ละขั้นตอนลงไป จนถึงขั้นตอนสุดทายแลว ก็จะมีลักษณะคลายน้ําตก
 ขั้นตอนหลักๆ ของแมแบบขั้นน้ําตก มีดังนี้
๑. วิเคราะห์ความเป็นไปได้
ปญหาทุกอยางในโลกนี้ ไมใชจะเปนปญหา ซึ่งเหมาะที่จะใชคอมพิวเตอร และซอฟตแวร
แกไขเสมอไป หรือถึงแมจะใชได ก็อาจเสียคาใชจายมากเกินไป หรือตองใชเวลานานมาก ดังนั้น ใน
ขั้นตอนแรก จึงตองมีการพิจารณาความเหมาะสม และความเปนไปไดในสวนนี้กอน
๒. วิเคราะห์โจทย์หรือความต้องการของผู้ใช้
โจทยปญหาเปนสาเหตุที่ทําใหลักษณะของซอฟตแวรมีความหลากหลาย เพราะซอฟตแวร
ถูกพัฒนาขึ้นมา เพื่อแกโจทยปญหาที่มีมากมาย หลายรูปแบบ โจทยปญหาอาจเปนความตองการของ
ผูใช ที่ตองการใหคอมพิวเตอรชวยทํางานแทน หรืออาจเปนโจทยปญหาทางวิทยาศาสตร ที่พยายาม
ทําใหคอมพิวเตอรสามารถคิดไดเหมือน มนุษย หรืออาจเปนการควบคุมการทํางานของ อุปกรณ
อิเล็กทรอนิกสตางๆ ที่ควบคุมการสื่อสารของคอมพิวเตอรบนเครือขายคอมพิวเตอร ฯลฯ
เนื่องจากโจทยปญหาดังกลาวอาจจะเปนปญหาใหญ ดังนั้น จะตองมีการวิเคราะห และแยก
ยอยปญหา (Problem Decomposition)กําหนดขอบเขตปญหาที่จะใหซอฟตแวรแกไข (software
scope) และตองทําความเขาใจใหไดวา ผูใชตองการอะไร งานสวนนี้จะเปนประเด็นสําคัญในการ
วางแผนพัฒนาซอฟตแวร รวมทั้งประเมินระยะเวลา และคาใชจายดวย
 ๓. เขียนคุณลักษณะซอฟต์แวร์
คุณลักษณะซอฟตแวร (Software Specification) เปนขอกําหนดลักษณะหนาที่ และวิธีการทํางานของ
ซอฟตแวรวา ซอฟตแวรนี้ตองทําอะไรบาง จึงจะสนองความตองการของผูใชเชน จะตองใชขอมูลอะไร จะ
จัดเก็บขอมูลอะไร จะผลิตหรือประมวลผลขอมูลอะไร ลักษณะของขอมูลเปนอยางไร มีขอบเขตขอจํากัด
อะไร ฯลฯ
การกําหนดคุณลักษณะซอฟตแวรสามารถ ทําไดหลายวิธี เชน
สอบถามผูใชโดยตรงวา ตองการใหซอฟตแวรทําหนาที่อะไรบาง การสอบถามตองมีเทคนิคในการสื่อสารที่
ดี โดยอาจจะมีการยกตัวอยางสภาพการณ(scenario-based requirement analysis) ในแนววา "ถ้า
(สถานการณ์) เกิดขึ้น จะทําอย่างไร" เชน ถาโจทยคือ การจัดการพัสดุของรานคานักวิเคราะหระบบอาจถาม
วา "ถ้าสินค้าที่สั่งซื้อไม่มาส่งตามกําหนด ทางร้านจะทราบได้เมื่อใด และจะดําเนินการอย่างไร"
 ศึกษาวิธีการดําเนินงานตามปกติกอนนําคอมพิวเตอรมาใช และหาจุดออนที่จะตองนําซอฟตแวรเขามาใช
เพื่อเพิ่มประสิทธิภาพ
 สํารวจความตองการของตลาดวา คนสวนใหญตองการใหคอมพิวเตอรชวยงานดานใดในลักษณะใด และ
ตองการความบันเทิงจากคอมพิวเตอรอยางไร ฯลฯ
 ศึกษาจากลักษณะของซอฟตแวรเกาที่ทํางานดานนี้อยูแลว ฯลฯ
สรุปผลการวิเคราะห์ข้อกําหนดลักษณะของซอฟต์แวร์สามารถแบ่งได้เป็น ๓ รูปแบบ คือ รูปแบบ
ข้อมูล รูปแบบหน้าที่งาน และรูปแบบการทํางาน วิธีการนําเสนออาจแสดงเป็นแผนผังแบบต่างๆ เช่น
แสดงด้วยแผนผังการไหลของข้อมูล (Data Flow Diagram) แสดงด้วยแผนผังความสัมพันธ์ของข้อมูล
(Entity - Relationship Diagram) ฯลฯ ส่วนศัพท์ว่าข้อมูลใดคืออะไร จะต้องอธิบายอยู่ในพจนานุกรม
ข้อมูล (Data Dictionary)
 ๔. ออกแบบซอฟต์แวร์
การออกแบบซอฟตแวรจะเริ่มเนนดานเทคนิค โดยรวมถึงการออกแบบโครงสรางของซอฟตแวรหนวยตางๆ ของ
ซอฟตแวร ซึ่งสามารถนําเสนอไดดวยแผนผังหลายแบบ เชน แผนผังโครงสรางระบบ (Structure Chart) และรายละเอียด
ขั้นตอนในการแกปญหา (algorithm) ของแตละหนวยนอกจากนี้ ยังรวมถึงการออกแบบวิธีที่ซอฟตแวรจะสื่อสารกับผูใช
เชน ออกแบบหนาจอ ออกแบบวิธีรับคําสั่งจากผูใช (จะใหผูใชพิมพคําสั่ง หรือกดปุมเรียก หรือพูดดวย ฯลฯ)
๕. เขียนซอฟต์แวร์
การเขียนซอฟตแวร หรือโปรแกรม เปนการเขียนชุดคําสั่งใหคอมพิวเตอรทํางาน ภาษาที่ใชเขียนซอฟตแวรมีอยูหลากหลาย
ไดแก ภาษาเบสิก (BASIC)ภาษาฟอรแทรน (FORTRAN)ภาษาโคบอล (COBOL)ภาษาซี (C) ภาษาวิชวลเบสิก (Visual
Basic) ภาษาจาวา (Java) ภาษาเพิรล (PERL) ภาษาเดลไฟ (Delphi) ฯลฯซึ่งควรจะเขียนเปน หนวยเล็กๆ กอน โดยแตละ
ภาษาอาจจะมีรูปแบบ หนวยที่ตางกัน
เมื่อเขียนเสร็จแลว ก็ควรจะทดสอบความถูกตองในการทํางานของแตละหนวย ดวยการทดสอบซอฟตแวร (software
testing) วาถูกตองตามขอกําหนด ตรงตามความตองการของผูใช มีคุณภาพตามตองการ และหาขอผิดพลาด เพื่อแกไข
ชุดคําสั่งใหกําจัดขอบกพรองนั้นๆ (software debugging)
 ๖. รวมหนวยยอยของซอฟตแวร
ขั้นตอนนี้เปนการรวมชุดคําสั่งที่อยูในหนวยยอยใหเปนซอฟตแวรที่มีขนาดใหญ และทดสอบ
ความถูกตองวา หนวยตางๆ ยังทํางานรวมกันไดอยางถูกตองและมีประสิทธิภาพหรือไม
๗. นําซอฟตแวรไปใช
การนําเสนอซอฟตแวรไปใชในเบื้องตนจะชวยใหผูใชไดเห็นวา ใชไดสะดวกหรือไม และตรงกับ
ความตองการหรือไม เมื่อนําไปใชแลว สามารถแกปญหาที่กําลังประสบอยูไดหรือไม ฯลฯ หากไม
ตรงกับความตองการ ก็จะไดใหคนที่เขียนโปรแกรมนั้นแกไขใหม
๘. ใชซอฟตแวรในการทํางานจริง
ขั้นตอนนี้เปนการนําซอฟตแวรไปใชประกอบการทํางานจริง ซึ่งอาจทําใหวิธีการทํางาน
เปลี่ยนแปลงไป ซอฟตแวรที่ดีจะตองทําใหการทํางานมีประสิทธิภาพสูงขึ้น
การทํานุบํารุงซอฟตแวร
ขณะที่ใชซอฟตแวรอยู ก็ยังตองมีการทํานุบํารุงซอฟตแวร เชน
(๑) แกไขซอฟตแวร (correction) เมื่อพบขอผิดพลาด
(๒) ขยายหนาที่ของซอฟตแวร (enhancement) เมื่อผูใชปรับเปลี่ยนความตองการไป
(๓) ปรับใหซอฟตแวรทํางานในสภาพแวดลอมที่เปลี่ยนไป (adaptation) เชน มี
กฎระเบียบใหมออกมา ทําใหโจทยปญหาเปลี่ยนไป หรือคอมพิวเตอรเปลี่ยนรุน ฯลฯ
(๔) การรื้อแลว สรางใหม (software re-engineering) เพื่อปรับโครงสราง
ซอฟตแวรเกา พัฒนาซอฟตแวรใหม ใหมีคุณภาพ และทําใหการแก-ขยาย-ปรับ ทําไดอยาง
สะดวก และประหยัดในระยะยาว
การตรวจสอบความถูกตองควรจะทําในทุกขั้นตอน และถาพบขอผิดพลาด ก็ตองรีบยอนกลับ
ไปแกไข
 วิธีการตรวจสอบแกไข
จะแตกตางกันไป ในแตละขั้นตอน สําหรับขั้นตอนแรกๆ อาจจะเปนการสํารวจความพอใจ
ของผูใชวา การวิเคราะหโจทย และความตองการถูกตองหรือไม การเขียนขอกําหนด
ซอฟตแวร และการออกแบบซอฟตแวร จะทําใหซอฟตแวร ทําหนาที่ชวยงานไดตาม
ความตองการหรือไม
ในขั้นตอนหลังๆ เมื่อมีการเขียนโปรแกรมขึ้นมาแลว ก็สามารถทําการทดสอบได ทั้ง
ความถูกตองตามขอกําหนด (Verification) และความพอใจของผูใชวา ซอฟตแวร
มีคุณภาพ และประสิทธิภาพตามที่ตองการหรือไม (Validation)
 การทดสอบความตองการ
รวมถึงการจัดทํากรณีทดสอบ (test case) การทดสอบ และการหาจุดบกพรองใน
โปรแกรม ที่ตองแกไข กรณีทดสอบทั่วไปมักระบุขอมูลขาเขาที่เปนอินพุต (input) ของ
ซอฟตแวร และระบุขอมูลขาออก หรือลักษณะการโตตอบที่ควรเปนเอาตพุต (output)
ของซอฟตแวร การจัดทํากรณีทดสอบที่ดีควรครอบคลุม ทั้งภายนอก (Black - box
testing) และภายใน (White-box testing) การทดสอบครอบคลุมภายนอก ถามี
การณีที่ทดสอบอินพุต และเอาตพุต ทุกประเภท หรือการทดสอบครอบคลุมภายใน ถามีกรณี
ที่ทดสอบทุกโปรแกรมยอยภายใน โดยตองทําใหทุกคําสั่งในซอฟตแวรถูกเรียกใช
การทดสอบใหครอบคลุมมักมีกรณีทดสอบเปนจํานวนมาก เทคนิคในการทดสอบ (testing
technique) มักเสนอวิธีเลือกกรณีทดสอบใหมีพอประมาณ แตก็ยังครอบคลุมประเด็น
หลักๆ อยู ตัวอยางเชน การทดสอบโปรแกรมหาเศษจากการหารเลขที่คืนคาเศษที่เปนเลข
หลัก อินพุตจะ เปนตัวตั้ง และตัวหาร สวนเอาตพุตจะเปนคําตอบ
 อินพุต ทุกประเภทของทั้งตัวตั้ง และตัวหาร จะแยกไดเปน ประเภทตัวเลขที่โปรแกรม
รับ และประเภทตัวเลขที่โปรแกรมไมรับ ซึ่งประเภทตัวเลขที่โปรแกรมรับ อาจแยกได
เปน ๓ แบบ ไดแก เลขหลักเดียว เลขหลายหลัก และเลขติดลบ ประเภทตัวเลขที่
โปรแกรมไมรับอาจแยกไดเปน ๒ แบบ ไดแก ตัวอักษรอื่นๆ ที่ไมใชตัวเลข และเลข
ศูนย นอกจากนี้ยังมี ๓ กรณี ที่เทียบคาระหวางตัวตั้ง และตัวหาร ไดแก ตัวตั้งมีคา
มากกวาตัวหาร ตัวหารมีคามากกวาตัวตั้ง และตัวตั้งมีคาเทากับตัวหาร
 เอาตพุต ทุกประเภทแยกไดเปน ๓ กรณี คือ หารลงตัว หารไมลงตัว และหารไมได
หากรวมการทดสอบทุกรูปแบบแลว ก็จะมี กรณีมากถึง ๓ x ๒ x ๓ x ๓ คือ ๕๔ กรณี แต
เนื่องจากระยะเวลาในการทดสอบมักมีจํากัด กรณีที่ทดสอบจริงอาจเลือกเพียง ๑๐ กรณี ไดแก
๑. ตัวตั้งและตัวหารเปนเลขหลักเดียว หารลงตัว
๒. ตัวตั้งและตัวหารเปนเลขหลักเดียว หารไมลงตัว
๓. ตัวตั้งและตัวหารเปนเลขหลายหลัก หารลงตัว
๔. ตัวตั้งและตัวหารเปนเลขหลายหลัก หารไมลงตัว
๕. ตัวหารเปนศูนย หารไมได
๖. ตัวตั้งหรือตัวหารไมไดเปนตัวเลข หารไมได
๗. ตัวตั้งหรือตัวหารเปนเลขติดลบ
๘. ตัวตั้งมีคามากกวาตัวหาร
๙. ตัวตั้งมีคานอยกวาตัวหาร
๑๐. ตัวตั้งมีคาเทากับตัวหาร

บทที่ 2 การเขียนโปรแกรม

  • 1.
  • 2.
    กระบวนการพัฒนาซอฟตแวร กระบวนการการพัฒนาซอฟตแวรที่ดีควรหาขอผิดพลาดใหได แตตองไมสับสนเรื่อง ขั้นตอนในการพัฒนา ถาผลิตอยางมีขั้นตอนก็ควรมีความยืดหยุนพอสมควร และไมยึดติดกับ ขั้นตอนมากเกินไป จนทําใหโครงการลาชา หรือลมเหลว เพราะเลือกใชขั้นตอนที่ไมเหมาะสมกับ ประเภทของซอฟตแวร ถาพบขอผิดพลาดชวงแรกๆ ก็จะชวยลดระยะเวลา และคาใชจาย ในการพัฒนาซอฟตแวรไดมาก การศึกษาเรื่องคาใชจายดานซอฟตแวรของบริษัทไอบีเอ็ม (ibm) บริษัทจีทีอี (gte) และบริษัททีอาร ดับเบิลยู (trw) โดยนายแบรี่ บีม (barry boehm)ในป ค.ศ. ๑๙๓๖ พบวา ถาแกไขขอผิดพลาด เมื่อ พัฒนาซอฟตแวรเสร็จแลว แทนที่จะแกไขตั้งแตตอนที่กําหนดคุณลักษณะของซอฟตแวร ก็จะตอง เสียคาใชจายเพิ่มขึ้นเปนรอยเทา ตัวอยางของปญหานี้เห็นไดอยางชัดเจน ในการแกปญหา คอมพิวเตอร ป ค.ศ. ๒๐๐๐ หรือที่เรียกวา ปญหาวายทูเค (y2k) บริษัที่ออกแบบซอฟตแวรใหใชกับ ปที่มีเลขสี่หลักตั้งแตตนแทบจะไมเดือดรอนในการแกไขเลย แตซอฟตแวรอื่นๆ ที่ทั้งผูผลิตและ ผูใชตางละเลยปญหานี้ โดยยังคงใชปเปนเลขสองหลักอยู บางรายใชอยูเปนสิบๆ ป เมื่อถึงเวลา แกไขขอผิดพลาดของซอฟตแวร ก็ปรากฏวาตองใชเงินเปนจํานวนมากถึงหลายสิบลานบาท รอย ลานบาท หรือมากกวานั้น
  • 3.
    การพัฒนาซอฟตแวรอยางมีขั้นตอน มีหลายแบบและยังมีวิวัฒนาการอยูอยางตอเนื่องเพราะสาขาทางวิศวกรรมซอฟตแวรนี้ เพิ่งเกิดขึ้นในครึ่งหลังของ ศตวรรษที่ ๒๐หากเทียบกับระยะเวลา ที่มนุษยชาติศึกษากระบวนการสรางที่อยูอาศัย ที่มีมาเปนพันๆ ปแลว ก็นับได วา สาขาวิชานี้ยังใหมอยูมาก ดังนั้น ในการเลือกกระบวนการการพัฒนาซอฟตแวรจะตองตั้งคําถามวา กระบวนการ ใด"เหมาะ" ที่สุด สําหรับโจทยปญหา และประเภทของซอฟตแวรไมใชกระบวนการใด "ดี" ที่สุด การพัฒนาซอฟตแวรไมใชกระบวนการที่มีจุดเริ่มตน และจุดสิ้นสุดที่แนนอน เหมือนเชนผลิตภัณฑอื่นๆ เนื่องจาก ซอฟตแวรใชสําหรับสั่งใหคอมพิวเตอรชวยแกโจทยปญหาบางอยาง ใหแกมนุษย เมื่อสภาพของโจทยปญหา หรือ คอมพิวเตอรเปลี่ยนแปลงไป ซอฟตแวรก็ตองเปลี่ยนแปลงตามซอฟตแวรที่ขาดการทํานุบํารุง จึงเสื่อมคุณภาพ ทั้งที่ ไมไดสึกหรอ ทั้งนี้เพราะไมสามารถนําไปใชแกปญหาไดอยางมีประสิทธิภาพอีกตอไป ในสมัยแรกๆ การผลิตซอฟตแวรมักไมมีขั้นตอน คือ เริ่มตนดวยการเขียนซอฟตแวรเลย เมื่อมีปญหาก็แกไข เขียน แลวแกสลับกันไปจนกวาจะไดคุณลักษณะที่ตองการผลก็คือ จะไดซอฟตแวรที่ซับซอนมาก หากตองมีการปรับปรุง แกไขในภายหลัง และผูที่แกไข ไมใชผูเขียนซอฟตแวรนั้นเอง ก็จะมีปญหามากมักทําใหตองเสียคาใชจาย ในการทํานุ บํารุงซอฟตแวร เกินกวางบประมาณที่กําหนดไว
  • 4.
     ๑. กําหนดคุณลักษณะซอฟต์แวร์(Definition) เนนวาจะ "สร้างอะไร" โดยใหคําตอบวา "โจทย์ปัญหาที่ต้องการแก้คืออะไร" และ "สิ่งที่จะใช้แก้ปัญหานี้ คืออะไร"  ๒. สร้างซอฟต์แวร์ (Development) เนนวาจะ "สร้างอย่างไร" โดยใหคําตอบเรื่อง "ทําอย่างไรจึงจะสร้างสิ่งที่นํามาใช้แก้ปัญหาได้" และ "ทํา อย่างไรจึงจะตรวจสอบหาข้อบกพร่องของสิ่งที่สร้างขึ้นได้ ตลอดจนสิ่งที่นํามาใช้แก้ปัญหา รวมทั้ง ซอฟต์แวร์ และเอกสารอธิบายซอฟต์แวร์" ๓. วิวัฒนาการของซอฟต์แวร์ (Evolution) เนนวาจะ "เปลี่ยนแปลงอย่างไร" โดยใหคําตอบเรื่อง "เมื่อสภาพการ หรือปัญหาเปลี่ยนแปลงไปต้องทํา อย่างไร จึงจะสามารถปรับปรุงสิ่งนั้นให้ยังคงใช้แก้ปัญหาได้" ต่อมาได้มีการนําหลักวิศวกรรมมาประยุกต์ใช้ในการพัฒนาซอฟต์แวร์ การพัฒนาซอฟต์แวร์ จึงแบ่งได้เป็น ๓ ระยะ คือ
  • 5.
    แมแบบแบบขั้นน้ําตก  แมแบบของกระบวนการการพัฒนาซอฟตแวรที่เปนขั้นตอนที่เกาแกที่สุดนั้น เรียกกัน วาแมแบบแบบขั้นน้ําตก (Waterfall Model) ซึ่งเมื่อลากเสนเชื่อมตอแต ละขั้นตอนลงไป จนถึงขั้นตอนสุดทายแลว ก็จะมีลักษณะคลายน้ําตก
  • 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.
     การทดสอบความตองการ รวมถึงการจัดทํากรณีทดสอบ (testcase) การทดสอบ และการหาจุดบกพรองใน โปรแกรม ที่ตองแกไข กรณีทดสอบทั่วไปมักระบุขอมูลขาเขาที่เปนอินพุต (input) ของ ซอฟตแวร และระบุขอมูลขาออก หรือลักษณะการโตตอบที่ควรเปนเอาตพุต (output) ของซอฟตแวร การจัดทํากรณีทดสอบที่ดีควรครอบคลุม ทั้งภายนอก (Black - box testing) และภายใน (White-box testing) การทดสอบครอบคลุมภายนอก ถามี การณีที่ทดสอบอินพุต และเอาตพุต ทุกประเภท หรือการทดสอบครอบคลุมภายใน ถามีกรณี ที่ทดสอบทุกโปรแกรมยอยภายใน โดยตองทําใหทุกคําสั่งในซอฟตแวรถูกเรียกใช การทดสอบใหครอบคลุมมักมีกรณีทดสอบเปนจํานวนมาก เทคนิคในการทดสอบ (testing technique) มักเสนอวิธีเลือกกรณีทดสอบใหมีพอประมาณ แตก็ยังครอบคลุมประเด็น หลักๆ อยู ตัวอยางเชน การทดสอบโปรแกรมหาเศษจากการหารเลขที่คืนคาเศษที่เปนเลข หลัก อินพุตจะ เปนตัวตั้ง และตัวหาร สวนเอาตพุตจะเปนคําตอบ
  • 15.
     อินพุต ทุกประเภทของทั้งตัวตั้งและตัวหาร จะแยกไดเปน ประเภทตัวเลขที่โปรแกรม รับ และประเภทตัวเลขที่โปรแกรมไมรับ ซึ่งประเภทตัวเลขที่โปรแกรมรับ อาจแยกได เปน ๓ แบบ ไดแก เลขหลักเดียว เลขหลายหลัก และเลขติดลบ ประเภทตัวเลขที่ โปรแกรมไมรับอาจแยกไดเปน ๒ แบบ ไดแก ตัวอักษรอื่นๆ ที่ไมใชตัวเลข และเลข ศูนย นอกจากนี้ยังมี ๓ กรณี ที่เทียบคาระหวางตัวตั้ง และตัวหาร ไดแก ตัวตั้งมีคา มากกวาตัวหาร ตัวหารมีคามากกวาตัวตั้ง และตัวตั้งมีคาเทากับตัวหาร
  • 16.
     เอาตพุต ทุกประเภทแยกไดเปน๓ กรณี คือ หารลงตัว หารไมลงตัว และหารไมได หากรวมการทดสอบทุกรูปแบบแลว ก็จะมี กรณีมากถึง ๓ x ๒ x ๓ x ๓ คือ ๕๔ กรณี แต เนื่องจากระยะเวลาในการทดสอบมักมีจํากัด กรณีที่ทดสอบจริงอาจเลือกเพียง ๑๐ กรณี ไดแก ๑. ตัวตั้งและตัวหารเปนเลขหลักเดียว หารลงตัว ๒. ตัวตั้งและตัวหารเปนเลขหลักเดียว หารไมลงตัว ๓. ตัวตั้งและตัวหารเปนเลขหลายหลัก หารลงตัว ๔. ตัวตั้งและตัวหารเปนเลขหลายหลัก หารไมลงตัว ๕. ตัวหารเปนศูนย หารไมได ๖. ตัวตั้งหรือตัวหารไมไดเปนตัวเลข หารไมได ๗. ตัวตั้งหรือตัวหารเปนเลขติดลบ ๘. ตัวตั้งมีคามากกวาตัวหาร ๙. ตัวตั้งมีคานอยกวาตัวหาร ๑๐. ตัวตั้งมีคาเทากับตัวหาร