Chương 1 GIỚI THIỆU BÀI TOÁN 1.1 Bối cảnh nghiên cứu Trong lịch sử công nghệ phần mềm, vấn đề tự động hóa trong quá trình xây dựng ứng dụng luôn được quan tâm. Những cách tiếp cận để tự động hóa như lập trình logic (Prolog), lập trình đặc tả (ví dụ như Lisp, Alloy) cũng đã đem lại một số kết quả về mặt lý thuyết nhưng tính hiệu quả và độ khả dụng còn nhiều hạn chế (chạy chậm, không có tương tác người máy). Ngoài ra vấn đề này cũng được quan tâm rất nhiều trong lĩnh vực học thuật cũng như công nghiệp từ rất sớm. Những công cụ cho phép sinh mã nguồn từ mô hình UML (ví dụ như công cụ PowerDesigner1 , IBM Rational Rose2 ) hay những công cụ cho phép sinh mã nguồn từ giao diện người dùng (ví dụ như MS Visual Studio3 , Apache NetBeans4 ) được các công ty phát triển mạnh mẽ cũng như sự tiếp nhận của người dùng rất tích cực.
Bài toán sinh mã nguồn cũng chưa bao giờ là bài toán cũ và có lời giải thỏa mã cho người dùng. Hiện nay, với xu thế phát triển những hệ thống thông minh, nhu cầu phần mềm càng được quan tâm nhiều hơn nữa từ đó bài toán này cũng thôi thúc các nhà nghiên cứu cũng như các công ty trong lĩnh vực phát triển phần mềm càng đầu tư và hoàn thiện lời giải. Tuy nhiên, vẫn còn có sự giới hạn giữa việc sinh mã nguồn từ đặc tả ứng dụng bằng các mô hình trừu tượng trong từng lĩnh vực. Điều này cũng có thể giải thích từ nhiều nguyên nhân như quy trình xây dựng phần mềm, phương pháp luận biểu diễn phần mềm hay mức độ tự động sinh mã nguồn hay các yếu tố khác.
Quy trình xây dựng phần mềm 1 https://www.com/products/powerdesigner-data-modeling-tools.html 2 https://www.com/support/pages/ibm-rational-rose-enterprise-7004-ifix001 3 https://visualstudio.com 4 https://netbeans.org/download/index.html 1 được xem là hiệu quả khi quy trình đó đảm bảo phạm vi ứng dụng rộng rãi, thời gian phát triển ngắn cũng như tính tự động cao. Trên thực tế, với sự xuất hiện ngôn ngữ lập trình và các công cụ ngày càng nhiều, cũng như nhiều phương pháp luận chính quy và bán chính quy đã đem lại sự tự động hóa mang tính cục bộ trong quy trình xây dựng phần mềm (một khâu nào đó trong quy trình phát triển phần mềm). Việc tự động hóa cho toàn bộ quá trình phát triển phần mềm rõ ràng vẫn là vấn đề chưa được quan tâm đúng mức. Tuy nhiên, việc tự động hóa cho toàn bộ quá trình này sẽ dẫn đến phạm vi ứng dụng bị giới hạn lại và đó cũng là yếu tố làm cho lĩnh vực này còn bỏ ngỏ nhiều hướng nghiên cứu [2], [10].
Trong bối cảnh đó, chúng tôi đã chọn một hướng để tiếp cận và hiện thực một quy trình phát triển phần mềm mà tính tự động hóa được nâng lên cũng như phạm vi áp dụng được cải thiện. Cụ thể chúng tôi đã chọn quy trình xây dựng các ứng dụng trên thiết bị đeo tay trong lĩnh vực Internet vạn vật một cách tự động. Interner vận vật (IoT) là một lĩnh vực được ứng dụng rất nhiều vào đời sống hiện đại ngày nay. Từ các ứng dụng thông minh trên xe hơi nhằm xác định đường đi ngắn nhất trong lộ trình, hay các thiết bị theo dõi hoạt động cơ thể của chúng ta.
Từ những ứng dụng này, chúng ta thu thập được một dữ liệu cực lớn, giúp cho các thiết bị thông minh, trao đổi chia sẻ thông tin lẫn nhau [11]. Một trong những thiết bị thông minh mà chúng ta thường dùng trong các lĩnh vực về chăm sóc sức khỏe cho đến những cảnh báo về tai nạn, thiên tai,. đó là thiết bị đeo tay (wearables). Thiết bị này với các phần mềm tích hợp được phát triển rất mạnh mẽ trong nhiều lĩnh vực ứng dụng trong cuộc sống.
Trong đó, hệ thống cảnh báo sớm trong sức khỏe là được sử dụng nhiều nhất (Hình 1. Theo thống kê có hơn 400 triệu thiết bị đeo tay được bán ra trên thị trường vào năm 2020 [12]. Trong đó, những công ty mạnh về công nghệ như Apple, SamSung hay Microsoft,. đều đưa ra những sản phẩm đột phá trên thiết bị đeo tay này.
Thiết bị đeo tay với ưu điểm kích thước nhỏ gọn, nguồn điện tiêu tốn ít, kết hợp với các linh kiện thu thập dữ liệu tự động (sensor ) cùng với các ứng dụng (apps) giúp cho chúng đóng vai trò quan trọng trong các hệ thống thông minh ngày nay. Những hệ thống thông minh này, thường sẽ gắn liền với hệ thống Internet cùng với các chương trình xử lý dữ liệu tự động. Đi kèm với các ứng dụng là các tập dữ liệu thu thập theo thời gian, không gian,. giúp cho hệ thống thông minh càng trở nên chính xác và hiệu quả hơn trong cuộc sống.
Cho đến nay, số lượng các ứng dụng trong lĩnh vực IoT hằng năm tăng hơn 10%. Theo tổ chức IoT Analytic5 , năm 2020 những ứng dụng 5 https://iot-analytics.com/top-10-iot-applications-in-2020/ 2 Hình 1.1: Các thiết bị đeo tay đang triển khai trong thực tế hiện nay [1]. trong lĩnh vực IoT trãi đều các lĩnh vực từ công nghiệp sản xuất đến các lĩnh vực chăm sóc sức khỏe và có tốc độ phát triển cao (lĩnh vực công nghiệp sản xuất tăng trên 22%). Trong đó, các ứng dụng chạy trên thiết bị đeo tay cũng đang là xu thế phát triển.
Ngoài ra với việc phát triển ngày càng nhiều thiết bị đeo tay cũng dẫn đến các vấn đề tái sử dụng phần cứng ngày càng nhiều trong hệ thống. Điều này cũng đồng nghĩa việc tổ chức các chương trình cho các thiết bị phải đảm bảo tính mở rộng. Từ đó, chúng tôi cũng đề xuất những hướng thiết kế ứng dụng có thể chạy trên nhiều loại thiết bị đeo tay khác nhau nhưng có cùng kiến trúc và ngược lại. Đây cũng là một tiêu chí mà các nghiên cứu trước đây vẫn còn bỏ ngõ.
Từ những khảo sát trên chúng tôi nhận thấy rằng, việc xây dựng một hướng tiếp cận để hỗ 3 trợ sinh mã nguồn cho các ứng dụng chạy trên thiết bị đeo tay một cách tự động nhanh chóng là nhu cầu cấp thiết. Hướng tiếp cận đó cũng đặt ra nhiều thách thức cho chúng tôi như phạm vi ứng dụng, tỷ lệ mã nguồn tạo ra, tính đúng đắn, thời gian xử lý,. Những vấn đề này, chúng tôi đã trình bày trong những phần sau.1 Vấn đề sinh mã nguồn trên các thiết bị đeo tay Trong bài toán sinh mã nguồn cho các ứng dụng chạy trên thiết bị đeo tay thường chúng ta sẽ gặp các vấn đề như sau: (a) Chưa có khung thức thống nhất cho bài toán sinh mã nguồn nhằm đảm bảo các tính khả thi của bài toán [13]. (b) Phạm vi ứng dụng phải được xác định một cách rõ ràng nhằm đảm bảo tính hợp lý của mã nguồn tạo ra.
Các ứng dụng chạy trên thiết bị thường có nguyên tắc xử lý chung là thu thập dữ liệu, truyền dữ liệu và thực thi các xử lý tiếp theo từ các hệ thống thông minh qua các dữ liệu thu thập được. Nên việc tự động hóa các chức năng này là một thử thách [14, 15]. (c) Việc đặc tả ứng dụng như thế nào để mô tả được các xử lý của ứng dụng. Các xử lý này thường là các qui trình rõ ràng đã được thiết kế trong các hệ thống thông minh [2].
(d) Các mã nguồn sinh ra cho các xử lý trên các thiết bị đeo tay phụ thuộc vào tính đúng đắn của các đặc tả ứng dụng. Ở đây, các đặc tả này thường là các mô hình nên việc kiểm chứng các mô hình này trong giai đoạn đầu của quá trình sinh mã nguồn là một thử thách [16]. (e) Việc đặc tả cho bài toán sinh mã nguồn có sự tách biệt lớn giữa phần cứng và các xử lý nghiệp vụ trong hệ thống. Bởi vì, việc sinh mã nguồn cho bài toán này không chỉ mô tả cho các xử lý nghiệp vụ mà còn phụ thuộc vào cách lắp ráp các linh kiện trong thiết bị [17].
(f) Đồng thời, mã nguồn tạo ra cần có tính tái sử dụng cho các ứng dụng khác nhau trên các thiết bị cùng cấu trúc và ngược lại. Chất lượng của mà nguồn cũng cần được quan tâm.2 Bài toán sinh mã nguồn cho các ứng dụng chạy trên các thiết bị đeo tay trong lĩnh vực Internet vạn vật Hiện nay, việc nghiên cứu sự kết hợp cho ngôn ngữ đặc tả thân thiện với người dùng và một phần mềm hỗ trợ cho phép đưa ra một ứng dụng nhanh chóng là một việc kết hợp thú vị cho bài toán tiếp cận và xây dựng phần mềm [18] [19] [20]. Trong luận án này, chúng tôi xin trình 4 bày về một hướng nghiên cứu, làm thế nào để có thể xây dựng một công cụ mà trong đó việc đặc tả các ứng dụng (cụ thể là các ứng dụng chạy trên thiết bị đeo tay, tạm gọi là Wearable Application) một cách đơn giản như chỉ khai báo bằng các mô hình và các ràng buộc ngữ nghĩa giữa các thực thể. Kiến trúc phần cứng của các thiết bị đeo tay này cũng được đặc tả một cách đơn giản như kéo thả và tự động cấu hình như cấu hình các chân pins trên bo mạch, số lượng các thành phần cần có cho thiết bị.
Công cụ cũng thể hiện tính chặt chẽ và hợp lí của các thiết kế đồng thời cũng có thể ánh xạ sang mã nguồn của ứng dụng. Mã nguồn sinh ra có thể chạy trên thiết bị đeo tay đã được đặc tả trên hệ thống mà tốn ít thời gian để người dùng bổ sung mã nguồn. Chương trình được phát sinh từ công cụ đó có thể thực thi một cách nhanh chóng trên các nền mà vẫn đảm bảo được tính nhất quán từ các phần đặc tả của người dùng. Công cụ mà chúng tôi đề xuất chính là một ngôn ngữ trong ngữ cảnh hẹp (Domain-Specific Language - DSL) với tên gọi là Micraspis, cho các ứng dụng trong các giải pháp thông minh chạy trên nền các thiết bị đeo tay.
Trong công cụ này chúng tôi cũng hướng đến cách tiếp cận là kết hợp giữa mô hình hóa và kết hợp ràng buộc giữa các mô hình bằng các khai báo giúp cho chương trình không những hoàn thiện mà còn đảm bảo tính đúng đắn với thiết kế ban đầu. Bản chất của công cụ này là một một ngôn ngữ chuyên biệt hóa trong ngữ cảnh hẹp. Có rất nhiều công trình xây dựng công cụ sinh mã nguồn cho các ứng dụng chạy trong môi trường Internet vạn vật (IoT Application). Về mặt hiệu quả, nổi bật nhất là công cụ Midgar [5].
Công cụ này cho phép mô hình hóa đặc tả liên kết các các đối tượng và kết hợp khai báo các nút xử lý cho các chức năng của ứng dụng.