Tải bản đầy đủ (.pdf) (71 trang)

Nghiên cứu và ứng dụng VDM++ cho mô hình hóa và kiểm thử hệ thống IMP tại NTTDATA việt nam

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.98 MB, 71 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN XUÂN TÙNG

NGHIÊN CỨU VÀ ỨNG DỤNG VDM++ CHO MÔ HÌNH
HÓA VÀ KIỂM THỬ HỆ THỐNG IMP TẠI NTTDATA
VIETNAM

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Hà Nội – 2015


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN XUÂN TÙNG

NGHIÊN CỨU VÀ ỨNG DỤNG VDM++ CHO MÔ HÌNH
HÓA VÀ KIỂM THỬ HỆ THỐNG IMP TẠI NTTDATA
VIETNAM

Ngành: Công nghệ thông tin
Chuyên ngành: Công nghệ phần mềm
Mã Số: 60480103

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. NGUYỄN VĂN TĂNG

Hà Nội – 2015




1

LỜI CẢM ƠN
Tôi xin gửi lời cảm ơn chân thành nhất tới T.S Nguyễn Văn Tăng – người đã tận
tình chỉ bảo, góp ý và giúp đỡ tôi hoàn thành luận văn này.
Tôi xin chân thành cảm ơn các thầy cô giáo Khoa Công Nghệ Thông Tin, Trường
Đại Học Công Nghệ, Đại Học Quốc Gia Hà Nội đã truyền đạt lại cho tôi những kiến
thức vô cùng bổ ích trong suốt quá trình tôi tham gia học tập và nghiên cứu tại trường.
Tôi cũng xin chân thành cảm ơn gia đình, bạn bè, đồng nghiệp luôn động viên
giúp đỡ mỗi khi tôi gặp khó khăn cũng như tạo mọi điều kiện thuận lợi để tôi hoàn
thành nhiệm vụ học tập và nghiên cứu trong suốt thời gian qua.


2

LỜI CAM ĐOAN
Tôi xin cam đoan những kết quả trong luận văn này là do tôi nghiên cứu, tổng
hợp và thực hiện. Toàn bộ những nội dung trong luận văn là kết quả của chính cá nhân
tôi hoặc được tổng hợp từ những nguồn tài liệu khác nhau. Tất cả các nguồn tài liệu
đều có nguồn gốc rõ ràng và trích dẫn đầy đủ.
Tôi xin hoàn toàn chịu trách nhiệm với lời cam đoan của mình. Nếu có gì sai trái,
tôi xin chịu mọi hình thức kỷ luật theo quy định.
Hà Nội, 15 tháng 10 năm 2015
Học viên

Nguyễn Xuân Tùng



3

MỤC LỤC
LỜI CẢM ƠN ..................................................................................................................1
LỜI CAM ĐOAN ............................................................................................................2
MỤC LỤC .......................................................................................................................3
DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT .............................................................. 5
MỞ ĐẦU ......................................................................................................................... 9
CHƯƠNG 1 – GIỚI THIỆU CHUNG ...........................................................................10
1.1. Giới thiệu về VDM ................................................................................................ 10
1.1.1. Khái niệm .........................................................................................................10
1.1.2. Các loại VDM ..................................................................................................11
1.1.3. VDM ++ ...........................................................................................................11
1.1.3.1. Cấu trúc class ................................................................................................ 11
1.1.3.3. Hàm khởi tạo (Constuctors) .......................................................................13
1.1.3.4. Biến thể hiện (Instance Variables) ............................................................. 13
1.1.3.6. Hàm và Phương thức .................................................................................20
1.1.3.7. Tính đồng thời (Concurrency) ...................................................................23
1.2. Công cụ hỗ trợ VDM++ ......................................................................................... 23
1.2.1. Giới thiệu..........................................................................................................23
1.2.2. Modelio ............................................................................................................24
1.2.3. Overture............................................................................................................27
CHƯƠNG 2 – TỔNG QUAN VỀ DỰ ÁN ...................................................................40
2.1. Giới thiệu về dự án .................................................................................................40
2.1.1. Hiện trạng nghiệp vụ ........................................................................................ 40
2.1.2. Mục đích xây dựng hệ thống IMP ...................................................................40
2.2. Hệ thống IMP .........................................................................................................41
2.2.1. Nền tảng hệ thống ............................................................................................ 41
2.2.2. Luồng nghiệp vụ hệ thống ...............................................................................43
2.3. Quy trình phát triển dự án....................................................................................... 45

2.3.1. Quy trình phát triển hiện tại .............................................................................45
2.3.2. Đánh giá vấn đề của dự án ...............................................................................46
2.3.3. Giải pháp tổng thể ............................................................................................ 47
CHƯƠNG 3 – ÁP DỤNG QUY TRÌNH MỚI VÀO DỰ ÁN IMP .............................. 52


4

3.1. Mô hình hóa thực thể dữ liệu..................................................................................52
3.1.1. Mô hình hóa kiểu dữ liệu SQL .........................................................................52
3.1.2. Mô hình hóa cấu trúc bảng ...............................................................................53
3.1.3. Mô hình hóa bảng dữ liệu ................................................................................55
3.1.4. Mô hình hóa cơ sở dữ liệu................................................................................56
3.2. Mô hình hóa đặc tả hệ thống ..................................................................................56
3.2.1. Đặc tả kiến trúc ................................................................................................ 56
3.2.2. Đặc tả nghiệp vụ............................................................................................... 57
3.3. Kiểm thử mô hình hóa ............................................................................................ 61
3.4. Kết quả thực nghiệm............................................................................................... 63
3.5. Kinh nghiệm thực tiễn ............................................................................................ 66
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ....................................................................68
TÀI LIỆU THAM KHẢO ............................................................................................. 69


