What
is version control? Why is it important for due diligence?
By Stuart Yeates,
Published: 01 January 2005, Reviewed: 24 August 2012
Bài được đưa lên
Internet ngày: 24/08/2012
Lời
người dịch: Các hệ thống kiểm soát phiên bản như
CVS, Subversion, Git... là một phần không thể thiếu đối
với các dự án PMTDNM để giúp làm việc trực tuyên,
cộng tác và phân tán một cách có hiệu quả, không chỉ
đối với việc theo dõi sự thay đổi của mã nguồn và
phiên bản của phần mềm, mà còn cả những vấn đề
khác như quản lý gốc gác lai lịch mã nguồn cho mục
đích xác định các quyền sở hữu trí tuệ và phân tích
pháp lý... . Các hệ thống này thường có trên các site
như GitHub, SourceForge hay Google Code, và chúng đưa ra vô số
các công cụ cần thiết khác cho một dự án PMTDNM, đặc
biệt cho những ai không có đủ khả năng có được các
tài nguyên như vậy, ví dụ như lưu trữ, tải về phiên
bản, các danh sách thư, các trình theo dõi lỗi, việc đặt
chỗ cho web... Tóm lại, để triển khai một dự án
PMTDNM, bạn nhất thiết cần tới một hệ thống kiểm
soát phiên bản.
Một hệ thống
kiểm soát phiên bản - Version Control System (còn
được gọi là Hệ thống Kiểm soát Rà soát lại) là một
kho các tệp, thường là các tệp mã nguồn của các
chương trình máy tính, với sự truy cập được giám sát.
Từng thay đổi được thực hiện đối với nguồn được
theo dõi, cùng với những người thực hiện sự thay đổi,
vì sao họ đã thay đổi nó, và các tham chiếu tới những
vấn đề được sửa, hoặc những cải tiến được giới
thiệu, với sự thay đổi đó.
Các hệ thống kiểm
soát phiên bản là cơ bản cho bất kỳ dạng phát triển
cộng tác và phân tán nào. Bất kể lịch sử của một
trang wiki hay một dự án phát triển phần mềm lớn nào,
thì khả năng để theo dõi từng thay đổi khi nó được
thực hiện, và những thay đổi ngược lại khi cần thiết
có thể tạo ra tất cả sự khác biệt giữa một qui
trình được quản lý và kiểm soát tốt và một hệ
thống 'tới trước, được phục vụ trước' không được
kiểm soát. Nó cũng có thể phục vụ như một cơ chế để
thẩm định cho các dự án phần mềm.
Theo dõi phiên bản
Các lập trình viên
có thể mong muốn so sánh phiên bản hôm nay của một số
phần mềm với phiên bản ngày hôm qua hoặc phiên bản
của năm ngoái. Vì các hệ thống kiểm soát phiên bản
theo dõi từng phiên bản phần mềm đó, điều này trở
thành một tác vụ hiển nhiên. Việc biết được cái gì,
ai và khi nào những thay đổi sẽ giúp so sánh hiệu năng
của các phiên bản cụ thể, việc khắc phục khi các lỗi
được đưa ra (hoặc được sửa) và các vấn đề khác.
Bất kỳ vấn đề nào nảy sinh từ một sự thay đổi có
thể sau đó được theo dõi với một sự xem xét ai đã
thực hiện sự thay đổi đó và những lý do mà họ đã
đưa ra cho việc tiến hành sự thay đổi đó.
Điều phối các
đội
Quản lý các tài
nguyên thường được các đội triển khai, hoặc cùng ở
một nơi hoặc được phân tán. Kiểm soát phiên bản là
trung tâm đối với việc điều hành các đội của những
người đóng góp. Nó cho phép một người đóng góp làm
việc trong một bản sao các tài nguyên và sau đó phát
hành những thay đổi của họ ngược trở về cái lõi
chung khi sẵn sàng. Những người đóng góp khác làm việc
trong các bản sao các tài nguyên y hệt của riêng họ cũng
đúng vào thời điểm đó, không bị ảnh hưởng vì những
thay đổi của họ với nhau cho tới khi họ chọn để
trộn hoặc đệ trình (commit) những thay đổi của
họ ngược trở về cho dự án. Bất kỳ xung đột nào
nảy sinh - khi 2 người đóng góp độc lập thay đổi cùng
một phần của một tài nguyên - được tự động đánh
dấu bằng cờ khi những thay đổi đó được trộn. Những
xung đột như vậy sau đó có thể được những người
đóng góp quản lý.
Thông thường trong
các dự án nguồn mở, các hệ thống kiểm soát phiên bản
cho phép bất kỳ ai cũng đọc và sao chép được các tài
nguyên của dự án, nhưng chỉ những người sử dụng có
quyền, được biết như là những người đề xuất
(commiters), là được phép cập nhật mã nguồn trong
kho đó.
Sự siêng năng
Nhiều hoạt động
trong trong doanh nghiệp được đi kèm với một trách nhiệm
pháp lý để thực hiện những kiểm tra 'siêng năng'.
Chính xác những gì các kiểm soát đó kéo theo sẽ phụ
thuộc vào hoạt động theo yêu cầu của doanh nghiệp đó,
nhưng với lưu ý tới sở hữu trí tuệ thì một hoạt
động 'siêng năng' quan trọng là việc theo dõi quyền sở
hữu các phần cấu thành của nó. Vì thế ví dụ, nếu
ai đó tạo ra một mẩu phần mềm và muốn tổ chức của
anh - chị ta phát hành nó, thì tổ chức của anh - chị ta
hầu hết chắc chắn sẽ muốn kiểm tra nguồn gốc lai
lịch của tất cả mã trong phần mềm đó. Qui trình này
được tạo thuận lợi bằng khả năng theo dõi xem ai đã
thực hiện những thay đổi nào cho mã đó, và chúng đã
được thực hiện khi nào. Một hệ thống kiểm soát
phiên bản cho phép một danh sách những người đóng góp
sẽ được biên dịch và các ngày tháng những đóng góp
của họ sẽ được cá biệt hóa. Một danh sách như vậy
có thể sẽ được kiểm tra chéo dễ dàng với một danh
sách các hợp đồng về IP.
Phát triển mở liên
quan tới những người đóng góp tạo ra những thay đổi
nhỏ thường xuyên cho các tài nguyên. Một hệ thống kiểm
soát phiên bản cung cấp phương tiện cho việc giám sát
những thay đổi đó khi chúng xảy ra. Các hệ thống được
tự động hóa sẽ thông báo cho những ai có trách nhiệm
đối với việc quản lý IP ở các đầu ra của dự án.
Những thông báo đó, đi cùng với các lưu ký được cung
cấp cho từng thông báo cá nhân riêng rẽ, cho phép những
người quản lý dự án giám sát và theo dõi tất cả
những đóng góp.
Phát triển mở yêu
cầu sự chăm sóc có liên quan tới gốc gác lai lịch của
những đóng góp. Các dự án phát triển
mở cần phải tuân theo thực tiễn tốt nhất trong lĩnh
vực này. Nếu một vi phạm IP được thấy đã xảy ra,
thì hệ thống kiểm soát phiên bản có thể được sử
dụng để xác định mức độ của sự lây nhiễm (những
tệp nào bị ảnh hưởng vì sự thay đổi có vấn đề
đó), ai đã thực hiện sự thay đổi đó và khi nào họ
đã thực hiện nó. Hệ thống kiểm soát phiên bản thậm
chí có thể được sử dụng để phục hồi lại phiên
bản phần mềm mới nhất không bị nhiễm.
Các
hệ thống kiểm soát phiên bản cũng có thể được sử
dụng để thiết lập quyền ưu tiên trước, khi có một
sự tranh cãi về quyền sở hữu của mã hoặc các ý
tưởng.
Các ví dụ
Kiểm soát phiên bản
đã và đang được nghiên cứu và hiểu sát sao trong cộng
đồng thiết kế phần mềm từ lâu. Các giải pháp là ổn
định, khỏe mạnh và được hỗ trợ tốt. Có các hệ
thống khác nhau phù hợp cho các đội địa phương nhỏ
và cho các đội phân tán lớn, làm cho chúng thành lý
tưởng đối với việc điều phối sự phát triển phần
mềm, và cho việc làm giảm nhẹ những khác biệt trong
văn hóa và vùng thời gian.
Kiểm soát phiên bản
được cung cấp trên các site như SourceForge và Google Code.
Các site đó thường xây dựng một bộ các dịch vụ xung
quanh kiểm soát phiên bản: lưu trữ, tải về phiên bản,
các danh sách thư, các trình theo dõi lỗi, việc đặt chỗ
cho web và xây dựng các cụm. Dải các chức nang này làm
cho chúng đặc biệt lôi cuốn cho các dự án mà không có
các tài nguyên để duy trì máy chủ của riêng họ cho
kiểm soát phiên bản.
CVS được sử dụng
như là một hệ thống kiểm soát phiên bản nguồn mở
được sử dụng phổ biến nhất nhưng những ngày này
thì Subversion đã vượt qua nó và được sử dụng rất
phổ biến trong các dự án nguồn mở. Tuy nhiên, một số
hệ thống kiểm soát phiên bản nguồn mở mới hơn như
Arch và Git đã có sự thâm nhập đáng kể. Những khả
năng cơ bản của các hệ thống đó là rất tương tự,
nhưng chúng đưa ra chức năng về an ninh, kết nối mạng
và ảo hóa khác nhau, và các giấy phép khác nhau. Cũng có
nhiều giải pháp sở hữu độc quyền có sẵn từ một
dải các nhà cung cấp.
Như được thảo luận
trước đó, kiểm soát phiên bản là một công cụ có giá
trị khi giữ hồ sở và tiến hành phân tích cho các mục
tiêu pháp lý. Các chủ đề đó được thảo luận trong
Phát triển
Nguồn Mở - Giới thiệu các Vấn đề về Quyền sở hữu
và Cấp phép (bản
dịch tiếng Việt).
A
version control system
(also known as a Revision Control System) is a repository of files,
often the files for the source code of computer programs, with
monitored access. Every change made to the source is tracked, along
with who made the change, why they made it, and references to
problems fixed, or enhancements introduced, by the change.
Version
control systems are essential for any form of distributed,
collaborative development. Whether it is the history of a wiki page
or large software development project, the ability to track each
change as it was made, and to reverse changes when necessary can make
all the difference between a well managed and controlled process and
an uncontrolled ‘first come, first served’ system. It can also
serve as a mechanism for due diligence for software projects.
Developers
may wish to compare today’s version of some software with
yesterday’s version or last year’s version. Since version control
systems keep track of every version of the software, this becomes a
straightforward task. Knowing the what, who, and when of changes will
help with comparing the performance of particular versions, working
out when bugs were introduced (or fixed), and so on. Any problems
that arose from a change can then be followed up by an examination of
who made the change and the reasons they gave for making the change.
Resource
development is usually carried out by teams, either co-located or
distributed. Version control is central to coordinating teams of
contributors. It lets one contributor work on a copy of the resources
and then release their changes back to the common core when ready.
Other contributors work on their own copies of the same resources at
the same time, unaffected by each other’s changes until they choose
to merge or commit
their changes back to the project. Any conflicts that arise - when
two contributors independently change the same part of a resource -
are automatically flagged when the changes are merged. Such conflicts
can then be managed by the contributors.
Typically
in open source projects, version control systems allow anyone to read
and copy the project resources, but only authenticated users, known
as committers,
are allowed to update source code in the repository.
Many
activities in business are accompanied by a responsibility to perform
‘due diligence’ checks. Precisely what these checks entail will
depend on the business activity in question, but with regard to
intellectual property one important ‘due diligence’ activity is
the tracking of the ownership of its constituent parts. So for
example, if someone creates a piece of software and wishes her
organisation to release it, her organisation will almost certainly
want to check the provenance of all the code within the software.
This process is facilitated by the ability to track who made which
changes to the code, and when they were made. A version control
system enables a list of contributors to be compiled and the dates of
their contributions to be ascertained. Such a list can be easily
cross-checked with a list of IP contracts.
Open
development involves contributors making small regular changes to
resources. A version control system provides a means for monitoring
those changes as they occur. Automated systems will notify those
responsible for managing the IP in project outputs. These
notifications, coupled with the logs provided for each individual
modification, allow project managers to monitor and trace all
contributions.
Open
development demands care concerning the provenance of the
contributions. Open development projects need to follow best practice
in this area. If an IP infringement is found to have occurred, the
version control system can be used to determine the extent of the
contamination (which files were affected by the problematic change),
who performed the change and when they performed it. A version
control system can even be used to recover the last uncontaminated
version of the software.
Version
control systems can also be used to establish precedence, when there
is a dispute regarding the ownership of code or ideas.
Version
control has been closely studied and understood in the software
engineering community for a long time. The solutions are stable,
robust and well-supported. There are various systems suitable for
small local teams and for large distributed teams, making them ideal
for coordinating software development, and for mitigating differences
in culture and timezone.
Version
control is provided at sites such as SourceForge and Google Code.
These sites typically build a suite of services around version
control: archiving, release downloads, mailing lists, bug trackers,
web hosting and build farms. This range of functionality makes them
particularly attractive for those projects that do not have the
resources to maintain their own server for version control.
CVS
used to be the most wdely used open source version control system but
these days Subversion has overtaken it and is very commonly used in
open source projects. However, some newer open source version control
systems such as Arch and Git have made significant inroads. The basic
capabilities of these systems are very similar, but they offer
different security, networking and abstraction functionality, and
different licences. There are also many proprietary solutions
available from a range of suppliers.
As
previously discussed, version control is a valuable tool when
record-keeping and performing analysis for legal purposes. These
topics are discussed in Open
Source Development - An Introduction to Ownership and Licensing
Issues.
Dịch: Lê Trung Nghĩa
Không có nhận xét nào:
Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.