1
Số hóa bởi trung tâm học liệu
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
Phạm Thu Trang
CÔNG NGHỆ QUẢN LÝ DỮ LIỆU PHI CẤU TRÚC
VÀ ỨNG DỤNG PHÁT TRIỂN
HỆ THỐNG THÔNG TIN QUẢN LÝ
LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH
Thái Nguyên - 2013
2
Số hóa bởi trung tâm học liệu
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
Phạm Thu Trang
CÔNG NGHỆ QUẢN LÝ DỮ LIỆU PHI CẤU TRÚC
VÀ ỨNG DỤNG PHÁT TRIỂN
HỆ THỐNG THÔNG TIN QUẢN LÝ
Chuyên ngành : Khoa học máy tính
Mã số : 60 48 01
LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC
TS. Lê Văn Phùng
Thái Nguyên - 2013
i
Số hóa bởi trung tâm học liệu
, không
.
.
6 năm 2013
ii
Số hóa bởi trung tâm học liệu
MỤC LỤC
MỤC LỤC ii
DANH MỤC CÁC TỪ VIẾT TẮT iv
DANH MỤC HÌNH VẼ v
MỞ ĐẦU 1
Chương 1: Tổng quan về công nghệ quản lý dữ liệu phi cấu trúc và hệ thống quản lý
văn bản, điều hành trực tuyến………………………………………………………… 3
1.1. Tổng quan về các công nghệ quản lý dữ liệu phi cấu trúc 3
1.1.1. Khái niệm về tái kỹ nghệ 3
1.1.2. Qui trình chung tái kỹ nghệ phần mềm 7
1.1.3. Các công cụ trợ giúp quá trình tái kỹ nghệ phần mềm 19
1.1.4. Khái quát về dữ liệu phi cấu trúc và công nghệ quản lý dữ liệu phi cấu trúc… 23
1.2. Hệ thống quản lý văn bản và điều hành trực tuyến 29
1.2.1. Cấu trúc hệ thống quản lý văn bản và điều hành trực tuyến ……………… 30
1.2.2. Nghiệp vụ xử lý văn bản và điều hành trực tuyến………………………………30
Chương 2: Các công nghệ quản lý dữ liệu phi cấu trúc………………………… 35
2.1. Công nghệ của hãng Microsoft 35
2.1.1. Windows server…………………………………………………………………. 35
2.1.2. Công nghệ SQLServer của Microsoft 38
2.1.3. Công Nghệ ASP 42
2.2. Công nghệ mã nguồn mở 43
2.2.1. OS Linux…………………………………………………………………………… 43
2.2.2. My SQL…………………………………………………………………………….45
2.2.3. PHP…………………………………………………………………………………48
2.2.4. Apache…………………………………………………………………………… 50
iii
Số hóa bởi trung tâm học liệu
2.3. Công nghệ IBM-Lotus Domino 51
2.3.1. Tổng quan………………………………………………………………………….51
2.3.2. Các phần mềm trong hệ thống Lotus………………………………………… 52
Chương 3. Phát triển và cài đặt hệ thống quản lý văn bản và điều hành trực tuyến trên
công nghệ IBM – Lotus Domino…………………………………………………….55
3.1. Những vấn đề đặt ra cần tiến hóa hệ thống 55
3.2. Lựa chọn giải pháp tái kỹ nghệ 56
3.3. Sơ đồ tiến trình thực hiện tái kỹ nghệ và quy trình phát triển hệ thống quản lý
văn bản và điều hành trực tuyến 57
3.3.1. Từ mã nguồn của hệ thống chuyển sang mô hình trực quan………………….58
3.3.2. Từ mô hình trực quan cấu trúc lại chương trình……………………………… 60
3.3.3. Tái kỹ nghệ dữ liệu………………………………………………………………….62
3.3.4. Xây dựng mã nguồn…………………………………………………………………62
3.3.5. Hoàn thiện, cài đặt và sử dụng……………………………………………………62
3.4. Môi trường cài đặt 62
3.5. Kết quả đạt được và một số đánh giá 63
3.6. Hệ thống giao diện chương trình 63
KẾT LUẬN 71
a. Tiếng Việt 72
b. Tiếng Anh 72
c. Internet 72
iv
Số hóa bởi trung tâm học liệu
DANH MỤC CÁC TỪ VIẾT TẮT
CSDL
: Cơ sở dữ liệu
CV
: Chuyên viên
DMS
: Document Management System
HSCV
: Hồ sơ công việc
QLVB
: Quản lý văn bản
RUP
: Rational Unified Process
SQL
: Structured Query Language
UML
: Unifield modeling language
VB
: Văn bản
VP
: Văn phòng
v
Số hóa bởi trung tâm học liệu
DANH MỤC HÌNH VẼ
Hình 1.1 : Tái kỹ nghệ phần mềm
Hình 1.2: Qui trình tái kỹ nghệ
Hình 1.3: Chi phí tái kỹ nghệ
Hình 1.4. Quy trình tái kỹ nghệ phần mềm
Hình 1.5. Mô hình chung của tái kỹ nghệ phần mềm
Hình 1.6: Qui trình dịch mã nguồn
Hình 1.7: Tiến trình kỹ nghệ ngược
Hình 1.8: Cấu trúc chương trình tự động
Hình 1.9: Chuyển đổi dữ liệu
Hình 1.10: Quá trình tái kỹ nghệ dữ liệu
Hình 1.11: Kỹ nghệ chuyển tiếp và Tái kỹ nghệ phần mềm
Hình 1.12: Dịch xuôi và dịch ngược trong UML
Hình 1.13: 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.14: 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ế
Hình 3.1: Sơ đồ tiến trình tái kỹ nghệ “Hệ thống quản lý văn bản & điều hành trực
tuyến”
Hình 3.2: Từ mã nguồn của hệ thống chuyển sang mô hình trực quan
Hình 3.3: Mô hình use case cho thấy các yêu cầu của hệ thống
Hình 3.4: Mô hình use case cho quyền quản trị
Hình 3.5: Mô hình use case cho quyền người dùng
Hình 3.6: Biểu đồ tuần tự cho chức năng tìm kiếm
Hình 3.7: Màn hình đăng nhập
Hình 3.8: Màn hình cập nhật văn bản đến
Hình 3.9: Màn hình cập nhật văn bản đi
Hình 3.10: Biểu mẫu xuất văn bản đến
Hình 3.11: Biểu mẫu xuất văn bản đi
Hình 3.12: Giao diện trang chủ
Hình 3.13: Giao diện tác nghiệp phụ
Hình 3.14: Giao diện danh sách văn bản đến
vi
Số hóa bởi trung tâm học liệu
Hình 3.15: Giao diện chi tiết văn bản đến
Hình 3.16: Giao diện danh sách văn bản đi
Hình 3.17: Giao diện chi tiết văn bản đi
Hình 3.18: Giao diện yêu cầu công việc
Hình 3.19: Giao diện tìm kiếm văn bản
Hình 3.20: Tìm kiếm toàn bộ văn bản
Hình 3.21: Tìm kiếm theo sổ văn bản
Hình 3.22: Tìm kiếm theo loại văn bản
Hình 3.23: Tìm kiếm theo nơi gửi
1
Số hóa bởi trung tâm học liệu
MỞ ĐẦU
Khoa học máy tính nghiên cứu về cơ sở lý thuyết thông tin, tính toán, thực hiện
và ứng dụng trong các hệ thống máy tính. Khoa học máy tính có nhiều ngành con. Một
số ngành nhấn mạnh vào việc tính toán các kết quả cụ thể trong khi đó một số ngành
tập trung vào các thách thức trong cài đặt các tính toán. Cùng với sự ra đời và phát
triển của hệ thống máy tính với tốc độ xử lý ngày càng mạnh thì ngành khoa học máy
tính cũng phát triển theo với việc giải quyết càng nhiều các bài toán thực tiễn liên quan
tới đời sống và kinh tế xã hội, nó trở thành cơ sở cũng như công cụ để giải quyết các
bài toán cho các lĩnh vực khoa học khác như thống kê, quản trị…
Công nghệ phần mềm phát triển nhanh chóng và đi sâu vào đời sống kinh tế xã
hội với những ứng dụng thiết thực, cùng với sự bùng nổ thông tin làm cho một loạt các
hoạt động luôn bị thay đổi và các yêu cầu thực tiễn của quản lý làm cho yêu cầu phần
mềm cũng thay đổi theo và kèm theo đó là sự thay đổi phần mềm để đáp ứng với các
yêu cầu thực tiễn trên cơ sở phần mềm cũ. Người ta gọi đó là tái kỹ nghệ phần mềm
với mục tiêu kế thừa những tinh hoa của phần mềm cũ và cập nhật những thay đổi mới
để giảm chi phí. Một trong những công cụ của việc tái kỹ nghệ là việc quản lý dữ liệu
phi cấu trúc. Vấn đề đặt ra là tái kỹ nghệ sử dụng công cụ quản lý dữ liệu phi cấu trúc
như thế nào để đảm bảo tính hiệu quả và khoa học.
Chính vì thế luận văn của tôi với chủ để “Công nghệ quản lý dữ liệu phi cấu
trúc và ứng dụng phát triển hệ thống thông tin quản lý” với mục tiêu nghiên cứu sâu
hơn và làm rõ những mấu chốt trong việc sử dụng công nghệ quản lý dữ liệu phi cấu
trúc trong tái kỹ nghệ phần mềm đồng thời ứng dụng nó vào việc tái kỹ nghệ phát triển
hệ thống quản lý văn bản và điều hành trực tuyến cho Sở Y tế Bắc Kạn.
Để thực hiện được mục đích này đề tại đặt ra những nhiệm vụ cần đạt được như
sau:
- Tìm hiểu khái quát về tái kỹ nghệ và các công nghệ sử dụng trong quá trình tái
kỹ nghệ.
- Nghiên cứu các công nghệ quản lý dữ liệu phi cấu trúc và khả năng ứng dụng
của chúng.
2
Số hóa bởi trung tâm học liệu
- Ứng dụng một công nghệ quản lý dữ liệu phi cấu trúc là Lotus Domino của
IBM để phát triển hệ thống quản lý văn bản và điều hành trực tuyến thông qua đổi mới
cơ chế tìm kiếm thông tin.
Luận văn gồm 3 chương:
Chương 1. Tổng quan về các công nghệ quản lý dữ liệu phi cấu trúc và hệ thống
quản lý văn bản, điều hành trực tuyến.
Chương 2. Các công nghệ quản lý dữ liệu phi cấu trúc.
Chương 3. Phát triển và cài đăt Hệ thống quản lý văn bản và điều hành trực
tuyến dựa trên công nghệ IBM-Lotus Domino.
3
Số hóa bởi trung tâm học liệu
Chương 1.
TỔNG QUAN VỀ CÁC CÔNG NGHỆ QUẢN LÝ DỮ LIỆU PHI CẤU TRÚC
VÀ HỆ THỐNG QUẢN LÝ VĂN BẢN, ĐIỀU HÀNH TRỰC TUYẾN
1.1. Tổng quan về các công nghệ quản lý dữ liệu phi cấu trúc
1.1.1. Khái niệm về 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 đó” [6]. Định nghĩa này 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, 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 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ũ.
Mặc dù nhiều hệ thống phần mềm cũ đã được thay thế, nhưng hầu hết trong số
chúng vẫn đang được sử dụng. Trong khi đó, từ năm 1990 đã có một sự gia tăng rất
lớn trong việc sử dụng máy tính để hỗ trợ qui trình nghiệp vụ. Do đó, đến năm 2000 đã
có khoảng 250 nghìn tỉ dòng mã nguồn đang tồn tại và phải được duy trì. Phần lớn
trong số đó không được viết bằng các ngôn ngữ hướng đối tượng và số nhiều trong đó
vẫn được chạy trên các máy tính lớn[6,9]. Có nhiều hệ thống để tiếp tục tồn tại phải
thay đổi hoàn toàn hoặc cấu trúc lại hệ thống căn bản, do đó kinh phí sẽ phải bỏ ra là
rất lớn. Việc bảo trì một hệ thống cũ khá tốn kém, vì vậy tái kỹ nghệ lại những hệ
thống này sẽ kéo dài thời gian sử dụng của chúng. Tái kỹ nghệ một hệ thống sẽ có chi
phí hiệu quả khi hệ thống đó có giá trị nghiệp vụ cao nhưng lại tốn kém cho việc bảo
4
Số hóa bởi trung tâm học liệu
trì. Tái kỹ nghệ cải thiện cấu trúc hệ thống, tạo ra tài liệu của hệ thống mới và làm cho
nó dễ hiểu hơn.
Vậy trong trường hợp nào chúng ta nên thực hiện tái kỹ nghệ hệ thống. Câu trả
lời là tái kỹ nghệ sẽ có hiệu quả cao nhất khi thực hiện đối với một hệ thống cũ được
kế thừa lại (legacy system). Một hệ thống cũ được kế thừa lại có thể là một phương
thức, công nghệ đã cũ, một hệ thống máy tính hay một chương trình ứng dụng lạc hậu
vẫn đang tiếp tục được sử dụng bởi các chức năng của nó vẫn đang đáp ứng những nhu
cầu của người dùng. Tuy nhiên, các hệ thống này sẽ không có hiệu quả cao do công
nghệ đã lạc hậu và các thủ tục hay các nền tảng hỗ trợ đã không còn tồn tại. Hơn thế
nữa, các hệ thống này thường không còn các tài liệu đặc tả, phân tích, các mô hình
thiết kế. Vì vậy, để có thể xây dựng lại hệ thống cần phải có sự hiểu biết sâu sắc về nó.
Do đó, tái kỹ nghệ là lựa chọn tốt nhất trong những trường hợp này.
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.1 : Tái kỹ nghệ phần mềm
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ỹ
Đặ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
5
Số hóa bởi trung tâm học liệu
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.1 [9]. 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.2: Qui trình tái kỹ nghệ
Hình 1.2 mô tả một qui trình tái kỹ nghệ có khả năng thực hiện được. Đầu vào
của qui trình là một chương trình được kế thừa và đầu ra là một phiên bản có các
module có cấu trúc rõ ràng của chính chương trình đó. Đồng thời cũng như là tái kỹ
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.
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
trúc chương
trình
Module hóa
chương trình
Tái kỹ nghệ
dữ liệu
6
Số hóa bởi trung tâm học liệu
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 1.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í tăng
Hình 1.3: Chi phí tái kỹ nghệ
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.3. 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.
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
7
Số hóa bởi trung tâm học liệu
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à: Chất lượng của phần mềm để tái kỹ nghệ, công cụ hỗ trợ có sẵn cho
việc tái kỹ nghệ, phạm vi của chuyển đổi dữ liệu thiết yếu, tính sẵn có của đội ngũ
nhân viên chuyên môn.
Tái kỹ nghệ hệ thống phần mềm có hai ưu điểm chính so với các phương pháp
tiếp cận khác trong việc cải tiến hệ thống đó là giảm thiểu rủi ro và giảm giá thành
phần mềm.
1.1.2. Qui trình chung tái kỹ nghệ phần mềm
Hình 1.4. Quy trình tái kỹ nghệ phần mềm
Kiểm kê phân tích
Lựa chọn tài liệu tái tổ chức lại:
Kỹ nghệ ngược:
Tổ chức lại code (Code restructuring):
Tổ chức lại dữ liệu (Data restructuring):
Kỹ nghệ chuyển tiếp.
Tái kỹ nghệ bắt đầu với mã nguồn của hệ thống cơ sở đang tồn tại và kết thúc
với mã nguồn của hệ thống muốn hướng tới. Quá trình này có thể đơn giản như sử
dụng công cụ dịch mã nguồn để dịch mã nguồn từ một ngôn ngữ sang ngôn ngữ khác
(FORTRAN sang C) hoặc từ một hệ điều hành này sang hệ điều hành khác (UNIX
sang DOS). Mặt khác, nhiệm vụ của tái kỹ nghệ có thể rất phức tạp, sử dụng mã
nguồn hiện đang tồn tại để tái tạo lại phần thiết kế, xác định yêu cầu trong hệ thống
8
Số hóa bởi trung tâm học liệu
đang tồn tại sau đó so sánh chúng với yêu cầu hiện tại, loại bỏ những thứ không còn
áp dụng, thiết kế lại hệ thống bằng cách sử dụng thiết kế hướng đối tượng và cuối
cùng code thành một hệ thống mới. Hình 1.4, Mô hình chung của các phần mềm tái
kỹ nghệ cho biết kỹ thuật, quy trình cho tất cả các cấp của tái kỹ nghệ dựa trên các
cấp độ của trình độ phát triển phần mềm trừu tượng được nói đến ở trên.
Các mô hình trong hình 1.5 áp dụng ba nguyên tắc của tái ký nghệ: sự trừu
tượng hóa (abstraction ), sự sửa đổi (alteration), và sự sàng lọc (refinement).
Hình 1.5. Mô hình chung của tái kỹ nghệ phần mềm
Sự trừu tượng hóa là một cấp độ tăng dần dần trong cấp độ trừu tượng của hệ
thống. Sự trình bày hệ thống được tạo ra bởi sự thay thế liên tiếp các thông tin chi tiết
hiện có với các thông tin mà nó trừu tượng hơn. Sự trừu tượng hóa đưa ra sự miêu tả
nhấn mạnh một số đặc điểm của hệ thống. Sự dịch chuyển đi lên này gọi là kỹ thuật
đảo ngược và có liên quan đến quá trình phụ, các công cụ và kỹ thuật. Sự sửa đổi
(alteration) là tạo ra một hoặc nhiều chuyển đổi một đại diện của hệ thống mà không
thay đổi mức độ trừu tượng hóa trong đó có bổ sung, xóa và sửa đổi thông tin. Sự sàng
lọc (refinement) là sự giảm dần trong cấp độ trừu tượng hóa của hệ thống bị gây ra bởi
sự thay thế liên tiếp các thông tin trong hệ thống tồn tại với nhiều thông tin chi tiết. Đó
là kỹ thuật chuyển tiếp (Forward Engineering) giống như phát triển phần mềm với mã
(code) mới nhưng với một số quy trình sàng lọc.
Thiết kế lại
Code lại
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
So sánh
chất lượng
chức năng
Hệ thống đích
Hệ thống ban đầu
9
Số hóa bởi trung tâm học liệu
1.1.2.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: Nền phần cứng được cập nhật,
thiếu nhân viên có kỹ năng, những thay đổi chính sách tổ chức, thiếu những sự trợ
giúp phần mềm.
Hình 1.5 mô tả qui trình dịch mã nguồn. Có thể không cần hiểu hoạt động chi tiết
của phần mềm hoặc sửa đổi cấu trúc của hệ thống. Những phân tích liên quan có thể
tập trung vào ngôn ngữ lập trình và có thể coi nó tương đương như cấu trúc điều khiển
của chương trình.
Hình 1.6: Qui trình dịch mã nguồn
Dịch mã nguồn sẽ chỉ thực sự kinh tế nếu như việc dịch tự động sẵn sàng cho
việc dịch một số lượng lớn bản dịch. Nó có thể là một chương trình được viết đặc biệt,
một công cụ được mua để chuyển đổi từ ngôn ngữ này sang ngôn ngữ khác hoặc một
mô hình hệ thống thích hợp. Trong trường hợp thứ hai, cần phải xây dựng tập hợp
những hướng dẫn làm thế nào để chuyển đổi từ sự trình bày này sang sự trình bày
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.
1.1.2.2. Kỹ nghệ ngược
Hệ thống được
tái kỹ nghệ
Hệ thống được
tái kỹ nghệ
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
10
Số hóa bởi trung tâm học liệu
Kỹ nghệ ngược là một tiến trình phân tích để xác định quan hệ của hệ thống và
tạo ra các thành phần của hệ thống trong một mẫu khác hoặc trong một cấp độ trừu
tượng cao hơn. Trong kỹ nghệ ngược, các yêu cầu và thiết kế cấu trúc cần thiết và nội
dung của hệ thống phải giảm đi. Ngoài ra để giữ lại lược đồ quan hệ và các mối tương
tác, thông tin và các quy luật về ứng dụng doanh nghiệp và quá trình hữu ích trong
hoạt động kinh doanh phải được lưu lại. Mục tiêu chủ chốt của kỹ nghệ ngược là tạo ra
để thay thế, phục hồi việc mất thông tin, phát hiện phản ứng phụ, và tạo điều kiện tái
sử dụng. Hiệu quả của quá trình này ảnh hưởng đến việc thành công của dự án tái kỹ
nghệ. Kỹ nghệ ngược không làm thay đổi hệ thống được tạo ra một hệ thống mới, nó
là một quá trình kiểm tra không làm thay đổi tính năng tổng thể của hệ thống.
Hình 1.7: Tiến trình kỹ nghệ ngược
Kỹ nghệ ngược thường đi trước tái kỹ nghệ. Đôi khi kỹ nghệ ngược được ưa
thích. Khi những đặc điểm kỹ thuật và thiết kế của hệ thống cần phải được xác định
trước bằng cách sử dụng chúng như là đầu vào cho quá trình đặc tả các yêu cầu cho hệ
thống thay thế . Khi việc thiết kế và đặc điểm kỹ thuật cho một hệ thống là cần thiết để
hỗ trợ các hoạt động bảo trì chương trình.
1.1.2.3. Làm lại tài liệu
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ụ
Hệ thống
cần tái kỹ
nghệ
Phân tích
tự động
Diễn giải
thủ công
Kho
thông
tin hệ
thống
Biểu đồ cấu
trúc chương
trình
Biểu đồ cấu
trúc dữ liệu
Ma trận truy
xuất nguồn
gốc
Tạo tài
liệu
11
Số hóa bởi trung tâm học liệu
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.
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
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.1.2.4. 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
làm cần thiết. Phục hồi thiết kế là một tập hợp các kỹ thuật đảo ngược trong đó chúng
ta phải xây dựng lại thiết kế cho chương trình dựa trên việc trực tiếp kiểm tra hệ thống
đó. Ngoài ra, chúng ta phải thu thập thêm các thông tin, kiến thức bên ngoài của hệ
thống, các nguyên nhân trích xuất không rõ ràng của hệ thống, từ đó giúp cho hệ thống
có khả năng quan sát tổng quát hơn, với mức độ trừu tượng cao hơn.
Việc bảo trì phần mềm và thu hoạch những thành phần tái sử dụng lại từ phần
mềm đó, cả hai đều cần đến phân tích việc tái cấu trúc lại thiết kế của hệ thống. Tuy
nhiên, mã nguồn của chương trình thường không chứa nhiều các thông tin về thiết kế
trong giai đoạn đầu. Qua mã nguồn, ta chỉ có thể cấu trúc lại các thông tin cơ bản nhất.
12
Số hóa bởi trung tâm học liệu
Do vậy, các nguồn thông tin bổ sung, do cả con người hay tự động đều cần thiết. Hơn
thế nữa, vì qui mô của một phần mềm để tái kỹ nghệ thường rất lớn (có đến hàng trăm
dòng mã hoặc nhiều hơn nữa) cho nên việc phân tích cũng rất cần những hỗ trợ tự
động để có thể hiểu được qui 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ác thiết kế trừu tượng được phục hồi phải bao gồm các thành phần cơ bản của
kỹ nghệ phần mềm như là đặc tả hình thức, phân tích module, trừu tượng hóa dữ liệu,
luồng dữ liệu và ngôn ngữ đặc tả chương trình. Ngoài ra chúng ta phải bổ sung thêm
những thông tin như vấn đề ngôn ngữ, cách biểu diễn ứng dụng trong môi trường 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ậ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 đến bảo trì
phần mềm.
1.1.2.5. 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, vì vậy 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
13
Số hóa bởi trung tâm học liệu
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.
Bohm và Jacopini (Bohm và Jacopini, 1966) đã chứng minh rằng, bất kỳ chương
trình nào cũng có thể được viết lại thành các dạng đơn giản bằng cách sử dụng những
câu lệnh điều kiện if – else , vòng lặp while, và những câu lệnh vô điều kiện như goto
sẽ không cần thiết trong chương trình. Định lý này là cơ sở cho việc tái cấu trúc
chương trình tự động. Hình 1.8 cho thấy các giai đoạn trong việc cấu trúc lại một
chương trình bằng phương pháp tự động. Qua lần biến đổi đầu tiên, chương trình sẽ
được chuyển đổi thành một đồ thị có hướng, tiếp theo đó nó sẽ được chuyển đổi thành
một chương trình mới có cấu trúc tương đương với chương trình cũ.
Hình 1.8: Cấu trúc chương trình tự động
Các đồ thị có hướng được tạo ra là một đồ thị các luồng chương trình trong đó
chỉ ra cách thức điều khiển di chuyển thông qua các chương trình. Đơn giản hoá và
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.
Tái cấu trúc chương trình tự động sẽ gặp các vấn đề sau:
Chương trình để
cấu trúc lại
Trình diễn biểu đồ
Chương trình đã
được cấu trúc lại
Công cụ phân tích
và xây dựng biểu
đồ
Công cụ sinh
chương trình
14
Số hóa bởi trung tâm học liệu
- 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.
Nếu chương trình phụ thuộc vào dữ liệu trong đó các thành phần gắn kết chặt
chẽ với nhau thông qua việc chia sẻ cấu trúc dữ liệu, việc cấu trúc lại mã không đưa
đến cải tiến sự hiểu biết một cách đáng kể. Do vậy, việc module hóa chương trình có
thể cần thiết. Nếu chương trình được viết bằng một hệ ngôn ngữ không chuẩn, các
công cụ tái cấu trúc tiêu chuẩn có thể không hoạt động đúng đắn và sự can thiệp thủ
công có ý nghĩa vô cùng cần thiết.
Trong một số trường hợp, có thể không có chi phí hiệu quả để cấu trúc lại toàn
bộ các chương trình trong một hệ thống. Một số có thể có chất lượng tốt hơn so với số
khác trong khi đó một vài cái lại không thể tùy thuộc vào các thay đổi thường xuyên.
Arthur (Arthur, 1988) cho thấy rằng một dữ liệu phải được thu thập để giúp xác định
những chương trình nào có thể hưởng lợi nhiều nhất từ tái cấu trúc. Ví dụ, các thông
số sau đây có thể được sử dụng để xác định các chương trình thích hợp cho việc tái
cấu trúc:
- Ước lượng thất bại
- Tỉ lệ phần trăm mã nguồn thay đổi trên mỗi năm
- Độ phức tạp của các thành phần
Một số nhân tố khác như mức độ để chương trình hoặc các thành phần của
chương trình có thể đạt đến tiêu chuẩn như hiện thời cũng có thể dựa vào đó để quyết
định cho việc tái cấu trúc.
1.1.2.6. Module hóa chương trình
Module hóa chương trình là quá trình tổ chức lại chương trình sao cho các phần
chương trình có liên quan đến nhau được tập hợp lại với nhau trong cùng một module.
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
15
Số hóa bởi trung tâm học liệu
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. Ví dụ,
trong chương trình xử lý dữ liệu chấn địa, toàn bộ các toán tử liên kết với thành phần
đồ họa thể hiện của dữ liệu có thể tập hợp lại với nhau trong cùng một module. Nếu hệ
thống được phân phối, các module được tạo ra lại có thể gói gọn lại thành một đối
tượng và có thể được truy cập qua một giao diện chung.
Có một vài kiểu module khác nhau có thể được tạo ra trong quá trình module hóa
là:
- Dữ liệu trừu tượng
- Module phần cứng
- Module chức năng
- Module hỗ trợ cho qui trình
Module hóa chương trình thường được thực hiện thủ công bằng cách kiểm tra và
sửa đổi mã. Để module hóa một chương trình, chúng ta phải xác định mối quan hệ
giữa các thành phần và đề ra xem các thành phần này làm những gì. Các công cụ trực
quan và các công cụ duyệt có thể giúp chúng ta trong quá trình module hóa, nhưng
chúng ta vẫn không thể hoàn toàn thực hiện tự động quá trình này.
1.1.2.7. Tái kỹ nghệ dữ liệu
Cho tới bây giờ, hầu hết các cuộc thảo luận về quá trình phát triển phần mềm
đều tập trung vào vấn đề các chương trình và hệ thống phần mềm luôn luôn biến đổi.
Tuy nhiên, trong nhiều trường hợp, nó lại liên quan đến vấn đề phát triển dữ liệu. Lưu
trữ, tổ chức và định dạng của dữ liệu được xử lý bởi chương trình cũ phải được tiến
hóa để phù hợp với những thay đổi của phần mềm. Quá trình phân tích và tổ chức lại
cấu trúc dữ liệu và đôi khi là cả giá trị của dữ liệu trong hệ thống làm cho nó trở nên
dễ hiểu hơn được gọi là tái kỹ nghệ dữ liệu.
Nói chung, tái kỹ nghệ dữ liệu không cần thiết nếu như các chức năng của hệ
thống không thay đổi. Tuy nhiên, trong thực tế, có rất nhiều lý do để chúng ta phải sửa
đổi dữ liệu khi chương trình của chúng ta là một hệ thống cũ được kế thừa lại:
- Sự thoái hóa dữ liệu.
- Những giới hạn cố hữu được xây dựng trong chương trình
- Tiến hóa kiến trúc
16
Số hóa bởi trung tâm học liệu
- Vấn đề đặt tên dữ liệu
- Vấn đề độ dài trường
- Vấn đề tổ chức bản ghi
- Các giá trị cố định mã hóa cứng
- Không có từ điển dữ liệu
Hình 1.9. Chuyển đổi dữ liệu
Tệp 1
Tệp 6
Tệp 5
Tệp 4
Tệp 3
Tệp 2
Chương trình 1
Chương trình 7
Chương trình 6
Chương trình 5
Chương trình 4
Chương trình 2
Chương trình 3
Hệ thống quản lý CSDL
Chương trình 2
Chương trình 3
Chương trình 4
Chương trình 1
Chương trình 5
Chương trình 6
Chương trình 7
Mô hình dữ
liệu vật lý và
logic
Mô tả
Trở thành
17
Số hóa bởi trung tâm học liệu
Cũng như định nghĩa dữ liệu không phù hợp, các giá trị dữ liệu cũng có thể
được lưu trữ một cách không phù hợp. Sau khi các định nghĩa dữ liệu được tái kỹ
nghệ, giá trị của dữ liệu cũng phải được chuyển đổi để phù hợp với cấu trúc mới.
Trước khi tái kỹ nghệ dữ liệu của chương trình, điều cần thiết trước khi làm là
phải phân tích chi tiết chương trình. 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ác công cụ như là phân tích và mô hình tham chiếu chéo có
thể được sử dụng để giúp cho quá trình phân tích được nhanh chóng và đơn giản hơn.
Một tập hợp các bảng nên được tạo ra để chỉ ra các mục dữ liệu được tham chiếu và
những thay đổi được tạo ra cho mỗi tham chiếu đó.
Hình 1.10: Quá trình tái kỹ nghệ dữ liệu
Hình 1.10 minh họa quá trình tái kỹ nghệ dữ liệu, giả định rằng những định nghĩa
dữ liệu được sửa đổi, các giá trị cố định được đặt tên, định dạng dữ liệu được tổ chức
lại và giá trị dữ liệu được chuyển đổi. Bảng tóm tắt các chi tiết trong thay đổi được tạo
ra. Do đó chúng được sử dụng ở tất cả các giai đoạn của quá trình tái kỹ nghệ dữ liệu.
Trong giai đoạn 1 của quá trình này, các định nghĩa dữ liệu trong chương trình
được sửa đổi cho dễ hiểu hơn. Dữ liệu không bị ảnh hưởng bởi các sửa đổi. 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
Phân
tích dữ
liệu
Chương trình được tái kỹ nghệ
Bảng tổng hợp thay đổi
Phân
tích dữ
liệu
Chuyển đổi
dữ liệu
Dữ liệu
sửa đổi
- Sửa đổi tên
thực thể
- Thay thế các
giá trị cố định.
- Sắp xếp lại
định nghĩa dữ
liệu
- Định dạng lại
dữ liệu
- Chuyển đổi giá
trị mặc định
- Sửa đổi các qui
tắc hợp lệ
Giai đoạn 1
Giai đoạn 2
Giai đoạn 3