/ Software Development

เขียนโปรแกรมเพื่อใช้ในโลกจริง

เมื่อเริ่มต้นเขียนโปรแกรม เรามักเริ่มจากการศึกษาโครงสร้างและวิธีการทำงานของภาษาใดภาษาหนึ่ง เช่น C, Java, Python และทดลองเขียนโปรแกรมง่ายๆให้ทำตามที่เราต้องการ เช่น โปรแกรมเครื่องคิดเลข ถ้าเราสามารถทำได้ถึงตรงนี้แปลว่าเรามีความเข้าใจในการเขียนโปรแกรมพื้นฐานระดับหนึ่งแล้ว แต่เมื่อเราต้องการก้าวไปอีกขั้นด้วยการเขียนโปรแกรมเพื่อใช้ในโลกจริง สร้างประโยชน์ให้กับผู้ใช้ในชีวิตจริง มีปัจจัยที่ต้องคำนึงถึงอีกหลายอย่าง นอกจากการเขียนโปรแกรมให้ทำงานได้ตามที่ต้องการ

เขียนให้คนอื่นอ่านเข้าใจได้ (Readability)

โปรแกรมที่มีผู้ใช้จริงจะอยู่ไปอีกนาน เป็นเรื่องปกติที่จะมีคนอื่นในทีมมาร่วมแก้ไขและพัฒนาโปรแกรมของเรา ดังนั้นนอกจากจะเขียนให้ใช้งานได้แล้ว เราจำเป็นต้องเขียนให้อ่านง่ายด้วย คนที่มาช่วยพัฒนาโปรแกรมจะได้ใช้เวลาน้อยในการทำความเข้าใจ และเข้าใจอย่างถูกต้อง

รวมถึงกรณีที่เราต้องหยุดพัฒนาโปรแกรมนี้ไปซักพัก แล้วกลับมาทำต่อในภายหลัง การเขียนให้อ่านง่ายจะช่วยตัวเราเองในอนาคต

ข้อแนะนำเบื้องต้นคือ

  • แบ่งโปรแกรมออกเป็นส่วนย่อยๆ ตามหน้าที่การทำงาน
  • ตั้งชื่อ class, ฟังก์ชัน และตัวแปรทุกตัวให้อ่านแล้วพอนึกออกว่าหมายถึงอะไร
  • เขียน document สำหรับส่วนที่คิดว่าเข้าใจยาก

การเขียนโปรแกรมให้อ่านเข้าใจง่ายเป็นสิ่งสำคัญมาก มีหนังสือที่เขียนถึงเรื่องนี้โดยเฉพาะ เช่น Code Complete โดย Steve McConnell และ Clean Code โดย Robert C. Martin

การทดสอบแบบอัตโนมัติ (Automated test)

ก่อนที่เราจะนำโปรแกรมไปใช้จริง เราต้องทดสอบก่อนว่าการทำงานในส่วนต่างๆ เป็นไปอย่างถูกต้องหรือไม่ วิธีหนึ่งคือค่อยๆ ทดลองใช้ด้วยตัวเองทีละส่วน (Manual test) แต่วิธีนี้ไม่เหมาะอย่างยิ่งในการเขียนโปรแกรมเพื่อใช้งานจริง

โปรแกรมที่ถูกใช้งานโดยผู้ใช้จริงจะมีการแก้ไขและปรับปรุงอยู่เรื่อยๆ อย่างหลีกเลี่ยงไม่ได้ เพราะสถานการณ์และความต้องการของผู้ใช้ที่เปลี่ยนไปตามเวลา ดังนั้นการทำ Manual test ทุกส่วน ทุกครั้งที่มีการเปลี่ยนแปลงโปรแกรมย่อมไม่สามารถทำได้จริง วิธีที่ดีกว่าคือเขียน Test script เพื่อทำการทดสอบส่วนต่างๆ โดยอัตโนมัติ (Automated test)

โปรแกรมสมบูรณ์แบบที่ไม่จำเป็นต้องมีการแก้ไขอีก
คือโปรแกรมที่ไม่มีคนใช้

โปรแกรมที่มีคนใช้ย่อมต้องมีการแก้ไขอยู่เสมอ เป็นเรื่องธรรมดา

