CHƯƠNG 1 GIỚI THIỆU Bối cảnh nghiên cứu Trong những năm qua, dữ liệu thuộc hầu hết các lĩnh vực đều tăng lên nhanh chóng [1]. Với sự gia tăng một cách bùng nổ của dữ liệu toàn cầu, thuật ngữ Big Data (dữ liệu lớn) được sử dụng để mô tả về các thư viện dữ liệu với kích thước rất lớn [2]. Công nghệ phần mềm (CNPM) cũng nằm trong ngữ cảnh của Big Data vì nhiều lý do [3]. Trong đó, chúng ta có thể chia ra thành hai khía cạnh chính: Khía cạnh vật lý: Số lượng các thành phần phần mềm nói chung được tạo ra ngày càng nhiều, làm cho kích thước của các thư viện phần mềm trở nên rất lớn.
Bên cạnh đó, số lượng người dùng đối với một phần mềm nói chung ngày càng tăng, làm cho lượng dữ liệu tương tác cũng trở nên vô cùng lớn, ví dụ như dữ liệu của các mạng xã hội, dữ liệu trong các tập tin nhật ký (log file) của các phần mềm nói chung. Khía cạnh luận lý: Bên cạnh số lượng thành phần lớn, bản thân độ phức tạp trong mã lệnh chương trình cũng tạo ra độ phức tạp tính toán lớn. Vấn đề này càng đặc biệt trong bài toán phân tích chương trình. Khi đó, số lượng trạng thái sinh ra của một chương trình nhỏ cũng sẽ là rất lớn.
Ví dụ, một đoạn mã nhỏ nhưng với vài điều kiện rẽ nhánh hoặc vòng lặp lồng nhau thì số lượng trường hợp xử lý cũng trở nên rất lớn. Xu hướng của CNPM hiện nay là khai thác dữ liệu từ các kho Big Data. Một trường hợp điển hình của xu hướng này là phát triển phần mềm bằng cách khai thác mã nguồn từ các thư viện có sẵn như GitHub [4], BitBucket [5]. Xu hướng này được gọi là lập trình với “Big Code” [6].
Để khai thác và sử dụng các thư viện này, chúng ta cần có cơ chế tổ hợp và tái sử dụng các đoạn mã nói riêng hay các thành phần phần mềm nói chung. Một xu hướng khác của CNPM hiện nay là viết mã như là lập trình ngôn ngữ tự nhiên [7]. Đây là phương pháp viết mã bằng cách sử dụng các ngôn ngữ gần với ngôn ngữ tự nhiên, sau đó tinh chế dần thành các đặc tả. Sau khi có được bản đặc tả, quá trình phát triển phần mềm là quá trình tìm kiếm, lắp ghép, tổ hợp các thành phần phù hợp lại với nhau.
Nghiên cứu trong luận án này được xây dựng dựa trên ý tưởng kết hợp hai xu hướng nêu trên. Đó là phát triển phần mềm dựa trên việc tổ hợp thành phần trong bối cảnh kho thành phần quy mô lớn. Trong đó, yêu cầu của người dùng lẫn thành phần tái 1 sử dụng được đặc tả hình thức. Luận án tập trung giải quyết loại thành phần phổ biến hiện nay là các dịch vụ Web trong kiến trúc hướng dịch vụ.1 Vấn đề tái sử dụng thành phần Bên cạnh nguồn dữ liệu cần phải xử lý lớn, môi trường hoạt động của các phần mềm ngày nay cũng có sự thay đổi nhanh chóng.
Các sản phẩm phần mềm nói chung phải có tốc độ hoàn thiện nhanh và đáp ứng tốt các yêu cầu đa dạng của người dùng. Foster [8], phương pháp tái sử dụng thành phần được xem là phương pháp phát triển nhanh phần mềm có nhiều ưu điểm và được sử dụng rộng rãi nhất. Foster, để sử dụng phương pháp tái sử dụng thành phần thì chúng ta phải giải quyết hai vấn đề chính là: làm thế nào để nhanh chóng tìm ra thành phần phù hợp để tái sử dụng; và tính toán, đánh giá mức độ phù hợp của tổ hợp kết quả với yêu cầu của người dùng. Hai vấn đề này rõ ràng có sự ảnh hưởng rất lớn trong bối cảnh Big Data, khi mà số lượng thành phần bùng nổ và các thành phần càng phức tạp làm cho độ phức tạp tính toán trong quá trình tổ hợp, tái sử dụng là rất lớn.
Với sự phức tạp cả về khía cạnh vật lý (số lượng thành phần lớn) lẫn khía cạnh luận lý (độ phức tạp tính toán) như vậy, rõ ràng việc tìm kiếm và tái sử dụng thành phần khó có thể thực hiện thủ công mà phải được thực hiện một cách tự động. Các thành phần Khung thức Phần mềm/ phần mềm tổ hợp nguyên mẫu tái sử dụng thành phần phần mềm Yêu cầu của người dùng Hình 1-1. Quy trình tái sử dụng thành phần Hình 1-1 mô tả quy trình tái sử dụng thành phần để phát triển nhanh phần mềm, đáp ứng yêu cầu của người dùng. Trong đó, khung thức tổ hợp thành phần đóng vai trò rất quan trọng, thực hiện chức năng tìm kiếm các thành phần phù hợp yêu cầu của người dùng, tính toán các khả năng tổ hợp cũng như đánh giá mức độ phù hợp của tổ hợp kết quả với yêu cầu người dùng.
Rõ ràng khung thức này cần phải được thực hiện tự động ở một mức độ nào đó. Ngoài ra, các thành phần phần mềm tái sử dụng và yêu cầu của người dùng cũng cần phải được đặc tả hình thức ở một mức độ nào đó để máy tính (khung thức tổ hợp) có thể hiểu được, thực hiện việc tổ hợp và tái sử dụng một cách tự động.2 Bài toán tổ hợp dịch vụ Web Kiến trúc hướng dịch vụ (Service Oriented Architecture – SOA) là kiến trúc phần mềm giúp xây dựng các hệ thống CNTT thông qua các thành phần được đóng gói dưới dạng các dịch vụ. Ngày nay, các dịch vụ hầu hết được cung cấp dưới dạng các dịch vụ Web. Các dịch vụ Web là các dịch vụ mà chúng hoạt động và giao tiếp thông qua môi trường mạng, sử dụng các giao thức Internet như HTTP và SOAP [9].
Một dịch vụ Web cung cấp hoàn chỉnh một hoặc một số chức năng nào đó. Các dịch vụ Web hiện nay được phân thành hai loại [10]: Dịch vụ Web SOAP (SOAP Web service): Là dịch vụ Web hoạt động dựa trên giao thức SOAP – giao thức truyền thông điệp dựa trên XML. Dịch vụ Web SOAP được mô tả bằng một ngôn ngữ mô tả dịch vụ, chẳng hạn như OWL-S [11], WSDL [12]. Dịch vụ Web REST (RESTful Web service): Là ứng dụng Web hoạt động theo kiến trúc REST [10].
Trong đó, dịch vụ được cung cấp dưới dạng một tài nguyên có định danh URI và được truy cập thông qua các phương thức HTTP như GET, POST,. Các dịch vụ Web REST cho phép truy cập trực tiếp vào dịch vụ thông qua URI và cho phép sử dụng nhiều định dạng dữ liệu khác nhau như chuỗi văn bản thô, định dạng JSON, HTML hoặc XML. Robie và cộng sự đã đề xuất ngôn ngữ RSDL [13]. Đây là ngôn ngữ dựa trên XML giúp chúng ta mô tả chức năng của dịch vụ Web REST giống như các ngôn ngữ WSDL, OWL-S của dịch vụ Web SOAP.
Tổ hợp dịch vụ Web (Web Services Composition – WSC) là một vấn đề rất quan trọng của SOA [14]. WSC là quá trình tạo ra các dịch vụ Web phức hợp từ các dịch vụ Web thành phần. WSC là một trong những vấn đề thách thức trong những năm gần đây [15], khi số lượng dịch vụ Web thành phần được cung cấp ngày càng tăng và các yêu cầu tổ hợp từ người dùng càng trở nên phức tạp. Chen và cộng sự [16], ngoài các ràng buộc về chức năng, người dùng còn quan tâm đến các ràng buộc phi chức năng của dịch vụ, gồm có ràng buộc về chất lượng và ràng buộc quan hệ thời gian giữa các dịch vụ.
Có nhiều thuộc tính có liên quan đến chất lượng dịch vụ (Quality of Service – QoS), chẳng hạn như thời gian đáp ứng, chi phí cho việc gọi thực thi, hay tính sẵn sàng của dịch vụ. Do đó, việc lựa chọn một cách tổ hợp thỏa mãn các ràng buộc về chất lượng cũng là một yêu cầu hết sức cần thiết trong vấn đề tổ hợp dịch vụ Web. 3 Chúng ta hãy xem xét ví dụ sau: Giả sử chúng ta có một thư viện gồm có 10 dịch vụ Web hỗ trợ cho việc đặt chuyến du lịch trực tuyến, các dịch vụ này có các thuộc tính chức năng (đầu vào, đầu ra), thuộc tính chất lượng về thời gian đáp ứng (respTime) và tính sẵn sàng của dịch vụ (Avai) được trình bày như trong Bảng 1-1. Thư viện các dịch vụ Web hỗ trợ đặt chuyến du lịch trực tuyến # Tên dịch vụ Đầu vào Đầu ra RespTime (s) Avai (%) 1 HotelReserveService (HR) Dates, Hotel HotelReservation 5 100 2 CityHotelService (CH) City Hotel 3 100 3 HotelCityService (HC) Hotel City 3 100 4 HotelPriceService (HP) Hotel Price 10 95 5 SightseeingCityService(SC) Sightseeing City 2 90 6 SightseeingCityHotelService(SCH) Sightseeing City, Hotel 16 80 7 CitySightseeingService(CS) City Sightseeing 4 90 8 ActivityBeachService(ABS) Activity Beach 5 85 9 AreaWeatherService(AWS) Area Weather 5 90 10 CityWeatherService (CWS) City, Dates Weather 5 90 Giả sử người dùng có yêu cầu là họ sẽ cung cấp thông tin về địa danh (Sightseeing) và khoảng thời gian sẽ đi du lịch (Dates).
Họ muốn biết các thông tin về giá thuê phòng (Price) cũng như thông tin về thủ tục đặt phòng (HotelReservation) của các khách sạn gần địa điểm du lịch của họ. Bên cạnh những yêu cầu về mặt chức năng nêu trên, người dùng cũng có một số yêu cầu nhất định về chất lượng dịch vụ. Họ muốn tổng thời gian đáp ứng (respTime) của dịch vụ/ tổ hợp dịch vụ không được vượt quá 30 giây (s). Ngoài ra, người dùng cũng muốn lấy thông tin về giá (Price) trước các thông tin về đặt phòng (HotelReservation) vì giá là tiêu chí quan trọng để chọn khách sạn.
Yêu cầu này thể hiện ràng buộc quan hệ thời gian giữa các dịch vụ. Các yêu cầu của người dùng được trình bày trong Bảng 1-2. Trong đó, biểu thức G(¬HotelReservation U Price) là một biểu thức luận lý thời gian [17], với G là phép toán Globally, U là phép toán Until (được trình bày chi tiết trong Chương 2), có ý nghĩa là “không bao giờ có thông tin về HotelReservation cho đến khi có thông tin về Price”, hay nói cách khác, thông tin về Price phải luôn có trước thông tin về HotelReservetion. Các yêu cầu về đặt chuyến du lịch của người dùng Loại ràng buộc Giá trị Ràng buộc chức năng: Đầu vào: Dates, Sightseeing Đầu ra: Price, HotelReservation Ràng buộc chất lượng: RespTime ≤ 30 ∧ Avai ≥ 80 Ràng buộc quan hệ thời gian: G(¬HotelReservation U Price) 4 Với thư viện dịch vụ Web như trong Bảng 1-1 và yêu cầu người dùng như trong Bảng 1-2, các bước tổ hợp được diễn ra như minh họa trong Hình 1-2.
Ở mỗi bước tổ hợp, mỗi trạng thái sẽ có 10 nhánh rẽ tương ứng với 10 khả năng tổ hợp dịch vụ.