Professional Documents
Culture Documents
กิตติกรรมประกาศ
ขอขอบคุ ณ คุ ณ มนั ส ชั ย คุ ณ าเศรษฐ์ ที่ ใ ห้ ก ารช่ ว ยเหลื อ คอยแนะนำา ความรู้ เ บื้ อ งต้ น และ
กระบวนการทำางานของโปรแกรมคอนเคอร์เรนท์เวอร์ชั่นส์ซิสเต็มส์ทำาให้การเรียนรู้เข้าใจมากยิ่งขึน้
2
บทคัดย่อ
โครงการนี้เป็นการสร้างโปรแกรมเพื่อใช้แสดงข้อมูลเอกสารจากโปรแกรมไมโครซอฟต์ วิชวลซอร์ส
เซฟ (Microsoft Visual SourceSafe) ซึ่งเป็นระบบบันทึกประวัติการแก้ไข โดยโปรแกรมสามารถแสดง
ประวัติการแก้ไขเอกสารในรูปแบบของเอกสารเวอร์ชั่นล่าสุด โดยสามารถแสดงรายละเอี ยดในแต่ล ะ
บรรทัดว่าบรรทัดนั้นๆถูกเพิ่ม ลบและแก้ไขตั้งแต่ในเวอร์ชั่นใด
ทำางานโดยการเรียกใช้ออปเจ็คของไมโครซอฟต์ วิชวลซอร์สเซฟ ผ่านทางโดยวิธี OLE Automation
เพื่อดูข้อมูลเอกสารแต่ละเวอร์ชั่นในฐานข้อมูลของโปรแกรมไมโครซอฟต์ วิชวลซอร์สเซฟ โดยใช้ภาษา
Visual Basic ในการพัฒนาและใช้ภาษา C# พัฒนาในส่วนของการหาผลต่างระหว่างไฟล์เอกสารในแต่ละ
เวอร์ชั่น
3
Abstract
This project is program to view file data from Microsoft Visual SourceSafe. It is an
application which offers the users the ability to track and view the history of text files. The
application is capable of displaying the content of the file from present back to the day of
creation. It compares and show difference between 2 versions and more. The user will then be
able to view any modified version of the text file in latest version. This application is inspired
from and aimed at source code tracking system. However, the application can be used to keep
track of the history of any plain text file.
The process will call Visual SourceSafe’s object by OLE Automation. This project is
developing by Visual Basic and C# in path to find difference between another versions.
4
สารบัญ
กิตติกรรมประกาศ ก
บทคัดย่อ ข
Abstract ค
สารบัญ ง
สารบัญรูปภาพ จ
สารบัญตาราง ซ
บทที่ 1 บทนำา 1
1.1. ความสำาคัญและที่มาของโครงการ 1
1.2. วัตถุประสงค์ของโครงการ 1
1.3. ขอบเขตของโครงการ 2
1.4. แผนการดำาเนินการ 2
1.5. ผลทีค ่ าดว่าจะได้รับ 3
บทที่ 2 ทฤษฎีพื้นฐาน 4
2.1. วิธีและหลักการจัดเก็บข้อมูล 4
2.2. การนำาข้อมูลที่จัดเก็บไว้มาประมวลผล 7
2.3. การเรียกใช้ออปเจ็คของ Microsoft Visual SourceSafe 10
บทที่ 3 การออกแบบ 12
3.1. วิเคราะห์ความต้องการของผู้ใช้ 12
3.2. อินเตอร์เฟสเบื้องต้นของโปรแกรม 12
บทที่ 4 การพัฒนาโปรแกรม 14
4.1. การดึงข้อมูลจากฐานข้อมูลของ Microsoft Visual SourceSafe 14
4.2. การนำาข้อมูลทั้งหมดมาทำาการ Diff 21
บทที่ 5 26
5.1 บทสรุป 26
5.2 ปัญหาที่พบ 26
5.3 แนวทางการแก้ปัญหาและข้อเสนอแนะ 27
ภาคผนวก ก การติดตั้ง 28
ภาคผนวก ข การใช้งาน 29
บรรณานุกรม 32
5
สารบัญรูปภาพ
สารบัญตาราง
บทที่ 1
บทนํา
1.1.ความสําคัญและที่มาของโครงการ
เนื่องจาก การพัฒนาซอฟต์แวร์ มีปริมาณมากขึ้น ซึ่งซอฟต์แวร์ในปัจจุบันก็มีความซับซ้อนสูง และมัก
จะถูกพัฒนาโดยคนกลุ่มใหญ่ นอกจากนี้ ในซอฟท์แวร์หนึ่งๆ ยังมีการแยกออกเป็นหลายๆเวอร์ชั่น และหลายรี
วิสชัน่ ซึ่งทำาให้การจัดการซอฟต์แวร์ ให้มีความสอดคล้องกันในกลุ่มผู้พัฒนาเป็นสิ่งที่มีความจำาเป็นอย่างยิ่ง ซึ่ง
ในปัจจุบันก็ได้มี ซอฟต์แวร์ ที่ชว่ ยเหลือในการจัดการชุดคำาสั่ง (Source Code) ที่มีจำานวนมากได้ เช่นโปรแกรม
คอนเคอร์ เ รนท์ เ วอร์ ชั่ น ส์ ซิ ส เต็ ม ส์ (Concurrent Versions System), ซั บ เวอร์ ชั่ น (Subversion) และ
ไมโครซอฟต์ วิสชวลซอร์สเซฟ (Microsoft Visual SourceSafe) ซึ่งมีส่วนช่วยในการพัฒนาซอฟต์แวร์ ให้มี
ความถูกต้องและรวดเร็วมากยิ่งขึ้น แต่ก็ยังมีปัญหาการใช้งานเช่น
- ในการบันทึกความเปลี่ยนแปลงในลักษณะของการแสดงผล ยังไม่สามารถแสดงให้เห็นความ
เปลี่ยนแปลงที่ผ่านมาได้อย่างชัดเจน
- ไม่สามารถแยกแยะความแตกต่างระหว่างการย้ายประโยคกับการลบและเพิ่มได้
- มีความต้องการอีดิตเตอร์ (Editor) ที่ช่วยผู้ใช้ในการแก้ไขไฟล์ โดยสามารถดูข้อมูลที่ถูกแก้ไขใน
อดีตที่ผ่านมา ได้พร้อมๆกันได้
- มีความต้องการ โปรแกรมที่ช่วยในการวิเคราะห์ชุดคำาสั่งที่ถูกแก้ไขหลายๆ ครั้ง เพื่อให้ สามารถ
พิจารณาได้ง่ายขึ้น
1.2.วัตถุประสงค์ของโครงการ
สร้างโปรแกรมเพื่อใช้ในการอ่านข้อมูลเอกสารจากโปรแกรมไมโครซอฟต์ วิสชวลซอร์สเซฟ (Microsoft
Visual SourceSafe) ซึ่งเป็นระบบบันทึกประวัติการแก้ไข โดย โปรแกรมสามารถแสดงการแก้ไขของเอกสารได้
โดยแสดงแบบทั้งหมด, เฉพาะส่วน และสามารถนำาข้อมูลเก่ามาคัดลอกได้
โปรแกรม ควรสามารถแสดงในระดับตัวอักษรที่ถูกแก้ไขทั้งที่ถูกเพิ่มเติมหรือลบ และ แสดงการย้ายที่
ของข้อความ ณ วัน เวลาที่แก้ไขได้
2
1.3.ขอบเขตของโครงการ
โปรแกรมในรูปแบบที่เ ป็นวิวเวอร์ (Viewer) และอีดิตเตอร์ (Editor) แสดงการประวัติการแก้ไขของ
เอกสารได้ แสดงความแตกต่างระหว่างชุดคำา สั่งตั้งแต่ 2 เวอร์ชั่นขึ้นไป พร้อมๆกัน สามารถแก้ไขและคัดลอก
บันทึกแต่ละเวอร์ชั่นได้
1.4.แผนการดําเนินงาน
1. ศึกษาโปรแกรม VSS และ CVS
2. ศึกษาวิธีทำางานเบื้องต้นของโปรแกรม See Soft
3. ศึกษาและวิเคราะห์ความต้องการของผู้ใช้
4. ศึกษาการเรียกใช้และการเข้าถึง VSS
5. ออกแบบโครงสร้างของโปรแกรมเบื้องต้น
6. ศึกษารายละเอียด คำาสั่งที่เรียกใช้ Object ของ VSS
7. พัฒนาโปรแกรม พร้อมทั้งทดสอบการใช้งานจริง
8. สรุปผลการทำางานและเขียนคู่มือการใช้งาน
โครงงานเริ่มต้นเดือน มิถุนายน 2548 สิน้ สุดเดือนกุมภาพันธ์ 2549 รวมเป็นเวลา ทัง้ สิ้น 9 เดือน ดังนี้
ระยะเวลาและแผนการดำาเนินงาน มิ.ย. ก.ค. ส.ค. ก.ย. ต.ค. พ.ย. ธ.ค. ม.ค. ก.พ.
1. ศึกษาโปรแกรม VSS และ CVS
2. ศึกษาวิธีทำางานเบื้องต้นของโปรแกรม See Soft
3. ศึกษาและวิเคราะห์ความต้องการของผู้ใช้
4. ศึกษาการเรียกใช้และการเข้าถึง VSS
5. ออกแบบโครงสร้างของโปรแกรมเบื้องต้น
6. ศึกษารายละเอียด คำาสั่งที่เรียกใช้ Object ของ
VSS
7. พัฒนาโปรแกรม พร้อมทั้งทดสอบการใช้งานจริง
3
8. สรุปผลการทำางานและเขียนคู่มือการใช้งาน
1.5.ผลที่คาดว่าจะได้รับ
- ได้ศึกษาระบบการทำางานของโปรแกรม Microsoft Visual SourceSafe
- ได้เรียนรู้การเขียนโปรแกรมด้วยภาษา Visual Basic
- ได้ศึกษาการเรียกใช้ออปเจ็คของโปรแกรม Microsoft Visual SourceSafe
- ได้ศึกษาการเขียนโปรแกรมเพื่อวิเคราะห์ข้อมูลการเปลี่ยนแปลงของเอกสาร
- ได้ศึกษาและออกแบบหาวิธีการในการแสดงผลข้อมูลทีได้ ในรูปแบบที่สะดวกต่อผู้ใช้
- ได้โปรแกรมแสดงประวัติการแก้ไขแฟ้มเอกสาร
4
บทที่ 2
ทฤษฎีพื้นฐาน
2.1 วิธีและหลักการในการจัดเก็บข้อมูล
ในการจัดเก็บข้อมูลเกี่ยวกับประวัติการแก้ไขของแฟ้มข้อมูลนั้นมีโปรแกรมหลายตัวที่สามารถทำางานนี้
ได้ เช่ น โปรแกรม คอนเคอร์ เ รนท์ เ วอร์ ชั่ น ส์ ซิ ส เต็ ม ส์ (Concurrent Versions System), ซั บ เวอร์ ชั่ น
(Subversion) และ ไมโครซอฟต์ วิสชวลซอร์สเซฟ (Microsoft Visual SourceSafe หรือเรียกสั้นๆว่า VSS) ซึ่ง
ในที่นี้โปรแกรมที่เรานำาศึกษาคือ โปรแกรม คอนเคอร์เรนท์เวอร์ชั่นส์ซิสเต็มส์ และ ไมโครซอฟต์ วิสชวลซอร์ส
เซฟ และโปรแกรมที่ใช้วิเคราะห์แฟ้มข้อความได้แก่โปรแกรม ซีซอร์ฟ (See Soft)
2.1.1 Concurrent Version Control System (CVS)
CVS เป็นเครื่องมือที่สำาคัญที่ทำาให้เราสามารถพัฒนา ซอฟท์แวร์โดยผู้ ใช้หลายคนไปพร้อมๆกันได้ โดย
CVS นี้จะทำา งานอยู่บนพื้นฐานของ RCS CVS ใช้วิธีการเก็บข้อมูลประวัติของแฟ้มข้อมูลต่างๆไว้ในรูปแบบ
ของ RCS โดยจะเก็บแฟ้มประวัติเหล่านั้นไว้ที่เดียวเรียกว่า รีโพสซิทอร์รี่ (Repository) ซึ่งผู้ที่จะต้องการทำางาน
กับ แฟ้มข้อมูลจะต้องขอเช็คเอ้าท์ (Check Out) แฟ้มข้อมูลออกไป ซึ่งจะได้ สำาเนาของงานนั้นๆ เป็นภาพถ่าย
ของ แฟ้มข้อมูลต่างๆในเวลาที่ต้องการ จากนั้นเมื่อผู้ใช้ทำา การแก้ไขแล้ว ผู้ใช้ก็จะทำา การเช็คอิน (Check In)
แฟ้มข้อมูลเข้ามาใหม่
ในรีโพสซิทอร์รี่ แฟ้มข้อมูลในตัว CVSRoot นั้นจะเก็บค่าต่างๆที่เกี่ยวกับการทำา งานที่ผ่านมาทั้งหมด
อยู่ ใ นไฟล์ ต่า งๆ เช่ น ฮิ ส ทอร์ รี่ (History) จะเก็ บประวั ติ การทำา งานกั บไฟล์ต่ า งๆไม่ว่า จะเป็ น การโมดิ ฟ าย
(Modify ) , อัพเดท (Update) , เช็คเอ้าท์ ไว้ทั้งหมด, Val-tags เก็บชื่อ แท็ก(tag) ไว้ เป็นต้น ส่วนในแฟ้มข้อมูล
ของ โมดูล(Module) ที่ถูกอิมพอร์ต (Import) เข้ามา จะเก็บไฟล์ที่เราอิมพอร์ตมาทั้งหมดไว้ ซึ่งแต่ละไฟล์นั้น จะ
ทำาหน้าที่เก็บประวัติการเปลี่ยนแปลงของไฟล์ของตัวเอง จากการทำา งานของผู้ใช้ไว้ ว่าถูกแก้ไขปรับปรุงต่าง
จากผูใ้ ช้ ก่อนหน้ายังไง ซึ่งใช้หลักการทำางานของ RCS
5
VSS ใช้หลักการการเก็บข้อ มูลโดยมี เซอร์ฟ เวอร์ (Server) กลาง 1 ตัว โดยสร้าง ยูสเซอร์ล็อคอิน
(User Login) เข้าไปที่เซอร์ฟเวอร์ แล้วเช็คอินตัวชุดคำาสั่งไปเก็บไว้ที่ซอร์สคอนโทรล (Source Control) หรือที่
เซอร์ฟเวอร์ จากนั้นถ้าผู้ใช้ อื่นๆต้องการเอาชุดคำา สั่งออกมาปรับปรุงก็ทำา การ เก็ท เลสเทสซ์ เวอร์ชั่น (Get
Latest Version) ออกมา โดยที่ผู้ใช้ที่ต้องการปรับปรุงชุดคำา สั่งก็จะทำา การเช็คเอ้าท์ไฟล์ ออกไป จากนั้นตัว
VSS ก็จะทำาการล็อคไฟล์นั้นไว้ และระบบจะทำาการ สร้างล็อคไฟล์ชื่อของคนที่เช็คเอ้าท์ไฟล์ออกไป เวลาที่ทำา
เสร็จก็ทำา การเช็คอินไฟล์เข้าส่วนกลาง ทำา ให้ที่ซอร์สคอนโทรลเป็นชุดคำา สั่ง ที่อัพเดทล่าสุด เวลาที่ผู้ใช้อื่นๆ
ต้องการอัพเดท โซลูชั่น(Solution) ก็เข้าไปเพื่อเก็ท เลสเทสซ์ เวอร์ชั่น ออกมา โดยตัวอย่างกล่องผลิตภัณฑ์
แสดงในรูปที่ 2.1-4
รูปที่ 2.4 ตัวอย่าง VSS ที่เป็น Plug-in ใน Eclipse IDE (VSS Plug-in version 1.6.1 for Eclipse 3.1)
2.1.3 See Soft
See Soft เป็นโปรแกรมที่ถูกพัฒนาขึ้นมาในโครงการการหาวิธีเพื่อช่วยในการวิเคราะห์โปรแกรมขนาด
ใหญ่, ซอร์สโค๊ด (Source Code) แสดงในรูปที่ 2.5 ซึ่งโปรแกรมที่ถูกนำามาวิเคราะห์ในการวิจัยนั้นมีขนาดใหญ่
มาก (ชุดคำา สั่งหลายล้านบรรทัด) และถูกพัฒนามาเป็นเวลานาน (เช่นสิบปี) โดยนักพัฒนาจำานวนมาก (ใน
บางโครงการใช้โปรแกรมเมอร์ถึงถึงหนึ่งพันคน)
See Soft ได้ถูกพัฒนาขึ้นมาเพื่อช่วยในการแสดงให้ผู้วิเคราะห์เห็นถึงคุณสมบัติต่างๆของชุดคำาสั่งดังนี้
7
ประวัติของการเปลี่ยนแปลงของชุดคำาสั่งในแต่ละเวอร์ชั่น
ความแตกต่างระหว่าง รุ่นที่ปล่อยออกสู่ท้องตลาด (Release)
คุณสมบัติต่างๆของคำาสั่ง ที่สามารถพิจารณาได้โดยไม่ต้องนำาคำาสั่งไปทดลองใช้งานจริง
การวิเคราะห์คำาสั่งและหาจุดที่ถูกเรียกใช้งานบ่อย
2.2 การนําข้อมูลที่จัดเก็บไว้มาประมวลผล
การนำาข้อมูลที่จัดเก็บไว้มาแสดงผล โดยนำาไฟล์ข้อมูลแต่ละเวอร์ชั่นมาทำาการลบกันเพื่อหาความแตก
ต่าง (Diff) หรือ การนำา มารวมกัน (Merge) นั้นมีอัลกอริทึมแตกต่างกันมาก ไม่ว่าจะเป็นการเทียบบรรทัดต่อ
บรรทัด การเทียบโดยตัดส่วนของการคอมเมท์ และอัลกอริทึมในการเลื่อนบรรทัด เพื่อให้ได้การแสดงผลความ
แตกต่างได้อย่างถูกต้องและมีประสิทธิภาพมากยิ่งขึ้น เราจึงจำาเป็นจะต้องศึกษากระบวนการดังกล่าวเพื่อนำา
มาใช้ในการพัฒนาโครงงานนี้อย่างละเอียด
โดยเราทำาการศึกษาเครื่องมือในการ Diff-Merge ที่เป็นโอเพ่นซอร์สที่น่าสนใจ 3 ตัวได้แก่
2.2.1 Diff tool
โปรแกรม Diff tool พั ฒ นาด้ ว ยภาษา C++ พั ฒนาโดย Stephane Rodriguez เป็ น โอเพ่ น ซอร์ ส ที่
สามารถนำา ซอร์สโค๊ดสองเวอร์ชั่นมา Diff เพื่อหาความแตกต่าง โดยจะแสดงผลการ Diff ผ่านทาง Internet
Explorer โดยใช้สีไฮไลท์บรรทัดที่มีการเปลี่ยนแปลง 3 สีได้แก่ เหลือง (เปลี่ยนแปลง) เขียว (เพิ่มขึ้นมาจาก
เวอร์ชั่นเดิม) และแดง (ถูกลบออกจากเวอร์ชั่นเดิม ) มีลักษณะคล้ายการแสดงผลของ VSS มากโดยแสดงในรูป
ที่ 2.6-7
8
2.2.3 VDiff
โปรแกรม VDiff พัฒนาด้ว ยภาษา C++ พัฒนาโดย Shankarp เป็นโอเพ่ นซอร์ส ที่สามารถนำา ไฟล์
ข้อมูลสองเวอร์ชั่นมา Diff เพื่อหาความแตกต่าง โดยจะแสดงผลการ Diff ผ่านทาง Internet Explorer เช่น
เดียวกับ Diff tool โดยใช้สีไฮไลท์บรรทัดที่มีการเปลี่ยนแปลง 3 สีได้แก่ นำ้าเงิน (เปลี่ยนแปลง) เขียว (เพิ่มขึ้น
มาจากเวอร์ชั่นเดิม) และแดง (ถูกลบออกจากเวอร์ชั่นเดิม) โดยแสดงในรูปที่ 2.10-11
บทที่ 3
การออกแบบ
หลังจากที่เราสามารถที่จะนำาข้อมูลมาประมวลผลได้แล้ว เราจะต้องหาวิธีในการนำาเสนอข้อมูลเหล่านี้
แก่ผู้ใช้ โดยมีเป้าหมายดังต่อไปนี้
1. การแสดงผลที่เข้าใจง่าย แยกแยะความแตกต่างแต่ละเวอร์ชั่นได้อย่างชัดเจน
2. สามารถแสดงผลพร้อมๆกันทุกๆเวอร์ชั่น ไม่จำากัด โดยใช้เวอร์ชั่นใดเวอร์ชั่นหนึ่งเป็นหลัก สามารถระบุ
3.1 อินเตอร์เฟส
- มีระบบ Login เพื่อเข้าสู่ฐานข้อมูลของ VSS ซึ่งไฟล์ข้อมูลที่เราจะนำามาเปรียบเทียบจะถูกเก็บไว้ในฐาน
ข้อมูลนี้โดยแสดงในรูปที่ 3.1
สิ่งที่เราเพิ่มเข้ามาก็คือการแสดงผลพร้อมๆกันทุกเวอร์ชั่น โดยใช้เวอร์ชั่นล่าสุดเป็นหลัก
สามารถแสดงผลว่า บรรทัดนั้นๆถูกเพิ่มตั้งแต่เวอร์ชั่นใด ถูกแก้ไขตั้งแต่เวอร์ชั่นใด ถูกลบไปตั้งแต่
เวอร์ชั่นใด โดยใช้รูปแบบที่สไี ฮไลท์แยกแต่ละเวอร์ชั่น เวอร์ชั่นละสีโดยแสดงในรูปที่ 3.3
บทที่ 4
การพัฒนาโปรแกรม
Dim X As Integer
Dim Version As Integer
Dim numVer As Integer
Dim tPathLen As Integer
Dim tPath As String
Dim objVSS As VSSItem
Dim lpBuffer As String * 100
Dim tFile As String
Dim sPath As String
numVer = ListView1.ListItems.Count
X = numVer
For Version = 1 To numVer
lpBuffer = String(100, Chr(0))
lBytesToRead = FileLen(FileName)
ReDim bytArr(lBytesToRead) As Byte
'Get a handle to file
lHandle = CreateFile(FileName, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If lHandle <> INVALID_HANDLE_VALUE Then
'read file contents into a bytearray and convert to string
lSuccess = ReadFile(lHandle, bytArr(0), _
lBytesToRead, lBytesRead, 0)
sAns = ByteArrayToString(bytArr)
ReadStringFromFile = sAns
CloseHandle lHandle
End If
ErrorHandler:
End Function
lBytesToRead = FileLen(FileName)
ReDim bytArr(lBytesToRead) As Byte
'Get a handle to file
lHandle = CreateFile(FileName, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If lHandle <> INVALID_HANDLE_VALUE Then
lSuccess = ReadFile(lHandle, bytArr(0), _
lBytesToRead, lBytesRead, 0)
ReadBytesFromFile = bytArr
CloseHandle lHandle
End If
ErrorHandler:
End Function
Public Function WriteBytesToFile(FileName As String, TheData() As Byte, _
Optional NoOverwrite As Boolean = False) As Boolean
Dim lHandle As Long
Dim lSuccess As Long
Dim lBytesWritten As Long, lBytesToWrite As Long
If NoOverwrite = True And Dir(FileName) <> "" Then Exit Function
lBytesToWrite = UBound(TheData) - LBound(TheData)
lSuccess = FlushFileBuffers(lHandle)
lSuccess = CloseHandle(lHandle)
End If
End If
ErrorHandler:
WriteBytesToFile = lSuccess <> 0
End Function
Private Function ByteArrayToString(bytArray() As Byte) As String
Dim sAns As String
Dim iPos As String
sAns = StrConv(bytArray, vbUnicode)
iPos = InStr(sAns, Chr(0))
If iPos > 0 Then sAns = Left(sAns, iPos - 1)
ByteArrayToString = sAns
End Function
retval.Add(DiffResultSpan.CreateAddDestination(0,dcount));
return retval;
}
Replace มีแต่ข้อความในบรรทัดนั้นๆไม่เหมือนกัน (ถูกเปลี่ยนแปลง)
No Change มีเหมือนกันทั้ง 2 เวอร์ชั่น
จากตารางที่ 4.1 ซึ่งหากไม่ตรงกับ 2 กรณีแรกก็คือ Delete และ Add Destination แล้วก็จะเป็นการ
เปรียบเทียบถ้า
- มีข้อความเหมือนกันก็จะถือว่าเป็นการ Add จากเวอร์ชั่น Source
- ข้อความไม่เหมือนกันก็จะถือว่าเป็นการ Change จากเวอร์ชั่น Source
ซึ่งจะแสดงผลการ Diff ข้อมูลจริงๆจะแบ่งแอ็คชั่นทีเกิดออกเป็น 2 กรณีซึ่งก็คือ Add และ Delete
โดยที่มีกระบวนการพิจารณาดังต่อไปนี้
1. Add
จะพิจารณาว่าข้อมูลในบรรทัดนั้นๆในเวอร์ชั่นล่าสุดถูกเพิ่มมาตั้งแต่เวอร์ชั่นใดตัวอย่างเช่นแสดงในรูป
ที่ 4.3-4
ถ้ามีการแก้ไข(Change) ระหว่างเวอร์ชั่นก็จะอ้างอิงเวอร์ชั่นที่มีข้อมูลตรงกับเวอร์ชั่นล่าสุดเป็นหลัก
โดยจะเปลี่ยน Action เป็น Add เลขเวอร์ชั่นเป็นเวอร์ชั่นที่แก้ไขและมีค่าตรงกับข้อความในเวอร์ชั่นล่าสุดเช่น
แก้ไขบรรทัดแรกเวอร์ชั่นที่ 3 โดยเพิ่มข้อความว่า “, int numVersion” เข้ามาแสดงในรูปที่ 4.5-6
23
Version 1
private void TextDiff(string[] sFile, string dFile,int numVersion){
}
Version 2
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
}
Version 3
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
DiffList_TextFile dLF = null;
try{
}
Version 4
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
DiffList_TextFile dLF = null;
try{
for(int f = 1;f < numVersion;f++){
sLF[f] = new DiffList_TextFile(sFile[f]);
}
dLF = new DiffList_TextFile(dFile);
}catch (Exception ex){
this.Cursor = Cursors.Default;
MessageBox.Show(ex.Message,"File Error");
return;
}
}
24
รูปที่ 4.5 ผลการ Diff ทีละ 4 เวอร์ชั่นโดยมีกรณี Add ข้อมูลและกรณี Change ข้อมูล
25
Version 1
private void TextDiff(string[] sFile, string dFile){
}
Version 2
private void TextDiff(string[] sFile, string dFile){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
}
Version 3
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
DiffList_TextFile dLF = null;
try{
}
Version 4
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
DiffList_TextFile dLF = null;
try{
for(int f = 1;f < numVersion;f++){
sLF[f] = new DiffList_TextFile(sFile[f]);
}
dLF = new DiffList_TextFile(dFile);
}catch (Exception ex){
this.Cursor = Cursors.Default;
MessageBox.Show(ex.Message,"File Error");
return;
}
}
เนื่องจากเราพิจารณาข้อมูลในเวอร์ชั่นล่าสุดเป็นหลักจึงต้องการแค่ทราบว่าถูกเขียนมาตั้งแต่เวอร์ชั่น
ใดเท่านั้น จึงพิจารณากรณีที่เป็นการ Change ถือเป็นการ Add แทน
2. Delete
เป็นกรณีแสดงผลเพิ่มเติมว่าเคยมีข้อความใดถูกเพิ่มเข้ามาแต่ไม่มีอยู่ในเวอร์ชั่นล่าสุดแสดงในรูปที่
4.7
Version 1
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
DiffList_TextFile[] sLF = new DiffList_TextFile[numVersion];
}
Version 2
private void TextDiff(string[] sFile, string dFile,int numVersion){
this.Cursor = Cursors.WaitCursor;
ซึ่งในการนำาไปใช้พิจารณาจริงจะมองแค่ว่าถูกเพิ่มมาตั้งแต่เวอร์ชั่นใดดังนั้นเราจึงซ่อนข้อความที่เคย
ถูกลบไว้โดยจะแสดงก็ต่อเมื่อเอาเคอร์เซอร์ไปคลิกที่บรรทัดดังกล่าว
28
บทที่ 5
บทสรุปและข้อเสนอแนะ
5.1 บทสรุป
เนื่องมาจาก การพัฒนาซอฟต์แวร์หรือเอกสารในปัจจุบันล้วนเป็นงานขนาดใหญ่และพัฒนาโดยผู้
พัฒนาหลายบุคคล การนำาโปรแกรมจำาพวกจัดการเอกสารเช่น Microsoft Visual SourceSafe หรือ CVS มาใช้
ถือเป็นการเพิ่มความปลอดภัยและจัดการเอกสารได้ดียิ่งขึ้น ซึ่งถ้าเรามีซอฟต์แวร์ที่สามารถวิเคราะห์ข้อมูล
เอกสารทุกเวอร์ชั่นพร้อมๆกันก็ยิ่งทำาให้กระบวนการต่างๆมีมีประสิทธิภาพ ถูกต้องและรวดเร็วยิ่งขึ้น
เราได้พัฒนาโปรแกรมซึ่งมีความสามารถเหมือนโปรแกรม Microsoft Visual SourceSafe ที่สามารถที่
จะล็อคอินเข้า Account ที่มีอยู่ จัดการข้อมูล เรียกดูข้อมูลจากฐานข้อมูลของ Microsoft Visual SourceSafe
ได้เหมือนตัวโปรแกรม Microsoft Visual SourceSafe ทุกประการ โดยเราเพิ่มความสามารถที่จะแสดงผล Diff
ได้ทุกเวอร์ชั่นพร้อมๆกันในหน้าต่างแสดงผลเดียว ซึ่งจะแสดงผลการ Diff ในรูปแบบเวอร์ชั่นล่าสุด ว่าข้อมูลใน
บรรทัดนั้นๆถูกเพิ่มมาตั้งแต่เวอร์ชั่นใด เคยมีข้อมูลใดถูกลบออกไปบ้างในบรรทัดนั้นๆ
โดยเป้าหมายของการแสดงผลรูปแบบนี้ก็เพื่อให้สามารถนำาการแสดงผลรูปแบบดังกล่าวมาพิจารณา
ประสิ ท ธิ ภ าพ ความถู ก ต้ อ งและวิ เ คราะห์ ค วามก้ า วหน้ า ในระบบการพั ฒนาซอฟต์ แ วร์ ที่ ต้ อ งการการวั ด
ประสิทธิภาพ อีกทั้งนำาข้อมูลการแสดงผลนั้นมาตรวจสอบเช่น ถ้าเราพบบั๊กในซอฟต์แวร์ตั้งแต่เวอร์ชั่นใดเราก็
พิจารณาดูว่าในเวอร์ชั่นนั้นมีข้อมูลในถูกเพิ่มเข้าไปบ้าง ก็เป็นการทำาให้พิจารณาหาข้อผิดพลาดในซอฟต์แวร์
ได้ดียิ่งขึ้น
5.2 ปัญหาที่พบ
1.จากการดำาเนินงานมา ถือว่างานค่อนข้างล่าช้าเมื่อเทียบกับตัวโปรแกรมที่พัฒนาออกมาจริงๆเนื่อง
มาจากเข้าใจความต้องการผิดพลาดในช่วงการดำาเนินงานเทอมแรก และมีการเปลี่ยนแปลงตัวโปรแกรมหลาย
อย่างไม่ว่าจะเป็นช่วงแรกของการพัฒนาโปรแกรมจะที่ใช้ภาษา C++ ในการพัฒนาอัลกอริทึมแต่เนื่องด้วย
ประสิทธิภาพและการแสดงผลที่ดีกว่าจึงเปลี่ยนมาใช้อัลกอริทึมอีกตัวที่พัฒนาด้วยภาษา C# แทนจึงเสียเวลา
ในการศึกษาพอสมควร
2.การเรียกใช้ออปเจ็คของ Microsoft Visual SourceSafe นั้นออปเจ็คหลายตัวเป็นเหมือนแบล็คบ๊
อกซ์ที่ไม่สามารถแก้ไขภายในออปเจ็คได้ทำาให้เราเสียเวลาศึกษาและทำาความเข้าใจพอสมควร เราจึงพัฒนา
29
โดยใช้ออปเจ็คพื้นฐานที่เรียกใช้ได้บางตัวและนำามาประยุกต์ในแอปพริเคชั่นของเราเอง
3. การแสดงผลในรูปแบบของการลบ (Delete) นั้นมีข้อจำา กัดและข้อผิดพลาดได้ง่ายเนื่องความจา
กอัลกอริทึมที่ใช้ไม่สามารถแยกแยะคอมเม้นท์ เว้นวรรค แท็ป เลื่อนบรรทัดได้อย่างสมบูรณ์จึงทำาให้การแยก
ความแตกต่างมีข้อผิดพลาดได้ส่วนการแสดงผลการลบนี้
5.3 แนวทางการแก้ปญ
ั หาและข้อเสนอแนะ
1. ศึกษาอัลกอริทึมในการ Diff เพิ่มขึ้นหลายๆตัวเพื่อนำา มาพัฒนาให้มีความสามารถแยกความแตก
ต่างได้ถูกต้องยิ่งขึ้น
2. เปลี่ ย นแปลงโปรแกรมจั ด การเอกสารจาก Microsoft Visual SourceSafe เป็ น ทู ล ตั ว อื่ น ที่ เ ป็ น
โอเพ่นซอร์สเช่น CVS เพื่อให้สามารถนำาข้อมูลมาจัดการได้อย่างอิสระและพัฒนาได้ง่ายยิ่งขึ้น
30
ภาคผนวก ก
การติดตั้ง
ภาคผนวก ข
การใช้งาน
เมื่อทำาการล็อคอินเข้ามาแล้วจะเข้ามาสู่หน้าหลักของโปรแกรมซึ่งมีอินเตอร์เฟทเหมือนตัว Microsoft
SourceSafe
33
โดยถ้า การใช้ งานจะเหมื อ นตั ว SSEXP.EXE ของ Microsoft SourceSafe ทุก อย่ า งโดยเราจะเพิ่ ม
ความสามารถในการแสดงผลต่างพร้อมๆกันทุกเวอร์ชั่นซึ่งเป็นเป้าหมายหลักของโครงการของเรา ซึ่งเข้าสู่การ
ใช้ ง านได้ โ ดยการคลิ ก ขวาที่ ไ ฟล์ ที่ ต้ อ งการจะแสดงผลต่ า งพร้ อ มๆกั น ทุ ก เวอร์ ชั่ น ที่ อ ยู่ ใ นฐานข้ อ มู ล ของ
Microsoft SourceSafe ในหน้าหลักของโปรแกรมดังรูปที่ ข.3
บรรณานุกรม