1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

71 742 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 2,98 MB

Nội dung

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.. Ngôn ngữ VDM++ mở rộng của VDM

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

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

Trang 4

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

Trang 5

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

Trang 6

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

Trang 7

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

Method

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

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

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

15 CT Combinatorial Testing Kiểm tra tổ hợp

Trang 8

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

Trang 9

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

Trang 10

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

Trang 11

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

Trang 12

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]

Trang 13

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ố.

Trang 14

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

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:

Trang 15

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:

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

class class name

instance variables

instance variable definition 1;

instance variable definition 2;

instance variable definition n

end class name

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

end class name

Trang 16

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:

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:

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

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

Trang 17

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:

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

Trang 18

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

Trang 19

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:

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

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:

Hình 1 9 Khởi tạo kiểu product

type 1 | type 2 | type 3 | | type n

type 1 * type 2 * type 3 * * type n

mk_(value 1, value 2, value 3, , value n)

Trang 20

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

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:

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:

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

Trang 21

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

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 psubset s2 Proper subset setofA*setofA->bool

s1 <> s2 Inequality setofA*setofA->bool

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

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

inverse m Map inverse Inmap A to B -> inmap B to A

Trang 22

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

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

Trang 23

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)

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)

Hình 1 14 Cấu trúc khai báo hàm không tường minh

class class name

end class name

function name (parameters) result name and type

Trang 24

Phương thức

Khai báo phương thức tường minh (Explicit Operation)

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)

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

Hình 1 17 Cấu trúc khai báo phương thức ở mức trừu tượng

operation name: parameter types ==> result type

post predicatepost expr

operation name: parameter types ==> result type

operation name(parameters) ==

is not yet specified

pre predicate

post predicate

Trang 25

Khai báo phương thức dạng ủy thác

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:

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

operation name: parameter types ==> result type

Trang 26

Modelio, sau đó chuyển sang VDM++ bằng cách import mô hình UML từ Modelio vào Overture và export lại UML

1.2.2 Modelio

Modelio là công cụ hỗ trợ vẽ UML diagrams, import/export biểu đồ UML, được

sử dụng kết hợp với Overture để mô hình hóa một hệ thống phần mềm Modelio được cung cấp bởi công ty Softeam, có 2 phiên bản: thương mại và mã nguồn mở Cũng tương tự như Overture, Modelio được phát triển trên nền tảng Eclipse Tải về tại địa chỉ https://www.modelio.org/

Bắt đầu việc mô hình hóa bằng việc tạo biểu đồ lớp UML trong Modelio Sau đó,

để chuyển đổi sang VDM++, chúng ta cần phải xuất biểu đồ lớp UML sang file định dạng uml theo các như sau:

Bước 1 Chọn dự án cần xuất  click chuột phải chọn [XMI]  chọn [export XMI]

Hình 1 20 Xuất biểu đồ UML sang định dạng UML trong Modelio

Bước 2 Chọn đường dẫn xuất file và định dạng xuất (.xmi hoặc uml)

Trang 27

Hình 1 21 Lựa chọn xuất file trong Modelio Bước 3 File xuất thành công

Hình 1 22 Kết quả xuất file UML Bước 4 Sao chép file uml vào dự án cần chuyển đổi sang VDM

Bước 5 Click chuột phải lên file uml  UML Transformation  Convert to VDM

Trang 28

Hình 1 23 Menu chuyển đổi từ UML sang VDM Bước 6 Kết quả chuyển đổi nằm trong thư mục uml_import

Hình 1 24 Danh sách các class sau khi import

Trang 29

1.2.3 Overture

Đây là một IDE miễn phí hỗ trợ việc phát triển và phân tích mô hình hóa bằng VDM++, được phát triển bởi cộng đồng tình nguyện viên từ các nhà khoa học nghiên cứu và sinh viên từ Đan Mạch, Anh, Hà Lan và Nhật Bản Công cụ phát triển trên nền tảng Eclipse Dự án phát triển Overture được quản lý trên GitHub, tại địa chỉ https://github.com/overturetool/overture Phiên bản hiện tại của Overture là 2.2.6 được phát hành vào tháng 6/2015 Tải về tại địa chỉ http://overturetool.org/

Bảng 1 9 Danh sách cộng đồng người dùng Overture

Institute of Technology

Institute for System

Research Associates, Inc

Trang 30

Lomonosov Moscow State

National Institute of

Technical University of

Universität der

University of Twente The Netherlands Val Jones

Trang 31

West Consulting The Netherlands Nico Plat

Bộ công cụ Overture hỗ trợ cả ba loại VDM: VDM-SL, VDM++ và VDM-RT Các bước để tạo một dự án mới trong Overture:

Bước 1 Tạo mới project bằng cách chọn: File -> New -> Project -> Overture

