ในด้านของ Software Engineering การทำ Software Configuration Management นั้นสำคัญอย่างยิ่งเพราะการพัฒนา Software ในปัจจุบัน ความต้องการของลูกค้าอาจจะเปลี่ยนแปลงเมื่อใดก็ได้ ดังนั้นการควบคุมและจัดการเวอร์ชั่

ของ Software นั้นต้องทำอย่างเป็นระเบียบและสามารถควบคุมได้

การทำ Revision Control พัฒนามาจากกระบวนการติดตามเวอร์ชั่นของ Whiteprint ซึ่งจะใช้หมึกสีต่างๆกัน ทำให้วิศวกรสามารถกลับไปใช้รูปแบบก่อนหน้าได้ ถ้าไปเจอกับทางตัน ซึ่งก็เหมือนกับกระบวนการพัฒนา software ที่ Revision Control จะ เข้ามาช่วยในการติดตามเวอร์ชั่นของโค้ด ถ้าผู้พัฒนา พัฒนาไปถึงจุดหนึ่งซึ่งไม่สามารถไปต่อได้ ผู้พัฒนาก็ยังสามารถกลับมาใช้เวอร์ชั่นก่อนหน้านี้ได้ ความยุ่งยากในกระบวนการพัฒนาก็จะลดน้อยลง เปรียบเสมือนกับ “Time Machine” ที่เราสามารถย้อนกลับไปในอดีตได้ แต่ Revision Control เองนั้นก็มีข้อเสียอยู่บ้าง คือการทำงานนั้นค่อนข้างช้าถ้าทีมพัฒนาไม่มี server revision control ส่วนตัว

เราสามารถใช้ Tool ทางด้าน Revision Control ได้หลายตัว ไม่ว่าจะเป็น Subversion, CVS, Git หรือ Mecurial เป็นต้น ซึ่ง Tool เหล่านี้ส่วนใหญ่ก็จะมีการ built-in function สำคัญๆที่เกี่ยวข้องกับการใช้งานลงไปใน IDE หลายๆตัวด้วย เช่น Netbeans และ Eclipse

C:\Users\KZ\Pictures\Untitled.png

แผนภาพแสดงตัวอย่างโปรเจคที่ใช้ version control

การนำกลับมาใช้ใหม่

การพัฒนา software นั้น ต้องใช้คนจำนวนมาก ต่างคนก็ต่างทำหน้าที่ที่แตกต่างกันออกไป ตั้งแต่การเก็บความต้องการ การ ออกแบบ การเขียนโปรแกรม ไปจนถึงการติดตั้งระบบ ซึ่งกระบวนการเหล่านี้เกี่ยวของกับเอกสาร(รวมถึงโค้ดโปรแกรม)ทั้งสิ้น ซึ่งในแต่ละขั้นตอนการทำงาน เอกสารที่เกี่ยวข้องนั้นก็จะมีหลายรูปแบบ หลายเวอร์ชั่น เปลี่ยนแปลงไปตามความต้องการที่แตกต่างกันออกไป ปัญหาก็คือว่า จะทำอย่างไรหากมีโครงการในลักษณะที่คล้ายๆกัน ที่สามารถนำเอกสารเวอร์ชั่นก่อนหน้าของโครงการอื่นๆมาปรับปรุงแก้ไขได้ ซึ่งถ้าสามารถทำได้นั้น เราก็จะสามารถลดเวลา

กระบวนการทำงานทั้งหมดของโปรเจคนี้ได้ หรือในบางโอกาสที่โครงการอาจจะมีหลายสาขา ทำให้ความต้องการของแต่ละสาขานั้นแตกต่างกันไปบ้างเล็กน้อย การใช้ Revision Control ก็จะสามารถควบคุมความต้องการเหล่านี้ได้ เพราะ Revision Control สามารถ แตกกิ่งของความต้องการที่ต่างออกไป โดยทีมพัฒนาไม่จำเป็นต้องมาเขียนโค้ดใหม่ตั้งแต่ต้น แต่สามารถเลือกใช้เวอร์ชั่นใดๆ ที่มีอยู่ก็ได้