5

DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT
STT

Từ viết tắt


1

VDM

2

Tiếng Anh

Tiếng Việt

Vienna Development
Method

Phương thức phát triển
Vienna

VDM-SL

VDM Specification
Language

Ngôn ngữ đặc tả VDM

3

VDM++

VDM Object-Oriented

Đặc tả hướng đối tượng

VDM

4

SA

System Analysis

Phân tích hệ thống

5

ERD

Entity-Relation Diagram

Lực đồ quan hệ thực thể

6

IDE

Integrated Development
Environment

Môi trường phát triển tích
hợp

7


RD

Requirement Definition

Đặc tả yêu cầu

8

DD

Detail Design

Thiết kế chi tiết

9

Class

10

SQL

Structured Query Language Ngôn ngữ truy vấn mang
tính cấu trúc

11

UML

Unified Modeling Language Ngôn ngữ mô hình hóa

thống nhất

12

MVC

Model View Controller

Một mẫu kiến trúc phần
mềm trong kỹ thuật kỹ sư
phần mềm

13

IMP

Industrial Maintenance
Program

Chương trình bảo dưỡng
khu công nghiệp

14

IDE

Integrated Development
Environment

Môi trường phát triển tích

hợp

15

CT

Combinatorial Testing

Kiểm tra tổ hợp

16

PT

Processing Test

Kiểm thử nghiệp vụ

17

IT

Intergration Test

Kiểm thử tích hợp

18

ST


System Test

Kiểm thử hệ thống

Lớp


6

DANH MỤC HÌNH VẼ
Hình 1. 1. Cấu trúc class trong VDM++ .......................................................................12
Hình 1. 2. Cú pháp khai báo lớp thừa kế .......................................................................13
Hình 1. 3. Cú pháp khai báo biến thể hiện ....................................................................13
Hình 1. 4. Cú pháp khai báo tính bất biến .....................................................................14
Hình 1. 5. Ví dụ khai báo rằng buộc biến thể hiện bằng biểu thức INV .......................14
Hình 1. 6. Ví dụ cài đặt hàm truy cập biến cục bộ ........................................................15
Hình 1. 7. Khai báo kiểu Union .....................................................................................17
Hình 1. 8. Cấu trúc khai báo kiểu product .....................................................................17
Hình 1. 9. Khởi tạo kiểu product ...................................................................................17
Hình 1. 10. Cấu trúc khai báo kiểu dữ liệu bản ghi .......................................................18
Hình 1. 11. Khởi tạo kiểu dữ liệu bản ghi .....................................................................18
Hình 1. 12. Cấu trúc lớp trong VDM++ ........................................................................21
Hình 1. 13. Cấu trúc khai báo hàm tường minh ............................................................21
Hình 1. 14. Cấu trúc khai báo hàm không tường minh .................................................21
Hình 1. 15. Cấu trúc khai báo phương thức tường minh ...............................................22
Hình 1. 16. Cấu trúc khai báo phương thức không tường minh ....................................22
Hình 1. 17. Cấu trúc khai báo phương thức ở mức trừu tượng .....................................22
Hình 1. 18. Cấu trúc khai báo phương thức dạng uỷ thác .............................................23
Hình 1. 19. Cú pháp khai báo đồng bộ đối tượng chia sẻ .............................................23
Hình 1. 20. Xuất biểu đồ UML sang định dạng .UML trong Modelio .........................24

Hình 1. 21. Lựa chọn xuất file trong Modelio ...............................................................25
Hình 1. 22. Kết quả xuất file .UML ..............................................................................25
Hình 1. 23. Menu chuyển đổi từ UML sang VDM .......................................................26
Hình 1. 24. Danh sách các class sau khi import ............................................................26
Hình 1. 25. Tạo mới dự án VDM++ trong Overture .....................................................29
Hình 1. 26. Chọn loại dự án VDM ................................................................................30
Hình 1. 27. Nhập tên dự án VDM++ .............................................................................31
Hình 1. 28. Chọn các dự án cần tham chiếu ..................................................................31
Hình 1. 29. Danh sách thư viện Overture hỗ trợ ...........................................................32
Hình 1. 30. Hộp thoại cấu hình thực thi và gỡ lỗi .........................................................33
Hình 1. 31. Hộp thoại cấu hình thực thi và gỡ lỗi .........................................................33
Hình 1. 32. Giao diện gỡ lỗi ..........................................................................................34
Hình 1. 33. Khung nhìn gỡ lỗi .......................................................................................35
Hình 1. 34. Khung nhìn biến thể hiện ...........................................................................36
Hình 1. 35. Khung nhìn kiểm thử tổ hợp.......................................................................36
Hình 1. 36. Lựa chọn sinh mã Java ...............................................................................37
Hình 1. 37. Menu xuất VDM++ sang UML ..................................................................38
Hình 1. 38. Kết quả xuất file .uml .................................................................................38


7

