วันนี้ อ่านเอกสารเพิ่มเติม เพื่อทำความเข้าใจ ที่มาที่ไป กับ Tradition Software Development ที่ถูกเรียกว่า “Waterfall” เอกสารที่อ่านเพิ่มเติมมีชื่อว่า Managing The Development of Large Software System By Dr.Winston Royce ในเอกสารฉบับนี้ ไม่ได้กล่าวถึง คำว่า “Waterfall” เอกสารฉบับนี้ กล่าวถึง COMPUTER PROGRAM DEVELOPMENT FUNCTIONS เริ่มจากวิธีการเดิมที่ใช้อยู่นั้น จะเริ่มจาก Analysis > Code เป็นวิธีการที่เหมาะสมกับการพัฒนา Software / Computer Program ที่มีขนาดเล็ก แล้วถ้า เราจะต้องจัดการ การสร้าง การพัฒนา Software ที่มีระดับใหญ่ขึ้นนั้น วิธีแบบเดิมที่ใช้เพียง Analysis > Coding อาจไม่เพียงพอ ดังนั้น Dr.Winston Royce จึงเสนอ แนวทางใหม่โดยมีขั้นตอนการทำงานที่เพิ่มขึ้น ในเอกสารฉบับนี้ Dr. Royce ก็ยอมรับว่าการทำงานแบบนี้เป็นการทำงานที่ค่อนข้างเสี่ยง ดังนั้น จึงเสนอแนะ ทางแก้ไขไว้ในเอกสารฉบับนี้เช่นกัน I believe in this concept, but the implementation described above is risky and invites failure. The problem is illustrated in testing-phase. The testing phase which occurs at the end of the development cycle is the first event for which timing, storage, input/output transfers, etc., are experienced as distinguished from analyzed. ทางแก้ไข เพื่อลดความเสี่ยงของ การพัฒนา Software ตามรูปแบบด้านบนนั้น Dr.Royce ได้เสนอแนะว่า ให้มีการเพิ่มขั้นตอนการทำงานแบบ Iterative เข้าไปกำกับในแต่ละช่วงของการทำงาน เพื่อลดความเสี่ยงที่อาจจะเกิดขึ้นได้ หลังจากที่ ทำตามขั้นตอนดังกล่าวไปสักพัก ก็ได้พบว่า ช่วงการทำงานที่มีปัญหานั่นคือ Testing ไล่ไปมา ก็มาจาก Program Design ไล่ต้นเหตุอีกครั้งก็พบว่ามาจาก Software Requirement ตามในรูปข้างล่างนี้ การวางแผนโครงการนั้น มีผลอย่างมากต่อการควบคุมประสิทธิภาพโครงการ และขั้นตอนสำคัญประการหนึ่งของการวางแผนโครงการ นั่นก็คือการเลือก Life Cycle ให้เหมาะกับสถานการณ์ และบริบทของโครงการ ในบทความนี้ ตั้งใจจะมาแนะนำให้ผู้อ่านทุกท่าน รู้จักกับ Life Cycle สำคัญๆ 3 ประเภท และข้อดีข้อเสียของแต่ละประเภท เพื่อให้ท่านผู้จัดการโครงการ ทั้งมือใหม่และมือเก๋า ได้นำไปประยุกต์ใช้ในการตัดสินใจเลือก Life Cycle ให้เหมาะสมกับโครงการของตนเอง แต่ก่อนจะไปกล่าวถึง Life Cycle ของโครงการนั้น เราจะมาทำความเข้าใจกันก่อนว่าโดยทั่วไป งานในโครงการมักจะแบ่งกลุ่มงานต่างๆออกเป็นกลุ่มงานอะไรบ้าง ดังนี้ กลุ่มงานที่ 1 การวิเคราะห์ความต้องการของโครงการ (Analysis) คือกลุ่มงานที่มีกิจกรรมว่าด้วยเรื่องของการพยายามรวบรวมความต้องการของโครงการให้มีความชัดเจน เพื่อจะได้นำไปออกแบบสิ่งส่งมอบให้ลูกค้าหรือผู้มีส่วนได้ส่วนเสีย งานกลุ่มนี้มักจะมีกิจกรรมเรื่องการสัมภาษณ์ การเรียนรู้ข้อมูลต่างๆ เพื่อให้สามารถกำหนดความต้องการให้ชัดเจนได้ แต่สำหรับโครงการขนาดใหญ่และมีรายละเอียดมาก การวิเคราะห์และกำหนดความต้องการจะทำได้ยาก ต้องใช้เวลานาน และใช้ผู้เชี่ยวชาญมาช่วยในการกำหนดความต้องการ งานกลุ่มที่ 2 การออกแบบสิ่งที่จะส่งมอบ (Design) คือกลุ่มงานที่นำความต้องการของลูกค้าหรือผู้มีส่วนได้ส่วนเสียในโครงการ มาทำการออกแบบสิ่งส่งมอบหรือ Deliverable ที่โครงการจะส่งมอบตอนจบโครงการ งานกลุ่มที่ 3 การสร้างสิ่งส่งมอบ (Build) คือกลุ่มงานที่นำรายละเอียดจากการออกแบบ มาทำการสร้างสิ่งส่งมอบจริงๆ เพื่อให้ได้สิ่งส่งมอบตามที่ออกแบบเอาไว้ งานกลุ่มที่ 4 การตรวจสอบควบคุมคุณภาพของสิ่งส่งมอบ (Test) คือกลุ่มงานที่เกี่ยวข้องกับการทดสอบคุณภาพของสิ่งส่งมอบ เพื่อให้มั่นใจว่าสิ่งส่งมอบของโครงการนั้น นอกจากจะเป็นไปตามการออกแบบแล้ว ยังมีคุณภาพในระดับที่ยอมรับได้ต่อการใช้งาน งานกลุ่มที่ 5 การนำสิ่งส่งมอบสู่การใช้งานจริง (Deploy) คือกลุ่มงานที่เกี่ยวข้องกับการนำสิ่งส่งมอบที่ทดสอบผ่านแล้ว ไปทำการติดตั้ง หรือนำสู่การใช้งานจริง งานทั้ง 5 กลุ่มของโครงการนั้น มุ่งเน้นให้สามารถส่งมอบสินค้าหรือบริการ ที่ตอบสนองความต้องการของลูกค้าหรือผู้มีส่วนได้ส่วนเสียของโครงการ ในระดับคุณภาพที่ลูกค้ายอมรับได้ และเป็นไปตามต้นทุนและเวลาที่กำหนด แต่วิธีการวางแผนโครงการนั้น คือการจัดลำดับงานในโครงการ โดยพิจารณาความเหมาะสมของโครงการ ซึ่งเราเรียกการจัดลำดับงานในโครงการว่า Life Cycle ซึ่งในบทความนี้ จะขอยกตัวอย่าง Life Cycle สำคัญๆ ที่นิยมใช้กันบ่อยๆ มาให้เห็นภาพซัก 3 ประเภท ดังนี้
Waterfall การเลือกใช้ Waterfall Life Cycle นั้น ผู้บริหารโครงการและทีมงานจะต้องพยายามสรุปความต้องการของโครงการให้มีความชัดเจน แล้วจึงนำไปออกแบบให้เสร็จ จากนั้นก็จะนำรายละเอียดการออกแบบที่สรุปเรียบร้อยแล้ว ไปทำการ Build หรือ สร้างสิ่งส่งมอบออกมา แล้วจึงนำสิ่งส่งมอบที่สร้างเสร็จไปทำการทดสอบและแก้ไขให้เรียบร้อย ก่อนนำไปใช้งานจริง หากมีการเปลี่ยนแปลงความต้องการระหว่างที่กำลังดำเนินการ ไม่ว่าจะอยู่ในขั้นตอนการ Design, Build หรือ Test งานในโครงการทั้งหมดจะต้องมีการเปลี่ยนแปลง และกลับไปสู่ขั้นตอนการ Analysis ใหม่อีกครั้ง ข้อดีของการใช้ Waterfall
IncrementalWaterfall Life Cycle แบบ Incremental นั้น คือความพยายามในการนำ Waterfall มาใช้เป็นพื้นฐาน แต่พยายามปรับปรุงเพื่อลดข้อเสียต่างๆของ Waterfall ลงมา โดยการนำสิ่งที่ต้องส่งมอบในโครงการ มาทำการแยกชิ้นส่วน ออกเป็นชิ้นใหญ่ๆ เพื่อทยอยส่งมอบ และนำแต่ละชิ้นมาทำการวิเคราะห์ ออกแบบ สร้าง และทดสอบ ตามแบบ Life Cycle ของ Waterfall และเมื่อส่งมอบ ชิ้นที่ 1 เสร็จแล้วก็จะไปเริ่มทำชิ้นที่ 2 โดยเริ่มตั้งแต่ขั้นตอน วิเคราะห์รวบรวมความต้องการใหม่อีกครั้ง อย่างนี้ไปเรื่อยๆ จนครบทุกชิ้นงานที่จะส่งมอบในโครงการ หรืออธิบายให้เข้าใจง่ายๆ Incremental Life Cycle ก็คือการ ใช้ Waterfall ย่อยๆ หลายๆครั้งนั่นเอง เพื่อคาดหวังประโยชน์ให้ลูกค้าหรือผู้มีส่วนได้ส่วนเสียในโครงการ ได้มีโอกาสเห็น และลองใช้สิ่งส่งมอบย่อยๆ หลายๆครั้ง และมีโอกาสเปลี่ยนแปลงความต้องการของตัวเองได้ หลังจากได้สัมผัสสิ่งส่งมอบชิ้นแรกๆแล้วข้อดีของการใช้ Incremental
ข้อดีของการใช้ Agile
Life Cycle ทั้ง 3 แบบนั้น มีข้อดี และข้อเสียในตัวเอง ผู้จัดการโครงการควรพิจารณาบริบทของโครงการ ก่อนที่จะเลือก Life Cycle มาประยุกต์ใช้เป็นวิธีการทำงานและลำดับการทำงานในโครงการ หรือบางครั้งอาจจะต้องประยุกต์ใช้ ทั้ง 3 วิธีแบบผสมผสานกัน เพื่อให้เหมาะกับบริบทของโครงการ ตัวอย่างการประยุกต์ใช้ Life Cycle ทั้ง 3 ประเภท แบบ ผสมผสานกันตามบริบทโครงการนั้น จะขออธิบาย และยกตัวอย่างให้เห็นภาพในบทความถัดไป |