วันนี้มาทำความรู้จักกับ Software Prototyping อีกแบบหนึ่งกันครับ
Evolutionary Prototyping
แก่นของเจ้าตัวนี้คือ “Software is never complete.” ดูแล้วไม่ดีเลยใช่มั้ยครับกับประโยคนี้ “ซอฟท์แวร์ไม่มีวันสมบูรณ์” มันหมายความว่างานเราไม่ดีรึเปล่า? จริงๆแล้วไม่ใช่ครับ ถ้าเรามองโลกในแง่ดีซักนิดเราจะเห็นความหมายดีๆจากมัน … “ไม่สมบูรณ์” ก็คือ “มีทางที่จะปรับปรุงได้” ถ้า “ไม่มีวันสมบูรณ์” ก็แปลว่า “เราปรับปรุงและพัฒนามันได้ตลอดไป” (ทำใจให้มองแบบนี้กันได้มั้ยเนี่ยะ?)
ครับ ถ้าเราเลือกใช้ Prototype แบบนี้คือเรากำลังทำซอฟท์แวร์ที่ปรับปรุงหรือต่อยอดจากสิ่งที่มีอยู่แล้วขึ้นไปเรื่อยๆตามความต้องการของลูกค้าโดยมีกฎเกณฑ์สำคัญอยู่สามข้อครับ
- Prototype ที่ทำขึ้นมาแล้วจะถูกนำมาใช้จริงในซอฟท์แวร์ของเรา คราวนี้ไม่ทิ้งครับ
- เริ่มทำกับงานที่มี Requirement ค่อนข้างจะชัดเจนก่อน
- ในบางครั้งเราจำเป็นต้องส่งเจ้า Prototype ตัวนี้แหละไปให้ลูกค้าลองใช้งานเบื้องต้นดูก่อนดังนั้นงานที่ทำขึ้นมาต้องเป็น Working Prototype ที่ใช้งานได้จริงครับ
ทั้งหมดนี้แตกต่างจาก Throwaway Prototyping แบบคนละขั้วเลยนะครับ เพื่อนๆรู้สึกถึงความจริงจังและเป็นทางการที่มากขึ้นมั้ยครับ? นี่ก็เป็นที่มาของการที่เราต้องคำนึงถึงมาตรฐานและคุณภาพของ Evolutionary Prototyping ด้วยครับ ไม่ว่าจะเป็นการออกแบบ การวางโครงสร้างของโค๊ด การทำ Testing ที่ดีพอสมควรก่อนจะพูดได้ว่า Prototype เราเรียบร้อยแล้ว
เทียบตัวอย่างจากการเขียน Ebook ของผมก่อนนะครับ ขั้นตอนที่สองที่ผมเปิด OpenOffice Writer มาแล้วก็เริ่มออกแบบหน้าปก ผมประยุกต์ใช้ Evolutionary Prototyping ตัวนี้แหละครับ หลักการสามอย่างในตอนนั้นคือ
- ผมตั้งใจไว้แล้วว่างานนี้ผมจะเอาแบบหน้าปกที่ผมลองทำมาใช้จริงในหนังสือของผมแล้วค่อยๆทำเพิ่มขึ้นไป (ไม่ทิ้งสิ่งที่ทำไปแล้ว)
- หลังจากที่ใช้ Throwaway Prototyping มาในขั้นแรก ผมรู้แล้วว่าหนังสือของผมจะมีเนื้อหาอะไรบ้าง เรียงลำดับก่อนหลังยังไงบ้าง (Requirement เริ่มชัดเจนแล้ว)
- หนังสือผมอ่านได้จริง โอเคแหละ เนื้อหายังไม่สมบูรณ์เพราะยังมีแต่หน้าปกครับ แต่มันก็เริ่มจับต้องได้มากขึ้น อย่างน้อยก็มากกว่ากระดาษหนึ่งแผ่นที่ผมเขียนไว้เนอะ ขอเวลาผมอีกสองสามวัน บทแรกของหนังสือผมคลอดแน่นอนและคราวนี้ผมก็จะส่งให้ใครต่อใครเริ่มอ่านได้แล้วครับ (ใช้งานได้จริงและมั่นใจที่จะส่งให้ลูกค้าลองใช้งานได้)
Evolutionary Prototyping กับ Automatic Draft Checking System
ถ้าโยงเทคนิคนี้กลับไปที่ตัวอย่างของเราตั้งแต่บทความแรก (Automatic Draft Checking System) ผมเข้าใจว่าในช่วงปีที่สอง Evolutionary Prototyping เริ่มเข้ามามีบทบาท ลองดูจากรูปนี้นะครับ
เรามั่นใจว่า Requirement ของหน้าจอนี้เริ่มนิ่งพอสมควรแล้ว เราก็เริ่มทำให้ปุ่ม Check Drafts ซึ่งเป็น Feature ที่สำคัญที่สุดทำงานได้ แล้วส่งให้ลูกค้าลองทดสอบดู ถ้าลูกค้ามี Feedback กลับมา เราก็ปรับแก้กันไป แต่ถ้าทุกอย่างตรงใจลูกค้าแล้ว เราก็ต่อยอดไปทำปุ่ม Import หรือ Search ต่อไปครับ
ผ่านไปซัก 2-3 เดือน หน้าจอนี้อาจจะสมบูรณ์ขึ้นมากพอจนทำให้ลูกค้ามั่นใจที่จะเอาไปใช้กับงานจริงๆของเค้าแบบชั่วคราวระหว่างที่รอระบบจริง แบบนี้เราเรียกว่า “Working Prototype” ครับ
Throwaway หรือ Evolutionary
ระหว่าง Throwaway กับ Evolutionary เราไม่จำเป็นต้องเลือกอย่างใดอย่างหนึ่งแต่สามารถใช้งานทั้งสองเทคนิคผสมผสานกันอย่างลงตัวได้ครับ
ในช่วงที่เรากำลังเก็บ Requirement หรือวิเคราะห์ Requirement อยู่นั้น เราสามารถเลือกใช้ Throwaway Prototyping มาช่วยตรงนี้ได้ครับ นั่นรวมถึงเรื่องการทดสอบทดลองความเหมาะสมเทคโนโลยีต่างๆกับงานของเราด้วย