วิธีการเขียน Automated test อย่างเหมาะสมนั้นเป็นหัวข้อที่มีรายละเอียดยิบย่อย ต้องใช้เวลาศึกษาและฝึกฝนเพื่อให้สามารถทำได้ดี ทั้งนี้ ข้อแนะนำเบื้องต้นคือ

  • พยายามเขียน Test script ให้ครอบคลุมทุกส่วนของโปรแกรมและทุกการใช้งานที่เป็นไปได้ ส่วนที่ควรระวังในการทดสอบคือ
    • Edge case หรือค่า input ที่อยู่ตรงขอบพอดี เช่น input = 0 กรณีที่ฟังก์ชันรับ input เป็นตัวเลข หรือ input เป็น empty list กรณีที่ฟังก์ชันรับ input เป็น list
    • เมื่อมี error เกิดขึ้น เช่น network ใช้ไม่ได้ โปรแกรมยังคงทำในสิ่งที่เหมาะสมอยู่หรือไม่
  • ทุกครั้งที่มีการแก้ไขโปรแกรมโดยการทำงานของโปรแกรมเปลี่ยนไป เราจำเป็นต้องแก้ Test script ให้เป็นไปตามพฤติกรรมใหม่ของโปรแกรมด้วย ถ้าเราแก้โปรแกรม และเห็นว่าไม่ต้องแก้ Test script นั่นหมายความว่า Test script ของเราไม่ครอบคลุมส่วนที่เราแก้ ในกรณีนี้เราต้องเขียน Test script เพิ่มเพื่อให้ครอบคลุม
  • รัน Test script ทุกครั้งที่มีการแก้ไขโปรแกรมเพื่อทดสอบความถูกต้องอยู่เสมอ

การจัดการความผิดพลาด (Error Handling)

เวลาเขียนโปรแกรม เรามักเขียนสำหรับกรณีที่โปรแกรมสามารถทำงานได้ปกติ และลืมคิดถึงความผิดพลาดที่อาจเกิดขึ้นจากปัจจัยแวดล้อม เช่น network ใช้ไม่ได้ หรือ service ที่เราเรียกใช้ไม่ตอบสนอง

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

ยกตัวอย่าง ถ้าโปรแกรมของเราจำเป็นต้องดึงข้อมูลผ่าน internet แต่มีบางช่วงเวลาโปรแกรมไม่สามารถเข้าถึง internet ได้ วิธีที่เราใช้รับมือต้องพิจารณาตามลักษณะของโปรแกรมด้วย

  • ในกรณีของโปรแกรมที่มีผู้ใช้อยู่หน้าจอ เราอาจต้องส่งข้อความออกมาว่า internet ใช้ไม่ได้นะ ช่วยตรวจสอบให้หน่อย
  • ถ้าเป็นโปรแกรมที่ไม่ได้มีผู้ใช้อยู่หน้าจอ (เช่น การประมวลผลสรุปข้อมูลประจำวัน) เราอาจตั้งให้โปรแกรมพยายามเข้าถึงข้อมูลซ้ำอีกหลายๆ ครั้ง โดยหวังว่า ณ จุดหนึ่ง internet จะกลับมาใช้ได้

ข้อแนะนำเบื้องต้นคือ

  • เริ่มต้นด้วยการจัดการ error ที่มักเกิดขึ้นได้ง่ายก่อน เช่น error ที่เกิดจากการติดต่อ service ภายนอกไม่สำเร็จ
  • จัดการแยกตามชนิดของ error เพราะวิธีการจัดการของ error แต่ละชนิดไม่เหมือนกัน เช่น
    • กรณี network ใช้งานไม่ได้ อาจให้โปรแกรมลองทำซ้ำ เผื่อว่าในครั้งถัดไป network จะกลับมาใช้ได้แล้ว
    • กรณี input ที่เข้ามาในระบบอยู่ในรูปแบบที่ไม่ถูกต้อง อาจคืนค่าเป็น error message แล้วไม่ต้องสนใจ input นั้น
  • เมื่อเขียน Test script ทดสอบระบบ ให้เขียนครอบคลุมกรณีที่เกิด error ด้วย

ส่งท้าย

ยังมีเรื่องอื่นอีกที่ต้องคำนึงถึงในการนำโปรแกรมไปใช้งานจริง เช่น การจำกัดการเข้าถึงส่วนต่างๆ (Security), การติดตามสถานะของระบบ (Monitoring) ซึ่งเราจะกลับมาพูดถึงอีกครั้งในโอกาสถัดไป

เขียนโปรแกรมเพื่อใช้ในโลกจริง
Share this

Subscribe to Code on the Hill