Wednesday, 24 December 2008

เป็นไปได้ไหมที่จะสร้าง software โดยปราศจาก Defect

หลังจากที่จบ Lecture ที่ 1 แล้ว The Economy of Software Testing ก็มี Assignment มาให้ลองทำดู โดยโจทย์ที่ได้รับมานั้นไม่ง่ายไม่ยาก "เป็นไปได้ไหมที่จะสร้าง software โดยปราศจาก Defect" ซึ่งงานนี้อาจารย์ได้บอกว่าเนื่องจากพวกเราได้คลุกคลีอยู่ในวงการ programmer มานานย่อมที่พอจะรู้ได้ว่าการสร้าง software ที่ Bug free นั้นเป็นไปได้ไหม และนี่ก็คือความคิดเห็นที่ส่งไปครับ

การสร้างโปรแกรมโดยปราศจาก Bug หรือทำให้มีน้อยเท่าที่จะเป็นไปได้

มันคงเป็นได้ยากที่จะทำให้โปรแกรมที่เราสร้างขึ้นมานั้นไม่มี Bug เลย เพราะว่า Bug กับ Software นี้เป็นของคู่กันที่มี software ก็ต้องมี bug อย่างแยกกันไม่ออก แต่โอกาสที่ไม่มี Bug ก็มีได้หรือว่ามี Bugs น้อยที่สุดก็ขึ้นอยู่กับปัจจัยดังกล่าวต่อไปนี้

ขนาดของ Project

ขนาดของ Project นั้นค่อนข้างที่เกี่ยวข้องกับ Bugs ของ Program โดยตรงเพราะว่ายิ่งขนาดของ Project ยิ่งใหญ่การที่เราจะทำการตรวจสอบในทุกกระบวนการไม่ให้มีข้อผิดพลาดหรือว่าตก หล่นนั้นเป็นไปได้ยากซึ่งต่อให้เราใช้ Tool ต่างๆเข้ามาช่วยในการ Testing ที่ใช้ในการ Test ในส่วนต่างๆแล้วก็อาจจะยังมีการหลุดลอดของแมลงตัวน้อย (Bugs) ได้ และต่อให้เป็น Project ที่มีขนาดเล็กแล้วใช้ว่าจะไม่มี Bugs เสมอไปเพราะว่ายังขึ้นอยู่กับระดับความยากของ Business ด้วยยกตัวอย่างเช่น Business ที่เกี่ยวกับคิด ดอกเบี้ย ซึ่งอัตราดอกเบี้ยนั้นผันผวนอยู่ตลอดเวลาทำให้ช่วงเวลานี้คิดดอกเบี้ยอย่าง หนึ่งอีกช่วงหนึ่งคิดอีกอย่างหนึ่ง หรือการคิดดอกเบี้ยที่มีการใช้ Tree เข้ามาเกี่ยวข้อง เช่น การคิดดอกเบี้ยของธุรกิจพวกสินค้าขายตรง

ระยะเวลา

ระยะเวลานี่เป็นปัจจัยสำคัญเลยว่า Bugs จะเกิดขึ้นมากน้อยแค่ไหนเพราะว่าต่อให้เป็น Project ที่มีขนาดไม่ใหญ่มากแต่ถ้าให้เวลาน้อยก็ทำให้ต้องเร่งทำให้ทัน ทำให้บางครั้งความเร่งรีบทำให้อาจจะมองข้ามสิ่งสำคัญไปทำให้เกิด Bugs ได้ง่ายขึ้น

ภาษาที่ใช้

ภาษาที่ใช้ในการเขียน Software นี่เป็นส่วนสำคัญมากเพราะว่าบางภาษานั้นอาจจะเอื้ออำนวยให้เกิด Bugs ได้ง่ายๆ ยกตัวอย่างเช่น ภาษาที่มีลักษณะที่เป็น Dynamic คือไม่ Strong Type ทำให้ Variable ที่ประกาศขึ้นนั้นสามารถเป็น Type ชนิดอะไรก็ได้ทำให้มีโอกาสที่จะเกิด Error Type Conversion ได้สูงถ้าหากไม่มีการจัดการที่ดี หรือว่าภาษาที่ต้องมีการจัดการกับหน่วยความจำเอง เช่น ภาษา C ที่เราต้องไป allocation memory และ ปลดปล่อยมันเองซึ่งถ้าหากโปรแกรมเมอร์เป็นคนจัดการเองแล้วลืมที่จะปลดปล่อย ออกมา อาจจะทำให้เกิด memory leaks ได้ หรือว่าอาจจะไม่ได้เกิดจากการ Coding ก็ได้อาจจะเกิดจาก Bugs ของการ Compile หรือ Interpreter ของตัวภาษาเองก็ได้ซึ่งต้องศึกษาในแต่ละตัวภาษาที่จะเลือกใช้ว่ามีความ เสถียรขนาดไหน

ขั้นตอนของ SDLC

