บทที่ 18 Dependable software development

เป็นขั้นตอนการพัฒนายังไงที่จะทำให้ software น่าเชื่อถือ ซึ่งในการพัฒนา software เราจะหลีกเลี่ยงให้ระบบไม่เกิดความผิดพลาดเลยมันเป็นไปไม่ได้ กับคำว่า Fault Free ซึ่งจะหมายถึง Software ที่ปราศจากความผิดพลาดนั้น โดยคำว่าปราศจากความผิดพลาดในที่นี้ คือการที่ software นั้นได้ทำตาม specification ทุกอย่างครบถ้วนแล้วจึงถือว่าเป็น Fault Free แต่ในการทำงานจริงถึงแม้จะทำได้ครบตาม specification ทุกอย่างแล้ว แต่ถ้า specification ไม่รัดกุมพอ มันก็อาจจะเกิดความผิดพลาดได้อยู่ดี
-
Fault Avoidance คือการที่เราพัฒนาหรือออกแบบ Software ขึ้นมา แล้วหาทางหลีกเลียงไม่ให้ความผิดพลาดเกิดขึ้นได้
-
Fault Tolerance คือการที่เราพัฒนาหรือออกแบบ Software ขึ้นมา แล้วไม่ได้ป้องกันความผิดพลาดที่อาจจะเกิดขึ้นได้ในทุกๆกรณี เพราะบางกรณีก็ไม่คุ้มค่าที่จะทำ เพียงแต่เราจะมีกระบวนการหรือขั้นตอนมารองรับความผิดพลาดที่จะเกิดขึ้นได้นั้น

ในการพัฒนา Software ปัจจัยที่สำคัญที่สุดอย่างหนึ่งก็คือ งบประมาณ เพราะถ้างบประมาณจำกัดเราก็ไม่สามารถที่จะป้องกันข้อผิดพลาดทุกข้อได้หมด

องค์ประกอบในการพัฒนา Software แบบ Fault Free

  1. ต้องมีการกำหนด specification ที่รัดกุมมากๆ
  2. มีการใช้ Information hiding หรือ การ Encapsulation
  3. ต้องได้รับความร่วมมือจากองค์กรด้วย
  4. เลือกใช้ภาษาที่เข้มงวดในการกำหนด data type และก็มีการตรวจสอบได้ในระหว่าง runtime เช่น ภาษา C
  5. พยายามหลีกเลี่ยงการเขียนโปรแกรมที่เสี่ยงต่อความผิดพลาด ( Error-Prone คือการที่มีความเสี่ยงต่อความผิดพลาดสูง )

Structured programming มีจุดเด่นที่สำคัญคือ
-
หลีกเลี่ยงการใช้ Goto
-
พยายามใช้เฉพาะ While กับ If ในการควบคุม statement
-
การออกแบบควรใช้แบบ Top – down

Error – prone constructs ( โครงสร้างที่ก่อให้เกิดความผิดพลาดได้ง่ายและควรหลีกเลี่ยง )

  1. Floating point number - เพราะว่าตัวเลขทศนิยมเราจะต้องมีการกำหนดจำนวนหลักทศนิยมทำให้ต้องมีการตัดหลักที่เกินออกไปทำให้เกิดความผิดพลาดได้ แต่ถ้าใช้ก็ไม่มากนัก แต่ถ้าเอามาค่ามาใช้คำนวณซ้ำแล้วซ้ำอีกหลายๆรอบความผิดพลาดก็จะค่อยๆโตขึ้นเรื่อยๆ
  2. Pointers - อาจจะนำมาสู่ปัญหาของการชี้ไปยัง address ที่ไม่ถูกต้องได้ และทำให้การ debug หรือแก้ไขโปรแกรมได้ยาก
  3. Dynamic memory allocation - เพราะการจัดการ memory ของระบบหนึ่งๆอาจจะไม่เหมือนกัน เมื่อเราไป allocate memory ตอน runtime จึงอาจเกิดปัญหาขึ้นได้
  4. Parallelism - งานที่ทำพร้อมๆกันนั้นทำให้ตรวจสอบได้ยาก
  5. Recursion - จะทำให้ไล่โปรแกรมได้ยากและอาจทำให้โปรแกรมเกิดปัญหา memory overflow ได้ถ้าจำนวนที่ recursive เรียกตัวเองนั้นมากเกินไปหรือควบคุมไม่ได้
  6. Interrupts - เปรียบเทียบได้กับการใช้ Goto เพราะเมื่อมีการเรียกใช้งานก็จะไปทำงานที่ส่วนนั้นได้ในทันที
  7. Inheritance - ซึ่งจะขุดกับความเป็นจริงอยู่อย่างหนึ่งก็คือ เวลาเราจะเขียนโปรแกรมเชิง Object oriented เราจะต้องอ้างอิงถึง inheritance แต่ inheritanceก็มีข้อเสียคือ ถ้า Object ใดๆถูกสร้างขึ้นมาจาก Class และ Class ก็ไปอยู่ภายใต้ Super class อีกทีหนึ่ง ซึ่งหมายความว่าหารที่อ้างอิงถึง class ใดๆจำเป็นจะต้องอ้างอิงถึง Class อื่นๆด้วยเสมอ ไม่เช่นนั้นจะได้คุณสมบัติไปไม่ครบ

 

บรรยายเมื่อ 25กพ. 2545 เทอม 2/44

 

ฺBack Lesson 16 Lesson 17 Lesson 18 Lesson 20 Lesson 29 Index Mores