Chương 1. Kiến thức nền tảng : Trình bày cơ sở lý thuyết và các công nghệ chính được sử dụng trong luận văn. Bao gồm: Mô hình hóa chuyên biệt miền, mô hình hóa đặc tả chính sách truy cập RBAC, mô hình hóa quy trình nghiệp vụ và cuối cùng, giới thiệu về công cụ mã nguồn mở Activiti BPM Chương 2. Tích hợp mô đun chính sách truy cập RBAC với Activiti : Trình bày phương pháp tích hợp chính sách an ninh vào quy trình nghiệp vụ và ứng dụng của phương pháp vào việc tích hợp chính sách truy cập RBAC vào Activiti BPM Chương 3.
Cài đặt và thực nghiệm : Trình bày bài toán vận tải hiện đang được triển khai tại Trung tâm Tư vấn Thiết kế Mobifone, ứng dụng kết quả của luận văn để giải quyết bài toán và cài đặt trên Activiti BPM. Cuối cùng là các kết quả đạt được. KIẾN THỨC NỀN TẢNG 1. Giới thiệu chương Chương này sẽ trình bày cơ sở lý thuyết và các công nghệ chính được sử dụng trong luận văn.
Bao gồm ba nội dung chính là: Mô hình hóa chuyên biệt miền: các khái niệm và kiến trúc của DSM; cú pháp và ngữ nghĩa của một ngôn ngữ mô hình hóa chuyên biệt miền DMSL. Mô hình hóa và đặc tả chính sách truy cập RBAC: các khái niệm cơ bản về Core RBAC và ràng buộc phân quyền. Từ đó, xây dựng mô hình metamodel cho RBAC. Mô hình hóa và thực thi quy trình nghiệp vụ với Activiti BPM: khái niệm, thành phần, vòng đời và tiêu chuẩn ký hiệu BPMN của quy trình nghiệp vụ.
Cuối cùng, giới thiệu công cụ mã nguồn mở Activti BPM cho việc mô hình hóa và thực thi quy trình nghiệp vụ một cách tự động. Mô hình hóa chuyên biệt miền Các hệ thống phần mềm hiện nay ngày càng trở nên phức tạp, muốn cải thiện hiệu suất phát triển phần mềm không chỉ tốc độ mà còn chất lượng hệ thống được tạo ra, các nhà nghiên cứu đã cố gắng tìm ra một phương pháp tự động chuyển từ mô hình sang code. Do đó, mô hình hóa chuyên biệt miền (DSM) đã ra đời. DSM sử dụng một ngôn ngữ mô hình hóa chuyên biệt miền (DSML) để sinh code đầy đủ từ mô hình và code được sinh ra có ít lỗi hơn là code viết bằng tay [6].
Khái niệm DSM chủ yếu tập trung vào hai vấn đề. Đầu tiên, nâng cao mức độ trừu tượng trên cả lập trình bằng cách xác định một ngôn ngữ trực tiếp sử dụng các khái niệm và các luật từ miền vấn đề cụ thể. Thứ hai, tạo ra sản phẩm cuối cùng trong một ngôn ngữ lập trình đã chọn hoặc một hình thức khác từ các đặc tả mức cao đó. Thông thường, bộ sinh code tiếp tục được hỗ trợ bởi một số nền tảng (framework).
Tự động hóa phát triển phần mềm có thể trở nên phổ biến bởi vì ngôn ngữ mô hình hóa, bộ sinh code và code của framework đã phù hợp với các yêu cầu của miền ứng dụng. Nói cách khác chúng là chuyên biệt miền và chúng hoàn toàn được kiểm soát bởi người dùng. Các mức độ trừu tượng cao Sự trừu tượng rất quan trọng trong phát triển phần mềm. Trong suốt lịch sử phát triển phần mềm, nâng cao mức độ trừu tượng là nguyên nhân của các bước nhảy vọt trong hiệu suất của nhà phát triển.
Nếu nâng cao mức độ trừu tượng làm giảm tính phức tạp thì làm sao để tiếp tục nâng cao nó.1 thể hiện, các nhà phát triển tại 3 các thời điểm khác nhau đã thu hẹp khoảng cách trừu tượng giữa ý tưởng trong miền và cài đặt của chúng.1: Thu hẹp khoảng cách trừu tượng giữa ý tưởng miền và cài đặt của chúng Bước đầu tiên trong phát triển bất kỳ phần mềm nào luôn là nghĩ về giải pháp liên quan đến miền vấn đề - một giải pháp ở mức độ trừu tượng cao nhất (bước 1). Ví dụ, quyết định nên hỏi tên người trước hay hỏi phương thức thanh toán trước trong khi đăng ký một hội thảo. Sau khi tìm ra giải pháp sẽ ánh xạ sang đặc tả của một số ngôn ngữ (bước 2). Trong lập trình truyền thống, bước này các nhà phát triển ánh xạ các khái niệm miền vào việc code các khái niệm.
Trong UML hoặc các ngôn ngữ mô hình hóa mục đích chung khác, các nhà phát triển ánh xạ giải pháp miền vấn đề vào đặc tả trong ngôn ngữ mô hình hóa. Bước 3, cài đặt đầy đủ giải pháp: đưa ra các điều kiện đúng và nội dung code cho các vòng lặp. Tuy nhiên, nếu sử dụng các ngôn ngữ mô hình hóa mục đích chung, thì cần ánh xạ bổ sung từ mô hình sang code. Điều đáng chú nhất ở đây là các nhà phát triển vẫn phải thực hiện từ bước 1 mà không có bất kì công cụ nào hỗ trợ, đặc biệt để giải quyết các lỗi phát sinh trong giai đoạn phát triển thường tốn nhiều chi phí nhất.
Tự động sinh code Trong bước 3, việc sinh code tự động từ thiết kế UML là không thể. Thay vì yêu cầu nhà phát triển nắm vững cả miền vấn đề và lập trình, một giải pháp tốt hơn cho phép các nhà phát triển đặc tả ứng dụng dưới dạng đã từng biết và sử dụng, sau đó có các bộ sinh code sử dụng các đặc tả đó và tạo ra cùng loại code giống như họ viết bằng tay. Điều này sẽ làm tăng mức độ trừu tượng đáng kể; từ việc lập trình với byte/bit, thuộc tính và kết quả trả về; lên đến các khái niệm và luật lệ của miền vấn đề mà các nhà phát triển đang làm việc với. Sau đó, ngôn ngữ lập trình mới này hợp nhất với bước 1 và bước 2 và tự động hóa hoàn toàn ở bước 3.
Mức độ trừu tượng được nâng lên gắn liền với code được sinh tự động là mục đích của DSM. 4 DSM không kỳ vọng rằng tất cả code có thể được sinh ra từ các mô hình nhưng bất cứ gì mô hình hóa được từ quan điểm của người mô hình hóa thì đều sinh ra code hoàn chỉnh. Trong DSM, code được sinh ra dễ đọc và hiệu quả - lý tưởng là giống như code được viết bởi những nhà phát triển giàu kinh nghiệm, những người định nghĩa ra bộ sinh code. Code được sinh ra thường được hỗ trợ bởi framework với mục đích nhất định cũng như bởi các nền tảng, thư viện, thành phần và các code kế thừa khác.
Bộ sinh code không chỉ giới hạn bất kì ngôn ngữ hay kiểu lập trình nào. Ví dụ kết quả của bộ sinh code có thể là ngôn ngữ lập trình hướng đối tượng hoặc ngôn ngữ lập trình cấu trúc hay chức năng, nó có thể là ngôn ngữ lập trình truyền thống, một ngôn ngữ kịch bản, các định nghĩa dữ liệu hoặc một file cấu hình. Tóm lại, DSM về cơ bản nâng cao mức độ trừu tượng trong khi thu hẹp không gian thiết kế (thường là các sản phẩm trong một công ty). Cùng với ngôn ngữ mô hình hóa chuyên biệt miền DSML, vấn đề sẽ được giải quyết khi việc mô hình hóa trực quan giải pháp mà chỉ sử dụng các khái niệm miền quen thuộc.
Sản phẩm cuối cùng được sinh tự động bởi các bộ sinh code chuyên biệt miền. Với DSM, không cần ánh xạ từ khái niệm miền sang khái niệm thiết kế và cuối cùng sang khái niệm ngôn ngữ lập trình. DSM tuân theo công thức: cung cấp mức độ trừu tượng cao hơn và thực hiện ánh xạ tự động từ các khái niệm mức cao hơn sang các khái niệm mức thấp hơn đã biết và sử dụng trước đó. Kiến trúc của DSM gồm 3 thành phần chính là ngôn ngữ, bộ sinh code và framework miền như hình 1.2: Kiến trúc cơ bản của DSM Ngôn ngữ chuyên biệt miền : cung cấp cơ chế trừu tượng để giải quyết sự phức tạp của miền cho trước.
Điều này được thực hiện bằng cách cung cấp các khái niệm và các luật trong một ngôn ngữ biểu diễn miền ứng dụng hơn là các khái niệm của một ngôn ngữ 5 lập trình nhất định. Nhìn chung, các khái niệm miền chính ánh xạ lên các đối tượng của ngôn ngữ mô hình hóa, trong khi các khái niệm miền khác sẽ được coi như thuộc tính đối tượng, các kết nối, các mô hình con hoặc các đường dẫn đến mô hình. Bởi vậy, ngôn ngữ này cho phép nhà phát triển làm việc trực tiếp với các khái niệm miền. Ngôn ngữ này được định nghĩa như một metamodel với các ký hiệu và công cụ hỗ trợ.
Bộ sinh code xác định làm sao thông tin được lấy ra từ mô hình và chuyển đổi sang code. Trong trường hợp đơn giản nhất, mỗi symbol (ký tự) mô hình hóa tạo ra code nhất định, bao gồm các giá trị được nhập vào trong symbol là các tham số. Bộ sinh code cũng có thể tạo ra các code khác nhau phụ thuộc vào các giá trị trong symbol, các mối quan hệ nó có với các symbol khác, hoặc thông tin khác trong mô hình. Code này sẽ được liên kết với framework và được biên dịch thành mã thực thi hoàn chỉnh.
Trong giải pháp DSM, mục tiêu chính là sau khi sinh code không cần bổ sung code bằng tay để thay đổi và mở rộng code đã sinh. Bởi vậy, code đã sinh chỉ đơn giản là một sản phẩm trung gian trên con đường đưa ra sản phẩm cuối cùng. Framework miền: cung cấp giao diện giữa code được sinh ra và các nền tảng phía dưới. Trong một số trường hợp, không cần thêm code của framework: code sinh ra có thể trực tiếp gọi các thành phần nền tảng nếu nó có đủ các dịch vụ.
Mặc dù vậy, việc định nghĩa code hoặc thành phần tiện ích bổ sung giúp code sinh ra dễ dàng hơn. Code sinh ra không được thực hiện một mình mà còn cùng với code thêm vào trong một số môi trường đích. Điều này được sử dụng bất kể việc cài đặt được thực hiện như thế nào, bằng tay hay sử dụng các bộ sinh. Sản phẩm đã phát triển có thể sử dụng một phần của một nền tảng lớn (như J2EE), toàn bộ nền tảng (như Tomcat server) hay một số nền tảng khác.
Ngôn ngữ mô hình hóa chuyên biệt miền Ngôn ngữ chuyên biệt miền (DSL) là một ngôn ngữ lập trình hoặc một ngôn ngữ đặc tả thực thi, thông qua các ký hiệu thích hợp và trừu tượng, tập trung vào biểu diễn; và thường được giới hạn trong một miền cụ thể. DSL làm tăng mức độ trừu tượng bằng cách sử dụng các khái niệm quen thuộc với chuyên gia miền. Trong mô hình hóa chuyên biệt miền, DSL được gọi là DSML được sử dụng cho việc xây dựng mô hình đồ họa cho một hệ thống phần mềm.