หลังจาก Requirement มีความชัดเจนแน่นอนมากขึ้นแล้ว ในช่วง Coding/Testing เราก็ใช้ Evolutionary Prototyping ในการพัฒนาระบบของเราโดยเลือกทำจาก Requirement ที่มีความชัดเจนและสำคัญมากที่สุดก่อน
การส่งงานหรือ Working Prototype ไปให้ลูกค้าลองใช้อยู่เรื่อยๆมีผลดีหลายข้อเลยครับ เช่น หนึ่งได้โอกาสเก็บ Feedback จากลูกค้าได้อย่างรวดเร็ว ถ้าเราทำไปไม่ถูกทางจะได้กลับตัวแก้ตัวได้ทันท่วงที
สองเป็นการป้องกัน Requirement Change ใหญ่ๆได้ดีด้วยการเก็บ Feedback ที่ถี่ขึ้น ถ้าเราส่งงานให้ลูกค้าครั้งเดียวตอนเสร็จสมบูรณ์ แล้วเกิดลูกค้าไม่ปลื้มขึ้นมา เราอาจจะต้องรื้อทำใหม่ทั้งระบบนะครับ
และสามบางครั้งความต้องการของลูกค้านั้นมีความเร่งด่วนมาก การที่จะรอระบบที่สมบูรณ์ซึ่งใช้เวลาพัฒนานานนั้นอาจจะไม่ค่อยสะดวกกับลูกค้าซักเท่าไร ดังนั้นการมี Working Prototype ไปให้ลูกค้าใช้จะเป็นเหมือนของแถมพิเศษจากบริษัทเรา ตรงนี้น่าจะทำให้ลูกค้าพอใจในบริการของเรามากขึ้นด้วยครับ
และแน่นอน ไม่พูดถึงไม่ได้เลย Change Request จากลูกค้าของเรานั่นเองครับ เมื่อมี Change เกิดขึ้นเช่น การทำงานตรงนี้ไม่ถูกต้องไม่เหมาะสม ลูกค้าอยากให้แก้ไข หรือหนักหน่อยก็ต้องการนู่นนี่นั่นเพิ่ม ถ้าข้อมูลเกี่ยวกับ Change ตรงนั้นยังไม่ชัดเจน เราก็กลับมาหยิบ Throwaway Prototyping ไปใช้ได้ทันทีครับ เมื่อได้ข้อมูลเพียงพอแล้วก็เปลี่ยนมาเป็น Evolutionary Prototyping ทำได้แบบนี้งานของเราคงจะราบรื่นขึ้นมากเลยหละ
ส่งท้าย
เขียนเรื่อง Software Prototyping มาติดต่อกันสามบทความแล้ว หวังว่าเพื่อนๆคงได้แนวทาง แนวคิดในการประยุกต์ใช้เทคนิคนี้กับงานได้นะครับ ในชีวิตจริงผมเองก็ใช้อยู่ตลอดครับ ทั้ง Throwaway (ส่วนมากจะเป็น GUI Builder) กับ Evolutionary ซึ่งผมมองว่ามันช่วยได้มากจริงๆ ทั้งในเรื่องการเขียน Requirement ที่สมบูรณ์ขึ้น การทดลองมองหาเทคโนโลยีใหม่ๆที่เหมาะกับงาน ร่วมถึงการเขียน Working Prototype เพื่อส่งให้ลูกค้าลองใช้ลองเล่นและเก็บ Feedback
ช่วงหลังงานที่ผมทำอยู่ไม่ค่อยจะมี Change ที่ใหญ่ๆแบบว่าต้องรื้อสิ่งที่ทำมาทั้งหมดให้เห็นเท่าไรแล้วครับ ส่วนหนึ่งต้องขอบคุณเทคนิคทั้งสองนี้ด้วย
ขอบคุณที่ติดตามผลงานครับ