Hình 1. 39. Import file .uml vào Modelio .....................................................................39
Hình 2. 1. Luồng nghiệp vụ hiện tại ..............................................................................40
Hình 2. 2. Tổng quan yêu cầu chức năng của hệ thống.................................................41
Hình 2. 3. Chuyển đổi từ mô hình hệ thống độc lập sang mô hình tích hợp intrarmart 42
Hình 2. 4. Các thành phần trong intramart ....................................................................42
Hình 2. 5. Kiến trúc MVC của struts .............................................................................43
Hình 2. 6. Luồng nghiệp vụ hệ thống ............................................................................43
Hình 2. 7. Luồng nghiệp vụ phê duyệt kế hoạch năm ...................................................44

Hình 2. 8. Màn hình tạo kế hoạch tháng/chi tiết ........................................................... 44
Hình 2. 9. Mô hình chữ V gồm 4 bước .........................................................................45
Hình 2. 10. Chi tiết công việc cần thực hiện trong từng công đoạn .............................. 45
Hình 2. 11. Nguyên nhân của vấn đề tốn nhiều thời gian phát triển lại ........................ 46
Hình 2. 12. Mô hình chữ V thêm giai đoạn mô hình hóa VDM++ ............................... 47
Hình 2. 13. Chi tiết công việc bao gồm việc mô hình hóa bằng VDM++ ....................48
Hình 2. 14. Phạm vi công việc của các nhóm vai trò trong dự án.................................50
Hình 3. 1. Mô hình hóa kiểu dữ liệu SQL server .......................................................... 53
Hình 3. 2. Mô hình hóa cấu trúc dữ liệu bảng Imp_Schedule_Annual ......................... 54
Hình 3. 3. Mô hình hóa cấu trúc dữ liệu bảng Imp_Schedule_Annual_Pln_Detail ......55
Hình 3. 4. Mô hình hóa bảng Imp_Schedule_Annual và
Imp_Schedule_Annual_Pln_Detail ...............................................................................55
Hình 3. 5. Mô hình hóa cơ sở dữ liệu Imp ....................................................................56
Hình 3. 6. Lược đồ lớp trừu tượng trong Modelio ........................................................ 57
Hình 3. 7. Lược đồ luồng nghiệp vụ xử lý tạo mới kế hoạch........................................58
Hình 3. 8. Mô hình hóa lớp trừu tượng ScheduleAnnualModel ...................................59
Hình 3. 9. Mô hình hóa lớp cài đặt ScheduleAnnualModelImpl ..................................60
Hình 3. 10. Mô hình hóa lớp xử lý yêu cầu B0102ServiceController........................... 61
Hình 3. 11. Cài đặt unit test thiết kế lớp ScheduleAnnualModelImpl .......................... 62
Hình 3. 12. Màn hình kiểm thử và kết quả kiểm thử lớp ScheduleAnnualModelImpl ..63
Hình 3. 13. Timeline của dự án trước và sau khi áp dụng quy trình mới......................64
Hình 3. 14. Lỗi có độ ưu tiên cao phát hiện khi thực hiện Modelling Test ..................65
Hình 3. 15. Lỗi có độ ưu tiên trung bình phát hiện khi thực hiện Modelling Test .......65
Hình 3. 16. Lỗi có độ ưu tiên thấp phát hiện khi thực hiện Modelling Test .................66


8

DANH MỤC BẢNG
Bảng 1. 1. Kiểu dữ liệu cơ bản của VDM .....................................................................15

Bảng 1. 2. Danh sách các phép toán trên kiểu dữ liệu cơ bản .......................................16
Bảng 1. 3. Các phép toán của kiểu Union .....................................................................17
Bảng 1. 4. Các phép toán của kiểu product ...................................................................18
Bảng 1. 5. Các phép toán của kiểu bản ghi ...................................................................18
Bảng 1. 6. Các phương thức kiểu dữ liệu tập hợp ......................................................... 19
Bảng 1. 7. Các phương thức kiểu dữ liệu map .............................................................. 19
Bảng 1. 8. Các phương thức kiểu dữ liệu map .............................................................. 20
Bảng 1. 9. Danh sách cộng đồng người dùng Overture ................................................27
Bảng 2. 1. Định nghĩa mục đích của hành động............................................................ 48
Bảng 2. 2. Định nghĩa vai trò và trách nhiệm................................................................ 50
Bảng 3. 1. Kiểu dữ liệu SQL và kiểu dữ liệu VDM tương ứng ....................................52
Bảng 3. 2. Tổng hợp lỗi tài liệu thiết kế ........................................................................64
Bảng 3. 3. Phạm vi và quy mô dự án.............................................................................64


9

MỞ ĐẦU
Trong quy trình phát triển phần mềm, những giai đoạn đầu của dự án đóng vai
trò quyết định sự thành công của dự án. Thành công của dự án có nghĩa là đúng yêu
cầu khách hàng, đúng thời gian và không vượt quá ngân sách. Một trong những giai
đoạn đó là giai đoạn thiết kế chi tiết hệ thống sau khi thống nhất yêu cầu của khách
hàng. Đầu ra của giai đoạn này là các tài liệu thiết kế chi tiết (thiết kế chi tiết chức
năng, thiết kế cơ sở dữ liệu, thiết kế luồng xử lý dữ liệu, ...), là đầu vào cho giai đoạn
viết mã chương trình, hay nói cách khác là dựa vào tài liệu thiết kế, người lập trình sẽ
xây dựng, phát triển hệ thống theo yêu cầu khách hàng, đảm bảo chất lượng (tính đúng
đắn) thiết kế giúp cho dự án có thể đúng tiến độ, đúng yêu cầu và không làm phát sinh
ngân sách. Hiện tại, việc đảm bảo chất lượng tài liệu thiết kế chi tiết chủ yếu dựa vào
trực quan, bằng cách sử dụng checklist đã được định nghĩa trước. Điều này đôi lúc
không phát hiện được hết những lỗi đặc tả tiềm ẩn và lỗi thời gian thực trong tài liệu

