Chương 1: Tổng quan về phương pháp phát triển hướng mô hình trong phát triển phần mềm (MDSD/MDSE). Chương đầu tiên tập trung đề cập đến phương pháp phát triển hướng mô hình trong phát triển phần mềm, tìm hiểu các thuật ngữ và các thành phần thiết yếu. Sau đó trình bày cụ thể hơn về phạm vi chuyển đổi mô hình, gồm chuyển đổi mô hình sang mô hình và mô hình sang văn bản. Chương 2: Hướng tới khía cạnh cụ thể của chuyển đổi mô hình sang văn bản, với ứng dụng phổ biến nhất là sinh mã nguồn tự động (Code generation).
Khi áp dụng phương pháp này, ngoài các chế tác có thể sinh ra từ các mô hình thì chương này tập trung vào chế tác sinh mã nguồn tự động, sử dụng công cụ chuyển đổi, ngôn ngôn ngữ chuyển đổi, cụ thể sẽ áp dụng ngôn ngữ Acceleo. Qua đó thống kê đánh giá các mặt tích cực, hạn chế của phương pháp được áp dụng. Chương 3: Với khía cạnh sinh mã nguồn đã trình bày trong chương trước, chương 3 tập trung nghiên cứu bài toán cụ thể sinh mã nguồn Java từ biểu đồ lớp với input/output cần thiết. Ứng với bài toán này, chương 3 mô tả các quy tắc chuyển đổi, ví dụ áp dụng, template, dữ liệu mẫu… Chương 4: Cài đặt ví dụ cụ thể của phương pháp áp dụng chuyển đổi mô hình sang mã nguồn Java và kết quả thực nghiệm, đánh giá kết quả đạt được (kết quả, hạn chế) và hướng nghiên cứu, phát triển mới trong tương lai.
KIẾN THỨC NỀN TẢNG Chương đầu tiên sẽ khái quát các kiến thức nền tảng xoay quanh đề tài nghiên cứu, các thuật ngữ chính và các công cụ hỗ trợ. Chương gồm các phần chính: tổng quan phát triển phần mềm hướng mô hình và các khái niệm cốt lõi, chuyển đổi từ mô hình sang mô hình hoặc từ mô hình sang văn bản, và phần cuối là tổng kết chương. Phát triển phần mềm hướng mô hình Mô hình (model) là một sự trừu tượng của hệ thống thường được sử dụng để thay thế cho hệ thống đang được nghiên cứu. Nhìn chung, một mô hình đại diện cho một cái nhìn đơn giản và phân mảnh từng phần của một hệ thống, do vậy, việc tạo ra nhiều mô hình là khá cần thiết để thể hiện và hiểu rõ hơn về hệ thống đang được tiếp cận nghiên cứu.
Mô hình hóa là một phương pháp kỹ thuật nổi tiếng được áp dụng bởi các lĩnh vực kỹ thuật cũng như các lĩnh vực khác như Vật lý, Toán học, Sinh học, Kinh tế, Chính trị và Triết học… Tuy nhiên, luận văn sẽ chỉ tập trung vào các mô hình trong bối cảnh cụ thể đó là lĩnh vực kỹ thuật phần mềm. Điều đó có nghĩa là các mô hình có bản chất dựa trên ngôn ngữ và có xu hướng mô tả hoặc quy định một hệ thống nào đó, ví dụ với các mô hình trong Toán học vốn được hiểu là diễn giải một lý thuyết. Các mô hình cho phép chia sẻ tầm nhìn chung giữa các bên liên quan về cả mặt kỹ thuật và phi kỹ thuật, tạo điều kiện và thúc đẩy giao tiếp giữa các bên. Hơn nữa, các mô hình còn làm cho việc lập kế hoạch dự án hiệu quả hơn đồng thời cung cấp một cái nhìn phù hợp hơn về hệ thống được phát triển qua đó cho phép kiểm soát dự án theo các tiêu chí đã đặt ra từ ban đầu.
Ngày nay, một xu hướng tiếp cận mới đã xuất hiện, với góc nhìn các mô hình không chỉ là các chế tác về mặt tài liệu, mà còn là chế tác về việc triển khai thực hiện trong lĩnh vực kỹ thuật phần mềm, cho phép tạo hoặc thực thi tự động các hệ thống phần mềm. Các đề xuất xoay quanh mô hình như vậy được gọi chung là “Kỹ thuật phát triển phần mềm theo hướng mô hình (Model-Driven Software Enginerring – MDSE)”. Đây không phải là một kỹ thuật cụ thể, mà là một cách tiếp cận, nhằm mục đích định hướng vấn đề theo hướng mô hình hóa. Kỹ thuật phát triển phần mềm theo hướng mô hình (MDSE) có thể được hiểu như một phương pháp luận nhằm áp dụng các ưu điểm của mô hình hóa vào các kỹ thuật phần mềm.
Trong ngữ cảnh của MDSE, các khái niệm cốt lõi là: mô hình và phép chuyển đổi (transformation) tức là các hoạt động thao tác trên mô hình. Dưới đây là phương trình nổi tiếng của tác giả Niklaus Wirth [8] cho thấy các chương trình được tạo ra từ các thành phần cốt lõi: Algorithms + Data Structures = Programs 3 Điều này có nghĩa là các chương trình được tạo nên từ 2 thành phần chính gồm: Thuật toán (Algorithms) và Cấu trúc dữ liệu (Data Structures). Tuy nhiên trong ngữ cảnh MDSE, điều này sẽ được nhìn nhận dưới góc nhìn khác, chương trình (có thể hiểu là một sản phẩm phần mềm) được tạo thành từ 2 thành phần chính: mô hình và các phép chuyển đổi: Models + Transformations = Software Rõ ràng, cả mô hình và phép chuyển đổi đều cần được thể hiện dưới một dạng ký hiệu nào đó hoặc ngôn ngữ nào đó, mà trong MDSE gọi là ngôn ngữ mô hình hóa (theo cách tương tự như trong phương trình Wirth, các thuật toán và cấu trúc dữ liệu cần được định nghĩa trong một số ngôn ngữ lập trình). Tuy nhiên, điều này vẫn chưa đủ.
Phương trình không cho chúng ta biết loại mô hình nào và theo thứ tự nào, ở mức trừu tượng nào… cần được xác định tùy thuộc vào loại phần mềm chúng ta muốn tạo ra. Đó là lúc quá trình lựa chọn theo mô hình phát huy tác dụng. Cuối cùng cần một bộ công cụ thích hợp để làm cho MDSE khả thi và hữu ích hơn trong thực tế. Đối với lập trình, chúng ta cần các IDE (Integrated Development Environment – Môi trường tích hợp phát triển) cho phép chúng ta xác định các mô hình và phép chuyển đổi cũng như trình biên dịch hoặc trình thông dịch để thực thi chúng nhằm tạo ra các tạo tác phần mềm cuối cùng.
Dưới góc nhìn của MDSE giống như nguyên tắc cơ bản “mọi thứ đều là một đối tượng”, thì MDSE coi “mọi thứ đều là mô hình”, hữu ích trong thúc đẩy công nghệ theo hướng đơn giản, tổng quát và sức mạnh tích hợp cho các ngôn ngữ và công nghệ hướng đối tượng trong những năm 1980 [5]. Trên thực tế trong bối cảnh này, người ta có thể nghĩ ngay đến tất cả các thành phần được mô tả ở trên như một thứ có thể được mô hình hóa. Đặc biệt, người ta có thể xem các phép chuyển đổi là các mô hình hoạt động cụ thể trên các mô hình. Bản thân định nghĩa của ngôn ngữ mô hình hóa có thể được xem như là một mô hình: MDSE đề cập đến quy trình này là siêu mô hình hóa (tức là mô hình hóa một mô hình, hoặc hơn thế…).
Theo cách này, người ta có thể định nghĩa các mô hình cũng như các quy trình, công cụ phát triển và chương trình kết quả. Phần tiếp theo, luận văn sẽ đi lướt qua các khái niệm, thuật ngữ chính nhằm tăng sự hiểu biết cần thiết đối với phương pháp luận MDSE trước khi áp dụng vào bài toán trong ngữ cảnh cụ thể. Các thuật ngữ chính Hình 1.1 dưới đây cho thấy một cách trực quan về mối quan hệ giữa các thuật ngữ mô tả phương pháp mô hình hóa [8]. Mối quan hệ giữa các thuật ngữ viết tắt MD*.
Trong đó: • Phát triển hướng mô hình (Model-Driven Development – MDD) là mô hình phát triển sử dụng các mô hình làm thành phần chính của quá trình phát triển. Thông thường, trong MDD, việc triển khai được tạo tự động (bán tự động) từ các mô hình. • Kiến trúc hướng mô hình (Model-Driven Architecture – MDA) là một kiến trúc phát triền của MDD do “Nhóm quản lý đối tượng” (Object Management Group – OMG) đề xuất và do đó dựa trên việc sử dụng các tiêu chuẩn OMG. Do đó, MDA có thể được coi là một tập con của MDD, trong đó các ngôn ngữ mô hình hóa và chuyển đổi được tiêu chuẩn hóa bởi OMG.
• Kỹ thuật dựa trên mô hình hoặc “phát triển dựa trên mô hình” (Model-based engineering – MBE) để chỉ phiên bản MDE mềm hơn. Có nghĩa là quy trình MBE là một quy trình trong đó các mô hình phần mềm đóng một vai trò quan trọng mặc dù chúng không nhất thiết phải là tạo tác chính của sự phát triển (tức là các mô hình không “điều khiển” quy trình như trong MDE). Một ví dụ sẽ là một quá trình phát triển trong đó, trong giai đoạn phân tích, các nhà thiết kế chỉ định các mô hình miền của hệ thống nhưng sau đó các mô hình này được giao trực tiếp cho các lập trình viên dưới dạng bản thiết kế để lập trình theo cách thủ công (không liên quan đến việc tạo mã tự động và không có định nghĩa rõ ràng của bất kỳ mô hình nền tảng cụ thể nào). Trong quá trình này, các mô hình vẫn đóng một vai trò quan trọng nhưng không phải là tạo tác trung tâm của quá trình phát triển và có thể kém hoàn thiện hơn (tức là chúng có thể được sử dụng nhiều hơn như các bản thiết kế 5 hoặc bản phác thảo của hệ thống) so với các mô hình trong cách tiếp cận MDD.
MBE là một tập con của MDE. Tất cả các quy trình dựa theo hướng mô hình hóa đều dựa trên mô hình, nhưng không phải ngược lại. Các cấp độ của MDSE Phần này sẽ đi vào chi tiết về các thành phần của MDSE, làm rõ rằng mô hình hóa có thể được áp dụng ở các mức độ trừu tượng khác nhau. Bên cạnh đó sẽ mô tả vai trò và bản chất của các phép chuyển đổi mô hình.
MDSE cung cấp một tầm nhìn toàn diện để phát triển hệ thống.2 dưới đây cho thấy tổng quan về các khía cạnh chính được xem xét trong MDSE và tóm tắt cách giải quyết các vấn đề khác nhau. MDSE tìm kiếm các giải pháp theo các khía cạnh: khái niệm hóa (các cột trong hình) và thực hiện hóa (các hàng trong hình). Tổng quan về phương pháp MDSE (quy trình từ trên xuống). Vấn đề thực hiện hóa (implement) [8] liên quan đến việc ánh xạ các mô hình tới một số hệ thống đang thực thi hiện tại hoặc trong tương lai.
Do đó sẽ bao gồm việc xác định ba khía cạnh cốt lõi. • Cấp độ mô hình (Model-level): nơi các mô hình được xác định. • Cấp độ hiện thực hóa (Realization-level): nơi các giải pháp được thực hiện thông qua các mã nguồn thực sự được sử dụng trong hệ thống đang thực thi. • Cấp độ tự động hóa (Automation-level): nơi đặt các ánh xạ từ cấp độ mô hình hóa đến cấp độ hiện thực hóa.