MỤC LỤC
Mặt khác, công việc tái kỹ nghệ cũng có thể rất phức tạp: sử dụng mã nguồn chương trình đã có để xây dựng lại thiết kế, xác định các yêu cầu của hệ thống đó sau đó so sánh chúng với yêu cầu hiện tại, từ đó loại bỏ đi những cái không còn khả năng ứng dụng nữa, tổ chức và thiết kế lại hệ thống (sử dụng thiết kế hướng đối tượng), và cuối cựng là xõy dựng mó cho hệ thống mới. Kỹ nghệ ngược thường được sử dụng trong qui trình tái kỹ nghệ phần mềm để khôi phục lại thiết kế và những đặc tả của chương trình, từ đó giúp cho các kỹ sư tỏi kỹ nghệ cú thể hiểu rừ hơn trước khi bắt tay vào việc tổ chức lại cấu trúc của chương trình. Phục hồi lại thiết kế là tạo lại thiết kế ở mức độ trừu tượng từ việc kết hợp mã chương trình, các tài liệu thiết kế của chương trình hiện tại (nếu có), kinh nghiệm của con người và các hiểu biết chung về hệ thống chương trình.
Cấu trúc lại hệ thống không chỉ đơn thuần là xây dựng lại cấu trúc cho hệ thống cũ, mà chúng ta phải thực hiện cải tiến lại hệ thống cũ, tạo ra một hệ thống mới phù hợp với môi trường hiện tại, cung cấp đầy đủ các tính năng mà hiện tại hệ thống được đòi hỏi. Một khi việc module hóa chương trình đã được thực hiện, chúng ta có thể dễ dàng loại bỏ được các thành phần dư thừa và tối ưu hóa tương tác giữa các thành phần đồng thời làm giảm giao diện giữa một thành phần với các phần còn lại của hệ thống. Những phân tích này nên nhằm vào mục đích phát hiện những chức năng định danh trong chương trình, tìm ra các giá trị cố định để thay đổi thành tên hằng số, phát hiện những qui tắc kiểm chứng dữ liệu nhúng và chuyển đổi đại diện của dữ liệu.
Có thể tự động quá trình này ở một mức độ nào đó bằng cách sử dụng hệ thống kết hợp mô hình như là AWK (Aho, Kernighan và một số người khác, 1988) để tìm và thay thế các định nghĩa hoặc để phát triển các mô tả UML của dữ liệu (St Laurent and Cerami, 1999) và sử dụng các công cụ chuyển đổi dữ liệu.
Tuy nhiên kết quả của việc dịch xuôi và dịch ngược còn phụ thuộc vào công cụ biểu diễn thiết kế việc dịch được hỗ trợ tới đâu, và cũng phụ thuộc vào ngôn ngữ lập trình triển khai được chọn để ánh xạ tới nó. Phát sinh mã trình: Sau khi chọn lớp hay thành phần trên biểu đồ, vào menu Tools sẽ hiển thị ra các ngôn ngữ mà Rational hỗ trợ, chọn ngôn ngữ thích ứng trong thực đơn phát sinh mã trình. 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.
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. 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ợ. 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.
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ế.
Khung cửa sổ chính của chương trình AddressBook là lớp AddressFrame được mở rộng từ lớp JFrame. AddressFrame là một container cho các thành phần đồ họa khác và nó cũng hoạt động như là một bộ điều khiển bằng cách xử lý các sự kiện khác nhau được tạo ra bởi các thành phần con. Nó cung cấp giao diện cho việc chỉnh sửa một bản ghi hiện thời và tạo một bản ghi mới.
Từ định danh (ID) của bản ghi sẽ cho phép ứng dụng lấy toàn bộ nội dung của bản ghi vào trong AddressPanel. Việc kết nối và tạo ra cơ sở dữ liệu của chương trình sẽ được xử lý trong lớp AddressDao.
Vì vậy cần phải lựa chọn một hướng tiếp cận sao cho phù hợp nhất mà đem lại chi phí hiệu quả nhất chính là vấn đề đặt ra đối với nhà phát triển phần mềm. − Xây dựng mới chương trình: chúng ta sẽ thực hiện xây dựng mới lại hoàn toàn chương trình với các chức năng của chương trình ban đầu và các chức năng bổ sung. Nếu thực hiện phương pháp này, chúng ta phải thực hiện việc phân tích, thiết kế và xây dựng toàn bộ chương trình từ đầu mà không sử dụng đến tài nguyên có sẵn là mã nguồn của chương trình cũ.
− Tái kỹ nghệ: Xem xét lại chương trình cũ với các bước thực hiện như đã nêu ở chương 1, qua đó cấu trúc và xây dựng lại chương trình theo các yêu cầu cải tiến như trên. Đây là một giải pháp khả thi nhất bởi nó phù hợp với yêu cầu của bài toán, hơn nữa nó vừa ít tốn kém thời gian và công sức, vừa có hiệu quả cao hơn.
− Giai đoạn 2: Từ các tài liệu và mô hình thiết kế của chương trình thực hiện cấu trúc lại chương trình: Bỏ đi các cấu trúc thừa và sai, đồng thời thêm một số chức năng mới cho chương trình. Để xây dựng được tài liệu đặc tả chương trình sử dụng cho quá trình thiết kế cần phải hiểu chương trình có những chức năng, tính năng gì, hoạt động như thế nào, vận hành ra sao. Từ biểu đồ use case, ta thực hiện xây dựng biểu đồ tuần tự cho các ca sử dụng của chương trình, cụ thể ở đây là biểu đồ tuần tự cho quá trình thêm một địa chỉ mới, xóa một địa chỉ và sửa một địa chỉ có sẵn.
Dựa vào các biểu đồ UML, tài liệu đặc tả chương trình được tạo ra từ giai đoạn trên, đọc tài liệu mã nguồn cùng với việc sử dụng chương trình gốc, chúng ta đã có thể hiểu rừ hơn về hoạt động của chương trỡnh, cỏc chức năng, tỡnh năng cũng như cách thức hoạt động của nó. Dựa trên các mô hình UML cũ, sử dụng Rational Rose để sửa chữa, tinh chỉnh và nâng cao chương trình với các chức năng mới được thêm vào, đồng thời phải đồng bộ chương trình để các chức năng mới không xung đột với hệ thống, chương trình mới có thể đảm bảo ổn định.
Các lỗi ở đây có thể là các lỗi về chức năng, về giao diện chương trình, về hiệu suất thực hiện v.v… Sau khi chương trình đã được đánh giá đầy đủ có thể đưa vào sử dụng. Tuy nhiên cấu trúc các hàm, các thuộc tính trong các lớp được thay đổi để phù hợp với việc xây dựng thêm các chức năng mới cho chương trình, các quan hệ của các thành phần giữa các lớp cũng được thay đổi. - Trong file mã nguồn được thực hiện đưa thêm các ghi chú để người xem có thể hiểu hơn chương trình, dễ dàng cho việc sửa đổi, bảo trì, kỹ nghệ lại ở lần sau - Cấu trúc dữ liệu của chương trình cũng được thay đổi theo các thay đổi về.
Vì thời gian để thực hiện khóa luận không có nhiều nên việc tái kỹ nghệ lại chương trình chưa được hoàn thiện, chưa thêm mới được đầy đủ các chức năng theo yêu cầu cho chương trình mới. Nhưng đối với một hệ thống lớn với số lượng dòng mã nguồn lên đến hàng nghìn, thậm chí là chục nghìn dòng thì việc tái kỹ nghệ sẽ cho chỳng ta thấy ưu điểm rừ rệt của nú.