แนวคิด เรื่อง Unified Process (UP) โดยความหมายแล้ว คือ กระบวนการทางวิศวกรรมซอฟต์แวร์ที่เกิดจากการรวมเอาสิ่งที่ผู้เชี่ยวชาญทางการพัฒนาซอฟต์แวร์ (Software engineer) ที่เคยกำหนดไว้และใช้แล้วได้ผลดีในการพัฒนาซอฟต์แวร์นั้นมารวมกัน โดยเลือกแต่เทคนิคที่ดีและขั้นตอนหลักที่เหมือนๆกันและใช้ได้อย่างมีประสิทธิภาพของแต่ละผู้เชี่ยวชาญดังกล่าวมารวมกัน (Unify) และกำหนดให้มีชื่อใหม่ว่า “กระบวนการพัฒนาซอฟต์แวร์แบบรวมเป็นหนึ่งเดียว (Unified Process) “ บางครั้งเราจะพบว่ามีกระบวนการคล้ายกันนี้ในแวดวงทางวิศวกรรมซอฟต์แวร์ เช่น Rational Unified Process (RUP) ซึ่งเป็นของบริษัทยักษ์ใหญ่ในวงการพัฒนาซอฟต์แวร์ที่ชื่อว่า “Rational Rose Corporation” และถูกจดลิขสิทธิ์ด้วย หลักการหรือแนวคิดจะคล้ายกันแต่จะแตกต่างที่รายละเอียดของกระบวนการมากกว่า สำหรับแนวคิดที่มีลักษณะร่วมกันหรือเหมือนกันของ UP ได้แก่ การพัฒนาแบบวนกลับ (Iterative Development), การจัดการกับความต้องการ (Requirement Management) และการใช้เครื่องมือช่วยทางวิศวกรรมซอตฟ์แวร์(CASETools)เป็นต้น
เป้าหมายหรือวัตถุประสงค์ของ UP คือ การที่ให้ได้ Software ที่มีคุณภาพและสอดคล้องกับความต้องการ (need) ของผู้ใช้ โดยอยู่ภายใต้งบประมาณและเวลาที่สามารถคาดเดาได้ (Predictable budget and time) UP นั้นจะเน้นการกำหนดบทบาท (Role) ไปที่ทีมพัฒนางานมากกว่าแต่ละบุคคล กล่าวคือจะมีการกำหนดว่าในแต่ละช่วง (Phase) ของการพัฒนานั้นว่า ควรประกอบไปด้วยใคร(Who) แต่ละคนมีหน้าที่รับผิดชอบอะไร (What) จะทำงานที่รับผิดชอบนั้นเมื่อไหร่ (When) และปฏิบัติอย่างไร (How) ที่กล่าวมาเป็นลักษณะที่เป็นนามธรรม (Abstract) หรืออาจกล่าวได้ว่ามันเป็นภาพมุมสูง (bird eye view) ของกระบวนการ UP ซึ่งอาจจะทำให้เข้าใจภาพยังไม่ชัดเจน กลยุทธ์หรือแทคติคที่ใช้ใน UP รวมแล้วจะเรียกมันว่า “Best Practice Model” หรือ “Best Practice” ก็ได้ นั้นคือโดยธรรมชาติของ UP จะมีการปฏิบัติ 6 อย่าง ดังนี้
1. การพัฒนาซอฟต์แวร์ควรเป็นการพัฒนาแบบวนกลับ (Iterative Development)
2. การพัฒนาซอฟต์แวร์ ใดๆ ควรมีการจัดการความต้องการได้ (Requirement Management)
3. การใช้แนวคิดสถาปัตยกรรมแบบองค์ประกอบ (Component –based Model Architecture)
4. การสร้างต้นแบบของระบบที่สามารถมองเห็นได้ (Visual Model) ด้วยภาษา UML
5. การตรวจสอบคุณภาพของซอฟต์แวร์ที่พัฒนาอย่างต่อเนื่อง (Continuously Verify)
6. การจัดการการเปลี่ยนแปลง (Change Management)
1. การพัฒนาซอฟต์แวร์ควรเป็นการพัฒนาแบบวนกลับ (Iterative Development)
กล่าวคือในแต่ละรอบการทำงาน (Iteration) หนึ่งๆ จะประกอบด้วยกิจกรรมเหล่านี้ คือ การกำหนด,การวิเคราะห์,การออกแบบ,การสร้างและสุดท้ายการทดสอบความต้องการของผู้ใช้นั้น ผลที่ได้คือ ซอฟต์แวร์ที่สามารถทำงานได้ (Executable product) ซึ่งแตกต่างจากกระบวนการพัฒนาแบบดั้งเดิม (Traditional Development) ที่กว่าจะได้ผลลัพธ์ในรูป Executable product นั้นจะต้องรอไปจนกว่า(delay) จะมีการทดสอบระบบทั้งหมดเรียบร้อย ซึ่งสิ่งนี้ส่งผลให้โครงการพัฒนาซอฟต์แวร์นั้นมีความเสี่ยงสูงในการล้มเหลวได้เมื่อเวลาผ่านไป ดั่งสำนวนที่ว่า “กว่าจะรู้ตัวก็สายเสียแล้ว” นั้นเอง การพัฒนาแบบวนย้อนกลับ จะสังเกตง่าย ๆ จากลักษณะดังต่อไปนี้
1. โครงสร้างถูกแบ่งออกเป็นรอบ (Iteration)
2. สิ่งที่ได้จากการพัฒนาระบบในแต่ละรอบ จะมีการนำไปพัฒนาพิ่มสำหรับรอบต่อ ๆ ไป จนกว่าจะกลายเป็นระบบที่สมบูรณ์
3. ในแต่ละรอบทีมจะต้องทำงานซ้ำ(Iterate) ขั้นตอนการวิเคราะห์ ออกแบบ พัฒนาโปรแกรม และทดสอบโปรแกรมจากลักษณะของ Interative and Incremental Development คือ ลักษณะของการวนรอบทำซ้ำทำเพิ่มขึ้น โดยในแต่ระรอบจะเริ่มด้วยการวางแผน เก็บรวบรวมความต้องการ วิเคราะห์ พัฒนาโปรแกรม ทดลองโปรแกรม แล้วนำไปใช้งานพร้อมกับเก็บข้อมูลการประเมินผลเพื่อวางแผนดำเนินการในรอบต่อไป และแต่ระรอบจะต้องมีการเพิ่มส่วนอื่น ๆ ของระบบจนกว่าจะครบ ดังนั้นก่อนดำเนินโครงการพัฒนาระบบสิ่งสำคัญคือ จะต้องวางแผนว่าทั้งโครงการจะต้องแบ่งออกเป็นกี่รอบ ในแต่ละรอบจะเพิ่มเติมส่วนใดของระบบ จึงจะทำให้ระบบที่ได้มีความสมบูรณ์ และสามารถรองรับความต้องการของผู้ใช้ระบบที่เปลี่ยนแปลงอยู่เสมอได้
2. การพัฒนาซอฟต์แวร์ ใดๆ ควรมีการจัดการความต้องการได้ (Requirement Management)
“ทำไมต้องจัดการความต้องการด้วยล่ะ ? ในเมื่อดูหรือศึกษาจากเอกสารรายงานต่างๆ ของระบบงานเดิมก็จบ !” ความคิดนี้เป็นความคิดแบบเก่า แบบเดิม ที่มองว่าระบบที่เราพัฒนานั้นเป็นระบบเอกเทศ (Alone หรือ Standalone) ซึ่งผมก็พบบ่อยในการพัฒนาซอฟต์แวร์บ้านเรา โดยเฉพาะกระทรวงสาธารณสุขครับที่มักมองว่าแค่ดูหรือศึกษาจากรายงาน (Output) และกระบวนการทำงาน (Workflow) แล้วมาเขียนโปรแกรมก็จบ ไม่เห็นจะยาก ครับปัญหาที่เราประสบอยู่ก็คือ มันเกิดจากการคิดแบบนี้นั้นแหละ ซึ่งเราคงพอจะสังเกตุได้ว่าทำไมซอฟต์แวร์ของกระทรวงสาธารณสุขมันเยอะเหลือเกินและแต่ละตัวก็ไม่สามารถทำงานร่วมกันได้เลย ข้อมูลใช้ร่วมกันแทบจะไม่ได้ ถ้าจะใช้ก็ต้องมาเล่นแร่แปรธาตุข้อมูลอีก ทำให้เสียเวลา เสียแรงงาน ตลอดจนซอฟต์แวร์นั้นดูแลรักษายาก ตามลำดับ สิ่งที่เป็นปัญหานี้ก็มาจากเหตุ คือ การที่เราไม่ได้มองสิ่งที่พัฒนาแบบเป็นองค์รวม ขาดการศึกษาระบบที่แวดล้อมหรือเกี่ยวข้องด้วย นั้นเอง ดังนั้นเราต้องมีการจัดการความต้องการที่ดี เพราะ “ความต้องการ” ถือว่าเป็นสิ่งที่สำคัญที่สุด หากเราไม่สามารถจัดการกับความต้องการที่เปลี่ยนแปลงได้ ย่อมส่งผลกระทบต่อการพัฒนาระบบเป็นอย่างมาก และเสี่ยงต่อความล้มเหลวตามมา สำหรับการจัดการความต้องการนั้นจะเน้นไปที่ทำอย่างไรจะจัดการความต้องการได้อย่างเหมาะสม ทั้งนี้ระบบสามารถเปลี่ยนไปตามความต้องการได้ โดยใช้ทรัพยากรในการพัฒนาน้อยที่สุด สรุปวัตถุประสงค์ของการจัดการความต้องการก็คือ เพื่อที่จะทำให้เรามั่นใจได้ว่า เราแก้ปัญหาได้ถูกต้อง เหมาะสม และสร้างระบบที่สอดคล้องกับความต้องการของผู้ใช้ นั้นเอง ทั้งนี้การจัดการความต้องการจะต้องเป็น แนวทางที่เป็นระบบ (Systematic Approach) ซึ่งมันก็จะมีเทคนิคและวิธีการของมัน
3.การใช้แนวคิดสถาปัตยกรรมแบบองค์ประกอบ (Component –based Model Architecture)
นั้นคือ ผู้เชี่ยวชาญด้านการพัฒนาซอฟต์แวร์ เขาบอกว่าในการพัฒนาซอฟต์แวร์หรือระบบใดๆ ก็แล้วแต่จะต้องมีการกำหนดหรือออกแบบสถาปัตยกรรมของระบบก่อนเสมอ กล่าวคือ หากจะเปรียบเทียบให้เข้าใจชัดเจนขึ้น ก็จะขอเปรียบเทียบกับการสร้างบ้าน ที่เราจะต้องมีการกำหนดก่อนว่าลักษณะบ้านที่เราอยากจะได้นั้นควรมีคุณลั