ขั้นตอนของการทำ SDLC เป็นการบริการจัดการการผลิต Software นั้นถือว่าสำคัญมากเพราะว่าหากผิดพลาดในขั้นตอนใดอาจจะมีผลกระทบส่งมายัง ขั้นตอนอื่นๆได้ดังนั้นถ้าหากว่ามีการจัดการใน SDLC ที่ดีจะช่วยทำให้ Bugs นั้นสามารถลดลงได้เป็นอย่างมากซึ่ง SDLC จะแบ่งเป็น 7 ขั้นตอนย่อยๆดังนี้

  1. Planning - establishing the plans for creating an information system
  2. Analysis - IT specialists collaborate to collect, comprehend, and logistically formalize business requirements
  3. Design - this is where the technical blueprint of the system is created
  4. Development - executing the design into a physical system
  5. Testing - testing the developed system
  6. Deployment - the systems are placed and used in the actual workforce
  7. Maintenance - keeping the system up to date with the changes in the organization and ensuring it meets the goals of the organization

ซึ่งในตามหลักในการเจอ Bugs ที่พบกันบ่อยๆนั้นมักจะพบอยู่ในช่วงของ Analysis มากที่สุดเพราะว่าเป็นช่วงของการเก็บ Requirement ซึ่งการที่จะเก็บข้อมูลให้ครบทุกส่วนหรือว่าถูกต้องตามใจลูกค้านั้นค่อนข้าง จะเป็นไปได้ยากเนื่องจากว่าลูกค้าในบางองค์กรนั้นไม่มีความรู้เรื่องของ IT เลยทำให้การไปเก็บ Requirement และการสื่อสารเพื่อทำความเข้าใจกับลูกค้าว่าสิ่งที่ลูกค้าต้องการจริงๆนั้น คืออะไรจึงเป็นไปได้ยากดังนั้น Bugs มากกว่าครึ่งจึงมักจะเกิดจากการเก็บ Requirement ที่ผิดพลาดทำให้มันลามไปยังส่วนอื่นๆอีกเช่น Design, Development, … ซึ่งการเจอ Bugs ในช่วงหลังๆแล้วจะทำให้การแก้ Bugs ยิ่งมีมูลค่าสูงขึ้น ยกตัวอย่างเช่น การแก้ functional ของ Software ที่เกิดจากการที่เข้าใจผิดมาจากการเก็บ Requirement การแก้นั้นอาจจะไปกระทบในตัว Coding ของหลายๆส่วนทำให้ต้องแก้ functional หลายระบบในส่วนที่กระทบกัน ซึ่งบางครั้งการ Design ในตอนแรกอาจจะต้องเปลี่ยนใหม่เพื่อให้รองรับกับการเลี่ยนแปลง functional

ซึ่งจากหัวข้อด้านบนที่กล่าวมานั้นเป็นความคิดส่วนตัวของผมเท่านั้นซึ่ง ในการผลิต Software ที่ไม่มี Bug นั้นอาจจะจำเป็นต้องมี Environment มากกว่านี้เพื่อที่จะได้มาซึ่ง Software ที่มี Bugs น้อยที่สุด ยกตัวอย่างเช่น Software ที่นำมาใช้ในการ Testing ระบบการติดตามการเกิด Bugs (Bugtracking software) หรือว่าในกรณีที่มีการทำงานเป็นทีมต้องมีเครื่องมือในการควบคุม source code (source control) หรือกลวิธีในการ Test ระบบตั้งแต่การ Test loading การ Test Functional หรือ Test ลงในตัว source code (Software peer review) และอื่นๆอีกมากมาย

ซึ่งถ้าให้ถามผมว่าเคยเขียน Program (เน้นคำว่า Program ไม่ใช่ Software) ที่ไม่มี Bugs ไหมคำตอบคือเคยและคาดว่าทุกคนคงเคยเขียนมาแล้วนั้นก็คือ Program Hello World ถ้าใครเขียนมาแล้วมี Bugs นี่ก็คงแปลกแล้ว


นี่เป็นความคิดเห็นของผมครับถ้าใครมีความคิดเห็นที่เป็นอยากอื่นหรือว่าอยากจะลองทำ Assignment แล้วลองมาแชร์กันก็ได้ครับโดยตอบผ่าน Comment โดยใส่ Link ที่โยงไป Blog ตัวเองแล้วผมจะตามไปอ่านครับ

ปล.1 ลองไปอ่านเพิ่มเติมเกี่ยวกับเรื่องพวกนี้ตาม reference ข้างล่างนี้

ปล.2 ส่วนหนึ่งของเนื้อหาที่เขียนขึ้นมาได้นั้นเอามาจากอาจารย์ในชั้นวิชาเรียน

http://stackoverflow.com/questions/115528/how-to-make-a-program-bug-free-or-with-the-less-possible-bugs

http://my.opera.com/dparnell/blog/show.dml/23784

1 comment:

Golf said...

Thank you