Version Control System ทำไม!?

PloyTara
3 min readOct 9, 2019

--

ย้อนกลับไปตอนทำโปรเจกต์จบปริญญาตรี ด้วยความที่เราเรียนในสายวิชาอิเล็กทรอนิกส์และโปรเจกค์จบมีการเขียนโปรแกรมฝังคอนโทรลเลอร์ ทำให้ต้องขุดสกิลการเขียนโค้ดที่เรียน ไม่ว่าจะวิชา Computer Programming หรือจะ Microprocessor หรือแม้แต่ Embbedded System พร้อมกับกล่าวสาธุให้โค้ดนั้นรันผ่านโดยที่ไม่ต้องแก้ใหม่ ซึ่งแน่นอนว่าไม่มีทางเป็นไปได้ บั๊คกระจุย แก้กระจาย

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

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

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

เกริ่นมายาวยืด เรามาทำความรู้จักกับ Version Control System กันดีกว่า

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

เมื่อการพัฒนาซอฟต์แวร์ต้องมีการควบคุม ดังนั้นการมีเครื่องมือที่นำมาช่วยในการควบคุมจึงช่วยในการจัดการซอฟต์แวร์ได้ง่ายขึ้น ซึ่งก็คือระบบควบคุมเวอร์ชัน (Version Control System) นั่นเอง

Version Control System (VCS) ส่วนใหญ่จะเป็นแอพพลิเคชันแบบสแตนอโลน แต่ในการแก้ไขจะถูกฝังอยู่ในซอฟต์แวร์ประเภทต่าง ๆ ซึ่งการควบคุมการแก้ไขนี้จะช่วยให้สามารถย้อนกลับซอร์ดโค้ดไปสู่การแก้ไขก่อนหน้าได้ ซึ่งเราสามารถแบ่งประเภทของ Version Control System ออกได้เป็น 3 ประเภท ได้แก่

Localized Version Control System: วิธีนี้เป็นวิธีที่ง่ายและใช้กันอย่างแพร่หลาย ซึ่งวิธีการก็คือการคัดลอกไฟล์ไปยัง Directory ใหม่เพื่อทำการแก้ไข แต่วิธีนี้ก็ยังสามารถทำให้เกิดข้อผิดพลาดได้ง่ายเช่นกันหากทำการแก้ไขไฟล์ที่อยู่ผิด Directory และเพื่อลดปัญหานี้ โปรแกรมเมอร์จึงพัฒนาระบบ CVS ที่ใช้ในเครื่องตัวเองโดยใช้ฐานข้อมูลอย่างง่ายซึ่งเรียกว่า Revision Control System (RCS) เมื่อทำการติดตั้ง Developer tools นี้แล้ว เครื่องมือจะทำงานโดยเก็บ patch set (ผลต่างของไฟล์ต่าง ๆ) ในการแก้ไขในแต่ละครั้ง

Localized Version Control System Diagram
การทำงานของ Localized Version Control System

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

Centralized Version Control System Diagram
การทำงานของ Centralized Version Control System

Distributed Version Control System: ระบบนี้สามารถก๊อปปี้ไฟล์ได้ทั้ง Respiratory ซึ่งถ้าหากเซิฟเวอร์เสีย ผู้ใช้ก็ยังสามารถทำงานร่วมกันต่อได้ และ Respiratory ของผู้ใช้สามารถถูกก๊อปปี้กลับไปที่เซิฟเวอร์เพื่อกู้ข้อมูลกับคืนก็ได้

Distributed Version Control System Diagram
การทำงานของ Distributed Version Control System

ในปัจจุบันนี้มี tools มากมายให้เลือกใช้ในการจัดการเวอร์ชันของซอฟต์แวร์ จากบทความในเว็บไซต์ https://www.softwaretestinghelp.com/version-control-software/ ได้จัดอันดับ Version Control System Tools ที่อยู่ในท้องตลาดปัจจุบัน ไว้ทั้งหมด 15 อันดับ เราจะเลือก tools 5 อันดับแรก จากเว็บไซต์มาแนะนำในบทความนี้

Logo Git

Git: Git เป็น Distributed Version Control System ตัวหนึ่งที่ได้รับความนิยมอย่างมากในหมู่ Developer เริ่มพัฒนาโดย Linus Torvalds ด้วยภาษา C, Shell Script, Perl, Tcl และ Python เริ่มใช้ครั้งแรกในปี 2005 ซึ่งสามารถเข้าไปดูข้อมูลจากเว็บไซต์ทางการของ Git ได้ที่ https://git-scm.com/

Logo Concerrent Version System

Concerrent Version System(CVS): CVS ถูกพัฒนาโดย The CVS team ในปี 1986 และได้เปลี่ยนมาพัฒนาโดยใช้ภาษา C ในปี 1990 ซึ่งเป็น Version Control System ประเภท Centralized เว็บไซต์ทางการของ CVS สามารถเข้าไปดูได้ที่ http://savannah.nongnu.org/projects/cvs

Logo Apache Subversion

Apache Subversion(SVN): เป็นอีกหนึ่ง Version Control System ที่ได้รับความนิยม ซึ่ง SVN เป็น Version Control ประเภท Centralized Version Control System ภายใต้การพัฒนาของทีม Apache Software Foundation โดยใช้ ภาษา C ในการพัฒนา เริ่มมีการใช้ในปี 2000 เว็บไซต์ทางการของ SVN คือ https://subversion.apache.org

Logo Mercurial

Mercurial: เป็นอีกหนึ่ง Distributed Version Control System ถูกพัฒนาโดย Matt Mackall ในปี 2005 โดยใช้ภาษา Python และ C สามารถดูรายละเอียดของ Mercurial ได้ที่ https://www.mercurial-scm.org/

Logo Monotone

Monotone: Version Control System ประเภท Distributed พัฒนาโดย The monotone team ในปี 2003 ด้วยภาษา C++ เว็บไซต์ของ Monotone สามารถเข้าไปดูได้ที่ https://www.monotone.ca/

จากตัวอย่าง Version Control System tools ที่ได้พูดถึงข้างบนเป็นเพียงแค่ส่วนหนึ่งเท่านั้น ยังมีอีกมากให้เหล่า Developer หรือ Programmer ได้เลือกใช้ตามความถนัด ทั้งที่เป็น Free/open source และแบบ Proprietary

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

ในตอนต่อไปเราจะมาเล่าถึง Version Control System ที่เราเลือกใช้กับทีมของเราเพื่อพัฒนาโปรแกรมให้มีประสิทธิภาพมากขึ้น

ส่วนตอนนี้ก็คงต้องขอลาไปก่อน ไว้เจอกันใหม่ในบทความต่อไป สวัสดีค่ะ

**หากมีข้อแนะนำหรือติชม สามารถคอมเมนต์ได้เลยค่ะ น้อมรับทุกข้อเสนอเพื่อพัฒนางานเขียนต่อไปค่ะ**

--

--

PloyTara

System Analyst | Software Development | Engineering | Passionate about photography, music and sky