1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trần Thị Hồng Sim
TÁI KỸ NGHỆ HỆ THỐNG PHẦN MỀM
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Phần Mềm
Cán bộ hướng dẫn: PGS.TS Nguyễn Văn Vỵ
Hà Nội, tháng 5/2010
Trần Thị Hồng Sim 2
Tóm tắt nội dung
Ngày nay, công nghệ thông tin đang phát triển rất nhanh. Các hệ thống phần
cứng của máy tính đang ngày càng trở nên mạnh mẽ hơn để đáp ứng nhu cầu ngày
càng tăng của người sử dụng. Công nghệ thay đổi nhanh chóng theo từng ngày. Một hệ
thống phần mềm hôm nay có thể là hiện đại nhưng chỉ sau một thời gian ngắn nó đã
trở nên lạc hậu và không sử dụng hết được năng lực to lớn của phần cứng và không
đáp ứng đầy đủ nhu cầu sử dụng của con người. Vậy chúng ta đang gặp phải một số
lượng các hệ thống phần mềm có những đặc trưng này. Một giải pháp được đưa ra, đó
chính là tái kỹ nghệ. Vì vậy đề tài “Tái kỹ nghệ hệ thống phần mềm” được chọn làm
đề tài khóa luận của em. Để bảo trì, nâng cấp một hệ thống phần mềm lạc hậu, trong
điều kiện cho phép có thể sử dụng giải pháp tái kỹ nghệ. Tuy nhiên, tái kỹ nghệ phải đi
đôi với sự trợ giúp của những công cụ mạnh và có một quy trình thích hợp. Khóa luận
trình bày một quy trình tái kỹ nghệ phần mềm với sự trợ giúp của công cụ Rational
Rose. Bằng cách đó ta có thể nâng cấp một phần mềm cũ thành một phần mềm có khả
năng đáp ứng các yêu cầu mới đặt ra và có được kiến trúc tốt, sử dụng hiệu quả nguồn
tài nguyên hiện có, làm thuận lợi cho việc bảo trì tiếp tục sau này. Hơn thế nữa, quá
trình tái kỹ nghệ hệ thống diễn ra một cách nhanh chóng và hiệu quả, đáp ứng được
những thách thức đang đặt ra cho việc phát triển các phần mềm hiện nay
Trong khóa luận này, những nội dung sau đây sẽ được trình bày:
− Giới thiệu tổng quan về tái kỹ nghệ hệ thống phần mềm cùng và qui trình để thực
hiện tái kỹ nghệ một hệ thống phần mềm.
− Giới thiệu hai công cụ hỗ trợ cho quá trình tái kỹ nghệ trong phạm vi luận văn
này là Rational Rose Enterprise Edition 7.0 và ngôn ngữ mô hình hóa (UML).
1.5.2 Các hạn chế 45
1.6 Kết luận 46
Chương 2: Bài toán về chương trình “Sổ địa chỉ” 47
2.1 Giới thiệu chương trình sổ địa chỉ 47
1.2 Những vấn đề cần cải tiến chương trình 48
Chương 3: Tái kỹ nghệ chương trình sổ địa chỉ 50
4
3.1 Sơ đồ tiến trình thực hiện tái kỹ nghệ 50
3.2 Qui trình thực hiện tái kỹ nghệ chương trình sổ địa chỉ 50
3.2.1 Xây dựng tài liệu và mô hình thiết kế UML 51
3.2.2 Cấu trúc lại chương trình 55
3.2.3 Tái kỹ nghệ dữ liệu 58
3.2.4 Xây dựng mã nguồn 60
3.2.5 Hoàn thiện, cài đặt và sử dụng 60
3.3 Kết quả đạt được và một số đánh giá 60
3.3.1. Liên quan đến chương trình 60
3.3.2. Liên quan đến triển khai 62
3.3.3. Một số vấn đề tồn tại 62
Kết luận 63
Tài liệu tham khảo 64
Tiếng Việt 64
Tiếng Anh 64 5
Lời nói đầu
6
thống nhất UML, Rational Software Architecture, Rational Rose v.v… Trong phạm vi
khóa luận tốt nghiệp này, chúng ta sẽ sử dụng hai công cụ hỗ trợ cho việc tái kỹ nghệ
là ngôn ngữ UML và Rational Software Architecture.
Cùng với việc tìm hiểu về quy trình tái kỹ nghệ, để có thể hiểu sâu hơn các bước
thực hiện của quy trình, ta sẽ thực hiện tái kỹ nghệ cho một chương trình đơn giản là:
Sổ địa chỉ.
Cụ thể khóa luận tốt nghiệp này được xây dựng gồm ba chương:
- Chương 1: Trình bày tổng quan về tái kỹ nghệ và phương pháp để tái kỹ nghệ
một hệ thống phần mềm
- Chương 2: Giới thiệu qua về chương trình “Sổ địa chỉ”
- Chương 3: Thực hiện tái kỹ nghệ chương trình “Sổ địa chỉ”, từ đó rút ra những
kết quả đánh giá cho chương trình và những hạn chế còn tồn tại trong nội dung
khóa luận.
Cuối cùng là kết luận và tài liệu tham khảo
7
Chương 1: Tổng quan về tái kỹ nghệ
Tính tái dụng là một đặc trưng quan trọng của các thành phần phần mềm chất
lượng cao. Tính tái dụng ở đây được hiểu là các thành phần của một hệ thống phần
mềm có thể sử dụng lại trong các hệ thống phần mềm khác. Một vấn đề lớn đặt ra là:
phải phát triển phần mềm như thế nào để về sau có thể sử dụng lại nhiều nhất và hiệu
quả nhất.
Nói chung, sau một thời gian sử dụng, các phần mềm cần phải được bảo trì để
− Trong quá trình kiểm thử, theo dõi quá trình hoạt động của hệ thống phần mềm,
ta sẽ phát hiện ra tất cả các lỗi, các sai sót tiềm tàng trong hệ thống, tất cả các lỗi
đó sẽ được thông báo cho các chuyên gia phát triển phần mềm để họ cập nhật lại.
Tiến trình đó được gọi là bảo trì sửa chữa.
− Theo thời gian, các khía cạnh xử lý và hệ thống phần cứng thay đổi; môi trường
làm việc như hệ điều hành thay đổi; các thiết bị ngoại vi và các phần tử của hệ
thống được nâng cấp; các yêu cầu của khách hàng cho hệ thống sẽ thay đổi
Điều đó dẫn tới việc phải thay đổi hệ thống phần mềm sao cho phù hợp với các
yêu cầu thay đổi trên, quá trình đó được gọi là bảo trì thích nghi.
− Khi hệ thống phần mềm thành công và được đưa vào sử dụng, người ta nhận
được các khuyến cáo về khả năng mới, các chức năng cần được bổ sung nâng
cao Đó là quá trình nâng cấp hệ thống phần mềm cho phù hợp và tiện dụng
hơn, được gọi là bảo trì hoàn thiện.
− Hệ thống cần phải thay đổi để đảm bảo tính tin cậy, an toàn trong tương lai, tạo
cơ sở tốt hơn cho việc nâng cao chất lượng trong tương lai, tiến trình đó được gọi
là bảo trì phòng ngừa, hoạt động này được đặc trưng bởi các kĩ thuật đảo ngược
và tái kĩ nghệ.
Các công cụ bảo trì phần mềm có thể được chia theo các chức năng sau:
− Kĩ nghệ ngược với các công cụ đặc tả: nhận chương trình gốc làm đầu vào và
sinh ra các mô hình phân tích và thiết kế có cấu trúc đồ thị, các thông tin thiết kế
khác.
− Công cụ tái cấu trúc và phân tích mã: phân tích cú pháp chương trình, sinh ra đồ
thị luồng điều khiển, và sinh tự động một chương trình có cấu trúc.
− Công cụ tái kĩ nghệ hệ thống trực tuyến: dùng để thay đổi các hệ thống cơ sở dữ
liệu trực tuyến.
Bảo trì là giai đoạn cuối cùng trong tiến trình kĩ nghệ phần mềm, nó tiêu tốn rất
nhiều thời gian, công sức và kinh phí. Tái kỹ nghệ là công nghệ đặc trưng giúp cho
việc bảo trì các hệ thống phần mềm hiệu quả và nhanh chóng.
9
tiến phần mềm và thường tăng khả năng bảo trì, khả năng sử dụng lại, khả năng tiến
hóa” (Arnold 1993).
Qui trình tái kỹ nghệ thường là sự kết hợp của nhiều qui trình khác nhau như kỹ
nghệ ngược, làm lại tài liệu, cấu trúc lại chương trình, chuyển đổi và kỹ nghệ xuôi,
dịch hệ thống sang một ngôn ngữ lập trình hiện đại hơn. Mục đích là để có cái nhìn rõ
10
hơn về chương trình hiện thời (đặc tả, thiết kế, thực thi), sau đó tái thực hiện lại để cải
thiện các chức năng, hiệu suất, sự thi hành của hệ thống. Mục tiêu là để duy trì các
chức năng hiện có và chuẩn bị cho các chức năng mới sẽ được thêm vào sau này. Sau
khi sửa đổi, các chức năng chính của phần mềm không thay đổi, và thông thường thì
cấu trúc của chương trình vẫn được giữ nguyên như cũ.
Đứng từ quan điểm kỹ thuật, tái kỹ nghệ phần mềm chỉ là giải pháp thứ hai trong
vấn đề phát triển phần mềm sau lựa chọn giải pháp phát triển mới hệ thống phần mềm.
Nguyên nhân là do cấu trúc phần mềm không được nâng cấp vì thế việc phân phối
những hệ thống có tính tập trung là một việc khó. Nó thường không thể thay đổi triệt
để ngôn ngữ lập trình hệ thống vì hệ thống cũ với ngôn ngữ lập trình thủ tục thì khó có
thể chuyển đổi sang những ngôn ngữ lập trình hướng đối tượng như Java hay C++. Do
đó, những giới hạn cố hữu tồn tại trong hệ thống vẫn sẽ duy trì bởi vì chức năng của
phần mềm không được thay đổi.
Tuy nhiên, đứng từ quan điểm nghiệp vụ, tái kỹ nghệ phần mềm là con đường
duy nhất có thể đảm bảo rằng một hệ thống cũ vẫn có thể tiếp tục phục vụ. Sẽ là quá
đắt và quá rủi ro nếu như chấp nhận một cách tiếp cận khác trong việc phát triển phần
mềm. Để hiểu được những lí do cho vấn đề này, chúng ta sẽ đưa ra một đánh giá sơ bộ
về những vấn đề của hệ thống phần mềm cũ.
Số lượng mã nguồn của một hệ thống cũ là rất lớn. Năm 1990, nó được ước đoán
(Ulrich 1990) là có khoảng 120 tỉ dòng mã nguồn tồn tại. Phần lớn những hệ thống
này được viết bằng COBOL, một ngôn ngữ lập trình thích hợp nhất cho qui trình dữ
liệu nghiệp vụ, hoặc bằng FORTRAN. FORTRAN là một ngôn ngữ lập trình toán học
trình. Nó thường phụ thuộc vào việc giới thiệu hoặc tăng cường hỗ trợ dựa trên máy
tính cho quá trình này.
Kỹ thuật dịch xuôi
Tái kỹ nghệ phần mềm
Hình 1-01
Sự khác biệt then chốt giữa tái kỹ nghệ và phát triển một hệ thống phần mềm mới
chính là điểm xuất phát cho việc phát triển. Đối với việc phát triển một hệ thống phần
mềm mới, công việc sẽ bắt đầu với việc viết một tài liệu đặc tả cho hệ thống, trong khi
đối với tái kỹ nghệ, hệ thống cũ đã đóng vai trò như một bản đặc tả cho hệ thống mới.
Chikofsky và Cross (Chikofsky and Cross, 1990) đã đưa ra thuật ngữ “kỹ nghệ xuôi”
(forward engineering) trong tiến trình phát triển để phân biệt với tái kỹ nghệ phần
Đặc tả hệ thống
Thiết kế và thực thi
Hệ thống mới
Hệ thống phần
m
ềm hiện thời
H
ệ thống
tái kỹ nghệ
nghệ chương trình, dữ liệu cho hệ thống cũng có thể được tái kỹ nghệ lại.
Các hoạt động trong qui trình tái kỹ nghệ là:
1 Dịch mã nguồn Chương trình được chuyển đổi từ một ngôn ngữ lập trình cũ sang
một phiên bản mới hơn hoặc chuyển sang một ngôn ngữ khác.
2 Kỹ nghệ ngược Chương trình được phân tích và lấy thông tin để làm tài liệu cho tổ
chức và các chức năng của chương trình.
3 Cải tiến cấu trúc hệ thống Cấu trúc điều khiển của chương trình được phân tích và
sửa đổi để giúp cho việc đọc và hiểu được dễ dàng hơn.
Chương
trình
nguồn
Tài liệu
chương
trình
Chương
trình
module hóa
Dữ liệu
nguồn
Chương
trình được
cấu trúc
Dữ liệu
được tái
kỹ nghệ
Dịch mã
nguồn
Kỹ nghệ
ngược
Cải tiến cấu
Chi phí tăng
Hình 1-03: Chi phí tái kỹ nghệ
Ngoại trừ qui mô của hoạt động tái kỹ nghệ, các yếu tố ảnh hưởng đến chi phí
của tái kỹ nghệ là:
Tổ chức lại chương
trình và dữ liệu
Tổ chức lại chương
trình tự động
Chuyển đổi mã
nguồn tự động
Tổ chức l
ại tự động với
thay đổi thủ công
Tổ chức lại cộng với
thay đổi kiến trúc
14
1 Chất lượng của phần mềm để tái kỹ nghệ. Chất lượng phần mềm và các tài liệu
liên quan (nếu có) càng thấp thì chi phí cho việc tái kỹ nghệ sẽ càng cao.
2 Công cụ hỗ trợ có sẵn cho việc tái kỹ nghệ. Hoạt động tái kỹ nghệ sẽ không có
chi phí hiệu quả nếu không có các công cụ được sử dụng trong đó. Và Công cụ
Khái
niệm
Yêu cầu
Thiết kế
Triển khai Khái
niệm
Yêu cầu
Thiết kế
Triển khai
Kỹ nghệ
ngược
(Trừu
tư
ợng)
Kỹ nghệ
xuôi
(Cải tiến)
(Biến đổi)
Nghĩ lại
Đ
ặc tả lại
Thiết kế
Code lại
sửa đổi hệ thống. Còn đối với thay đổi công nghệ của hệ thống thông tin có nghĩa là tổ
chức sẽ sử dụng một ngôn ngữ lập trình, một công cụ hay một cơ sở dữ liệu mới để
thay thế cho cái cũ. Cuối cùng khi mọi vấn đề đã được hiểu thấu đáo, chúng ta sẽ sử
dụng kỹ nghệ xuôi để xây dựng hệ thống mới, với những cải tiến trong qui trình.
1.3.1 Dịch mã nguồn
Dạng đơn giản nhất của tái kỹ nghệ phần mềm là dịch mã nguồn từ ngôn ngữ này
sang một ngôn ngữ khác bằng các công cụ dịch tự động. Do đó cấu trúc của chương
trình hoàn toàn không thay đổi. Ngôn ngữ đích có thể là một phiên bản mới hơn của
ngôn ngữ gốc (ví dụ từ COBOL-74 sang COBOL-85) hoặc là một ngôn ngữ hoàn toàn
khác (ví dụ từ FORTRAN sang C).
Cần phải chuyển đổi mã nguồn vì những lý do sau đây:
16
1 Nền phần cứng được cập nhật. Các tổ chức có thể sẽ muốn thay đổi nền phần cứng
tiêu chuẩn của họ. Trong khi đó các trình biên dịch của ngôn ngữ hiện thời lại
không được hỗ trợ trên phần cứng mới đó.
2 Thiếu nhân viên có kỹ năng. Có thể sẽ thiếu nhân viên bảo trì lành nghề cho ngôn
ngữ hiện tại. Hơn nữa, đây lại là một chương trình được viết bằng một ngôn ngữ
không theo tiêu chuẩn chuẩn và hiện tại đã không còn được sử dụng.
3 Những thay đổi chính sách tổ chức. Một tổ chức hoàn toàn có thể quyết định những
tiêu chuẩn cho ngôn ngữ lập trình của họ để có thể giảm đến mức tối thiểu chi phí
cho phần mềm. Tuy nhiên việc bảo trì các phiên bản cũ của các trình biên dịch đó
lại trở nên rất đắt.
4 Thiếu những sự trợ giúp phần mềm. Các nhà cung cấp các trình biên dịch đã từ bỏ
việc kinh doanh hoặc đã ngừng hỗ trợ cho sản phẩm của họ.
tự động
Dịch m
ã
thủ công
17
khác. Các mẫu tham số trong ngôn ngữ gốc phải được xác định và liên kết với các mẫu
tương đương trong ngôn ngữ đích.
Trong nhiều trường hợp, việc dịch tự động hoàn toàn là điều không thể. Cấu trúc
trong ngôn ngữ nguồn có thể không tương đương với ngôn ngữ đích. Có thể mã nguồn
được nhúng vào các lệnh điều kiện trong trình biên dịch mà trong ngôn ngữ đích
không được hỗ trợ. Trong những trường hợp này, chúng ta phải thực hiện những thay
đổi một cách thủ công để điều chỉnh và cải tiến hệ thống tạo ra.
1.3.2 Kỹ nghệ ngược
Kỹ nghệ ngược là qui trình phân tích phần mềm với mục đích để phục hồi những
đặc tả và thiết kế của phần mềm đó. Kỹ nghệ ngược không làm thay đổi hệ thống hoặc
tạo ra một hệ thống mới, nó chỉ là quá trình kiểm tra mà không thay đổi chức năng
tổng thể của chương trình. Trong qui trình kỹ nghệ ngược, mã nguồn của chương trình
chính là đầu vào. Tuy nhiên, đôi khi ngay cả mã nguồn cũng không còn thì qui trình kỹ
nghệ ngược phải bắt đầu với mã thực thi của chương trình.
Nhiều người cho rằng, tái kỹ nghệ và kỹ nghệ ngược là những tên gọi khác nhau
của cùng một quá trình, nhưng trong thực tế kỹ nghệ ngược không phải là tái kỹ nghệ.
Mục đích của kỹ nghệ ngược là để thu được thiết kế hoặc đặc tả của hệ thống từ mã
nguồn của nó. Trong khi đó, mục đích của tái kỹ nghệ là để tạo ra một hệ thống mới có
khả năng bảo trì cao xuất phát từ một hệ thống cũ. Như vậy, kỹ nghệ ngược là một quá
trình giúp cho nhà phát triển có những cái nhình rõ ràng hơn về hệ thống, và nó chính
là một phần của qui trình tái kỹ nghệ. Những ảnh hưởng của quá trình này sẽ ảnh
hưởng tới thành công của dự án tái kỹ nghệ.
Kỹ nghệ ngược thường được sử dụng trong qui trình tái kỹ nghệ phần mềm để
Hình 1-06: Mô hình qui trình kỹ nghệ ngược
Qui trình kỹ nghệ ngược được chỉ ra trong hình 1-06, bắt đầu bằng việc lấy ra các
thông tin về yêu cầu và thiết kế chi tiết từ mã nguồn của chương trình và các tài liệu
còn tồn tại (nếu có). Sau qui trình, chúng ta sẽ thu được một tài liệu yêu cầu và một
bản thiết kế trừu tượng ở mức độ cao được thể hiện bằng biểu đồ luồng dữ liệu và
luồng điều khiển.
Như vậy, hai công việc quan trọng trong kỹ nghệ ngược chính là: làm lại tài liệu
và phục hồi thiết kế.
Lấy thông tin
về chức năng
và c
ấu trúc
Lấy đặc tả ban
đầu và thay đổi
Xem lại yêu
cầu
Tạo ra tài
li
ệu
Lấy thông tin
về luồng dữ
liệu và luồng
đi
ều khiển
thiết kế
được phục
h
ồi19
1.3.2.1 Làm lại tài liệu
Vì các chương trình để tái kỹ nghệ thường không còn tài liệu, thiết kế v.v…, vì
vậy việc làm lại tài liệu là một nhiệm vụ cần thiết trong quá trình tái kỹ nghệ.
Chikofsky đã định nghĩa quá trình làm lại tài liệu là tạo ra hoặc sửa đổi lại tài liệu hiện
thời (nếu có) sang một cách miêu tả có ngữ nghĩa tương đương với mức trừu tượng
tương đối. Và kết quả của việc làm này là ta thu được một cái nhìn đan xen nhau về hệ
thống (ví dụ như luồng điều khiển, cấu trúc điều khiển, luồng dữ liệu). Làm lại tài liệu
là một hình thức đơn giản nhất và là giai đoạn khởi đầu của kỹ nghệ ngược. Và nhiều
người cho rằng việc làm lại tài liệu không gây ra thay đổi trong hệ thống.
Làm lại tài liệu mã nguồn là sự biến đổi từ mã nguồn (cộng với những hiểu biết
về chương trình và các tài liệu khác) sang một tài liệu mã nguồn mới hoặc nâng cấp tài
liệu mã nguồn. Thông thường, những tài liệu này sẽ ở dạng văn bản (ví dụ như là
những ghi chú trong chương trình), nhưng nó cũng có thể là những tài liệu bằng đồ
họa. Việc cải tiến phần mềm bằng cách nâng cấp tài liệu (những chú thích, thiết kế,
đặc tả được nhúng trong chương trình) là một trong những kỹ thuật tái kỹ nghệ cũ.
Làm lại tài liệu là một hoạt động quan trọng bởi việc bảo trì thường phải dựa vào
những chú thích được viết trong chương trình và coi đó là cơ sở để có thể hiểu được
những đoạn mã trong chương trình hoạt động như thế nào. Với việc làm lại tài liệu,
những kĩ sư bảo trì sẽ có cái nhìn toàn diện và đầy đủ hơn về hệ thống và hoạt động
của nó. Ngày nay, việc làm lại tài liệu không phải chỉ thủ công mà đã có rất nhiều
công cụ, hỗ trợ cho con người rất nhiều trong việc xây dựng lại tài liệu. Một số công
cụ phổ biến như là “máy in chât lượng” là một chương trình có thể hiển thị một danh
của chương trình. Tóm lại, phục hồi thiết kế phải sao chép lại toàn bộ các thông tin cần
thiết để một người có thể hiểu đầy đủ về chương trình như chương trình làm cái gì,
làm như thế nào, tại sao nó lại hoạt động như thế v.v… Vì vậy, việc tập trung vào
phục hồi các thông tin xa rộng trong thiết kế cần thiết hơn là tìm ra những đại diện
hoặc mã của việc kỹ nghệ phần mềm thông thường.
Phục hồi thiết kế diễn ra trong một chuỗi các hoạt động từ phát triển phần mềm
đến bảo trì. Các nhà phát triển phần mềm mới dành rất nhiều thời gian để cố gắng hiểu
cấu trúc của hệ thống và các thành phần của hệ thống. Việc bảo trì phần mềm dành
nhiều thời gian nghiên cứu cấu trúc của một hệ thống để hiểu được bản chất và hiệu
quả khi thay đổi yêu cầu. Trong mỗi trường hợp, nhà phân tích đều đang tham gia
phục hồi thiết kế. Vì vậy, phục hồi thiết kế là một phần chung, đôi khi là một phần ẩn
của các hoạt động rải rác trong suốt chu trình sống phần mềm.
1.3.3 Cấu trúc lại hệ thống
Cấu trúc lại hệ thống là một giai đoạn quan trọng và rất cần thiết trong qui trình
tái kỹ nghệ. 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. Do nhu cầu ngày nay, các hệ thống cần sử dụng bộ nhớ lớn, do đó phải
21
có sự tối ưu hóa việc sử dụng bộ nhớ chương trình. Cộng với việc có nhiều người lập
trình thiếu hiểu biết về kỹ nghệ phần mềm dẫn đến hệ thống có cấu trúc không tốt. Cấu
trúc điều khiển chương trình có thể sẽ khó hiểu do chương trình có nhiều nhánh rẽ
không sử dụng các câu lệnh điều kiện và logic điều khiển chương trình không được
tốt. Cũng có thể do chương trình thường xuyên phải bảo trì đã làm xuống cấp cấu trúc
của hệ thống. Chúng ta có thể thay đổi để chương trình có thể thực hiện những đoạn
mã mà bình thường chúng không hoạt động, tuy nhiên điều này chỉ được phát hiện khi
sau khi đã có sự phân tích tổng thể. Các lập trình viên bảo trì thường không dám loại
bỏ mã trong trường hợp nó có thể được truy cập gián tiếp.
loop: goto Start
Hình 1-07 - Một chương trình điều khiển với logic phức tạp
Thông thường, các chương trình có cấu trúc logic phức tạp như thế này là do quá
trình phát triển hoặc cũng có thể do chúng được sửa đổi trong thời gian bảo trì. Người
ta phải thêm vào các điều kiện và các mối liên kết giữa các hành động của chương
trình mà không làm thay đổi cấu trúc điều khiển hiện thời. Trong một phạm vi hẹp thì
đây là một giải pháp nhanh hơn và có ít rủi ro hơn vì nó giảm khả năng xuất hiện các
lỗi trong hệ thống. Tuy nhiên, về lâu dài nó sẽ không còn phù hợp nữa vì người ta sẽ
không thể hiểu được các mã chương trình. Khi người lập trình cố gắng tránh sao chép
mã sẽ có khả năng phát sinh ra những cấu trúc mã phức tạp. Với những chương trình
bị hạn chế bởi giới hạn bộ nhớ thì đôi khi việc tránh sao chép mã là cần thiết.
Hình 1-08 là một đoạn mã của cùng hệ thống điều khiển trên nhưng đã được viết
lại bằng cách sử dụng các câu lệnh điều khiển cấu trúc. Đoạn mã này sẽ được đọc tuần
tự từ trên xuống dưới, vì vậy nó dễ hiểu hơn nhiều. Ba vị trí chuyển đổi là bật, tắt và
điều khiển được xác định rõ ràng và được liên kết với các mã liên quan của chúng.
loop
Câu lệnh Get tìm giá trị cho các biến được đưa ra từ môi trường của hệ
thống.
Get (Time-on, Time-off, Time, Setting, Temp, Switch);
case Switch of
when On => if Heating-status = off then
Switch-heating ; Heating-status := on ;
end if ;
when Off => if Heating-status = on then
Switch-heating ; Heating-status := off ;
end if;
when Controlled =>
if Time >= Time-on and Time < = Time-off then
if Temp > Setting and Heating-status = on then
Switch-heating; Heating-status = off;
chuyển đổi kỹ thuật có thể được áp dụng cho đồ thị này mà không thay đổi ngữ nghĩa
của nó. Phải phát hiện và loại bỏ các đoạn mã không cần thiết trong hoạt động của
chương trình. Một khi hoàn thành việc đơn giản hóa cấu trúc chương trình, chúng ta đã
tạo ra được một chương trình mới. Các vòng lặp while và các câu lệnh điều kiện đơn
giản được thay thế cho việc điều khiển chương trình dựa trên các câu lệnh goto.
24
Chương trình mới có thể vẫn giữ ngôn ngữ gốc hoặc được chuyển sang một ngôn ngữ
mới (như FORTRAN có thể được chuyển đổi sang C).
Tái cấu trúc chương trình tự động sẽ gặp các vấn đề sau:
− Mất ghi chú. Nếu chương trình có các dòng ghi chú trong đó, nó sẽ luôn bị mất đi
trong quá trình tái cấu trúc.
− Mất tài liệu. Tương tự, tài liệu của chương trình cũng sẽ bị mất đi. Tuy nhiên,
trong nhiều trường hợp, sau quá trình tái cấu trúc, cả các ghi chú và tài liệu của
chương trình đều trở nên lạc hậu. Bởi vậy đây không phải là một nhân tố quan
trọng.
− Nặng về nhu cầu tính toán. Các thuật toán nhúng trong các công cụ tái cấu trúc
rất phức tạp. Thậm chí ngay cả với các phần cứng nhanh và hiện đại cũng phải
mất một thời gian dài để hoàn thành qui trình tái cấu trúc cho các chương trình
lớn.