thiết kế.
Luận văn sẽ nghiên cứu về phương pháp đặc tả hình thức sử dụng VDM++, giúp
phát hiện các vấn đề tiềm ẩn, các lỗi thời gian thực và phát hiện các lỗi thiết kế sớm
khi áp dụng vào dự án cụ thể IMP. Luận văn được cấu trúc như sau:
- Chương 1: Giới thiệu tổng quan về VDM và VDM++, cộng đồng phát triển
VDM. Cung cấp thông tin về các công cụ hỗ trợ phát triển mô hình hóa bằng VDM++,
với những tính năng nổi bật mà công cụ hỗ trợ.
- Chương 2: Giới thiệu về yêu cầu hệ thống IMP, quy trình phát triển dự án hiện
tại, đánh giá những vấn đề của dự án và đưa ra những cải tiến trong quy trình với việc
sử dụng VDM++ trong quá trình thiết kế chi tiết.
- Chương 3: Áp dụng quy trình mới với sự kết hợp sử dụng Overture và Modelio
vào việc thiết kế, mô hình hóa hệ thống IMP và đưa ra đánh giá kết quả, tổng hợp
những nghiên cứu đạt được sau luận văn và đưa ra hướng phát triển tiếp theo.


10

CHƯƠNG 1 – GIỚI THIỆU CHUNG
1.1. Giới thiệu về VDM
1.1.1. Khái niệm
Phương pháp phát triển Vienna (Vienna Development Method) là một trong
những phương pháp mô hình hóa hướng đối tượng lâu đời nhất cho việc phát triển
phần mềm. Nó bao gồm một nhóm các ngôn ngữ trên nền tảng toán học và các công
cụ hỗ trợ việc mô tả và phân tích mô hình hệ thống tại bước thiết kế. Việc xây dựng và
phân tích mô hình giúp cho việc nhận biết những đặc tả của hệ thống còn thiếu sót
hoặc chưa rõ ràng, và đảm bảo một mức độ tin tưởng trong quá trình phát triển, đặc
biệt là vấn đề an toàn và bảo mật. VDM đã được ứng dụng nhiều trong công nghiệp,
trong một số trường hợp, người sử dụng không phải là những chuyên gia trong các lĩnh
vực chuyên nghiệp và logic. Theo kinh nghiệm cho thấy, việc mô hình hóa sẽ làm tăng
chi phí ở giai đoạn thiết kế, nhưng nó có thể giúp rút ngắn giai đoạn phát triển nhờ

việc hạn chế công sức làm lại do những lỗi trong giai đoạn thiết kế [6].
Mô hình hóa cấu trúc (Modeling structure)
Trong VDM, mô hình bao gồm việc mô tả dữ liệu trên các phương thức và chức
năng của hệ thống mà nó được thực thi. Dữ liệu bao gồm việc nhập/xuất từ bên ngoài
và dữ liệu trạng thái bên trong. Chức năng bao gồm các hoạt động có thể được gọi tại
giao diện hệ thống cũng như các chức năng phụ, hỗ trợ việc thực hiện các hoạt động.
Trong chuẩn ISO, có một thông tin bổ sung về framework cho việc mô hình hóa –
VDM-SL.
Ngôn ngữ VDM++ mở rộng của VDM-SL, được dùng để hỗ trợ đặc tả hệ thống
hướng đối tượng, và mô hình cấu trúc trong những định nghĩa class, mỗi class có
những thành phần tương tự một đặc tả VDM-SL, với các biến trạng thái đóng vai trò
của biến thể hiện và các hoạt động đóng vai trò là một phần của các phương thức.
Mô hình hóa dữ liệu (Modeling data)
Các mô hình dữ liệu trong VDM được thành lập dựa trên các kiểu dữ liệu trừu
tượng cơ bản cùng với một tập hợp các kiểu khởi tạo. Các kiểu dữ liệu cơ bản bao gồm
kiểu số (tự nhiên, số nguyên, số hữu tỉ và số thực) và kiểu ký tự. Chú ý, trong nguyên
tắc trừu tượng của VDM thì không xác định giá trị lớn nhất cho kiểu số hoặc kiểu số
thực. Nếu người dùng muốn xác định bởi yêu cầu của việc mô hình hóa, thì có thể xác
định điều này bằng việc quy định tính bất biến (invariant). Bất biến là các biểu thức
logic đại diện cho các điều kiện được tôn trọng bởi các tất cả các thành phần kiểu dữ
liệu mà chúng đính kèm [6].


11

1.1.2. Các loại VDM
Phương thức phát triển Vienna (Vienna Development Method - VDM) được phát
triển đầu tiên bởi IBM vào năm 1970, là một trong những phương pháp hình thức được
thành lập lâu nhất. VDM có 3 loại: VDM-SL (VDM Specification Language) một
chuẩn ISO; VDM++ một mở rộng hướng đối tượng của VDM-SL; và mới đây thêm

VDM-RT, một mở rộng của VDM++ để mô hình hóa những hệ thống nhúng phân tán
thời gian thực. VDM-RT là một ngôn ngữ mô hình hóa với những tập con có thể thực
thi được sử dụng để miêu tả những hệ thống nhúng thời gian thực phân tán [9,1].
- VDM-SL: Đặc tả VDM-SL có cấu trúc rất đơn giản, đó là Module, mang tính
diễn tả bài toán bằng Structure. Một module bao gồm một tập của types, constants,
functions, operations và state (trạng thái). Diễn tả bài toán dạng module, một module
bao gồm một tập của types, constants, functions, operations và state (trạng thái). Phù
hợp với bài toán phân tích theo cấu trúc, theo module và cài đặt ngôn ngữ lập trình
kiểu cấu trúc.
- VDM++: Đặc tả VDM++ là mở rộng của VDM-SL có cấu trúc dựa trên class,
làm việc với diễn tả bài toán thông qua Class, hướng đối tượng. Một class bao gồm
một tập hợp của types, constants, functions, operations và state. Phù hợp phân tích
hướng đối tượng.
- VDM-RT: Đặc tả VDM-RT là VDM++ với hệ thống có môi trường rằng buộc,
áp dụng vào hệ thống nhúng thời gian thực và hệ thống phân tán.
Điểm khác biệt chính giữa VDM-SL và VDM++ là cách thức mà cấu trúc được
xử lý. VDM-SL có một phần mở rộng mô-đun thông thường, trong khi đó VDM++ có
một cơ chế cấu trúc hướng đối tượng truyền thống với các class và sự thừa kế [10].
1.1.3. VDM ++
Một mô hình VDM++ bao gồm một tập các class. Một class mô tả một tập các
đối tượng có các thành phần dùng chung như thuộc tính hoặc phương thức. Mô tả class
cung cấp một khuôn mẫu cho các đối tượng được tạo ra từ class đó. Một số thành phần
sẽ được nhìn thấy bởi các đối tượng khác và một số thành phần chỉ được sử dụng bởi
chính đối tượng đó, điều này được khai báo bằng cách sử dụng phạm vi truy cập [12].
1.1.3.1. Cấu trúc class
Cấu trúc của một class được mô tả như dưới đây. Trong một class bao gồm nhiều
khối, mỗi khối được bắt đầu bởi một từ khóa chỉ ra loại các thành phần trong khối đó.
Mọi thành phần được định nghĩa trong một khối được coi như một thành phần của
class. Các khối được mô tả như sau:
 Biến thể hiện (Instance variables): mô hình trạng thái của một đối tượng.

 Kiểu (Types): định nghĩa các kiểu dữ liệu dùng cho đối tượng.
 Giá trị (Values): định nghĩa các hằng số.


12
 Hàm (Functions): định nghĩa các hàm mà không tác động đến các biến.
 Phương thức (Operations): định nghĩa các phương thức có thể thay đổi giá trị

các biến.
 Luồng (Threads): Đối tượng trong VDM++ có thể là chủ động (active) hoặc
thụ động (passive). Khi một đối tượng là chủ động, nó có 1 luồng để khai báo tính chủ
động, đối tượng này sẽ được gọi khi bắt đầu một luồng xử lý.
 Ràng buộc đồng bộ (Synchronisation constraints): VDM++ hỗ trợ mô hình hóa
một hệ thống phần mềm đồng thời (concurrent software system), điều này có nghĩa là
một đối tượng có thể tồn tại đồng thời và hoạt động song song. Khối này xác định sự
ràng buộc trong việc trao đổi giữa những đối tượng đồng thời được ràng buộc.
class class-name
instance variables
Internal object state
...

types
values
functions

Definitions

operations
...


thread
Dynamic behaviour
...
sync
Synchronization control
...
end class-name

Hình 1. 1. Cấu trúc class trong VDM++
Giữa các lớp có những mối quan hệ kế thừa, lớp kế thừa được gọi là subclass và
lớp được kế thừa được gọi là superclass. Định nghĩa lớp kế thừa sẽ được mở rộng với
các thành phần của lớp cha (được kế thừa) mà cho phép kế thừa bằng cách khai báo là
public hoặc protected. Một class có thể kế thừa một hoặc nhiều lớp. Có một giới hạn
trọng việc đa thừa kế là chỉ duy nhất một lớp cha có khai báo luồng. Cấu trúc một lớp
thừa kế như dưới đây:


13

class class name is subclass of sc1, sc2, ..., scn
...
end class name

Hình 1. 2. Cú pháp khai báo lớp thừa kế
1.1.3.2. Phạm vi truy cập (Access Modifier)
Mỗi khai báo thành phần bên trong một class có thể có một phạm vi truy cập.
Trong VDM++ có 3 loại phạm vi truy cập là: private, protected và public. Phạm vi
truy cập mặc định của tất cả các thành phần là private.
Phạm vi truy cập không thể được giới hạn lại ở các lớp kế thừa. Ví dụ, một lớp
kế thừa không thể ghi đè phạm vi truy cập của một phương thức ở lớp cha được khai

báo public thành private.
Static có thể được sử dụng để khai báo các biến độc lập với một thể hiện cụ thể
của lớp. Biến static có thể được truy cập thông qua tên class thay vì thông qua một thể
hiện của class. Một thành phần static (tĩnh) của class không cho phép các thành phần
không phải static truy cập. Trong VDM++ thì khối value và type mặc định là static.
1.1.3.3. Hàm khởi tạo (Constuctors)
Mỗi class có thể có một số hàm khởi tạo. Hàm khởi tạo được phân biệt với các
hàm khác bằng tên class và kiểu trả về tương tự. Việc trả về kết quả không cần phải rõ
ràng và hàm khởi tạo sẽ được gọi khi một thể hiện của lớp được tạo mới.
1.1.3.4. Biến thể hiện (Instance Variables)
Trạng thái của một đối tượng được mô hình hóa bằng ý nghĩa của các biến thể
hiện. Khối định nghĩa các biến thể hiện trong một class có định dạng như sau:
class class name
instance variables
instance variable definition 1;
instance variable definition 2;
...
instance variable definition n
end class name

Hình 1. 3. Cú pháp khai báo biến thể hiện


14

Tính đồng nhất của các thuộc tính được mô hình hòa là bất biến (invariant) trong
VMD++. Trong trường hợp cần giới hạn giá trị cho các biến thể hiện hoặc quy định
mối liên hệ giữa chúng thì VDM++ hỗ trợ việc khai báo rằng buộc đối với các giá trị
của biến thể hiện. Một định nghĩa bất biến theo ngay sau khai báo biến thể hiện, có cấu
trúc như sau:

class class name
instance variables
instance variable definition 1;
instance variable definition 2;
...
instance variable definition n;
inv expression using the instance variables
end class name

Hình 1. 4. Cú pháp khai báo tính bất biến
Ví dụ, ta định nghĩa một class mô hình hóa một đối tượng người, với các thuộc
tính là tên và tuổi. Trong đó, tuổi phải đảm bảo rằng buộc là lớn hoặc bằng không tuổi
và không lớn hơn 99 tuổi. Điều này có thể được định nghĩa như sau:
class Person
types
string = seq of char
instance variables
name: string := [];
age: int := 0;
inv 0 <= age and age <= 99;
end Person

Hình 1. 5. Ví dụ khai báo rằng buộc biến thể hiện bằng biểu thức INV
Thuộc tính bất biến này có hiệu lực tại mọi thời điểm đối với các thể hiện của
lớp. Mọi việc gán giá trị mới cho biến điều phải được kiểm tra thỏa mãn rằng buộc đã
khai báo. Bằng việc khai báo tính bất biến của các biến thể hiện, VDM++ đã cho phép
mô hình hóa các rằng buộc của các thuộc tính của hệ thống phần mềm trong quá trình
thiết kế hệ thống.



15

Biến thể hiện chỉ có thể được truy cập bởi các thành phần trong class nó khai
báo. Để đọc hoặc thay đổi giá trị của biến thể hiện từ bên ngoài class, cần phải khai
báo các phương thức truy cập. Ví dụ, để lấy tên của một người, ta khai báo hàm
GetName như sau:
class Person
...
instance variables
name: string := [];
...
operations
public GetName: () ==> string
GetName () ==
return name
end Person

Hình 1. 6. Ví dụ cài đặt hàm truy cập biến cục bộ
1.1.3.5. Kiểu dữ liệu và định nghĩa kiểu
Trong VMD++ có 2 loại kiểu dữ liệu là: Kiểu dữ cơ bản và kiểu khởi tạo.
Kiểu cơ bản
Các kiểu cơ bản được liệt kê như bảng dưới đây:
Bảng 1. 1. Kiểu dữ liệu cơ bản của VDM
Kiểu dữ liệu

Giá trị

bool

true, false


nat1

1, 2, 3, ...

nat

0, 1, 2, ...

int

-2, -1, 0, 1, ...

rat

-1/7, -1/356, ..., 1/3, ...

Real

-12.78356, ..., 0, ..., 1726.34, ...

char

’a’, ’b’, . . . , ’1’, ’2’, . . . ’+’, ’-’ . . .

quote

<RED>, <CAR>, <QuoteLit>, . . .



16

token

mk_token (...)

Các phép toán trên kiểu dữ liệu cơ bản được liệt kê như bảng dưới đây:
Bảng 1. 2. Danh sách các phép toán trên kiểu dữ liệu cơ bản
Phép toán

Tên

Kiểu

not b

Negation

bool -> bool

a and b

Conjunction

bool * bool -> bool

a or b

Disjunction


bool * bool -> bool

a=>b

Implication

bool * bool -> bool

a<=>b

Biimplication

bool * bool -> bool

a=b

Equality

bool * bool -> bool

a<>b

Inequality

bool * bool -> bool

-x

Unary minus


real -> real

abs x

Absolute value

real -> real

floor x

Floor

real -> int

x+y

Sum

real * real -> real

x-y

Difference

real * real -> real

x*y

Product


real * real -> real

x/y

Division

real * real -> real

x div y

Integer division

int*int->int

x rem y

Remainder

int*int->int

x mod y

Modulus

int*int->int

x**y

Power


real * real -> real

x
Less than

real * real -> bool

x>y

Greater than

real * real -> bool

x<=y

Less or equal

real * real -> bool

x>=y

Greater or equal

real * real -> bool

x=y

Equal


real * real -> bool

x<>y

Not equal

real * real -> bool


17

Kiểu được khởi tạo (Constructed Types)
Các kiểu dữ liệu cơ bản có những hạn chế. Điều này có thể gây khó khăn trong
việc mô hình hóa mọi hệ thống mà không có khả năng miêu tả dữ liệu có cấu trúc,
như: bản ghi, dữ liệu tập hợp hay sequences. Các kiểu mô tả dữ liệu cấu trúc và tập
hợp được xây dựng từ các kiểu cơ bản được gọi là kiểu khởi tạo. Các kiểu khởi tạo
được sử dụng trong VDM ++ bao gồm: unions, products, bản ghi (records), kiểu tùy
biến và kiểu tham chiếu.
Kiểu Union
Một kiểu union được hình thành từ nhiều kiểu thành phần khác nhau và chứa tất
cả giá trị của mỗi thành phần đó. Một kiểu union được mô tả như sau:
type 1 | type 2 | type 3 | ... | type n
Hình 1. 7. Khai báo kiểu Union
Các phương thức đối với kiểu union được mô tả trong bảng sau, “A” đại diện cho
mọi kiểu union.
Bảng 1. 3. Các phép toán của kiểu Union
Phương thức

Tên


Kiểu

t1 = t2

Equality

A * A → bool

t1 <> t2

Inequality

A * A → bool

Kiểu Product
Trong khi kiểu union kết hợp giá trị từ nhiều kiểu khác nhau, kiểu product kết
hợp các giá trị với nhau thành một cấu trúc gọi là bộ (tuples). Kiểu dữ liệu product
được sử dụng trong các trường hợp dữ liệu không đồng nhất. Trong VDM++, một kiểu
product bao gồm một sự kết hợp cố định của các kiểu dữ liệu khác nhau. Được khai
báo như sau:
type 1 * type 2 * type 3 *... * type n
Hình 1. 8. Cấu trúc khai báo kiểu product
Khởi tạo tuple sử dụng từ khóa mk_, cùng với một tập hợp các giá trị khác nhau
trong dấu ngoặc đơn. Khai báo như sau:
mk_(value 1, value 2, value 3, ..., value n)
Hình 1. 9. Khởi tạo kiểu product


18


Các phương thức của kiểu product T=T1*...*Ti*...*Tn
Bảng 1. 4. Các phép toán của kiểu product
Phương thức

Tên

Kiểu

t.#i

Select

T * nat1 → Ti

t1 = t2

Equality

T * T → bool

t1 <> t2

Inequality

T * T → bool

Kiểu bản ghi (Record)
Giống với kiểu product, kiểu record bao gồm các bộ dữ liệu của các kiểu dữ liệu
khác nhau. Tuy nhiên, một thành phần của record có thể được đặt tên. Định nghĩa một
kiểu record như sau:

tag ::
field 1 : type 1
field 2 : type 2
...
field n : type n
Hình 1. 10. Cấu trúc khai báo kiểu dữ liệu bản ghi
Trong đó tag là tên kiểu, field là các phần tử của kiểu. Và cũng giống như kiểu
product, kiểu record được khởi tạo giá trị như sau:
mk_tag (value 1, value 2,..., value n)
Hình 1. 11. Khởi tạo kiểu dữ liệu bản ghi
Các phương thức kiểu bản ghi (Record)
Bảng 1. 5. Các phép toán của kiểu bản ghi
Phương thức

Tên

Kiểu

r.i

Field select

A * Id → Ai

r1 = r2

Equality

A * A → bool


r1 <> r2

Inequality

A * A → bool

Các phương thức của kiểu tập hợp (Set)


19

Bảng 1. 6. Các phương thức kiểu dữ liệu tập hợp
Phương thức

Tên

Kiểu

e in set s1

Membership

A*setofA->bool

e not in set s1

Not membership

A*setofA->bool


s1 union s2

Union

set of A * set of A -> set of A

s1 inter s2

Intersection

set of A * set of A -> set of A

s1\s2

Difference

set of A * set of A -> set of A

s1 subset s2

Subset

setofA*setofA->bool

s1 psubset s2

Proper subset

setofA*setofA->bool


s1=s2

Equality

setofA*setofA->bool

s1 <> s2

Inequality

setofA*setofA->bool

card s1

Cardinality

set of A -> nat

d union s1

Distr. union

set of set of A -> set of A

d inter s1

Distr. intersection

set of set of A -> set of A


power s1

Finite power

set set of A -> set of set of A

Các phương thức của kiểu Map
Bảng 1. 7. Các phương thức kiểu dữ liệu map
Phương thức

Tên

Kiểu

dom m

Domain

(map A to B)-> set of A

rng m

Range

(mapAtoB)-> set of B

m1 munion m2

Merge


(map A to B) * (map A to B) -> map A to B

m1 ++ m2

Override

(map A to B) * (map A to B) -> map A to B

merge ms

Distr. merge

set of(map A to B)-> map A to B

s<:m

Dom. restr. to

Set of A*(map A to B) -> map A to B

s<-:m

Dom. restr. by

Set ofA*(map A to B)-> map A to B

m:>s

Rng. restr. to


(map A to B)*set of A -> map A to B

m:->s

Rng. restr. by

(map A to B)*set of A -> map A to B

m(d)

Map apply

(map A to B) * A -> B

inverse m

Map inverse

Inmap A to B -> inmap B to A


20

m1=m2

Equality

(map A to B) * (map A to B) -> bool

m1 <> m2


Inequality

(map A to B) * (map A to B) -> bool

Các phương thức của kiểu tuần tự (Sequence)
Bảng 1. 8. Các phương thức kiểu dữ liệu map
Phương thức

Tên

Kiểu

hd l

Head

seq1 of A -> A

tl l

Tail

seq1 of A -> seq of A

len l

Length

seq of A -> nat


elems l

Elements

seq of A -> set of A

inds l

Indexes

seq of A -> set of nat1

l1^l2

Concatenation

seq of A*seq of A -> seq of A

conc ll

Distr. conc.

seq of seq of A -> seq of A

l(i)

Seq. application

seq1ofA*nat1->A


l++m

Seq. modification

seq1of A*map nat1 to A ->
seq1 of A
l1=l2

Equality

seq of A * seq of A -> bool

l1 <> l2

Inequality

seq of A * seq of A -> bool

1.1.3.6. Hàm và Phương thức
Trong VDM++, việc thực hiện tính toán trên dữ liệu được mô hình hóa thông qua
hàm hoặc phương thức khai báo trong các đối tượng. Hàm sẽ nhận dữ liệu đầu vào và
tính toán ra kết quả mà không tham chiếu tới bất kì biến thể hiện nào của đối tượng.
Trong khi đó, phương thức cũng nhận dữ liều đầu vào và tính toán trả về kết quả, tuy
nhiên nó có thể đọc hoặc thay đổi giá trị của các biến thể hiện của đối tượng. Chính vì
thế, hàm luôn trả về kết quả tương ứng với dữ liệu đầu vào, còn phương thức thì có thể
trả về kết quả tùy vào từng thể hiện của đối tượng, vì nó phụ thuộc vào giá trị của các
tham số lúc khởi tạo đối tượng.



21
class class name
operations
operation 1;
operation 2;
...;
operation n
functions
function 1;
function 2;
...;
function n
end class name

Hình 1. 12. Cấu trúc lớp trong VDM++
Trong VDM++, hàm và phương thức được khai báo sau các từ khóa định nghĩa
khối operations và functions. Có cấu trúc như sau:
Hàm
Khai báo hàm tường minh (Explicit Function)
function name (parameters) result name and type
pre predicate
post predicate
Hình 1. 13. Cấu trúc khai báo hàm tường minh
Khai báo hàm không tường minh (Implicit Function)
function name: parameter types -> result type
function name(parameters) ==
expression
pre predicate
post predicate
Hình 1. 14. Cấu trúc khai báo hàm không tường minh



22

Phương thức
Khai báo phương thức tường minh (Explicit Operation)
operation name: parameter types ==> result type
operation name(parameters) ==
statements
pre predicate
post predicate
Hình 1. 15. Cấu trúc khai báo phương thức tường minh
Khai báo phương thức không tường minh (Implicit Operation)
operation name: parameter types ==> result type
operation name(parameters) ==
statements
pre predicate
post predicatepost expr
Hình 1. 16. Cấu trúc khai báo phương thức không tường minh
Khai báo phương thức ở mức trừu tượng
operation name: parameter types ==> result type
operation name(parameters) ==
is not yet specified
pre predicate
post predicate
Hình 1. 17. Cấu trúc khai báo phương thức ở mức trừu tượng


23


Khai báo phương thức dạng ủy thác
operation name: parameter types ==> result type
operation name(parameters) ==
is subclass responsibility
pre predicate
post predicate
Hình 1. 18. Cấu trúc khai báo phương thức dạng uỷ thác
1.1.3.7. Tính đồng thời (Concurrency)
Một đối tượng có thể là
 Thụ động (passive): chỉ có thể thay đổi trạng thái thông qua các yêu cầu. Như

là một lời gọi, một phương thức. Đối tượng thụ động sẽ phản hồi yêu cầu từ một đối
tượng chủ động. Nó cung cấp một giao diện cho các máy khách, không có luồng xử lý
và có thể phục vụ nhiều máy khách khác nhau.
 Hoặc chủ động (active): có thể thay đổi trạng thái của nó mà không cần sự tác
động của bất cứ đối tượng nào khác. Các đối tượng chủ động có một luồng điều khiển
riêng của nó.
Trong VMD++, hệ thống đồng thời có thể được mô hình hóa bằng cách sử dụng
thread. Đa luồng có thể tồn tại và được thực thi trong một mô hình tại cùng một thời
điểm. Thread chia sẻ cùng không gian tên và giao tiếp với nhau thông qua các đối
tượng chia sẻ. Để duy trì tính toàn vẹn của đối tượng chia sẻ, cần đảm bảo rằng việc
truy cập đồng thời tới các đối tượng này là được đồng bộ. Việc đồng bộ cho các đối
tượng chia sẻ bằng cách sử dụng từ khóa sync. Cú pháp khai báo như sau:
sync
per operation name => predicate;
...
Hình 1. 19. Cú pháp khai báo đồng bộ đối tượng chia sẻ
1.2. Công cụ hỗ trợ VDM++
1.2.1. Giới thiệu
Việc kết hợp giữa VDM++ và UML (biểu đồ lớp và biểu đồ tuần tự) giúp cho

việc sử dụng phần mềm vào hỗ trợ phân tích mô hình hóa. Một trong những giới hạn
của UML là chỉ cho phép xem xét được cấu trúc của các class. Bằng việc sử dụng
Overture và Modelio, người phân tích thiết kế có thể thực hiện mô hình UML trong


×