- Quản lý khách hàng
Phạm Văn Tùng Người hướng dẫn: MSV: 04020455 TS Trươ ng Ninh Thu ậ n
Email: matlua@yahoo.com ThS. Trần Thị Mai Thương
1. Giới thiệu
Kĩ nghệ phần mềm hướng thành phần (Component Based Software Engineering - CBSE) ra đời cho phép chúng ta dễ dàng hơn trong việc phát triển một hệ thống phần mềm phức tạp. Trong CBSE việc mô hình hóa các hành vi giữa các thành phần của hệ thống có thể
thực hiện dễ dàng bằng biểu đồ ca sử dụng (Use case map-UCM). Việc kiểm tra tính đúng đắn giữa thứ tự thực thi của chương trình so với đặc tả UCM là một nhiệm vụ quan trọng giúp chúng ta phát hiện các lỗi về sự tuân theo giữa thực thi do người lập trình viết so với bản đặc tả, thiết kế
của phần mềm hướng thành phần, từ đó có thể
làm giảm những rủi ro khi đưa phần mềm vào hoạt động và tăng cường độ tin cậy cho hệ
thống. Chính vì yêu cầu này, tôi đề xuất đề tài nghiên cứu kiểm chứng sự tuân theo giữa chương trình thực thi (cụ thể ở đây là mã Java bytecode) so với đặc tả UCM của chương trình.
2. Cơ sở lý thuyết
2.1. Tổng quát về biểu đồ UCM
Mô hình UCM là một mô hình thiết kế ở
mức cao giúp cho con người thể hiện và giải thích về một mẫu hành vi của các thành phần trong một hệ thống Các phần tử cơ bản trong biểu đồ UCM:
• Đường (Path): Path là một đường cong liên tục xuyên suốt hệ thống. Nó biểu diễn các hành vi của một kịch bản trong hệ thống từ thời điểm bắt cho đến khi kết thúc kịch bản (kết quả của tác nhân).
• Điểm đợi: Điểm đợi là một hình tròn
được tô đen. Thông thường nó biểu diễn điểm bắt đầu của một path hay nói cách khác là tác nhân kích thích.
• Một bộ định thời gian (timer): Nó là tổng quát hóa của điểm đợi, nó dùng để
thể hiện rằng có ràng buộc về mặt thời gian đối với điểm đợi.
• Thanh (bar): Thông thường là một hình chữ nhật dọc tô đen. Một bar dùng
để biểu diễn điểm kết thúc của một path hoặc đánh dấu một điểm là nơi mà các đoạn đường song song bắt đầu hoặc kết thúc.
• Các điểm đáp ứng: là những mô tả tên ngắn gọn của các hành động mang tính cục bộ mà hệ thống cần thực thi.
• Hướng (tùy chọn): Hướng được chỉ rõ bởi vị trí của điểm bắt đầu và điểm kết thúc nhưng thỉnh thoảng nó cũng được dùng để thể hiện hướng cục bộ trong một biểu đồ phức tạp hoặc một phần của một biểu đồ lớn.
2.2. Tổng quan về mã Java bytecode
Ngôn ngữ Java sử dụng kết hợp giữa biên dịch và thông dịch để biên dịch chương trình sang ngôn ngữ máy. Khi bạn viết xong một chương trình java , bạn dùng trình biên dịch để
biên dịch nó sang một ngôn ngữ dành cho một loại máy không tồn tại (người ta gọi là máy ảo Java - Java Virtual Machine). Ngôn ngữ cho máy ảo đó được gọi là Java bytecode. . Java bytecode sẽ tiếp tục được trình thông dịch biên dịch sang ngôn ngữ của chính loại máy đang sử
dụng trình trình thông dịch đó đó. Như vậy về
bản chất bytecode là dạng thể hiện trung gian của chương trình java. Các chỉ lệnh gọi hàm trong mã Java bytecode bao gồm:
• Invokevirtual: Sử dụng để gọi các phương thức của đối tượng. Trước khi phương thức được gọi thì cần tạo đối tượng. Chỉ lệnh sử dụng liên kết động, và chúng ta chỉ biết được tại thời điểm chạy. • Invokestatic: Sử dụng để gọi các phương thức của lớp. Các phương thức này được gọi mà không cần tạo đối tượng. Chỉ lệnh này sử dụng liên kết tĩnh, và chúng ta chỉ biết được tại thời
điểm biên dịch.
• Invokespecial: Sử dụng để gọi một số
khởi tạo, phương thức riêng, và phương
thức với từ khóa là super.
• Invokeinterface: Sử dụng để các phương thức thực thi các giao diện
3. Giải pháp
Từ chương trình gồm các lớp (tương ứng với các component khi đặc tả) sẽ sinh ra mã “Java bytecode” tương ứng. Bằng việc sử dụng các chỉ lệnh “invokestatic, invokevirtual, invokespecial, invokeinterface” trong máy ảo Java ta sẽ xác định được chuỗi các lời gọi phương thức giữa các thành phần được sinh ra bởi chương trình. Bây giờ làm thế nào để kiểm chứng được dãy các phương thức được sinh ra phù hợp với giao thức của đặc tả UCM. Để giải quyết vấn đề này tôi đưa ra giải pháp như sau: Tôi sẽ xây dựng một chương trình giúp từđặc tả
UCM sẽ sinh ra file lưu trữ thông tin về biểu đồ
dưới cấu trúc XML. Sau đó chuỗi các lời gọi hàm do mã Java bytecode sinh ra sẽ được so khớp với đặc tả UCM ở trong file lưu trữ cấu trúc XML. Kết quả là dãy các phương thức
được sinh ra từ mã Java bytecode có đúng theo
đặc tả UCM.
4. Cài đặt
Để minh họa đề xuất hướng tiếp cận trên, chúng tôi đưa ra một mô hình Client-Server của “Hệ thống báo điểm thi đại học”. Hệ thống này
được thiết kế bởi 3 thành phần: Database (DB), Server, Client. Tôi đã tạo biểu đồ UCM cho hệ
thống này. Sau đó tôi đã kiểm tra mã Java bytecode do chương trình sinh ra có đúng với
đặc tả sinh ra từ biểu đồ UCM hay không. Kết quả có được cho thấy chương trình chạy chính xác.
5. Kết luận
Nghiên cứu của tôi đã kiểm tra được chính xác một chương trình được thực thi một cách tuần tự có thoả mãn đặc tả UCM hay không. Tuy nhiên, kết quả nghiên cứu vẫn chưa giải quyết được vấn đề kiểm tra chương trình có các câu lệnh rẽ nhánh và việc thực thi song song giữa các luồng. Tôi nhận thấy mã MSIL của ngôn ngữ .NET tương đối giống với mã Java bytecode của ngôn ngữ lập trình Java, do phương pháp này có thể áp dụng cho việc kiểm chứng mã MSIL so với đặc tả UCM. Việc phát triển và mở rộng đề tài với các ngôn ngữ khác nhau sẽ góp phần tăng khả năng phát hiện lỗi và năng cao chất lượng phần mềm.
Tài liệu tham khảo
[1] Sun Microsystems, JavaBeans 1.01 Specification,
http://java.sun.com/beans. [2] http://www.omg.org.
[3] http://www.usecasemaps.org/.
[4] Tom Pender, Wiley Publishing. UML 2.0 Bible.In Chapter 11 of Part III: Modeling an Object’s Lifecycle in UML 2.0. Inc, 2003.
[5] Michael Jesse Chonoles, James A. Schardt . “UML 2.0 for Dummies”. In Chapter18 of Part V: Avoid States of Confusion. Inc, 2003.
[6] Bill Venners. “Inside the Java Virtual Machine”. In Chapter Nineteen: Method Invocation and Return and Chapter V: The Java Virtual Machine and Chapter Eight:
The Linking Model and Chapter VII: The Lifetime of a Class. Inc, 1997.
[7] R.J.A. Buhr and R.S. “Casselman Use Case Maps for Object-Oriented Case Maps for Object-Oriented Systems”, Inc, 1995.