Hình 1 25 Tạo mới dự án VDM++ trong Overture Bước 2 Trong hộp thoại chọn loại VMD mà cần tạo sử dụng (VMD-SL, VDM-

PP hoặc VMD-RT), ở đây chọn VDM-PP

Trang 32

Hình 1 26 Chọn loại dự án VDM Bước 3 Click [Next]

Bước 4 Nhập tên dự án vào [Project name]

Trang 34

Bước 7 Click [Next], chọn thư viện chuẩn cần sử dụng (bỏ qua nếu không cần)

Hình 1 29 Danh sách thư viện Overture hỗ trợ

Ý nghĩa các thư viện như sau:

IO: thư viện cung cấp các hàm để thao tác file

Math: thư viện cung cấp các hàm toán học

VDM-Util: thư viện cung cấp các hàm chuyển đổi các loại khác nhau của VDM

từ String, file

CSV: thư viện cung cấp các hàm thao tác với CSV

VMD-Unit: thư viện cung cấp các hàm cho unit test của VDM giống như thư

viện Junit

Bước 8 Click [Finish] để hoàn thành việc tạo mới dự án

Các tính năng nổi bật Overture hỗ trợ việc mô hình hóa

Do được phát triển trên nền tảng eclipse, nên nó bao gồm đầy đủ các tính năng được eclipse hỗ trợ Để thực thi hoặc gỡ lỗi mô hình VDM, trước tiên ta phải cài đặt cấu hình thực thi Thực hiện điều này bằng cách chọn “Run” menu và chọn Run  Run Configurations Màn hình cấu hình hiện ra như dưới đây, và bạn nhập các giá trị mong muốn thực thi hoặc gỡ lỗi

Trang 35

Hình 1 30 Hộp thoại cấu hình thực thi và gỡ lỗi Bên cạnh đó, khi thực thi hoặc gỡ lỗi Overture còn thực hiện một số kiểm tra lỗi chương trình Các kiểu kiểm tra này mặc định được chọn khi cài đặt Tuy nhiên, ta có thể bỏ qua việc kiểm tra này bằng cách bỏ chọn trong khi cấu hình

Hình 1 31 Hộp thoại cấu hình thực thi và gỡ lỗi

Ngày đăng: 27/04/2016, 07:37

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
5. John Fitzgerald, Sune Wolff (2011), Proceeding of the 9 th Overture Workshop 6. Overture-Community: Overture: Formal modelling in VDM. Website:http://www.overturetool.org/ Sách, tạp chí
Tiêu đề: Proceeding of the 9"th" Overture Workshop "6. Overture-Community: Overture: Formal modelling in VDM." Website
Tác giả: John Fitzgerald, Sune Wolff
Năm: 2011
13. Peter Gorm Larsen, Kenneth Lausdahl, Peter Tran-Jứrgensen, Joey Coleman, Sune Wolff and Lu´ ıs Diogo Couto (2015), Overture VDM-10 Tool Support:User Guide (Version 2.1.6) Sách, tạp chí
Tiêu đề: Overture VDM-10 Tool Support
Tác giả: Peter Gorm Larsen, Kenneth Lausdahl, Peter Tran-Jứrgensen, Joey Coleman, Sune Wolff and Lu´ ıs Diogo Couto
Năm: 2015
14. Website của framework intramart được áp dụng trong dự án. Địa chỉ: http://www.intra-mart.hk/?page=what&amp;id=25 Sách, tạp chí
Tiêu đề: Địa chỉ
1. Peter Gorm Larsen, Kenneth Lausdahl, Nick Battle, John Fitzgerald, Sune Wolff (2011), VDM-10 Language Manual Khác
2. Daisuke Souma, Goro Hatayama, HitoshiOhsaki, Nguyen Van Tang (2012), Modeling and Validating the Train Fare Calculation and Adjustment System Using VDM++ Khác
3. Bernhard K. Aichernig, Rudolf Schlatte, Database Development of a Work-Flow Planning and Tracking System Using VDM-SL Khác
4. Bernhard K. Aichernig, Johann H¨orl, Requirements Validation of a Voice Communication System used in Air Traffic Control Khác
7. Augusto Ribeiro, Peter Gorm Larsen, John Fitzgerald, Kenneth Lausdahl, Kenneth Pierce, Sune Wolff, Nick Battle (2010), Tutorial for Overture/VDM++ Khác
11. Ken Pierce, Counterpoint: Towards a Proof-Support Tool for VDM Khác
12. John Fitzgerald, Peter Gorm Larsen, Paul Mukherjee, Nico Plat, Marcel Verhoef (2004), Validated Designs for Objectoriented Systems Khác
15. Research and Development Headquarters, NTT DATA Corporation (2014), Overview of TERASOLUNA SS Development Methodology Khác

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w