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 - 2010
Lời cảm ơn
Lời đầu tiên, em muốn bày tỏ sự chân trọng và biết ơn sâu sắc đối với PGS.TS
Nguyễn Văn Vỵ, giảng viên bộ môn Công Nghệ Phần Mềm, khoa Công Nghệ Thông
Tin, trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội. Trong suốt quá trình học
tập và thực hiện khóa luận này, thầy đã là người trực tiếp hướng dẫn và đưa ra những
định hướng cho quá trình nghiên cứu. Chính nhờ sự tận tình chỉ bảo, dành rất nhiều thời
gian quí báu của thầy trong suốt quá trình hướng dẫn mà em đã hoàn thành nghiên cứu
khóa luận này.
Em cũng xin gửi lời cảm ơn chân thành đến các thầy giáo, cô giáo là giảng viên
trường Đại học Công Nghệ đã giảng dạy, truyền đạt kiến thức cho em trong suốt bốn
năm học tại trường. Những kiến thức mà các thầy cô đã truyền thụ làm nền tảng cho em
trong công việc sau này và là những kiến thức tiên quyết trong việc nghiên cứu và tìm
hiểu đề tài trong khóa luận.
Và cuối cùng, tôi xin gửi lời cảm ơn đến bạn bè, đồng nghiệp và đặc biệt là gia
đình, những người đã luôn ở bên động viên, giúp đỡ, tạo điều kiện tốt nhất cho tôi trong
suốt quá trình học tập và thực hiện khóa luận.
Hà Nội, tháng 5/2010
Trần Thị Hồng Sim
1
Tóm tắt nội dung
Tóm tắt nội dung 2
Mục lục 3
Chương 1: Tổng quan về tái kỹ nghệ 7
1.1 Bảo trì hệ thống phần mềm 7
1.2 Tổng quan chung về tái kỹ nghệ 9
1.3 Qui trình chung tái kỹ nghệ phần mềm 14
1.3.1 Dịch mã nguồn ................................................................................................. 16
1.3.2 Kỹ nghệ ngược ................................................................................................. 17
1.3.2.1 Làm lại tài liệu ............................................................................................. 19
1.3.2.2 Phục hồi thiết kế ............................................................................................ 20
1.3.3 Cấu trúc lại hệ thống ........................................................................................ 21
1.3.4 Module hóa chương trình ................................................................................. 25
1.3.5. Tái kỹ nghệ dữ liệu ......................................................................................... 26
1.4 Các công cụ sử dụng cho tái kỹ nghệ 31
Có khá nhiều các công cụ hỗ trợ cho việc tái kỹ nghệ. Trong mỗi giai đoạn của quy trình
lại có một công cụ phục vụ cho các công việc khác nhau. Để dịch mã nguồn sang mô
hình thiết kế chúng ta có các công cụ như Rational Software Architecture, Rational
Rose v.v.. Bộ công cụ DMS Software Reengineering Toolkit là công cụ tự động phân
tích chương trình, tùy chỉnh mã nguồn, sửa đổi, dịch hay phát sinh ra hệ thống phần
mềm. Có rất nhiều các công cụ hỗ trợ như thế, nhưng trong phạm vi luận văn này sẽ
tập trung vào việc tái kỹ nghệ phần mềm với sự hỗ trợ của công cụ Rational Rose và
ngôn ngữ mô hình hóa thống nhất UML. 31
1.4.1 Ngôn ngữ UML ................................................................................................ 31
1.4.2 Hệ thống phần mềm RATIONAl ROSE ........................................................... 34
1.4.3 Tái kỹ nghệ hệ thống với kỹ nghệ đảo ngược của Rational Rose ...................... 42
1.5 Những ưu điểm và hạn hế của tái kỹ nghệ 46
3
1.5.1 Các ưu điểm ..................................................................................................... 46
1.5.2 Các hạn chế ...................................................................................................... 46
1.6 Kết luận 47
cụ, môi trường hỗ trợ này, các phần mềm cũ có nguy cơ bị bỏ đi. Vậy phải làm sao để
giải quyết vấn đề này khi mà số lượng các phần mềm cũ ngày càng lớn? Nhiều giải
pháp được đưa ra cho việc bảo trì phần mềm.
Bảo trì phần mềm chính là một giai đoạn trong quy trình tiến hóa phần mềm. Đây
là giai đoạn có chi phí tốn kém nhất, như ta đã biết, nó chiếm đến 70% trong tổng chi
phí phát triển phần mềm. Tuy nhiên, nếu chúng ta thực hiện phát triển mới phần mềm
thì chi phí bỏ ra còn lớn hơn rất nhiều. Cho nên một yêu cầu được đặt ra là phải lựa
chọn một phương pháp bảo trì phần mềm sao cho có hiệu quả cao và giảm thiểu các rủi
ro.
Với một chương trình phần mềm đã sử dụng trong thời gian dài, nó có thể gặp
phải các vấn đề như ngôn ngữ lập trình không còn được sử dụng, thiếu các công cụ hỗ
trợ cần thiết, không đáp ứng đủ yêu cầu của người dùng v.v… Vì vậy, để có thể tiếp tục
sử dụng được hệ thống phần mềm, ta thực hiện quá trình bảo trì cần phải có biện pháp
xây dựng, cấu trúc lại những phần chương trình đã trở nên lạc hậu và không dùng được
nữa. Và một phương pháp rất phổ biến và hiệu quả của ngày nay, đó chính là tái kỹ
nghệ lại hệ thống phần mềm.
Tái kỹ nghệ là một phương pháp tiến hóa phần mềm có hiệu quả cao trong khi chi
phí bỏ ra ít hơn nhiều so với việc xây dựng mới phần mềm cũng như so với một số
phương pháp tiến hóa khác. Có được điều này bởi quy trình tái kỹ nghệ được hỗ trợ bởi
các công cụ và phương tiện mới với một quy trình khép kín khá hoàn thiện và đầy đủ.
Một số công cụ hỗ trợ cho việc tái kỹ nghệ phần mềm như ngôn ngữ mô hình hóa thống
5
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ệ
làm hệ thống thích nghi với những yêu cầu thay đổi của người sử dụng, thay đổi dữ liệu
cho phù hợp, gỡ rối, khử bỏ và sửa chữa các sai sót mà trước đây chưa phát hiện ra...
Ngày nay, việc xây dựng, phát triển cũng như quá trình bảo trì các hệ thống phần
mềm được hỗ trợ nhiều bởi các công cụ, đó là kĩ nghệ phần mềm có máy tính trợ giúp
(CASE). Công nghệ CASE đang phát triển mạnh mẽ, bao gồm các công cụ về: lập kế
hoạch quản lý dự án, các công cụ trợ giúp phân tích và thiết kế, cài đặt hệ thống, tích
hợp và kiểm thử, làm bản mẫu …, Ở đây chúng ta sẽ quan tâm tới một số hoạt động
trong quá trình bảo trì phần mềm bằng một số công cụ có sẵn.
7
Các hoạt động trong bảo trì phần mềm bao gồm:
− 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ông cần đưa vào hệ thống mới.
Vậy thế nào là tái kỹ nghệ? Chikofsky và Cross đã định nghĩa tái kỹ nghệ là: “
kiểm tra, phân tích, biến đổi hệ thống phần mềm hiện thời để xây dựng lại thành một hệ
thống mới, và bổ sung thêm một số thành phần mới vào trong đó” (Chikofsky 1990).
Định nghĩa này rõ ràng tập trung vào làm sáng tỏ đặc trưng của thuật ngữ, các thay đổi
của kết quả phần mềm. Arnold, đã định nghĩa một cách khác về tái kỹ nghệ là: “bất kỳ
hoạt động nào làm cải tiến sự hiểu biết về phần mềm, hoặc là hoạt động cải 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õ 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
9
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ề
Tái kỹ nghệ giai đoạn cũng liên kết với tái kỹ nghệ tiến trình nghiệp vụ (Hammer,
1990). Tái kỹ nghệ tiến trình nghiệp vụ cũng liên quan với tiến trình nghiệp vụ tái thiết
kế để giảm số lượng các hoạt động dự phòng và nâng cao hiệu quả của qui 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
11
Đặ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ệ
Hiểu và chuyển đổi
đố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 mềm.
Sự khác biệt này được minh họa ở hình 1-01. Kỹ thuật dịch xuôi bắt đầu với việc đặc tả
hệ thống và bao gồm cả việc thiết kế và thực thi trong hệ thống mới. Tái kỹ nghệ bắt
đầu với một hệ thống đã tồn tại và sau đó thực hiện các qui trình phát triển để thay thế,
biến đổi một số thành phần của hệ thống dựa trên những hiểu biết về hệ thống gốc.
Hình 1-02: Qui trình tái kỹ nghệ
Hình 1-02 mô tả một qui trình tái kỹ nghệ có khả năng thực hiện được. Đầu vào
chương
Tái kỹ nghệ
dữ liệu
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.
4 Module hóa hệ thống Liên kết các phần của chương trình thành một nhóm với nhau,
và những thành phần riêng biệt, dư thừa được bỏ đi. Trong một vài trường hợp, giai
đoạn này có thể bao gồm cả việc biến đổi cấu trúc chương trình.
5 Tái kỹ nghệ dữ liệu Dữ liệu xử lý bởi chương trình được thay đổi để phản hồi lại
những thay đổi của chương trình.
Tái kỹ nghệ chương trình có thể không cần thiết phải đầy đủ tất cả các bước như
trong hình 2. Việc dịch mã nguồn có thể không cần thiết nếu ngôn ngữ chương trình sử
dụng để phát triển hệ thống vẫn được các trình biên dịch hiện thời hỗ trợ. Nếu các công
cụ tự động phục vụ cho quá trình tái kỹ nghệ có thể tin tưởng hoàn toàn thì những tài
liệu có được thông qua hoạt động kỹ nghệ ngược có thể không cần thiết. Tái kỹ nghệ dữ
liệu chỉ cần thiết nếu cấu trúc dữ liệu trong chương trình thay đổi trong quá trình tái kỹ
nghệ hệ thống. Tuy nhiên, tái kỹ nghệ phần mềm luôn bao gồm việc cấu trúc lại chương
trình.
Chi phí của tái kỹ nghệ hiển nhiên được quyết định bởi qui mô công việc cần phải
được tiến hành. Chi phí của các phương pháp tiếp cận đến tái kỹ nghệ được thể hiện
trong hình 1-03. Chi phí tăng từ trái qua phải, vì thế chuyển đổi mã nguồn là lựa chọn rẻ
nhất và tái kỹ nghệ chính là một phần của việc chuyển hướng cấu trúc là cái có chi phí
cao nhất.
13
Tổ chức lại chương trình
và dữ liệ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ế lại
Code lạiHình 1-04: Mô hình hoạt động tái kỹ nghệ
Tái kỹ nghệ sẽ bắt đầu với mã nguồn của chương trình được kế thừa lại và kết thúc
với mã nguồn của chương trình đích. Qui trình này có thể chỉ đơn giản là việc sử dụng
một công cụ dịch mã để dịch mã nguồn từ ngôn ngữ này sang ngôn ngữ khác (từ
FORTRAN sang C ) hay từ hệ điều hành này sang hệ điều hành khác (từ Linux sang
Window). 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. Chúng ta có thể hình dung rõ hơn về mô
Cần phải chuyển đổi mã nguồn vì những lý do sau đây:
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ọ.
16
Hệ thống
được tái kỹ
Hệ thống
được tái kỹ
Hệ thống
tái kỹ nghệ
Xác định sự khác
biệt của mã nguồn
Thiết kế tài
liệu chuyển đổi
Dịch mã
tự động
Dịch mã
thủ
công
Hình 1-05: Qui trình dịch mã nguồn
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
17
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
để 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. Tuy nhiên, kỹ nghệ ngược không nhất thiết phải luôn
có trong qui trình tái kỹ nghệ.
1. Thiết kế và đặc tả của một hệ thống đang tồn tại có thể được kỹ nghệ ngược, vì vậy
chúng có thể được sử dụng như một đầu vào, và chính là đặc tả yêu cầu của hệ
thống thay thế.
2. Ngoài ra, việc thiết kế và đặc tả có thể được kỹ nghệ ngược, do đó nó luôn sẵn
sàng cho việc bảo trì chương trình. Với những thông tin bổ sung, chúng ta có thể
không cần thiết phải kỹ nghệ lại mã nguồn của hệ thống.
18
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
Xem lại thiết
kế
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
19
Tạo ra tài liệu
Tài liệu
mới
Tài liệu mới
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 sách các mã trong dạng cải tiến,
hay như máy tạo biểu đồ có thể tạo ra các biểu đồ trực tiếp từ mã, phản ánh các luồng
mã và cấu trúc mã, hoặc là máy phát danh sách tham chiếu chéo. Một mục tiêu chính
của những công cụ này là giúp cho con người có thể dễ dàng hình dung được mối quan
hệ giữa các thành phần của chương trình, từ đó có thể thấy phương hướng rõ ràng để
thực hiện công việc.
1.3.2.2 Phục hồi thiết kế
Sau bước làm lại tài liệu, việc phục hồi lại thiết kế của chương trình là một việc
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
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.
Hình 1-07 mô tả một điều khiển logic phức tạp trong việc xây dựng một chương
trình đơn giản nhưng để hiểu được cấu trúc của nó thì lại rất phức tạp. Chương trình
được viết bằng một ngôn ngữ tương tự như FORTRAN và nó thường dùng để viết các
chương trình thuộc loại này. Tuy nhiên ở đây, chương trình không phải gây khó hiểu bởi
những tên biến phức tạp. Trong ví dụ là một bộ điều khiển cho hệ thống làm nóng. Một
bảng điều khiển được thiết lập để chuyển đổi giữa các trạng thái bật, tắt và kiểm soát.
Nếu hệ thống được kiểm soát thì sau đó nó sẽ được bật và tắt tùy thuộc vào thiết lập của
bộ đếm thời gian và bộ điều nhiệt. Nếu hệ thống làm nóng được bật, bộ chuyển đổi của
lò sưởi sẽ chuyển thành tắt và ngược lại.
Start: Get (Time-on, Time-off, Time, Setting, Temp, Switch)
21
if Switch = off goto off
đ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
22
-- 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;
elsif Temp < Setting and Heating-status = off then
Switch-heating; Heating-status := on ;
end if;
end if ;
end case ;
end loop ;
Hình 1-08 – Một chương trình điều khiển có cấu trúc
Cũng giống như điều khiển không có cấu trúc, những điều kiện phức tạp cũng có
thể được đơn giản hóa như một phần trong qui trình tái cấu trúc một chương trình. Hình
1-09 thể hiện một câu lệnh điều kiện nếu bao gồm cả câu lệnh logic “not” thì có thể sẽ
giúp chúng ta dễ hiểu cấu trúc của đoạn mã hơn.
-- điều kiện phức tạp
if not (A > B and (C < D or not ( E > F) ) )...