Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
1,08 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Thế Nam NGHIÊN CỨU THIẾT KẾ THEO HỢP ĐỒNG VÀ XÂY DỰNG CƠNG CỤ HỖ TRỢ KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Cơng Nghệ Thông Tin HÀ NỘI - 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Thế Nam NGHIÊN CỨU THIẾT KẾ THEO HỢP ĐỒNG VÀ XÂY DỰNG CÔNG CỤ HỖ TRỢ KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Chuyên ngành: Công Nghệ Phần Mềm Cán hướng dẫn: TS Trương Ninh Thuận HÀ NỘI - 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com LỜI CẢM ƠN Sinh viên thực khoá luận tốt nghiệp đề tài “Nghiên cứu thiết kế theo hợp đồng xây dựng cơng cụ hỗ trợ” xin bày tỏ lịng chân thành biết ơn tới thầy cô giáo Trường Đại học Cơng Nghệ, Đại học Quốc Gia Hà Nội nói chung thầy cô Bộ môn Công nghệ Phần mềm nói riêng Trong suốt bốn năm qua thầy khơng tận tình truyền đạt kiến thức mà cịn ln động viên học tập sống Đặc biệt, xin chân thành cảm ơn thầy giáo hướng dẫn, thầy Trương Ninh Thuận, tận tình bảo, tạo điều kiện sở vật chất tinh thần cho chúng tơi hồn thành khóa luận sửa chữa sai sót suốt q trình thực đề tài Chúng tơi xin cảm ơn tới bạn sinh viên K51 cho chúng tơi ý kiến đóng góp có giá trị thực đề tài Đề tài “Nghiên cứu thiết kế theo hợp đồng xây dựng công cụ hỗ trợ” hoàn thành thời gian hạn hẹp nên không tránh khỏi khiếm khuyết Chúng mong nhận ý kiến đóng góp từ thầy giáo bạn để tiếp tục hoàn thiện hệ thống Hà nội ngày 24 tháng năm 2010 Sinh viên Nguyễn Thế Nam LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com TÓM TẮT NỘI DUNG Khóa luận tìm hiểu cơng nghệ thiết kế theo hợp đồng (Design by Contract) [3] trình bày khái niệm Đây công nghệ giúp cho xây dựng đặc tả lớp thành phần xem xét kết hợp chúng với Mở rộng đặc tả thành phần phần mềm thành phần phải thỏa mãn điều kiện liên kết với để tạo thành phần mềm có tính tin cậy, tính đắn cao Bên cạnh khóa luận cịn đưa số khái niệm chế cho tính đắn phần mềm Các cấu trúc đơn giản thường có tính tin cậy phần mềm có cấu trúc phức tạp Nhưng điểm yếu lại khơng thể phục vụ nhu cầu ngày tăng lên người phát triển người sử dụng Vì thế, số chế cố gắng giữ cho cấu trúc phần mềm đơn giản tốt Viết văn mô tả phần mềm để người phát triển sau đọc lại viết lại Quản lý nhớ, hay gọi “kỹ thuật thu gom rác” làm cho phần mềm tối ưu bình thường Hoặc việc sử dụng lại công cụ có sẵn phần mềm đáng tin cậy trước giải pháp thường nhà phát triển ứng dụng Chi tiết phát triển tất giai đoạn: phân tích, thiết kế, lập trình, kiểm thử, bảo trì dự án phần mềm Tiếp theo, khóa luận cịn đưa mơ hình dựa CORBA Khái niệm kỹ nghệ phần mềm hướng thành phần Một phần mềm tạo ghép nối thành phần độc lập lại với Các thành phần không cần phải biên dịch lại không cần phải chỉnh sửa lại thêm thành phần khác chỉnh sửa thành phần có sẵn Mơ hình thành phần CORBA mơ hình mà chúng tơi nghiên cứu ứng dụng việc xây dựng cơng cụ hỗ trợ Ngồi khóa luận cịn vào xây dựng công cụ đặc tả kiếm chứng hỗ trợ người dùng kiểm tra phù hợp thành phần kết nối với cách trực quan Cơng cụ có áp dụng cơng nghệ mơ hình Model – View – Controller (M-V-C) [6] sử dụng thư viện layer lập trình java game, dễ dàng cho việc lập trình công cụ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC Mở đầu .1 CHƯƠNG Tính đắn, tính tin cậy phần mềm .3 1.1 Một số chế mang lại tính đắn 1.2 Biểu diễn đặc tả .4 1.2.1 Những cơng thức tính đắn 1.2.2 Những điều kiện yếu, mạnh 1.3 Giao ước cho tính tin cậy phần mềm 1.3.1 Quyền lợi 1.3.2 Nghĩa vụ .8 CHƯƠNG Giới thiệu Design by Contract .9 2.1 Giới thiệu .9 2.2 Khái niệm hợp đồng .10 2.3 Tiền điều kiện, hậu điều kiện tính bất biến .11 2.3.1 Tiền điều kiện hậu điều kiện 11 2.3.2 Tính bất biến .12 2.4 Design By Contract Eiffel 12 2.4.1 Biểu diễn Design by Contract Eiffel 13 2.4.2 Ví dụ minh họa 14 CHƯƠNG Mơ hình thành phần CORBA 16 3.1 Khái niệm công nghệ phần mềm hướng thành phần 16 3.1.1 Giới thiệu 16 3.1.2 Thành phần 17 3.1.3 Đối tượng thành phần 17 3.1.4 Giao diện 18 3.1.5 Hợp đồng 19 3.1.6 Khuôn mẫu 21 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 3.1.7 Frameworks 21 3.1.8 Frameworks thành phần 22 3.2 Khái niệm CORBA .22 3.2.1 Giới thiệu 22 3.2.2 Ngôn ngữ đặc tả giao tiếp IDL 23 3.3 Mơ hình thành phần CORBA 25 3.3.1 Giao diện nối ghép 25 3.3.2 Đặc tả CCM ngôn ngữ IDL 27 3.3.2.1 Thành phần .27 3.3.2.2 Facets 27 3.3.2.3 Receptacles .28 3.3.2.4 Event Sources 28 3.3.2.5 Event Sinks .30 3.3.3 Điều kiện kết nối .30 CHƯƠNG Xây dựng công cụ đặc tả kiểm chứng thành phần 31 4.1 Mô tả công cụ .31 4.2 Ngôn ngữ phát triển công cụ .31 4.3 Phân tích cơng cụ đặc tả kiểm chứng thành phần 31 4.3.1 Mô tả công cụ .31 4.3.2 Mơ hình hoạt động 32 4.3.3 Thiết kế lớp đối tượng 32 4.3.3.1 Sơ đồ tương tác đối tượng 33 4.3.3.2 Mô tả chi tiết lớp đối tượng .35 4.4 Triển khai .37 4.5 Thử nghiệm 37 4.5.1 Bài toán 37 4.5.2 Giao diện khởi động chương trình .40 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4.5.3 Giao diện làm việc với thành phần 41 4.5.4 Giao diện làm việc với cổng 42 4.5.5 Giao diện sau kiểm chứng kết nối thành phần 45 Kết luận 47 Hướng phát triển .48 Tài liệu tham khảo 49 Phụ lục 50 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC HÌNH VẼ Hình 1: Giao diện thành phần CORBA cổng 26 Hình 2: Mơ hình MVC .32 Hình 3: Sơ đồ lớp thể mối liên hệ đối tượng ứng dụng 34 Hình 4: Sơ đồ lớp thể mối quan hệ kế thừa cổng 34 Hình 5: Lớp Component 35 Hình 6: Lớp port 35 Hình 7: Lớp canvaspanel 36 Hình 8: Lớp Contract 37 Hình 9: Kiến trúc CCM hệ thống Stock Quoter 38 Hình 10: Giao diện thành phần CORBA cổng 38 Hình 11: Giao diện khởi động ứng dụng 40 Hình 12: Giao diện điền thông tin thêm thành phần 41 Hình 13: Giao diện kết sau thêm thành phần thành công 42 Hình 14: Giao diện điền thơng tin thêm cổng .43 Hình 15: Giao diện kết thêm cổng thành công 44 Hình 16: Giao diện kết nối thành công cổng 45 Hình 17: Giao diện kết nối không thành công cổng 46 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC BẢNG BIỂU Bảng 1: Hợp đồng hãng hàng không khành hàng 10 Bảng 2: Hợp đồng chèn từ vào từ điển 11 Bảng 3: Bảng ánh xạ từ IDL sang java .24 Bảng 4: Các lớp đối tượng ứng dụng 33 Bảng 5: Chi tiết lớp component 35 Bảng 6: Chi tiết lớp port 36 Bảng 7: Chi tiết lớp canvaspanel 36 Bảng 8: Chi tiết lớp Contract .37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC CƠNG THỨC Cơng thức 1: Cơng thức tính đắn .4 Công thức 2: Tiền điều kiện mạnh, hậu điều kiện không cần phải quan tâm .5 Công thức 3: Hậu điều kiện mạnh, tiền điều kiện không cần phải quan tâm Công thức 4: Điều kiện bất biến cơng thức tính đắn 12 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Bảng 6: Chi tiết lớp port STT Thuộc tính Kiểu liệu Phạm vi 01 idComponent int private 02 name string private Tên cổng private Loại cổng Có thể facets, receptacles, event sinks event sources 03 type int Mô tả Mã thành phần mà cổng nằm Lớp canvaspanel Hình 7: Lớp canvaspanel Bảng 7: Chi tiết lớp canvaspanel STT Thuộc tính Kiểu liệu Phạm vi Mô tả 01 label JLabel private Dùng để vẽ ảnh thành phần, cổng 02 images images private Load ảnh thành phần cổng 03 contract Contract private Kiểm tra điều kiện kết nối cổng thành phần 36 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lớp Contract Hình 8: Lớp Contract Bảng 8: Chi tiết lớp Contract STT Thuộc tính Kiểu liệu Phạm vi Mơ tả 01 namePort1 String private Tên cổng thứ 02 namePort2 String private Tên cổng thứ 4.4 Triển khai Ứng dụng phát triển ngôn ngữ Java nên cần phải cài đặt JDK trước chạy chương trình - Tải jdk địa chỉ: http://java.sun.com/javase/downloads/widget/jdk6.jsp - Chọn hệ điều hành tương ứng click vào nút download - Bắt đầu chạy ứng dụng 4.5 Thử nghiệm 4.5.1 Bài tốn Giả sử có hệ thống Stock Quoter (Hình 9) [5] Đây hệ thống phức tạp với nhiều thành phần kết nối với 37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 9: Kiến trúc CCM hệ thống Stock Quoter Để giới thiệu công cụ cách dễ hiểu với người đọc, tiếp cận với hệ thống đơn giản trước Hệ thống Stock Quoter đơn giản gồm thành phần với cổng notifier_out, notifier_in, quoter_info_out, quoter_info_in (Hình 10) [12] Hình 10: Giao diện thành phần CORBA cổng Hình vẽ minh họa hệ thống Stock Quoter cách sử dụng mơ hình thành phần CORBA Thành phần Stock Distributor biểu diễn hệ sở liệu chứng khoán thời gian thực Khi giá trị cổ phiếu thay đổi, đẩy eventype có chứa tên cổ phiếu thông qua cổng event source (notifier_out) đến cổng event sink (notifier_in) tương ứng nhiều thành phần Stock Broker khác Nếu thành phần StockBroker cần thông tin khác cổ phiếu, chúng u cầu hành động thơng qua cổng receptacle (quoter_info_in) thành phần StockBroker đến cổng facets (quoter_info_out) thành phần StockDistributor 38 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Dưới thực thi thành phần StockBroker StockDistributor Các cổng định nghĩa sau: component StockBroker { consumesStockName notifier_in; usesStockQuoter quoter_info_in; }; component StockDistributor supports Trigger { publishesStockName notifier_out; providesStockQuoter quoter_info_out; attributelong notification_rate; }; Thành phần StockBroker chứa hai cổng tương ứng với hai chức mà thực Một eventtype gọi notifier_in tiếp nhận thông tin từ thành phần StockDistributor giá trị cổ phiếu thay đổi Ở hình trên, cổng notifier_in kết nối với cổng notifier_out thành phần StockDistributor kiến trúc CCM triển khai cấu hình cơng cụ ứng dụng thực Nó sử dụng giao diện StockQuoter cung cấp thành phần StockDistributor mà báo cáo thông tin cổ phiếu giá cổ phiếu tăng hay giảm hay giá trị giao dịch cổ phiếu ngày Thành phần StockDistributor xuất eventtype gọi notifier_out để đẩy thông tin thành phần StockBroker mà giá trị cổ phiếu thay đổi Ngoài ra, cịng định nghĩa cổng facet gọi quoter_info_out chứa thơng tin thêm cổ phiếu cụ thể Tiếp theo, thành phần định nghĩa thuộc tính attribute có tên notification_rate mà quản trị hệ thống sử dụng để kiểm soát tốc độ thành phần StockDistributor, sở liệu bảng giá cổ phiếu đẩy thay đổi cho thành phần StockBroker để người dùng theo dõi trực tiếp Sau q trình phân tích, thiết kế, lập trình kiểm thử chúng tơi xây dựng (mặc dù chưa hoàn thiện) ứng dụng đặc tả kiểm chứng Dưới số giao diện ứng dụng 39 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4.5.2 Giao diện khởi động chương trình Hình 11: Giao diện khởi động ứng dụng Giao diện khởi động chương trình bao gồm menu File, Edit, View… Thanh công cụ dùng để thêm thành phần cổng bên trái chương trình Bên phải panel thể hình vẽ mà người dùng vẽ Ở khung hiển thị bước làm người dùng Thông báo kết cổng thành phần có kết nối hay khơng 40 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4.5.3 Giao diện làm việc với thành phần Hình 12: Giao diện điền thông tin thêm thành phần Khi chọn nút vẽ thành phần, giao diện để điền thông tin cho component khởi tạo Người dùng điền tên thành phần vào khung Name, sau chọn OK để hồn thành Nếu khơng cần tạo thành phần click vào nút Cancel để bỏ qua Sau tạo thành cơng, mơ hình thành phần thể hình vẽ 13 Dưới thành phần đặt tên Stock Distributor, Stock Broker 41 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 13: Giao diện kết sau thêm thành phần thành công 4.5.4 Giao diện làm việc với cổng Sau tạo thành công thành phần, người dùng tạo cổng cho thành phần cách click vào nút khởi tạo cổng công cụ bên tay trái cửa sổ Sau chọn vị trí cho cổng thành phần, giao diện điền thơng tin cho cổng lên, bao gồm tên cổng, tên kiểu, tên kiểu cha có kế thừa (Hình 14) 42 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 14: Giao diện điền thông tin thêm cổng 43 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 15: Giao diện kết thêm cổng thành cơng Sau tạo cổng thành cơng, hình lên sau (Hình 15) Ở đây, cổng có tên là: notifier_out, quoter_info_out… tạo Stock Distributor Các cổng notifier_in quoter_info_in tạo Stock Broker 44 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4.5.5 Giao diện sau kiểm chứng kết nối thành phần Hình 16: Giao diện kết nối thành công cổng Sau tạo thành phần cổng thành cơng Người dùng kết nối cổng thành phần với để kiểm tra cách click vào biểu tượng kết nối công cụ, click chuột vào cổng thứ di đến cổng thứ hai cổng cần kết nối Sau kết nối, chương trình kiểm tra đặc tả cổng mà người dùng điền kiểm tra với điều kiện kết nối Nếu thỏa mãn, kết nối thành công thể hình 16 Trái lại, khơng thành cơng, chương trình lên bảng thơng báo hình 17 (Xem lại điều kiện kết nối phần 3.3.3 trang 30) 45 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 17: Giao diện kết nối khơng thành công cổng 46 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kết luận Qua trình nghiên cứu thực khố luận, chúng tơi nhận thấy đạt số kết sau: - Nắm bắt rõ tảng cần thiết để nhìn gần hệ thống phần mềm đắn bền vững Nói cách dễ hiểu, phần mềm đắn phần mềm có lỗi xử lý lỗi bất thường xảy phần mềm lúc làm việc Như thế, phần mềm có khả tồn lâu dài với thời gian người dùng ưa chuộng - Hiểu rõ công nghệ Design ByContract khả ứng dụng lập trình hướng đối tượng Một hệ thống phần mềm xem tập hợp thành phần có giao tiếp tương tác với dựa định nghĩa xác giao ước hợp đồng Phải thỏa mãn giao ước thành phần liên kết với để tạo nên xác, tính đắn cho phần mềm Ngồi ra, cơng nghê cịn cung cấp cơng cụ tốt cho việc viết tài liệu phát triển cho phần mềm, dễ dàng phát gỡ lỗi - Xây dựng công cụ đặc tả kiếm chứng cho liên kết thành phần ngôn ngữ Java Khi sử dụng ứng dụng này, cách trực quan, người dùng nhanh chóng vẽ thành phần với cổng - Ngồi chúng tơi trình bày số khía cạnh đặc tả thành phần, vạch phương pháp tiếp cận với cách giao tiếp thành phần dựa loại cổng kết nối Chúng xác định ràng buộc cổng, nhờ đó, biết thành phần kết nối với chúng đáp ứng yêu cầu mà nêu Ở mức độ này, nghiên cứu đến loại cổng (facet, receptacle, event source, event sink) ràng buộc loại cổng Chúng xác minh điều kiện kết nối loại cổng tích hợp chúng với để hỗ trợ cho phương pháp tiếp cận Điều ủng hộ việc xác minh tính tương thích thành phần đặc tả hành vi mức độ ngữ nghĩa 47 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hướng phát triển Trong thời gian tới, tiến hành kiểm tra thành phần cấu tạo hành vi cổng kết nối thành công loại cổng Sau chúng tơi nâng cấp ứng dụng để hỗ trợ tốt việc đặc tả kiểm chứng cho công đoạn kết nối thành phần phần mềm hướng thành phần 48 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tài liệu tham khảo Tài liệu tham khảo tiếng Việt [1] Nguyễn Thanh Bình - Đặng Thị Lệ Thu Giải pháp nâng cao chất lượng phần mềm hướng đối tượng Tạp chí khoa học cơng nghệ, Đại học Đà Nẵng Số 5(28).2008 Tài liệu tham khảo tiếng Anh [2] A M Zaremski and J M Wing Specification matching of software components 333–369, 1997 [3] B Meyer Design By Contract, in Advances in Object-Oriented Software Engineering Prentice Hall 1991 [4] B Meyer Eiffel: The Language Prentice Hall 1992 [5] Bala Natarajan, Douglas C Schmidt, and Steve Vinoski The CORBA Component Model http://www.drdobbs.com/cpp/184403888 September 01, 2004 [6] Boodhoo, Jean-Paul Design Patterns: Model View Controller Retrieved 2009-0707 [7] C.A.R Hoare An axiomatic basis for computer programming Communications of the ACM 1969 [8] Ivica Crnkovic - Magnus Larsson Building Reliable Component-Based Software Systems Artech house, Inc 2002 tr.3-18 tr.73-76 [9] Frank Pilhofer Writing and Using CORBA Components Technology report, FPX 04/2002 [10] Jeremy Rosenberger Teach Yourself CORBA In 14 Days [11] Jonas Bergström Design By Contract for Java http://c4j.sourceforge.net/ [12] Tran Thi Mai Thuong - Vo Van Thanh - Truong Ninh Thuan Checking the conformability in CORBA component model specifications Journal of Science, Natural Sciences and Technology 2008 [13] Yi Liu - H Conrad Cunningham Software Component Specification Using Design by Contract National Defense Industry Association 04/2002 49 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục (Hướng dẫn sử dụng chương trình) Sau cài đặt mơi trường jre cho java Người dùng click vào file chạy chương trình để chạy cơng cụ (Hình 11) Đầu tiên để vẽ thành phần, người dùng click vào nút có biểu tượng sau di chuột sang hình bên phải để vẽ Chương trình lên bảng địi người dùng phải điền đầy đủ thơng tin cho thành phần Sau hoàn thành thao tác, click vào nút ok để vẽ click vào nút cancel để bỏ qua khơng vẽ Để vẽ cổng cho thành phần, người dùng click vào nút có biểu tượng , , , , tương ứng với cổng attribute, facet, receptacle, event source, event sinks Chú ý, cổng nằm thành phần nên vẽ, người dùng phải click vào phạm vi bên thành phần, khơng có thơng báo lỗi ngăn cấm việc vẽ cổng Chương trình lên khung bắt buộc người dùng điền thông tin cho cổng Khung thơng tin bao gồm điển tên cổng, kiểu cổng, tủy chọn xem kiểu cổng có kế thừa kiểu khác cổng khác hay khơng Sau hồn thành thao tác, người dùng click vào ok để vẽ cổng click vào cancel để bỏ qua không vẽ cổng Sau vẽ xong thành phần cổng, người dùng click vào nút có biểu tượng để tiến hành kết nối cổng thành phần Người dùng click chuột vào cổng giữ lỳ chuột, di đến cổng thứ cần kết nối, sau thả chuột Chương trình kiểm tra điều kiện kết nối (xem lại mục 3.3.3) Nếu không thỏa điều kiện nên trên, có bảng thông báo kết nối không thành công kèm theo lỗi xảy điều kiện Sau người dùng xác nhận, phần kết nối tự động xóa Ngồi người dùng dùng thêm số chức phụ tạo đặc tả cách vào menu File → New Nếu người dùng kết nối sai cổng (nhưng thỏa mãn điều kiện) sử dụng chức undo redo cách vào menu Edit → Undo Edit → Redo 50 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... tơi nghiên cứu ứng dụng việc xây dựng cơng cụ hỗ trợ Ngồi khóa luận cịn vào xây dựng cơng cụ đặc tả kiếm chứng hỗ trợ người dùng kiểm tra phù hợp thành phần kết nối với cách trực quan Công cụ. .. thành phần liên kết với Song song với việc nghiên cứu công nghệ thiết kế theo hợp đồng, nghiên cứu sâu ngơn ngữ java, mơ hình thiết kế Model – View – Controller (M-V-C) xây dựng công cụ đặc tả, kiếm...ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Thế Nam NGHIÊN CỨU THIẾT KẾ THEO HỢP ĐỒNG VÀ XÂY DỰNG CƠNG CỤ HỖ TRỢ KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Chun ngành: