Câu hỏi ôn tập môn xây dựng phần mềm

Tài liệu Câu hỏi ôn tập môn xây dựng phần mềm: 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 co...

pdf24 trang | Chia sẻ: Khủng Long | Lượt xem: 868 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Câu hỏi ôn tập môn xây dựng phần mềm, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
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. 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 : Xây dựng pm  Định dạng thụt vào của code (indentation), vertical alignment: theo hàng dọc và có thứ tự.  Khoảng trống, các tab.  Cách đặt tên biến: tên phải luôn luôn có nghĩa và mang tính gợi nhớ, cần phải viết hoa, viết thường 1 cách hợp lý.  Boolean values in decision structure: trình bày đúng logic  Phép gán  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 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:  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 Xây dựng pm  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. 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 + 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 Xây dựng pm $ svn cat URL + checkout (co): lệnh lấy về một phiên bản tùy chọn từ thùng chứa + cleanup: + commit (ci): đưa file đã modify lên thùng chứa + copy (cp): + 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ả 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: <Tên của thư mục làm thùng chứa>/trunk] -m ""//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: <Tên của thư mục làm thùng chứa>/braches] -m ""//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: <Tên của thư mục làm thùng chứa>/tags] -m ""//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 //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 "" [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 để 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 Xây dựng pm + 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 - 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ự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ự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 "" để 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 "" + 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 + 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 update //Chú ý revision + Từ máy của người dùng thứ 2: check log: svn log //để kiểm tra revision ở máy người dùng thứ 2 + Nếu có sự khác nhau về revision dùng lệnh: svn merge -r1:2 [URL2] //ở option - r1:2 thì 1 là số revision của người dùng có revision nhỏ hơn và 2 là ngc lại + 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 "" 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 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 - 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 a. 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 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 biến đúng mục đích cần dùng .Thời gian ràng buộc sớm hơn, thì độ linh hoạt thấp và độ phức tạp giảm. b. Tránh lồng phân cấp 3-4 mức . Xây dựng pm c. Làm mọi thứ càng đơn giản càng tốt . d. Độ phức tạp Complexity: Code càng đơn giản càng tốt +Bắt đầu bằng 1. Với mỗi câu lệnh if, while, repeat, for, and, or thì cộng 1 +Độ phức tạp từ 0-5: chấp nhận dc từ 6-10: rút gọn code từ 10: tách hàm e. Biểu thức Boolean: Phải trình bày theo logic Câu 12: Trình bày các khái niệm, lợi ích và hạn chế của tích hợp liên tục. 1) Khái niêm : - Lấy mã nguồn. - Phát triển chức năng . - Tạo 1 build trên máy mình . - Chạy unit test auto . - Đưa mả nguồn lên thùng chứa . - Build tích hợp. 2) Build khi có bất kì sự thay đổi nào : - Viết script tự động . - Thực hiện từng phiên bản build 1. - Tách biệt build script khỏi IDE. (vs, netbean) - Tập trung hóa các tài nguyên . - Tạo cấu trúc thư mục hợp lý. - Build có lỗi phải dừng ngay (build fail) - Build phải chạy trong bất kì môi trường - Sử dụng máy build tích hợp riêng. - 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. + Tạo ra khả năng rollback. Câu 14: Trình bày các khái niệm của Unit Test. Nêu cách viết Unit Test. - Tổng quan về unittest: Sau khi viết code xong, lập trình viên phải thực hiện việc kiểm tra xem code của mình viết có đúng không. Công việc này gọi là unit test. Unit test theo cách hiểu đơn giản đó là kiểm tra từng bộ phận rất nhỏ trong source code của chương trình, từ những bộ phận nhỏ này, ta lại kiểm tra những unit lớn hơn có sử dụng những unit nhỏ đã được kiểm tra đó. Một số thông tin về unit test:  Unit test được thực hiện bởi lập trình viên  Bộ phận QA sẽ thực hiện test nhưng không phải là unit test  Mọi lập trình viên đều phải thực hiện và báo cáo kết quả unit test trước ,trong hoặc sau khi develop  Unit test có thể thực hiện tự động, sử dụng các đoạn code gọi là test script,quá trình này gọi là automated unit testing Xây dựng pm  Trong automated unit testing, ta sẽ viết các hàm kiểm tra, gọi các hàm cần kiểm tra. Nếu kết quả ra như mong đợi thì kết quả là pass, ngược lại là failed. Sau khi thực thi tất cả các hàm kiểm tra, ta sẽ có được 1 bảng tóm tắt kết quả: bao nhiêu Pass, bao nhiêu Failed và các lý do  Automated unit test scrip có thể được lưu và chạy lại 1 cách dễ dàng khi mã nguồn thay đổi  Nunit là 1 framework giúp chúng ta thực hiện unit testing trên .NET. Ngoài Nunit chúng ta còn có Junit cho java, cppunit cho cpp, phpunit cho php.. - Cách viết Unit test: ta lấy Nunit làm ví dụ  Cấu hình :  Tạo project Unittest.  Sau đó vào File –Open – Project solution – Chọn Project đã chọn để test (nhớ click chọn vào Add solution).  Trong project test ,click phải vào chữ Reference - add reference,sau đó tìm 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:  Static mock: được viết bằng tay hay phát sinh tự động ở một bước nào đó trong chương trình  Synamic mock: phụ thuộc vào proxy interface - Cách sử dụng mock object: ta ví dụ sử dụng trong Nunit  Để sử dụng được mock, ta phải add thư viện vào, trong Nunit thư việc sẽ là nunit.mocks.dll và using package Nunit.Mock.Nunit cung cấp lớp DynamicMock dùng để tạo mock. Để sử dụng mock, ta có 2 bước sau : o Bước 1: Bảo cho mock biết đối tượng giả lập sẽ có những hàm gì và kết quả của hàm đó sẽ là gì .Ví dụ : personRepositoryMock.ExpecAndReturn (“GetPeople”,peopleList) Ở đây ta nói với mock rằng đối tượng giả lặp sẽ có hàm tên là GetPeople và kết quả trả về của hàm này là peopleLisst o Bước 2: Sử dụng mock: Sauk hi đã thiết lập mock xong, ta có thể lấy đối tượng giả lập bằng câu lệnh : (IPersonReposotory) personRepositoryMock.MockInstance Xây dựng pm Câu lệnh trên sẽ cho ta 1 đối tượng giả lập đối tượng IPersonReposotory. Khi đối tượng service gọi hàm GetPeople từ đối tượng này, đều sẽ cho kết quả là peopleList. Câu 16: Trình bày các khái niệm và quá trình làm việc của WiX. Wix là 1 công cụ cho phép tạo ra file cài đặt window từ những file đặt tả xml. Source code của wix viết theo dạng chuẩn của xml. Ta có thể sử dụng Wix trên cả 2 môi trường: Command line và Visual Studio IDE. Wix dùng công cụ candle.exe xử lý trước tập tin đầu vào đuôi .wxs, chuyển chúng sang dạng chuẩn của tài liệu xml dựa trên giảng đồ Wix (wix.xsd). Sau đó mỗi tập tin nguồn .wxs biên dịch thành tập tin .wixobj. Tập tin wixobj tổng hợp các nguồn cung cấp tham số đầu vào, các dữ liệu thô để cung cấp cho công cụ Light tìm kiếm và đóng gói. Tiếp theo công cụ Light, sẽ xử lý 1 hoặc nhiều tập tin .wixobj. Light lấy dữ liệu từ các tập tin được mô tả và tạo bộ cài đặt MSI hoặc MSM. Trình liên kết bắt đầu bằng việc tìm 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: - : thẻ gốc - : chứa thông tin chính sản phần cần build để tạo file msi : chứa thông tin chính sản phẩm cần build để tạo file msm : chứa thông tin chính sản phẩm cần build để tạo ra file msp - :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ẻ :  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ẻ  : Chứa thông tin về gói cài đặt  : mô tả nơi chứa file cài đặt  : Thông tin thư mục chứa file cài đặt,trong directory còn có thẻ , trong có thẻ : chỉ là con của component  : them chiếu đến thẻ khác  : chứa thông tin đơn vị cài đặt nhỏ nhất  : chứa thông tin icon Câu 18: Trình bày và cho ví dụ minh họa về Buffer overflow, SQL Injection và cách phòng chống. a. Buffer overflow: một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu được cấp phát khiến cho ứng dụng không thực thi được câu lệnh dự định kế tiếp mà thay vào đó phải thực thi một đoạn mã bất kì do hacker đưa vào hệ thống. Hacker làm tràn bộ đệm sao cho con trỏ lệnh sẽ trỏ đến 1 đoạn mã tạo ra 1 giao diếp dòng lệnh(commandline ,ví dụ như /bin/sln) Sau khi chương trình bị tràn bộ đệm ,nó sẽ tìm đến địa chỉ của đoạn mã trên để thực thi tiếp .Nếu chương trình được chạy dưới quyền của người quản trị ,hacker đã có được 1 giao tiếp dòng lệnh với quyền tương đương và có thể điều khiển toàn bộ hệ thống + Ví dụ : Xây dựng pm Ta có đoạn code như sau : char buffer[256] strcpy (buffer,ch) Buffer chỉ được cấp phát 256 byte nhưng ở hàm func nếu buffer nhận 257 kí tự từ ch thì sẽ xảy ra lỗi tràn bộ đệm + Cách phòng chống : Người thiết kế pm cần phải kiểm tra kĩ kích thước dữ liệu trước khi sử dụng ,. Sử dụng các vùng nhớ cấp phát động thay cho tĩnh khi lưu trử dữ liệu,sử dụng các kĩ thuật chống tràn trên stack như stack mashing protection ,data execute prevention.Sử dụng kĩ thuật kiểm tra sâu các gói tin. Tránh dùng các hàm không cung cấp kiểm tra giới hạn trong ngôn ngữ C ,thay vào đó là các hàm tương đương :fgets,strncpy,strncat b. SQL Injection Là kĩ thuật cho phép khai thác các lỗ hổng bảo mật tồn tại trên cơ sở dữ liệu của 1 ứng dụng và thi hành các câu lệnh SQL bất hợp pháp.Từ đó có thể toàn quyền trển cơ sở dữ liệu của ứng dụng ,thậm chí là server mà ứng dụng đó đang chạy. + 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 thúc.Trình duyệt của Bob sẽ gửi câu lệnh http get đến địa chỉ lưu trong thẻ "<img" trong đoạn mã độc và nó sẽ được thực hiện bằng quyền chứng thực của Bob. Ví dụ: hacker có thể sử dụng 1 URL để xóa đi một dự án quan trọng nào đó mà Bob đang làm,hoặc có thể chuyển tất cả tiền trong tài khoản ngân hàng của Bob vào tài khoản của hacker. - Cách phòng chống : Hiện tại chưa thực sự có 1 cách phòng chống nào triệt để ,sau đây là 1 vài kĩ thuật sử dụng : + Hạn chế thời gian hiệu lực của session (giống như trang moodle môn học ) + Dùng phương thức get/post hợp lý : ta dùng phương thức get để truy vấn dữ liệu ,còn những thao tác làm thay đổi hệ thống thì dùng phương thức post hoặc put. + Sử dụng capcha hoặc các thông báo xác nhận : Sử dụng capcha để phân biệt đối tượng đang thao tác với hệ thống là người hay là tự động,nhất là trong các thao tác như đăng nhập ,đăng xuất ,thanh toán và chuyển khoản .Tuy nhiên điểm yếu là capcha sẽ gây sự khó chịu khi sử dụng cho người dùng.Các thông báo xác nhận cũng được sử dụng ,ví dụ như hiển thị một thông báo : “Bạn có thực sự muốn xóa không?”. Xây dựng pm + Sử dụng token : Tạo 1 token duy nhất cho mỗi form(thường sẽ có đối số là session),khi nhận lệnh http post về ,hệ thống sẽ thực hiện so khớp để xem có nên thực hiện câu lệnh hay không . + Sử dụng cookie riêng biệt cho phần quản trị + Kiểm tra referrer : Kiểm tra câu lệnh http gửi đến xuất phát tự đâu ,và chỉ thực hiện các lệnh http được gửi đến từ các trang đã được chứng thưck + Kiểm tra IP : Một số hệ thống chỉ cho truy cập từ những IP đã được thiết lập sẵn b. Session Fixation: Là kỹ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng cách gửi 1 session ID hợp lệ đến người dùng ,sau khi người dùng đăng nhập vào hệ thống thành công ,haker sẽ dùng lại session ID đó và nghiễm nhiên trở thành người dùng hợp lệ. Ví dụ : Đối với 1 hệ thống quản lý session hướng tự do (chấp nhận 1 session ID bất kì) 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à : >sessionid=1234 ,để 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 trình duyệt của nạn nhân bằng cách thiết lập giá trị “document .cookie= “sessionid=1234;domain = .worldbank.com” ”.Bên cạnh đó hacker còn có thể thiết lập thời gian sống cho cookie ,domain cookie.  Dùng thẻ với thuộc tính set-cookie  Thiết lập cookie dùng thuộc tính set-cookie trong header HTTPresponse thông qua kĩ thuật tấn công DNS server + Cách phòng chống :  Chống việc đăng nhập với 1 session ID có sẵn bằng cách hủy bỏ session ID được cung cấp bởi trình duyệt của người dùng khi đăng nhập và luôn tạo 1 session ID mới khi người dùng đăng nhập thành công .  Chống những hacker bên ngoài hệ thống :tạo ứng dụng trên hệ thống theo hướng giới hạn (chỉ tạo session ID mới cho người dùng sau khi họ thành công )  Giới hạn phạm vi ứng dụng của sessionID : Kết hợp session OD với địa chỉ của trình duyệt ,kết hợp session ID với thông tin chứng thực được mã hóa ssl,xóa bỏ session khi người dùng thoát khỏi hệ thống hay hết hiệu lực,thiết lập thời gian hết hiệu lực của session tránh trường hợp hacker có thể duy trình session và sử dụng nó lâu dài . c. Session poisoning : Xây dựng pm Session poisoning là việc lợi dụng những lỗ hổng của việc quản lý những session trên các ứng dụng máy chủ để coppy (ăn cắp) những session của người dùng bằng những đoạn script . + Ví dụ Hacker biết người dùng đang sử dụng 1 ứng dụng web có lỗ hổng ,người dùng nhận được 1 liên kết thông qua email hay chính trang web đó với những nội dung hấp dẫn như “click là trúng thưởng” hoặc “chúc mừng bạn đã là người đoạt giải..” Trong liên kết đó sẽ có 1 đoạn script chạy tự động chỉ chờ người dùng click vào là sẽ đánh cắp session của người dùng ngay rồi gửi cho hacker . + 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.)

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf
Tài liệu liên quan