Phần mềm ngày càng được xây dựng và phát triển mạnh mẽ. Phần mềm
được tạo ra phải đảm bảo chất lượng. Kiểm chứng phần mềm là một trong
những giai đoạn quan trọng trong quy trình sản xuất phần mềm. Kiểm chứng
động phần mềm nhằm phát hiện và tìm lỗi trong giai đoạn kiểm thử phần mềm.
Phương pháp lập trình hướng khía cạnh (Aspect Oriented programming - AOP)
cùng với công nghệ AspectJra đời tạo ra hướng phát triển mới cho kiểm chứng
phần mềm, nâng cao khả năng tìm và sửa lỗi phần mềm mà không ảnh hưởng
đến mã nguồn hệ thống. Từ yêu cầu thực tế, khi mô hình UML đang là sự lựa
chọn phổ biến cho mô hình hóa hệ thống phần mềm ở giai đoạn thiết kế, việc
kiểm chứng các ràng buộc giữa các tương tác trong biểu đồ trình tự UML là rất
cần thiết. Cùng với yêu cầu thực tế đề ra và lựa chọn AOP là giải pháp giải
quyết vấn đề, trong phạm vi khóa luận, tôi xin trình bày phương pháp sinh mã
AspectJtự động phục vụ cho việc kiểm chứng phần mềm với công cụ là plugin
CreateAspect tự động sinh mã AspectJdựa trên phương pháp này. Nội dung
chính của phương pháp này dựa trên các kiến thức về AOP, UML, XML,
ANNOTATIONS để chuyển đổi các giao thức ràng buộc đối tượng đặc tả bời
biểu đồ UML sang modun aspect phục vụ cho việc kiểm chứng. Ý nghĩa thực
tiễn là việc sinh ra mã aspect sẽ đan xen vào chương chình thực hiện việc kiểm
chứng các ràng buộc giữa các đối tượng trong thời gian chạy.
56 trang |
Chia sẻ: nhungnt | Lượt xem: 2012 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Kiểm chứng cài đặt biểu đồ tương tác với uml 2.0, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Vương Văn Trường
KIỂM CHỨNG CÀI ĐẶT BIỂU ĐỒ TƯƠNG TÁC
VỚI UML 2.0
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ phần mềm
HÀ NỘI - 2010
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Vương Văn Trường
KIỂM CHỨNG CÀI ĐẶT BIỂU ĐỒ TƯƠNG TÁC
VỚI UML 2.0
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ phần mềm
Cán bộ hướng dẫn: TS Trương Anh Hoàng
Cán bộ đồng hướng dẫn: ThS Phạm Thị Kim Dung
HÀ NỘI - 2010
Lời cảm ơn
Trước tiên tôi xin gửi lời cảm ơn chân thành tới TS.Trương Anh Hoàng, Bộ
môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường Đại học Công nghệ,
Đại học Quốc Gia Hà Nôi – người đã định hướng đề tài và tận tình hướng dẫn chỉ bảo
tôi trong suốt quá trình thực hiện khóa luận tốt nghiệp này.
Tôi cũng xin chân thành cảm ơn ThS Phạm Thị Kim Dung, Bộ môn Công nghệ phần
mềm, Khoa Công nghệ thông tin, Trường Đại học Công nghệ, Đại học Quốc Gia Hà
Nội – Người đồng hướng dẫn và chỉ bảo tôi trong quá trình thực hiện khóa luận của
này.
Tôi cũng xin trân trọng cảm ơn quý thầy cô trong Khoa Công nghệ thông tin, Trường
Đại học Công nghệ, Đại học Quốc Gia Hà Nội đã tận tình giảng dạy, truyền đạt kiến
thức quý báu trong suốt bốn năm học làm nền tảng cho tôi thực hiện khóa luận tốt
nghiệp này.
Con xin cảm ơn cha mẹ và gia đình đã sinh ra và nuôi dạy con khôn lớn, luôn
cạnh động viên và ủng hộ con trên con đường mà con đã yêu thích và lựa chọn.
Cảm ơn các bạn sinh viên Khoa Công nghệ thông tin khóa 2006 – 2010. Các
bạn giúp đỡ và ủng hộ tôi rất nhiều cũng như đóng góp nhiều ý kiến quý báu, qua đó,
tôi hoàn thiện khóa luận tốt hơn.
Mặc dù đã rất nỗ lực, cố gắng nhưng chắc hẳn khóa luận của tôi vẫn còn nhiều
sót. Tôi rất mong nhận được nhiều những ý kiến đánh giá, phê bình của quý thầy của
các anh chị và các bạn.
Một lần nữa, tôi xin chân thành cảm ơn.
Hà Nội, tháng 5 năm 2010
Vương Văn Trường
Tóm tắt
Phần mềm ngày càng được xây dựng và phát triển mạnh mẽ. Phần mềm
được tạo ra phải đảm bảo chất lượng. Kiểm chứng phần mềm là một trong
những giai đoạn quan trọng trong quy trình sản xuất phần mềm. Kiểm chứng
động phần mềm nhằm phát hiện và tìm lỗi trong giai đoạn kiểm thử phần mềm.
Phương pháp lập trình hướng khía cạnh ( Aspect Oriented programming - AOP)
cùng với công nghệ AspectJ ra đời tạo ra hướng phát triển mới cho kiểm chứng
phần mềm, nâng cao khả năng tìm và sửa lỗi phần mềm mà không ảnh hưởng
đến mã nguồn hệ thống. Từ yêu cầu thực tế, khi mô hình UML đang là sự lựa
chọn phổ biến cho mô hình hóa hệ thống phần mềm ở giai đoạn thiết kế, việc
kiểm chứng các ràng buộc giữa các tương tác trong biểu đồ trình tự UML là rất
cần thiết. Cùng với yêu cầu thực tế đề ra và lựa chọn AOP là giải pháp giải
quyết vấn đề, trong phạm vi khóa luận, tôi xin trình bày phương pháp sinh mã
AspectJ tự động phục vụ cho việc kiểm chứng phần mềm với công cụ là plugin
Create Aspect tự động sinh mã AspectJ dựa trên phương pháp này. Nội dung
chính của phương pháp này dựa trên các kiến thức về AOP, UML, XML,
ANNOTATIONS để chuyển đổi các giao thức ràng buộc đối tượng đặc tả bời
biểu đồ UML sang modun aspect phục vụ cho việc kiểm chứng. Ý nghĩa thực
tiễn là việc sinh ra mã aspect sẽ đan xen vào chương chình thực hiện việc kiểm
chứng các ràng buộc giữa các đối tượng trong thời gian chạy.
Mục lục
Chương 1. Mở đầu .......................................................................................................................... 1
1.1. Đặt vấn đề ............................................................................................................................. 1
1.2. Nội dung bài toán .................................................................................................................. 2
1.3. Tổng quan phương pháp “kiểm chứng cài đặt biểu đồ tương tác với UML 2.0” ...................... 2
1.4 . Cấu trúc khóa luận................................................................................................................ 4
Chương 2. Annotaions , Aspects và UML 2.0................................................................................... 5
2.1. Annotations ........................................................................................................................... 5
2.1.1. Khái niệm annotaions ..................................................................................................... 5
2.1.2. Ưu điểm của annotations................................................................................................. 5
2.1.3. Cấu trúc annotaions ........................................................................................................ 6
2.1.4. Target annotions ............................................................................................................. 6
2.2. Aspect ................................................................................................................................... 7
2.2.1. Lập trình hướng khía cạnh AOP ..................................................................................... 7
2.2.2. AspectJ ........................................................................................................................... 9
2.3. UML 2.0 ..............................................................................................................................10
2.3.1. khai niệm về UML.........................................................................................................10
2.3.2. Biểu đồ trình tự UML ....................................................................................................11
2.4. Xây dựng máy trạng thái từ biểu đồ trình tự ..........................................................................16
2.4.1. Cấu trúc dữ liệu mô tả biểu đồ trình tự ..........................................................................16
2.4.2. Xây dựng máy trạng thái(FSM)......................................................................................18
2.5. Tổng kết chương ..................................................................................................................19
Chương 3 . Xây dựng cộng cụ tự động sinh Aspect từ máy trạng thái ...........................................20
3.1. Biểu đồ trình tự và các đoạn gộp...........................................................................................20
3.2. Sinh Aspect từ biêu đồ trình tự ............................................................................................21
3.3. Kết luận................................................................................................................................23
Chương 4. Thực nghiệm.................................................................................................................24
4.1. Xây dựng công cụ.................................................................................................................24
4.2. Kiểm chứng một số giao thức thực tế....................................................................................27
4.2.1. Kiểm chứng biểu đồ truy cập thông tin cơ bản của một máy ATM .................................27
4.2.2. Kiểm chứng biểu đồ loop ...............................................................................................32
4.2.3. Kiểm chứng biểu đồ tổng quát .......................................................................................36
4.3. Kết luận................................................................................................................................44
Chương 5. Kết luận ........................................................................................................................45
Phụ lục .............................................................................................................................................47
Phụ lục A : Tài liệu XMI mô tả biểu đồ trình tự.............................................................................47
Danh mục các ký hiệu, từ viết tắt
Từ viết tắc Diễn giải
AOP Aspect-Oriented Programming
FSM Finie State Machine
OOP Object Oriented Programming
XML eXtensible Markup Language
XMI XML Metadata Interchange
UML Unified Modeling language
1
Chương 1. Mở đầu
1.1. Đặt vấn đề
Ngày nay công nghệ thông tin đã được ứng dụng vào tất cả các lĩnh vực trong
đời sống xã hội, từ những ứng dụng đơn giản nhất đến các ứng dụng phức tạp, từ
những ứng dụng gia đình đến các ứng dụng cho các tổ chức lớn đều có mặt các sản
phẩm công nghệ thông tin. Có thể nói nó đã làm thay đổi diện mạo xã hội, đưa nền văn
minh nhân loại lên một tầng cao mới. Một phần quan trọng của Công nghệ thông tin là
Công nghệ phần mềm….. Cùng với sự phát triển vượt bậc của các công nghệ phần
cứng đã hỗ trợ cho Công nghệ phần mềm phát triển mạnh mẽ.
Hiện nay, phần mềm được coi là sản phẩm chính của công nghệ thông tin, quá
trình làm phần mềm thông thường được trải qua quy trình nghiêm ngặt. Quy trình này
được chia ra làm nhiều giai đoạn : thu thập yêu cầu, phân tích, thiết kế, xây dựng,
kiểm tra., triển khai và bảo trì phần mềm. Đối với phần mềm, việc đảm bảo chất lưng
của phần mềm là vô cùng quan trọng. Do đó, vấn đề đặt ra là phải kiểm tra, xác định
và sửa được các lỗi phát sinh trong quá trình sản xuất phần mềm, đó là công việc của
giai đoạn kiểm tra. Việc phát hiện lỗi phần mềm càng muộn thì gây hậu quả càng lớn,
tốn nhiều thời gian và công sức sửa lỗi, thậm chí có thể phải xây dựng lại toàn bộ hệ
thống từ đầu, có khi gây thất bại cho toàn dự án phần mềm. Chính vì vậy các phương
pháp phát hiện lỗi sớm để giảm thiểu công sức để sửa chúng ra đời. Để phát hiện hiện
những lỗi phần mềm, phần mềm phải được kiểm chứng(Verification) và thẩm
định(Valication)[5]. Kiểm chứng phần mềm là kiểm tra xem phần mếm có thiết kế
đúng và thực thi đúng như đặc tả không yêu cầu không. Thẩm định phần mềm là giai
đoạn có sự hỗ trợ của khách hàng nhằm kiểm tra xem phần mềm có đáp ứng được yêu
cầu của họ không.
Mục đính chính của kiểm chứng phần mềm là làm giảm thiểu số lỗi mà phần
mềm có thể gặp đến mức thấp nhất có thể chấp nhận được. Chính vì vậy, nó có vai trò
vô cùng quan trọng trong toàn bộ quy trình phát triển phần mềm cũng như trong ngành
phát triển phần mềm hiện nay. Nó thu hút được mối quan tâm của nhiều nhà nghiên
cứu.
2
Giai đoạn kiểm thử có mục đích kiểm tra tính đúng đắn của sản phầm phần
mềm, kiểm tra xem có đáp ứng được nhu cầu bài toán đặt ra không. Trong thực tế, các
thao tác kiểm thử đơn vị thông thường dựa vào một tập các ca kiểm thử đầu vào và các
đầu ra tương ứng. Do vậy, chỉ kiểm tra được tính đúng sai của đầu vào và đầu ra của
chương trình, không kiểm tra được quá trình hoạt động cuả chương trình có theo đúng
đặc tả ban đầu hay không. Việc không kiểm hợp chúng thành chương trình lớn.
1.2. Nội dung bài toán
Kiểm chứng phần mềm là một phần vô cùng quan trọng trong quá trình phát
triển phần mềm. Vì vậy có rất nhiều phương pháp kiểm chứng phần mềm được xây
dựng như giả lập hay kiểm chứng mô hình. Trong giới hạn khóa luận này, tôi muốn đề
cập đến phương pháp kiểm chứng phần mền dựa trên phương pháp lập trình hướng
khía cạnh(AOP). Cụ thể trong phạm vi bài toán là kiểm chứng đặc tả hoạt động của
các đối tượng trong Java và kiểm tra các tác tử trong thời gian chạy.
Trong cách tiếp cận này, một ứng dụng hướng đối tượng được đặc tả bằng mô
hình UML và được cài đặt bằng ngôn ngữ Java: Sau khi Aspect được sinh ra, chúng sẽ
được đan xen vào mã Java để kiểm tra trong thời gian chạy. Bài toán có nhiệm vụ tạ ra
các Aspect từ biều đồ tuần tự , và dùng AspectJ để đan các Aspect này vào khung
chương trình chính. Khi chạy chương trình, các Aspect này sẽ tự động kiểm tra các
đặc tả giao thức và đưa ra các thông báo lỗi nếu có bất kỳ sự vi phạm nào.
Nhiệm vụ chính của bài toán là xây dựng phương pháp tạo ra các đoạn mã Aspect để
kiểm chứng và xây dựng công cụ Plugin Protocol Verification Generator tự động
sinh ra Aspect kiểm chứng đặc tả giao thức bằng biểu đồ tuần tự UML.
1.3. Tổng quan phương pháp “kiểm chứng cài đặt biểu đồ tương tác với UML 2.0”
Trong khóa luận “KIỂM CHỨNG ĐẶC TẢ UML CHO TÁC TỬ PHẦM
MỀM”[2] đã trình bày phương pháp kiểm chứng đặc tả UML cho tác tử phần mềm,
khóa luận đã đưa ra phương pháp pháp phân tích và kiểm chứng cho một số giao thức
(AB)n và [A*B]n .Nhưng trong khóa luận đó, chưa giải quyết được một số vấn đề như:
- Mới chỉ dừng ở kiểm tra một số giao thức đơn giản.
- Chỉ có thể kiểm tra cho các biểu đồ thường, hoặc biểu đồ theo Agent UML.
Đối với, các giao thức được mô tả bằng UML 2 trở lên thì công cụ không thể
thực hiện được.
3
- Việc tự động sinh Aspect chưa thực sự hoàn thiện. Aspect được sinh ra sau đó
được lưu lại. Để sử dụng Aspect này thì phải đưa nó vào trong project cần thiết.
- Aspect sinh ra có phạm vi trong toàn project. Tức là, bất kỳ lớp nào có một
phương thức được mô tả như ở trong pointcut thì đều chịu tác dụng của Aspect.
Điều này, nhiều khi gây nên lỗi.
- Tài liệu XMI đầu vào của công cụ đã được thu gọn chỉ chứa các thành phần
cần thiết.
Phát triển từ khóa luận trên, tôi đã giải quyết được các vấn đề trên. Aspect được
sinh ra trực tiếp gắn vào project cùng tên với file xmi. Giao thức được kiểm chứng đa
dạng. Được thiết kế theo UML 2.0, Các điều kiện lặp, lựa chọn sử dụng mô tả đoạn
gộp như đoạn gộp alt, loop. Aspect sinh ra có thể đảm bảo sự kiểm tra cho một phương
thức được người dùng đánh dấu.
Do sự khác nhau giữa cách mô tả UML 2.0 và trước đây, nên cấu trúc để lưu
giữ cũng như Aspect sinh ra cũng khác nhiều so với ở công cụ PVG. Phát triển từ công
cụ PVG nhưng tôi đã thay đổi nhiều để phù hợp với đặc tả giao thức bằng UML2.0.
Bài toán bắt đầu với đầu vào là một biểu đổ tuần tự UML 2.0, các biểu đồ này
được tạo ra bằng công cụ Altova Umodel 2010 hoặc Altova Umodel 2010 plugin, các
biểu đồ này sẽ được xuất ra dưới dạng XMI. Sau đó, lấy các thông tin cần thiết về các
đối tượng của biểu đồ và chuyển thành một máy trạng thái (FSM). Lập trình viên sẽ
phát triển các mô-đun nghiệp vụ chính từ biểu đồ này và các biểu đồ còn lại. Song
song với nó là quá trình xây dựng Aspect từ máy trạng thái. Bài báo “Checking
Interface Interaction Protocols Using Aspect-Oriented Programming”[3] đã xây dựng
phương pháp kiểm chứng giao thức sử dụng AOP. Dựa vào bài báo này tôi xây dựng
công cụ tự động sinh Aspect với đầu vào là tài liệu XMI mô tả biểu đồ tuần tự UML
2.0. Phương pháp xây dựng công cụ Plugin Protocol Verification Generator(PPVG
của tôi gồm hai bước.
Bước 1 : Phân tích tài liệu XMI, lấy thông tin cần thiết để xây dựng máy trạng
thái.
Bước 2 : Xây dựng bộ tự động sinh Aspect từ FSM : Sử dụng FSM vừa được
sinh ra từ trên, duyệt từng trạng thái trong FSM, áp dụng phương pháp cài đặt
Aspect trong bài báo nói trên, tôi tạo ra các join-point, pointcut và advice từ các
trạng thái đó để hình thành nên mô-đun Aspect.
4
1.4 . Cấu trúc khóa luận
Các phần còn lại của khóa luận được cấu trúc như sau:
Chương 2 giới thiệu về annotations, AspectJ, AOP , UML 2, xây dựng máy trạng thái.
Trong chương này tôi trình bày các kiến thức cơ bản sử dụng trong khóa luận của tôi
và cách xây dựng máy trạng thái cơ bản.
Chương 3 xây dựng công cụ sinh Aspect từ máy trạng thái mô tả biểu đồ trình tự
UML.
Chương 4 cài đặt công cụ tự động sinh Aspect và tiến hành kiểm chứng một số giao
thức.
Chương 5 đưa ra các kết luận của khóa luận và hướng nghiên cứu tương lai.
5
Chương 2. Annotaions , Aspects và UML 2.0
2.1. Annotations
Có lẽ các khái niệm về Annotations hiện nay được nhiều người biết đến, vì vậy
ở đây tôi sẽ trình bày ngắn gọn các khái niệm cơ bản và đặc điểm chính của của
Annotations.
2.1.1. Khái niệm annotaions
Annotations1 trước tiên được hiểu là một dạng metadata. Metadata là đặc tả dữ
liệu cho một đối tượng, giá trị gì đó. Chẳng hạn các tập tin mp3, ảnh, hoặc một bài viết
có thể có metadata định dạng XML là RSS. Đặc tả dữ liệu là một tập giá trị chứa
những thông tin gắn gọn, cơ bản mô tả về đối tượng nào đó. Chẳng hạn, với một bài
hát thì metadata có thể bao gồm: tên ca sĩ trình bày, tên nhạc sĩ, bài hát này hát trong
bao lâu,... Metadata không phải là "siêu dữ liệu" như một số người từng dịch từ tiếng
Anh sang tiếng Việt.
2.1.2. Ưu điểm của annotations
Annotations là một kỹ thuật mới đầy triển vọng, hứa hẹn mang lại nhiều lợi ích
cho việc phát triển phần mềm, dưới đây là một số lợi ích của annotations.
Tường minh: Nhìn vào lớp trên bạn có thể thấy rõ mục đích.
Đơn giản.
Tránh được rất nhiều lỗi trong thời gian chạy: trong lập trình, chúng ta thường
rất sợ lỗi về thời gian chạy. Lỗi được báo ở khâu biên dịch thường ít nguy hiểm và
được giải quyết nhanh chóng bởi lập trình viên nhưng lỗi trong thời gian chạy là
những lỗi khó chịu, khó khăn, mất nhiều thời gian để tìm ra nguyên nhân.
Annotations là một cách để đẩy các lỗi cú pháp trong quá trình cấu hình của khâu
biên dịch. Nghĩa là biên dịch có thể báo nhanh cho lập trình viên một số cấu hình
sai trong lúc dịch. Nếu dùng các phương pháp như lời chú thích, các thuộc tính
hoặc XML thì các lỗi này chỉ được báo trong thời gian chạy bởi chúng đơn thuần
là dữ liệu văn bản.
Ứng dụng chạy nhanh hơn: Việc dùng định dạng như XML chúng ta phải tốn
thời gian, bộ nhớ để chuyển đổi từ XML sang các dạng đối tượng có API để dễ
1
6
tương tác lệnh như DOM hoặc SAX cũng là một trở ngại. Dùng Annotations thì đỡ
đi được rất nhiều.
2.1.3. Cấu trúc annotaions
Một annotations được định nghĩa như sau :
@interface tên_annotations {
// các các thành phần
}
Các thành phần annotations là danh sách các biến số của nó.
Thông thường annotations được dùng như một chú thích cho các thành phần
trong chương trình như class, biến số, phương thức, hoặc có khi là bất kỳ một dòng
lệnh nào. Để ghi chú cho một thành phần nào đó của chương trình thì annotations
được thêm vào trước thành phần đó. Định dạnh như sau :
@tên_annotations() Tên_thành_Phần
Ví dụ: sử dụng annotaions cho phương thức .
@Override
public String toString() {
return super.toString() +"Testing annotation name:
'Override'";
}
Annotations trên định sử dụng nhằm khẳng định phương thức toString được
ghi đè lên phương thức của lớp cha.
2.1.4. Target annotions
Annotations rất đa dạng, có rất nhiều loại annotations, nhưng tôi chỉ đề cập đến
Target annotaions vì đây là annotations mà tôi dùng cho khóa luận. Sau đây, tôi sẽ
trình bày về loại annotaions này.
Target annotations các chú thích kiểu này có đích tới là class. Bao gồm các loại.
@Target(ElementType.TYPE)— Áp dụng cho bất kỳ các yếu tố nào của class
@Target(ElementType.FIELD)—Có thể áp dụng cho các lĩnh vực và các thuộc
tính
7
@Target(ElementType.METHOD)—Có thể áp dụng cho mức độ method
@Target(ElementType.PARAMETER)—Áp dụng cho các thông số của các
methods
@Target(ElementType.CONSTRUCTOR)— Áp dụng cho constructors
@Target(ElementType.LOCAL_VARIABLE)—Áp dụng cho các biến địa
phương
@Target(ElementType.ANNOTATION_TYPE)—Loại hình tuyên bố là một
chú thích
Ví dụ :
@Target(ElementType.METHOD)
public @interface Test_Target {
public String dosomething();
}
Annotations trên được định nghĩa ghi chú cho phương thức, với thành phần
chính là dosomething(). Để sử dụng annotations này thì thêm nó vào trước phương
thức. Ví dụ :
@Test_Target(“test”)
Public void test(){
// do something
}
Đối với annotations dạng này, nếu nó được định nghĩa dùng cho loại đối
tượng nào thì nó chỉ có thể ghi chú cho loại đối tượng đó. Như annotaions ở ví dụ trên,
nó chỉ có thể ghi chú cho đối tượng là một phương thức. Nếu sử dụng nó ghi chú cho
một class hoặc một biến thì sẽ nhận đ