C:\Users\KZ\Pictures\13759_348869955523_628070523_9963873_4452397_n.jpg
การติดตามและควบคุม

การใช้ Diff เพื่อหาความแตกต่างระหว่างเวอร์ชั่น

ใน Revision Control นั้นจะมีการทำ Tag และ Trunk การทำ Tag จะเป็นการบอกถึงเวอร์ชั่นของ software ที่ถูกผลิตออกมาจริงๆ ไม่ใช่ที่อยู่ในขั้นตอนการพัฒนา นั่นคือตัว software มีเสถียรภาพอยู่ในระดับที่สามารถรับได้ สามารถนำไปใช้งานได้จริง โดยที่ไม่มีปัญหามากนัก ส่วนการทำ Trunk นั้นจะคล้ายกับเป็นพื้นฐานของ software ในขั้นตอนการพัฒนาที่เพิ่มขึ้นเรื่อยๆ ตัว Trunk เองอาจจะไม่สามารถนำมาใช้งานได้เหมือน Tag แต่ก็ช่วยให้ทีมพัฒนาสามารถแยกระดับของการพัฒนาออกมาเป็นชั้นๆได้

ถ้ามองจากมุมของ Project Manager เราก็จะสามารถติดตาม Milestone ของ Software ที่วางไว้ได้ง่ายขึ้น และ Project manager สามารถส่งคำสั่ง update ดูความคืบหน้าล่าสุดของ software ได้ตลอดเวลา รวมถึงหาความแตกต่างของเวอร์ชั่นก่อนหน้าได้ด้วยการใช้คำสั่ง Diff

การจัดเก็บไฟล์

ในอดีตทีมพัฒนาต้องแยกการจัดเก็บออกมาเป็นหลายๆชุด หลายๆ Folder เพื่อ ป้องกันการสูญหายหรือนำกลับมาใช้ใหม่ รวมถึงการเข้าถึงไฟล์ยังต้องใช้สิทธิในการอ่านหรือเขียน ทำให้มีความปลอดภัยมากขั้น ข้อสำคัญที่สุดคือ การที่ข้อมูลทั้งหมดของเราถูกแชร์ไว้ในส่วนกลาง การทำงานในลักษณะที่เป็นทีม ก็ทำได้ง่ายขึ้น

การร่วมมือระหว่างผู้พัฒนาในส่วนงานอื่นๆ

ในโครงการหนึ่งๆ ไม่ได้มีเพียงแค่ทีมพัฒนาที่ทำทางด้านโค้ดเท่านั้นแต่ยังมีทีมที่ทำงานในส่วนอื่นๆ เช่น กราฟฟิก ซึ่งสามารถใช้ Revision Control ตัว เดียวกับทีมพัฒนาโค้ดได้ การร่วมมือกันระหว่างหลายๆฝ่ายจึงทำได้ง่ายขึ้น มีจุดศูนย์กลางที่เดียวกัน ถ้ามองเจาะลึงลงมาในส่วนทีมพัฒนา ซึ่งประกอบไปด้วยนักพัฒนาหลายๆคน ที่ทำการแก้ไขไฟล์เดียวกัน ระบบ Revision Control ก็สามารถ merge การเปลี่ยนแปลงเหล่านั้นเข้าไว้ด้วยกันได้

สรุป

จะเห็นได้ว่าการทำ Revision Control นั้น ถึงแม้จะเป็นส่วนเล็กๆในกระบวนการจัดการโปรเจคทั้งหมด แต่ก็ถือว่าเป็นส่วนที่สำคัญอันดับต้นๆ ของกระบวนการทั้งหมดเลยก็ว่าได้ ถ้าขาดการจัดการที่ถูกต้อง ระยะเวลา เงินทุน และ กำลังคน ที่ใช้ในโปรเจคก็จะเพิ่มสูงขึ้น