Thiết kế bằng kỹ nghệ đảo ngược là thiết kế lấy thông tin từ mã nguồn của chương trình, rồi tạo hoặc cập nhật lại thành một mô hình trên Rational Rose. Thông qua khả năng tích hợp của Rational Rose với một số ngôn ngữ lập
trình khác như: C++/Visual C, Java, Visual Basic, Ada, CORBA, XML ..., Rational Rose hỗ trợ cơ chế thiết kế kỹ nghệ đảo ngược thành một mô hình UML.
Một trong những thách thức của các đề án Công nghệ thông tin là giữ cho mô hình đối tượng nhất quán với mã trình. Khi thay đổi các yêu cầu, thường thì ta có khuynh hướng thay đổi mã trực tiếp, thay vì thay đổi mô hình rồi phát sinh mã. Trong Rose, ta có thể tái thiết kế hệ thống phần mềm với kĩ thuật đảo ngược đảm bảo cho mô hình đồng bộ với mã trình.
Trong tiến trình thiết kế bằng kĩ thuật đảo ngược, Rose sẽ thu thập các thông tin về: các lớp, các thuộc tính , các tác vụ, các mối quan hệ, các các gói, các thành phần... trong chương trình nguồn. Nó sẽ sử dụng các thông tin này để tạo mới hoặc cập nhật một mô hình đối tượng. Nếu ta có một tệp tin mã nguồn chứa một lớp, tiến trình thiết kế kĩ thuật đảo ngược sẽ tạo ra một lớp tương ứng trong mô hình Rose, mỗi thuộc tính và tác vụ của lớp sẽ xuất hiện dưới dạng các thuộc tính và các tác vụ của lớp mới trong mô hình Rose. Cùng với tên thuộc tính và tên tác vụ, Rose đưa thêm vào các thông tin về tầm hoạt động, kiểu dữ liệu và các giá trị ngầm định.
Nếu ban đầu ta dùng Rose để tạo ra các lớp, dùng kĩ thuật dịch xuôi để phát sinh mã trình, sau đó thực hiện một số thay đổi với các lớp trong mã trình, các thay đổi này sẽ được phản ánh trong tiến trình thiết kế với kĩ thuật đảo ngược. Chẳng hạn, nếu xoá hay bổ sung một tác vụ trong mã trình, tác vụ này sẽ bị xoá hay bổ sung vào mô hình nhận được bằng kĩ thuật đảo ngược.
Ngoài các lớp, Rose sẽ thu thập thông tin về các mối quan hệ trong mã trình. Nếu một lớp chứa một thuộc tính có kiểu dữ liệu là một lớp khác, Rose sẽ tạo mối quan hệ giữa hai lớp. Với các mối quan hệ kế thừa Rose sẽ tạo các mối quan hệ tổng quát hoá để hỗ trợ mọi quan hệ trong mã trình.
Có thể mô tả các quá trình phân tích thiết kế và tái thiết kế như trong các sơ đồ sau đây: Trong hình 1-26a mô tả một bước lặp trong tiến trình tái thiết kế xuất phát là mã nguồn của một ngôn ngữ lập trình được UML hỗ trợ. Trong hình 1-26b mô tả một bước lặp trong tiến trình tái thiết kế xuất phát là mô hình thiết kế của UML đã được thiết lập trước đây.
Hình 1-26a mô tả một bước lặp trong tiến trình tái thiết kế. Ban đầu từ chương trình nguồn của hệ thống được lập trước đây, nhờ kĩ nghệ thiết kế đảo ngược của Retional Rose ta chuyển nó sang mô hình thiết kế trên UML.
Tiếp đến là cập nhật, sửa đổi, hiệu chỉnh, bổ sung cho bản thiết kế này trên Rose. Sau đó lại sử dụng kĩ nghệt dịch xuôi của Rational Rose để chuyển bản thiết kế này sang mã nguồn. Quá trình lặp trên có thể được thực hiện nhiều lần nếu cần thiết, và sau một bước lặp đó ta sẽ được một thế hệ phần mềm mới có thêm các chức năng và những đặc tính mới. Trong quá trình tái thiết kế hệ thống phần mềm chúng ta có thể kết hợp hai sơ đồ trên với nhau.
Hình 1-26a: Một bước lặp của quá trình tái thiết kế với xuất phát là mã nguồn
Hình 1-26b: Một bước lặp của quá trình tái thiết kế xuất phát là mô hình thiết kế
Quá trình tái thiết kế phần mềm với Rational Rose không những cho ta một hệ thống phần mềm mới hơn hẳn hệ thống ban đầu về tính năng, mà còn cho phép sinh ra hệ thống trong một ngôn ngữ lập trình khác ngôn ngữ ban đầu. Nhờ vậy làm tăng tính khả chuyển (có khả năng hoạt động trên môi trương mới) của hệ thống mới nhận được. Trong điều kiện mà Công nghệ thông tin thay đổi rất nhanh, nhu cầu tái thiết kế các hệ thông phần mềm là rất lớn, và tính khả chuyển trên đây có ý một nghĩa cực kỳ quan trọng trong triển khai thực tế.
Sau đây là một ví dụ sử dụng Rational Rose cho một chương trình được viết bằng Java. Chúng ta thực hiện dịch ngược từ mã nguồn của chương trình để thu được mô hình thiết kế của nó. Để làm được điều này chúng ta có thể thực hiện theo các bước sau:
− Vào menu Tools / Java/J2EE / Reverse Engineer một hộp thoại được mở ra.
43 Mã nguồn (Trong ngôn ngữ A) Mã nguồn (Trong ngôn ngữ A) Mô hình thiết kế Dịch ngược Dịch xuôi Mô hình thiết kế Mô hình thiết kế Dịch xuôi Dịch ngược Mã nguồn
− Trong hộp thoại, chọn đường dẫn đến thư mục chứa mã nguồn Java, sau đó add các tệp tin cần kỹ nghệ ngược. Có thể chọn Add all nếu như muốn chọn toàn bộ các tệp tin có trong thư mục.
− Chọn Select All để lựa chọn toàn bộ các tệp tin hoặc có thể lựa chọn một số tệp tin sau đó chọn Reverse, quá trình dịch ngược sẽ bắt đầu được thực hiện
Hình 1-27
Sau khi quá trình dịch ngược thực hiện xong, Rational Rose không tự động tạo các biểu đồ lớp và biểu đồ thành phần của chương trình. Vì vậy, để thêm các biểu đồ này vào ta có thể:
− Kéo và thả chúng vào trong các biểu đồ có sẵn hoặc vào một biểu đồ mới được tạo ra
− Chọn Use Query > Add Classes để thêm biểu đồ vào.
Và với các cách thức thực hiện như trên, ta có thể thu được mô hình thiết kế của chương trình từ mã nguồn của nó. Với mô hình thiết kế thu được, ta có
thể tiến hành dịch xuôi chương trình một cách dễ dàng cùng với sự hỗ trợ của công cụ Rational Rose.
1.5 Những ưu điểm và hạn hế của tái kỹ nghệ