การพัฒนาซอฟต์แวร์ขนาดเล็กๆ โดยคนๆ เดียวนั้น ต้องใช้คนที่สามารถเขียนชุดคำสั่ง ด้วยภาษาคอมพิวเตอร์ได้ หรือที่เรียกว่า "โปรแกรมเมอร์" โปรแกรมเมอร์มักได้รับการมอบหมายตั้งแต่เริ่มต้นว่า จะต้องสั่งให้คอมพิวเตอร์ทำอะไรบ้าง เขาจึงจะเริ่มดำเนินการ
สมมติว่าโจทย์คือ ให้คอมพิวเตอร์ตรวจสอบว่า ปี พ.ศ.ที่ระบุเป็นอธิกสุรทิน หรือไม่ ขั้นตอนที่โปรแกรมเมอร์จะดำเนินการมีดังต่อไปนี้
ขั้นที่ ๑ วิเคราะห์โจทย์
โปรแกรมเมอร์ต้องหานิยามว่า ปีอธิกสุรทินคืออะไร โดยอาจหาจากสารานุกรม หรือพจนานุกรม ก็จะพบว่า ปีอธิกสุรทิน (leap year) คือ ปีที่มี ๓๖๖ วัน ในปีนั้น เดือนกุมภาพันธ์จะมี ๒๙ วัน ในเชิงการคำนวณ ปีอธิกสุรทินเป็นปีที่หารด้วย ๔ ได้ลงตัว แต่หารด้วย ๑๐๐ ไม่ลงตัว หรือปีที่หารด้วย ๔๐๐ ได้ลงตัว
ขั้นที่ ๒ ออกแบบขั้นตอนการแก้ปัญหา
การระบุขั้นตอนในการแก้ปัญหา สำหรับคอมพิวเตอร์มีศัพท์เรียกว่า "อัลกอริทึม (Algorithm)" อธิบายให้ทราบถึงวิธีจัดการกับข้อมูลขาเข้า หรือ "อินพุต" เพื่อแปลงให้เป็นข้อมูลขาออกหรือ "เอาต์พุต"
ในกรณีนี้ ข้อมูลขาเข้าคือ ปี พ.ศ. ซึ่งเป็นเลข ๔ หลัก ข้อมูลขาออกคือ พิมพ์ว่า ใช่ หรือไม่ใช่ปีอธิกสุรทิน โปรแกรมเมอร์อาจเริ่มร่างขั้นตอนหลักดังนี้
(๑) อ่านปี
(๒) ถ้าหารปีด้วย ๔ ลงตัว และหารปีด้วย ๑๐๐ ไม่ลงตัว ตอบว่า ใช่ปีอธิกสุรทิน
(๓) มิฉะนั้น ถ้าหารปีด้วย ๔๐๐ ลงตัว ตอบว่า ใช่ปีอธิกสุรทิน
(๔) อัลกอริทึมสำหรับตรวจสอบปีว่าเป็นปีอธิกสุรทินหรือไม่ มิฉะนั้น ตอบว่า ใช่ปีอธิกสุรทิน
ขั้นที่ ๓ การเขียนโปรแกรม
โปรแกรมในภาษาวิชวลเบสิก (Visual Basic) ที่ตรวจสอบปีอธิกสุรทิน ที่เขียนตามอัลกอริทึมจากขั้นที่ ๒ แสดงได้ดังนี้
Private Sub LeapYear-Click()
Dim Year As Integer
Year = InputYear.Text
if (Year Mod 4 = 0 And Year Mod 100 <> 0) Then
MsgBox "ปี" & Year & "เป็นปีอธิกสุรทิน" , vboKOnly. "ผลการคำนวณ"
Elself (Year Mod 400 = 0) Then
MsgBox "ปี" & Year & "เป็นปีอธิกสุรทิน", vbOKOnly, "ผลการคำนวณ"
Else
MsgBox "ปี" & Year & "ไม่เป็นปีอธิกสุรทิน" , vbOKOnly, "ผลการคำนวณ"
End If
End Sub
: โปรแกรมที่เขียนด้วยภาษาวิชวลเบสิก เพื่อตรวจสอบปี พ.ศ. ว่าเป็นปีอธิกสุรทิน แต่โปรแกรมนี้ยังมีข้อผิดพลาดอยู่บ้าง
ชุดคำสั่งที่เป็นภาษาที่คนสามารถอ่านออก ดังแสดงในรูปที่ ๑ เรียกกันว่า "ซอร์สโคด (Source Code)" ซึ่งก่อนที่โปรแกรมจะสั่งให้คอมพิวเตอร์ทำงานได้ โปรแกรมเมอร์ ต้องเรียกซอฟต์แวร์ที่ทำหน้าที่เป็นล่าม เรียกว่า "คอมไพเลอร์ (Compiler)" เพื่อแปลคำสั่ง ในซอร์สโคดให้เป็นภาษาเครื่อง (machine language) ก่อน ชุดคำสั่งที่แปลเป็นภาษาเครื่องแล้ว เรียกว่า "อ็อบเจ็กต์โคด (Object Code)" โปรแกรมที่ถูกแปลงเป็นอ็อบเจ็กต์โคด เรียกว่า "โปรแกรมพร้อมปฏิบัติ (executable file)" เมื่อใดที่ถูกเรียกใช้ คอมพิวเตอร์ก็จะทำงานตามคำสั่งได้
ขั้นที่ ๔ ทดสอบโปรแกรม
โปรแกรมเมอร์ต้องคิดกรณีที่จะทดสอบระบบ โปรแกรมนี้มี ๒ กรณีหลักคือ กรณีแรก เลือกปีที่รู้แล้วว่า เดือนกุมภาพันธ์มี ๒๘ วัน เช่น ปี พ.ศ. ๒๕๔๑ กรณีที่ ๒ เลือกปี ที่รู้แล้วว่า เดือนกุมภาพันธ์มี ๒๙ วัน เช่น ปี พ.ศ. ๒๕๔๓
เมื่อเริ่มทำงาน โปรแกรมเมอร์จะเรียกโปรแกรมพร้อมปฏิบัติของโปรแกรมนี้มาใช้ เพื่อทดสอบระบบ โดยคอมพิวเตอร์จะแสดงหน้าจอเพื่อเรียกข้อมูลขาเข้า ดังนี้
เมื่อป้อนปี พ.ศ. ๒๕๔๑ เข้าโปรแกรมนี้ คอมพิวเตอร์แสดงผลว่า "ปี ๒๕๔๑ ไม่ เป็นปีอธิกสุรทิน" ซึ่งถูกต้อง
แต่เมื่อป้อนปี พ.ศ. ๒๕๔๓ คอมพิวเตอร์แสดงผลว่า "ปี ๒๕๔๓ ไม่เป็นปีอธิกสุรทิน" ซึ่งผิด เมื่อเห็นผลในกรณีที่ ๒ แล้ว โปรแกรมเมอร์จะทราบทันทีว่า โปรแกรมมีปัญหา หรือมี "บัก" ที่ต้องเข้าไปแก้ไข
ขั้นที่ ๕ แก้ไขโปรแกรม
วิธีการที่ดี สำหรับการแก้ไขโปรแกรมคือ ควรย้อนไปพิจารณาการวิเคราะห์โจทย์ และการออกแบบขั้นตอนการแก้ปัญหาด้วย เมื่ออ่านอย่างรอบคอบจะพบว่า วิธีคำนวณตรวจสอบปีนั้น ใช้ได้เฉพาะปี ค.ศ. ไม่ใช่ปี พ.ศ. ดังนั้น การแก้ไขต้องแก้ที่อัลกอริทึม ซึ่งย้อนกลับไปเรื่องการออกแบบวิธีแปลงปี พ.ศ. ให็เป็นปี ค.ศ. ก่อน เราสามารถคำนวณได้ โดยการลบปี พ.ศ. ๕๔๓ ขั้นตอนของอัลกอริทึมจากขั้นที่ ๒ จะถูกแก้ไข แล้วจึงไปแก้ไขโปรแกรมดังแสดงนี้
จากอัลกอริทึมเดิม อัลกอริทึมที่ถูกแก้ไข
(๑) อ่านปี (๑) อ่านปี พ.ศ.
(๑.๑) ปี = ปี พ.ศ. - ๕๔๓
(๒) ถ้าหารปีด้วย ๔ ได้ลงตัว และปี (๒) ถ้าหารปีด้วย ๔ ได้ลงตัว และหารปีด้วย
และปีด้วย๑๐๐ ไม่ลงตัว ตอบว่า ใช่ปีอธิกสุรทิน ๑๐๐ ไม่ลงตัว ตอบว่า ใช่ปีอธิกสุรทิน
โปรแกรมเพื่อตรวจสอบปี พ.ศ. ว่าเป็นปีอธิกสุรทิน หลังการแก้ไข ให้แปลงปี พ.ศ. เป็นปี ค.ศ. ก่อนการประมวลผล
Private Sub LeapYear-Click()
Dim Year, ThaiYear As Integer
ThaiYear = InputYear.Text
Year = ThaiYear - 543
if (Year Mod 4 = 0 And Year Mod 100 <> 0 Then
MsgBox "ปี" & Year + 543 & "เป็นปีอธิกสุรทิน" , vbOKOnly, "ผลการคำนวณ"
Elself (Year Mod 400=0) Then
MsgBox "ปี" & Year+543 & "เป็นปีอธิกสุรทิน" , vbOKOnly, "ผลการคำนวณ"
Else
MsgBox "ปี" & Year-543 "ไม่เป็นอธิกสุรทิน" , vbOKOnly, "ผลการคำนวณ"
End if
End Sub
เมื่อเอากรณีปี พ.ศ. ๒๕๔๑ มาทดสอบอีกครั้ง คอมพิวเตอร์แสดงผลว่า "ปี ๒๕๔๑ ไม่เป็นปีอธิกสุรทิน" อย่างถูกต้อง และเมื่อเอากรณีปี พ.ศ. ๒๕๔๓ มาทดสอบอีกครั้ง คอมพิวเตอร์แสดงผลว่า "ปี ๒๕๔๓ เป็นปีอธิกสุรทิน" อย่างถูกต้อง ซึ่งถือว่าสามารถแก้ ปัญหาได้สำเร็จ
ขั้นที่ ๖ การปรับปรุงโปรแกรม
การพัฒนาซอฟต์แวร์ต้องคำนึงถึงคุณภาพด้วย ซอฟต์แวร์ที่ทำงานถูกต้องแล้ว ไม่ได้หมายความว่า ดีพร้อมแล้ว ในกรณีนี้ยังสามารถเพิ่มคุณภาพได้อีกหลายประการ การปรับปรุงโปรแกรมที่ง่ายที่สุดคือ การเพิ่มคำอธิบายภาพ (comment) ซึ่งแสดงผลได้ดังนี้
การปรับปรุงโปรแกรมโดยการเพิ่มคำอธิบาย (Comment) สำหรับภาษาวิชวลเบสิกนั้น บรรทัดที่ขึ้นต้นด้วย ' ถือเป็นคำอธิบาย ไม่ใช่คำสั่ง
การเขียนโปรแกรมขนาดเล็กนี้ มีประเด็นเรื่องคุณภาพให้พิจารณามากมาย ดังนั้น ประเด็นเหล่านี้ก็ต้องยิ่งมีมากขึ้น ในการพัฒนาซอฟต์แวร์ขนาดใหญ่ การใช้คำว่า "การพัฒนาซอฟต์แวร์" จึงมักมีความหมายมากกว่า "การเขียนโปรแกรม" เพราะมีความซับซ้อนมากกว่า ในการพัฒนาซอฟต์แวร์ นักวิเคราะห์ที่ไม่ใช่โปรแกรมเมอร์ มักจะมาร่วมศึกษาวิเคราะห์ความซับซ้อนของโจทย์ปัญหา โดยจะมีเอกสารประกอบการดำเนินการ และมีการประสานงาน เพื่อให้คนหลายคนสามารถทำงานร่วมกันได้ กระบวนการการพัฒนาจะมีขั้นตอนย่อยๆ อีกมาก ขณะที่เริ่มมีเครื่องมือ (ซอฟต์แวร์) บางอย่างที่ช่วยให้สามารถสร้างชุดคำสั่งของซอฟต์แวร์ได้โดยอัตโนมัติ จากข้อกำหนดของซอฟต์แวร์ ซึ่งจะทำให้เห็นได้อย่างชัดเจนว่า ความยากในการพัฒนาซอฟต์แวร์ขนาดใหญ่อยู่ที่การวิเคราะห์โจทย์ และการออกแบบ มากกว่าการเขียนคำสั่ง หรือการเขียนโปรแกรมเพียงอย่างเดียว