Xây dựng pm
CÂ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.
+ 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
Xây dựng pm
+ Merge 1 cách tự động
- Lợi ích của phân quyền quản lý phiên bản:
+ Dễ dàng phân nhánh hoặc trộn lẫn
+ Đơn giản hóa việc quản lý phân quyền
+ Ngắt kết nối hoạt động
+ 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:
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.
Xây dựng pm
Thù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
thứ tự của phiên bản và tác giả
Xây dựng pm
+ switch (sw):
+ update (up): cập nhật phiên bản mới nhất từ thùng chứa
-svnadmin:
+ create:
-svnlook:
+ info:
+ 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)
Xây dựng pm
//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
- Thêm / Xóa
+ PATH là đường dẫn đến thư mục chứa file dữ liệu muốn commit lên Thùng
chứa
+ Thêm: dùng lệnh: svn add [URL/PATH/Tên file muốn thêm] //để đánh dấu file
muốn thêm 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 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
- Tạo tag/branch:
+ Tạo thư mục Tag/Branch trong Thùng chứa bằng lệnh: svn mkdir [URL] -m
"<Thông điệp>"
+ Xem cây tập tin và thư mục trong thùng chứa tại phiên bản mới nhất bằng lệnh:
svnlook tree [PATH]
+ Dùng lệnh: svn copy [URL1] [URL2] để chép dữ liệu từ URL1 sang URL2. Với
URL2 là đường dẫn đến thư mục Tag / Branch đã tạo trc đó
- Merge Branch với Trunk:
Xây dựng pm
o 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
MSBuild.
1) Khái niệm: MSBuild là cơ chế biên dịch không có giao diện người dùng, mọi tính
năng đều được dấu bên trong.
Công việc biên dịch phụ thuộc vào tệp dựa theo chuẩn XML với phần mở rộng
.proj
2) Cách build dự án:
//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
Xây dựng pm
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
Xây dựng pm
2) Csc: compile 1 project với source C#.
Source: file source của C#
TargetType: định dang file output là 1 module, 1 library hay 1 file winexe
3) Vbc: tương tự Csc dùng compile các project viết bằng VB
4) Delete: xóa file
Files: các file cần xóa
DeletedFiles: các file đã xóa thành công
5) Exec: chạy 1 chương trình ứng dụng từ bên ngoài.
Command: cho biết command cần thực hiện hoặc đường dẫn đến file thực
thi.
WorkingDirectory: đường dẫn thư mục nơi command thự hiện.
6) MakeDir: tạo thư mục
Directories: tên thư mục cần tạo và đường dẫn
CreatedDirectories: gồm các thư mục đã tạo thành công
7) RemoveDir: xóa thư mục
Directories: thư mục cần xóa
RemovedDirectories: tên các thư mục đã xóa thành công
8) Message: đưa ra console chuỗi thông báo
9) MSBuild: build 1 project MSBuild khác.
Project: project MSBuild cần build
Properties: các properties tương ứng
Targets: các target sẽ build trong project ta cần build
Câu 11: Trình bày các quy tắc tối ưu hóa mã nguồn.
a. Biến
- Sử dụng server tích hợp lien tục riêng .
- Chạy build script bằng tay
- Chạy build nhanh
- Build theo từng công đoạn.
3) Lợi ích
- Giảm rủi ro.
- Dễ dàng phát hiện và xóa lỗi .
- Những build luôn được cập nhật .
- Tiến trình được quản lí.
4) Rủi ro.
- Khó khăn trong việc quản lý nhiều threads cùng chạy trên 1 ứng dụng.
Xây dựng pm
Câu 13: Trình bày các quy tắc của tích hợp liên tục.
- Build pm mổi khi thay đổi.
- Tích hợp csdl lien tục.
- Test liên tục.
- Thanh tra lien tục ( continous inspection )
+ Giảm độ phức tạp của code
+ Xem xét phần design
+ Giữ vững code chuẩn.
+ Loại bỏ những code lặp lại.
+ Xem xét mức độ truy cập của code
- Triển khai lien tục (continous deployment)
+ Release làm việc bất kì thời điểm, bất kì môi trường nào
+ Đánh dấu phiên bản.
+ Sản phẩm được triển khai ở môi trường sạch.
+ Đánh dấu toàn bộ tài nguyên.
+ Chạy tất cả test.
+ Tao ra những feedback.
file nunit.framework trong thẻ .NET.
Thêm thư viện: using NUnit.Framework vào class của project unittest.
Add dependency cho project unittest (check vào project được chọn để test)
Cuối cùng tiến hành add reference file dll của project chọn để test vào project
unittest.
Viết test:
Thêm attribute [TestFixture] vào trước class định nghĩa ,attribute này báo cho
Nunit biết đây là lớp unit test
Khởi tạo đối tượng dùng để test .Việc khởi tạo sẽ nằm trong hàm Setup () có
thuộc tính là [TestFixtureSetUp] được đặt phía trước hàm SetUp().
Sau khi test xong,các đối tượng phải được hủy ,công việc hủy nằm trong hàm
TearDown() ,và nằm dưới thuộc tính [TestFixtureTearDown]
Ta bắt đầu viết test với thuộc tính [Test] ở đầu dòng
Xây dựng pm
Các hàm của Nunit hỗ trợ việc kiểm tra kết quả như :
AreEqual,Less/Greater,GreaterOrEqual /LessorEqual ,IsNull/IsNotNull… nếu
result và kết quả mong đợi mà chúng ta tự gán đúng điều kiện yêu cầu, thì hàm
test này sẽ Pass ngược lại sai sẽ Failed
Thuộc tính ExpectedException (typeof(DivideByZeroException)) dùng để báo
biết phương thức Divide có thể trả về 1 exception là
DivideByZeroException.Khi exception đó xảy ra ,test case vẫn pass.
Thực thi test : vào Nunit – File – Open Project chọn file dll nằm trong thư mục
debug của project.Nhấn Open.Sau khi chạy xong, sẽ cho ta biết test nào
pass,test nào lỗi và lý do của nó .
Câu 15: Trình bày các loại Mock Objects. Nêu phương pháp sử dụng chúng.
Mock object (MO) là một đối tượng ảo mô phỏng các tính chất và hành vi giống hệt
như đối tượng thực được truyền vào bên trong khối mã đang vận hành nhằm kiểm tra tính
đúng đắn của các hoạt động bên trong.
- Phân loại mock:
kiếm các tập tin .wixobj được cung cấp trên dòng lệnh để tìm entry section. Nếu có nhiều
hơn 1 entry session được tìm thấy, Light sẽ thất bại và trả về lỗi (không thể tại ra 2 file
cài đặt từ 1 trình liên kết). Sau khi đã tìm thấy tất cả các tham số đầu vào, Wix sẽ hoàn tất
việc đóng gói bộ cài đặt cho pm.
Câu 17: Trình bày các thành phần của WXS.
Các thẻ quan trọng trong file Wxs:
- <Wix></Wix>: thẻ gốc
- <Product>: chứa thông tin chính sản phần cần build để tạo file msi
<Module>: chứa thông tin chính sản phẩm cần build để tạo file msm
<Patch>: chứa thông tin chính sản phẩm cần build để tạo ra file msp
- <Fragment>:chứa thông tin các đơn vị cần thêm vào file cài đặt
Ta xét đơn cử thẻ Product :
- Các thuộc tính chính của thẻ <Product>:
ID: mã của sản phẩm
Xây dựng pm
Codepage: mã số nguyên của trang code hoặc tên của trang web
Langue: mã ngôn ngữ
Manufacture: tên nhà sản xuất
Name: tên của sản phẩm
UpgradeCode: mã nâng cấp của sản phẩm
Version: Phiên bản của sản phẩm
- Các thẻ con chính của thẻ <Product>
<Packge>: Chứa thông tin về gói cài đặt
<Media>: mô tả nơi chứa file cài đặt
<Directory>: Thông tin thư mục chứa file cài đặt,trong directory còn có thẻ
<Component>, trong <Component > có thẻ <File>: chỉ là con của component
<DirectoryRef>: them chiếu đến thẻ <Directory> khác
<Feature> : chứa thông tin đơn vị cài đặt nhỏ nhất
<Icon >: chứa thông tin icon
+ Ví dụ :
Lúc đăng nhập : hacker điền vào user name và password là : „OR‟a=a‟,câu lệnh
select sẽ như sau:
Select from user where username = „‟ OR‟a=a‟ and password = „‟ OR „a=a‟ ->
đăng nhập hợp lệ
+ Phòng chống: Kiểm soát chặt chẽ dữ liệu nhập :xây dựng hàm để thay thế dấu nháy
đơn thành nháy kép.Tránh dùng đến quyền quản trị hệ thống như „sa‟ hay „dbo‟.Sử dụng
tham số liên tục : @user,@password trong code ,sau đó người dùng truyền 1 chuỗi kí tự
tùy ý vào tham số ấy.
Câu 19: Trình bày và cho ví dụ minh họa về CSRF, Session fixation, Session
poisoning và cách phòng chống.
a. CSRF:
Xây dựng pm
- CSRF là gì ?
Là kĩ thuật tấn công bằng cách sử dụng quyền chứng thực của người sử dụng đối với 1
website khác.Các ứng dụng web hoạt động theo cơ chế nhận các câu lệnh http từ người
sử dụng,sau đó thực thi các câu lệnh này. CSRF sẽ lừa trình duyệt của người dùng gửi đi
các câu lệnh http đến các ứng dụng web.Trong trường hợp phiên làm việc của người
dùng chưa hết hiệu lực thì các câu lệnh trên sẽ dc thực hiện với quyền chứng thực của
người sử dụng.
CSRF còn dc gọi là "session riding", "XSRF".
- VD về CSRF: (tức là thông qua 1 hình ảnh hay 1 cách nào đó ,nhử người dùng
click vào 1 link ẩn ,link đó truyền tác vụ đã được chứng thực bởi nạn nhân xử lý
tài khoản trang web mà hacker muốn hack)
Bob duyệt qua 1 diễn đàn yêu thích của mình như thường lệ.Một người dùng
khác,Malory ,đăng tải 1 thông điệp lên diễn đàn .Giả sử rằng Malory có ý đồ k tốt và anh
ta muốn lấy tiền từ những người có tài khoản tại ngân hàng như Bob.Malory sẽ tạo 1
thông báo,trong đó có chèn 1 đoạn code có 1 hình ảnh kích thước là 0x0 pixel. Giả sử
Bob vừa mới truy cập vào tài khoản ngân hàng của mình và chưa thực hiện logout để kết
hacker chỉ cần thiết lập 1 session ID bất kì ,nhớ và sau đó sử dụng lại nó ,đối với hệ
thống quản lý session ID hướng giới hạn,hacker đăng kí 1 session ID với ứng
dụng.Sau đó ,hacker gửi ID có được đến người dùng ,tùy thuộc vào ứng dụng mà có
thể qua URL :trên tham số URL, trong biến ẩn form ,hoặc trong cookie.Sau khi nạn
nhân đăng nhập vào hệ thống qua session ID được chỉ định sẵn ,và chưa thoát khỏi
ứng dụng ,hacker lúc này bắt đầu dùng session ID đó để bước vào phiên làm việc của
nạn nhân,và điều khiển mọi tài khoản liên quan đến nạn nhân.
+ Tấn công trên URL:
Hacker mở dịch vụ trực tuyến của ngân hàng thông qua địa chỉ :
online.worldbank.com .Nhận được 1 session ID từ trình chủ đển xác định phiên làm
việc của hacker .Ví dụ session ID có giá trị là 1234.Sau đó hacker sẽ tìm cách gửi 1
liên kết đến 1 người dùng nào đó có tài khoản trong ngân hàng này .Những liên kết
đó thường là dẫn đến trang đăng nhập vào tài khoản trong ngân hàng ví dụ như liên
kết là : ,để lừa người dùng
làm việc trong phiên làm việc của hacker khi người dùng nhận được liên kết này
.Người dùng bị mắc lừa và mở ứng dụng web bằng liên kết của hacker .Do đã có
session ID (của hacker)nên chu trình sẽ không tạo 1 session ID mới .Người dùng vẫn
tiếp tục đăng nhập với thông tin của mình để quản lý tài khoản .Khi đó hacker sẽ vào
tài khoản của người dùng mà không cần phải đăng nhập vì có cùng phiên làm việc .
Xây dựng pm
+ Tấn công trong biến ẩn form:
Tương tự như ỦL,biến ẩn form nghĩa là sau khi hacker xem mã HTML của trang
web,nhận thấy session ID được đặt trong biến ẩn form ,hacker sẽ gửi 1 session ID
cũng trên URL đến người dùng hoặc 1 trang web giống trang đích nhưng với biến ẩn
form mang giá trị ấn định sẵn .
+ Tấn công trong cookie :
Bằng việc lợi dụng cookie ,hacker có 3 cách để đưa 1 session ID đến trình duyệt của
nạn nhận :
Sử dụng ngôn ngữ kịch bản (javascrip ,vbscrip) để thiết lập 1 cookie trong
+ Cách phòng chống :
Tạo ra danh sách những thẻ HTML được phép sử dụng.
Xóa bỏ thẻ script hay lọc ra bất kì 1 đoạn mã javascript /java/vbscript
Lọc dấu nháy đơn ,nháy kép (vì có dấu nháy đơn ,nháy kép có thể chèn đoạn script trong
URL) ,và kí tự null(vì khả năng thêm 1 đoạn mã bất kì sau kí tự null khiến cho ứng dụng
dù đã lọc bỏ thẻ script vấn không nhận ra ,do ứng dụng nghĩ rằng chuỗi đã kết thúc từ kí
tự null này.)