Quản lý phiên bản ghi lại tất cả các thay đổi khi người dùng thao tác - Đối với người làm việc độc lập: + Có thể dễ dàng quay trở về phiên bản cũ + Dễ dàng kiểm tra lại code của mình
Trang 1CÂU HỎI ÔN TẬP MÔN XÂY DỰNG PM
Câu 1: Trình bày các khái niệm của xây dựng pm
Lên kế hoạch xây dựng phát triền dự án tập trung vào code, debug, unit test và thiết kế cụ thể, 1 phần nhỏ nữa là tích hợp và kiểm chứng tích hợp
Xây dựng pm là 1 phần lớn trong quá trình phát triển pm, kết quả của quá trình xây dựng pm là 1 pm
(1 pm bao gồm: bản yêu cầu pm, bản kế hoạch phát triển pm, phân tích thiết kế pm, mã nguồn pm, phân tích kiểm thử pm, tích hợp pm, hướng dẫn sd, hướng dẫn cài đặt.)
Phần quan trọng nhất của xây dựng pm là mã nguồn, và nó cũng là phần quan trọng nhất của 1 pm
Xây dựng pm là phần trọng tâm và bắt buộc trong quá trình phát triển pm
Xây dựng pm như thế nào ?
1 Cách viết code sơ đẳng là viết code thử, nếu sai thì bỏ
2 Cách viết code chương trình được định nghĩa giống như gieo cây, ta viết và thử từng đoạn nhỏ, rồi chạy Nhưng đối với đồ án lớn, các đoạn nhỏ không kết nối được, phát sinh lỗi, thì không hiệu quả
3 Viết code có thể chuẩn hóa dần (viết đoạn nhỏ, đảm bảo tương thích với các đoạn code trước đó)
Để xây dựng pm tốt, thì phải lên bản thiết kế (giống như xây dựng nhà), đồ án càng
phức tạp, bản thiết kế càng chi tiết Đó là điều bắt buộc để xây dựng 1 pm tốt
o Trước khi xdpm cần phải định nghĩa vấn đề cần giải quyết (làm gì, cho ai và cái
gì)
o Thứ 2 phải có yêu cầu
o Tiếp theo cần phải có bản phân tích thiết kế hệ thống cụ thể, phải có từng thành
phần nào, các lớp liên hệ với nhau ra sao, phải có sơ đồ ghi rõ trước khi xây dựng
o Sau đó cần phải chọn được ngôn ngữ lập trình
o Kế tiếp cần phải chọn nền tảng công nghệ, thực ra chỉ là thư viện viết sẵn để
chúng ta tái sử dụng Vì công nghệ giúp ta tiết kiệm thời gian và công sức khi xây dựng pm
o Ta phải cần phải có các chuẩn về coding Chuẩn về coding ta cần quan tâm :
Trang 2 Định dạng thụt vào của code (indentation), vertical alignment: theo hàng dọc và có thứ tự
Các vòng lặp, không được quá rắc rối, và nhiều vòng lặp
Mỗi ngôn ngữ sẽ có 1 loại chuẩn riêng Mỗi nhóm / công ty sẽ tự đặt ra 1 chuẩn
về coding cho mình Nếu chúng ta có chuẩn của code, sẽ giúp chúng ta dễ dàng đọc code của thành viên, ráp code cũng dễ dàng, và giúp làm việc nhóm trôi chảy
o Sau khi có chuẩn code, chúng ta phải xác định được công cụ cần thiết để chúng ta
xây dựng pm
o Cuối cùng chúng ta cần có nơi để lưu trữ mã nguồn, để sử dụng cho tất cả các
thành viên trong nhóm
Cái quan trọng nhất của xây dựng pm là IDE (Môi trường phát triển tích hợp) 1 IDE
thông thường bao gồm công cụ lập trình để biên tập mã nguồn, trình biên dịch / thông dịch, công cụ để build, cuối cùng cần có chương trình để debug Khả năng tra từ điển là phần quan trọng của IDE, IDE tự động viết mã nguồn khi ta phát sinh 1 giao tác xử lý
Câu 2: Trình bày các khái niệm và lợi ích của quản lý phiên bản
Quản lý phiên bản ghi lại tất cả các thay đổi khi người dùng thao tác
- Đối với người làm việc độc lập:
+ Có thể dễ dàng quay trở về phiên bản cũ
+ Dễ dàng kiểm tra lại code của mình trước khi commit lên thùng chứa
+ Đồng bộ nhiều máy tính
- Đối với làm việc tập thể:
+ Dễ dàng tập trung dữ liệu và quản lý cấu hình các tập tin có trong thùng chứa
+ Dễ dàng đồng bộ dữ liệu giữa các máy tính
+ 1 người có thể tự làm phần việc của mình mà ko làm phiền người khác
Trang 3+ Dễ dàng xem, cập nhật dữ liệu, và so sánh sự khác nhau giữa các phiên bản
+ Có thể tạo patch để làm việc khi không kết nối mạng
+ Tạo nhánh cho dự án dễ dàng hơn từ đó giúp cho các developer dễ dàng làm việc với nhau và quản lý dự án
- Các khái niệm của Quản lý phiên bản:
+ The Repository: thùng chứa đóng vai trò như 1 kho lưu trữ thông tin dưới hình thức 1 cây hệ thống tập tin, cho phép nhiều client kết nối vào lấy dữ liệu về để đọc và ghi Thùng chứa khi mới tạo đc quy định là phiên bản 0
+ Working Copy: Phiên bản làm việc: là bản sao của tập tin dữ liệu mà người dùng làm việc
Có 4 trạng thái: (state)
Unchanged, and current
Locally changed, and current
Unchanged, anh out-of-date
Locally changed, and out-of-date
+ Workspaces: Môi trường làm việc của developer tách biệt khỏi Thùng Chứa và cô lập với những người sử dụng khác
+ Revision: Phiên bản của Thùng Chứa
Revision Numbers: số thứ tự được đánh dấu cho từng phiên bản
Revision Keywords:
Base: Phiên bản vừa đc lấy về, chưa thay đổi
Head: Phiên bản mới nhất của thùng chứa
Committed: Phiên bản của file vừa đc đưa vào thùng chứa
Trang 4 Mixed Revision: Các file trong thùng chứa có phiên bản khác nhau
Revision Dates: Ngày mà phiên bản đc đưa vào thùng chứa
+ Deltas: Sự khác nhau giữa 2 phiên bản
+ CheckOut / Update: thực hiện lấy mã nguồn từ Thùng Chứa để thao tác với file dữ liệu
+ Modify / Edit: Thao tác thay đổi mã nguồn ở môi trường làm việc của developer (workspace)
+ Check In / Commit: Thực hiện để lưu lại những thay đổi trên dữ liệu và đưa vào Thùng Chứa
+ Conflict: Là tình trạng mà 2 người dùng cùng commit dữ liệu lên Thùng Chứa cùng 1 thời điểm
+ Lock-Modify-Unlock: Là thao tác dùng để giải quyết tình trạng Conflict Khi 1 người dùng checkout file dữ liệu về thì thực hiện thao tác lock Thùng Chứa lại để ko cho phép người dùng khác check out file dữ liệu đó từ Thùng chứa về Sau đó thì thực hiện chỉnh sửa mã nguồn rồi commit lại lên thùng chứa rồi thực hiện Unclock để người dùng khác có thể check out và sử dụng file dữ liệu đó
+ Copy-Modify-Merge: Là thao tác để kết hợp các sự thay đổi của 2 phiên bản làm việc (working copy) khác nhau thành 1 phiên bản làm việc mới
+ Branch: Là 1 nhánh của quá trình phát triển, tồn tại độc lập với các nhánh phát triển khác
+ Merging Branches: Là sự kết hợp các thay đổi của 1 nhánh này vào 1 nhánh khác
+ Tag/Label: Là điểm ảnh của 1 dự án tại 1 thời điểm nào đó Thường dùng để back up file khi gặp vấn đề
+ Exclusive Development: Hệ thống cho phép chỉ 1 người dùng tại 1 thời điểm được phép làm việc trên bất kỳ file dữ liệu nào
+ Simultaneous Development: Hệ thống cho phép nhiều người cùng làm việc trên các working copy từ 1 file dữ liệu Và hệ thống sẽ merge các phiên bản làm việc lại với nhau
+ Central Repository: Thùng chứa tập trung cho phép mọi người đều có quyền kết nối
và lấy dữ liệu
Trang 5Thùng chứa tập trung đơn giản và dễ sử dụng, nhưng mọi thao tác đối với dữ liệu trên thùng chứa tập trung đều sẽ ảnh hưởng chung đến tất cả những người sử dụng
+ Distributed Repositories: Là Thùng chứa phân bổ, mỗi người dùng sẽ có Thùng chứa riêng, có thể kết nối với nhau để cập nhật thay đổi Đối với loại Thùng chứa phân bổ, nếu
dữ liệu trên 1 thùng chứa bị mất thì cũng sẽ ko ảnh hưởng đến các thùng chứa khác Tuy nhiên sẽ rất tốn không gian cho loại thùng chứa này
+Proxied Repositories: Thùng chứa trung gian bao gồm 1 thùng chứa tập trung và nhiều thùng chứa phân bổ
Thùng chứa trung gian gây tốn tài nguyên và không gian
+Remote Access To The Repository: Là hình thức truy cập vào thùng chứa bằng Internet
Câu 3: Trình bày các câu lệnh cơ bản để làm việc với Subversion
Các câu lệnh cơ bản để làm việc với Subversion
-svn:
+ add: Lệnh này sẽ đánh dấu việc thêm 1 file hay thư mục vào hệ thống
Subversion trên phiên bản làm việc
File hoặc thư mục được thực sự thêm vào Thùng chứa khi ta thực hiện tiếp lệnh "svn commit"
$ svn add PATH
+ blame: Lệnh này xuất ra nội dung của tập tin mà người dùng muốn xem, cùng
với tên tác giả và số thứ tự của phiên bản được đánh dấu trên từng dòng nội dung của tập tin Tên tác giả là username của người dùng đã thay đổi nổi dung của dòng tập tin sau cùng, và số thứ tự của phiên bản cho biết việc thay đổi nội dung tập tin đã xảy ra trên những dòng nào
$ svn blame PATH or
$ svn blame URL
+ cat: Giống với lệnh svn blame nhưng nội dung xuất ra theo dạng chuẩn, ko có
đánh dấu số thứ tự phiên bản như blame
$ svn cat PATH or
Trang 6+ delete (del, remove, rm):
+ diff (di): Lệnh này xuất ra những điểm khác nhau giữa 2 phiên bản của 1 file dữ
liệu
$ svn diff revision N:M URL or
$ svn diff URL1@N URL2@M or
$ svn diff revision N:M URL1 URL2
+ import: Lệnh này được dùng để đưa 1 file chưa được đánh dấu phiên bản lên
Thùng chứa
Khác với lệnh svn add, lệnh này đc thực thi ngay lập tức mà ko phải chờ đánh dấu trên phiên bản làm việc rồi sử dụng lệnh svn commit để đưa file lên thùng chứa Lệnh này thường được dùng để đưa những dữ liệu đầu tiên vào thùng chứa
+ lock: lệnh khóa 1 file để ko cho ai khác làm việc trên nó
+ log: Lệnh này xuất ra lịch sử thay đổi nội dung dữ liệu của từng phiên bản
+ merge:
+ mkdir: tạo thư mục
+ resolved: xử lý khi bị confict
+ revert: Lệnh này dùng để quay trở về phiên bản
+ status (stat, st): Lệnh này để xuất ra trạng thái hiện tại của tập tin dữ liệu trên
thùng chứa vừa đc lấy về máy của người dùng,
option -v đi kèm để yêu cầu xuất ra đầy đủ các thông tin bao gồm số thứ tự của phiên bản và tác giả
Trang 7+ tree: In ra cây thư mục/tập tin tương ứng của 1 phiên bản thùng chứa nhất định
$ svnlook tree -r REViSION REPOSITORY [PATH]
- Tạo Thùng chứa:
+ Dùng lệnh mkdir để tạo thư mục làm thùng chứa
+ Dùng lệnh svnadmin create [PATH của thư mục vừa tạo làm thùng chứa]
- Tạo trunk trong thùng chứa vừa tạo:
+ Dùng lệnh svn mkdir [URL: http://localhost/svn/<Tên của thư mục làm thùng chứa>/trunk] -m "<thông điệp>"//option này dùng để gửi thông điệp kèm theo
- Tạo branches trong thùng chứa vừa tạo:
+ Dùng lệnh svn mkdir [URL: http://localhost/svn/<Tên của thư mục làm thùng chứa>/braches] -m "<thông điệp>"//option này dùng để gửi thông điệp kèm theo
- Tạo tags trong thùng chứa vừa tạo:
+ Dùng lệnh svn mkdir [URL: http://localhost/svn/<Tên của thư mục làm thùng chứa>/tags] -m "<thông điệp>"//option này dùng để gửi thông điệp kèm theo
- Đưa những source code đầu tiên chưa từng được đánh dấu phiên bản lên Thùng chứa
+ Từ máy của người dùng thứ 1, PATH đường dẫn đến thư mục chứa source code
+ Dùng lệnh svn import [URL của thư mục sẽ nhận source code] -m "<thông điệp>"
//Lệnh svn import khác svn add ở chỗ là lệnh này được thực thi ngay lập tức mà ko cần đến phiên bản làm việc (working copy)
Trang 8//ai ko hiểu 2 lệnh này thì pm Th :D
- Từ máy của người dùng thứ 2 lấy dữ liệu từ thùng chứa về:
+ Từ máy của người dùng thứ 2, PATH đường dẫn đến thư mục sẽ chứa dữ liệu đc lấy về
+ Dùng lệnh: svn checkout [URL của thư mục chứa source code trong localhost] + Hoặc lệnh: svn co [URL của thư mục chứa source code trong localhost]
- Từ máy của người dùng: Commit dữ liệu lên thùng chứa
+ PATH là đường dẫn đến thu mục đang chứa dữ liệu muốn commit
+ Dùng lệnh: svn commit -m "<Thông điệp>" [PATH/URL/tên file]
+ Hoặc dùng lệnh: svn update //lệnh này ko cần option theo sau vì nó sẽ tự động tìm những thay đổi mới trên phiên bản làm việc để update với phiên bản cũ
+ Kiểm tra lại dữ liệu đã update/commit lên thùng chứa:
.Dùng lệnh: svn log [URL/PATH/tên file]
.Hoặc dùng lệnh: svn diff revision BASE:HEAD/PREV:COMMITTED/ [URL/PATH/tên file]
.Hoặc dùng lệnh: svn diff [tên file] //lệnh này sẽ tự so sánh giữa revision của file đang có trên thùng chứa với phiên bản làm việc trên máy của người dùng
.Hoặc dùng lệnh: svn blame [PATH/URL]
.Hoặc dùng lệnh: svn cat [PATH/URL]
.Hoặc dùng lệnh: svn status [PATH]
//Mọi người tự coi định nghĩa các lệnh ở trên để so sánh sự khác nhau giữa các lệnh nha
- Thao tác Lock-Modify-Unlock:
+ PATH là đường dẫn đến thư mục chứa file dữ liệu muốn check out từ thùng chứa về
+ Dùng lệnh: svn co [URL/PATH] username <Tên user> để check out/update dữ
liệu từ thùng chứa về máy // username là option có thể thêm nếu cần
Trang 9+ Dùng lệnh: svn lock [URL/PATH của file muốn lock]
//Khi đó nếu người dùng khác dùng lệnh: svn commit để gửi file mà người dùng trc đã lock thì sẽ xuất hiện thông báo lỗi
sau đó dùng lệnh: svn commit -m "<Thông điệp>" để thực thi lệnh thêm đó
+ Xóa: dùng lệnh: svn delete [URL/PATH/Tên file muốn xóa] //để đánh dấu file muốn xóa trên phiên bản làm việc của máy người dùng đó
sau đó dùng lệnh: svn commit -m "<Thông điệp>" để thực thi lệnh xóa đó
- Giải quyết tình trạng Conflict: Tình trạng này xảy ra khi 2 người dùng cùng commit dữ liệu lên Thùng chứa trong cùng 1 thời điểm Do đó chỉ có 1 người được phép commit lên
và người còn lại sẽ gặp thông báo lỗi conflict
+ Để giải quyết tình trạng này thì người dùng bị thông báo lỗi conflict đầu tiên phải dùng lệnh: svn update hoặc svn co để lấy phiên bản mới nhất từ thùng chứa về máy mình Sau đó dùng lệnh: svn resolved [PATH/URL/Tên file mà người dùng thứ 2 đã chỉnh sửa]
sau đó dùng tiếp lệnh: svn commit -m "<Thông điệp>" để commit file đó lên Thùng Chứa
Trang 10+ Xem cây thư mục: svnlook tree [PATH]
+ Từ máy của người dùng thứ nhất: update lên phiên bản làm việc mới nhất: svn
-+ Giải quyết conflict bằng lệnh: svn resolved [Tên file bị conflict]
+ Commit lên thùng chứa: svn commit -m "<Thông điệp>"
Câu 4: Trình bày các tính năng và thao tác cơ bản của Visual SourceSafe
Các tính năng:
- Resource Management: Quản lý mã nguồn tại thùng chứa hoặc cơ sở dữ liệu
- Workspaces: Cung cấp ko gian làm việc riêng cho các thành viên
- Cooperation Support: Quản lý sự ảnh hưởng lẫn nhau của các thành viên
- Build and release Management: Quản lý việc build và release sản phẩm để đảm
bảo cấu hình của sản phẩm đc đánh dấu mỗi khi release để tiện cho việc bảo trì và
sử dụng lại
- Parallel development: Có khả năng phát triển song song nhiều phiên bản của 1
project
- Resource Versioning: Bảo trì những version khác nhau của Resource
- History Management: Quản lý, đánh dấu những phiên bản trong dự án
Các thao tác cơ bản:
- Tạo 1 CSDL mới
o Trong cửa sổ của VSS Administrator -> New Database -> chọn nơi chứa CSDL và đặt tên cho CSDL đó -> chọn chế độ quản lý: Lock-Modify-Unlock/ Copy-Modify-Merge
- Thêm 1 User vào hệ thống
o Trong cửa sổ của VSS Administrator -> Menu User -> Add User
- Quản lý dự án
Trang 11o Dùng Username và password Log on vào hệ thống -> Ở màn hình VSS Explorer -> right click vào folder muốn lưu trữ Project -> chọn Set working folder -> Lấy dữ liệu về từ thùng chứa -> Get <Tên folder>
- Kết hợp với Visual Studio.Net
o Trong cửa sổ Solution Explorer của VS -> right click vào Project chọn Add Solution to Source Control -> right click vào file muốn check out/check in -
> chọn Check out/Check in
o Trong cửa sổ Solution Explorer của VS -> right click vào file muốn view History -> chọn View History để xem các version
Câu 5: Trình bày các khái niệm của NAnt Nêu cách build dự án bằng NAnt
Câu 6: Trình bày các thành phần của NAnt Build Script
Câu 7: Trình bày các tác vụ cơ bản của NAnt
Câu 8: Trình bày các khái niệm của MSBuild Nêu cách build dự án bằng
//Bạn nào biết viết thêm giùm mình
Câu 9: Trình bày các thành phần của MSBuild Build Script
1) Properties: là khái niệm gồm 1 cặp khóa và giá trị xen giữa
//Còn nhiều bạn nào viết thêm giùm mình
2) Items: là thẻ định ra các phần kèm theo khi build
Trang 12a Thẻ ItemGroup: nhóm nhiều thẻ Item lại với nhau
b Thành phần của Item:
Type: xác định kiểu của tập tin
Include: dưa ra đường dẫn tập tin
Exclude: liệt kê những gì ko muốn kèm theo khi build
Condition: các yêu cầu đưa ra khi build
3) Targets: được xe như là 1 thùng chứa các Task sẽ được thực thi
a Thuộc tính Name: thuộc tính bắt buộc Thuộc tính này sẽ cần đến khi ta gọi
1 Target thực thi
b Một số thuộc tính khác: Inputs, Outputs, DependsOnTargets, Condition
c Predefined Target: là những target đã được định nghĩa sẵn và chúng ta chỉ
sử dụng chúng
d DefaultTargets: target được chỉ định sẽ được build đầu tiên Nếu ko có thì target đầu tiên sẽ được thực thi
4) Tasks: là 1 đoạn code, 1 lớp để thực thi 1 hành động nào đó khi build chương
trình, nó kế thừa các phương thức do MSBuild cung cấp
5) MSBuild Logging: nhật kí ghi lại trong quá trình Build
MSBuild Logger: chương trình cho phép ghi nhận lại các sự kiện, các thông điệp, các lỗi xảy ra hay các cảnh báo xảy ra trong quá trình build
6) MSBuild Batching: MSBuild có khả năng chia tập hợp các items thành các mục
khác nhau dựa trên các item metadata – gọi là các batch, và thực hiện các task hay target cho mỗi batch
a Task batching: cho phép bạn làm đơn giản file project của bạn bằng cách chia tập hợp các item thành các batches và truyền mỗi batch đó vào task một các riêng biệt
b Target batching: Msbuild kiểm tra các input và output của target trước khi thực hiện target đó
Câu 10: Trình bày các tác vụ cơ bản của MSBuild (cùng các tham số)
1) Copy: thực hiện copy các file vào 1 thư mục
SourceFiles: các file cần copy (nguồn)
DestinationFolder: thư mục đích
FilesCopied: tập chứa các file copy thành công