3.5.1. Đại cương về thiết kế chương trình
Đến giai đoạn này thì các kết quả thu được qua các giai đoạn phân tích, thiết kế tổng thể, và thiết kế chi tiết (về các giao diện, kiểm soát và cơ sở dữ liệu) khá phong phú, nhưng vẫn còn chưa đủ để có thể chuyển sang lập trình được, các yếu tố còn thiếu là:
- Các chức năng xuất hiện trong các DFD chỉ là các chức năng logic (thuộc lĩnh vực bài toán) mà chưa có các chức năng phù trợ cần thiết như là:
+ Các chức năng đối thoại với người dùng. + Xử lý lỗi.
+ Xử lý vào/ra. + Tra cứu CSDL.
- Các liên quan giữa các chức năng trong DFD chỉ là các chuyển giao dữ liệu mà không phải là các chuyển giao điều khiển (tức chuyển giao sự thực hiện, khi thi hành). Một đặc trưng không thể thiếu trong một chương trình là đặc trưng điều khiển (sự tuần tự, chọn, lặp và các lời gọi giữa các chương trình con), đặc trưng này chưa hề có trong các DFD.
Vì thiếu sót này mà các DFD thu được từ giai đoạn phân tích còn phải được biến đổi, bổ sung thêm chi tiết, thì mới trở thành đầu vào thực sự cho việc lập trình được. Vì vậy phải có một thiết kế chi tiết đó là thiết kế chương trình để đưa ra những quyết định cài đặt (chưa phải cài đặt, chưa phải viết chương trình)
- Nội dung của thiết kế chương trình gồm: + Phân định các module chương trình.
+ Thiết kế các mối liên quan giữa các module đó (thể hiện ở lời gọi, các mục chuyển giao dữ liệu hay trao đổi thông tin).
+ Đặc tả các module chương trình. + Gộp các module thành chương trình. + Thiết kế các mẫu thử.
- Như vậy, đầu vào cho thiết kế chương trình là DFD của từng hệ thống con(đã xác định trong thiết kế tổng thể) cùng với quyết định về giao diện, kiểm soát và CSDL đã được chọn trong các bước thiết kế chi tiết trước đây.
- Đầu ra của thiết kế chương trình là một miêu tả về nội dung các chương trình sẽ được cài đặt, bao gồm:
+ Một lược đồ chương trình (LCT) cho mỗi hệ thống con. Lược đồ chương trình này được trình bày dưới dạng một đồ thị có hướng thường được gọi là lược đồ cấu trúc (structure chart), trong đó:
Mỗi nút là một module chương trình.
Mỗi cung là một lời gọi (lời gọi của module ở gốc đối với module ở ngọn của cung).
+ Đặc tả nội dung của từng module trong LCT.
+ Phân bổ các module trong LCT thành các chương trình (hay module tải về). 3.5.2. Xây dựng lược đồ cấu trúc chương trình
Lược đồ cấu trúc hay gọi là lược đồ chương trình là một biểu diễn dưới dạng đồ thị của một tập hợp các module cùng với các giao diện giữa các module đó (bao gồm sự chuyển giao điều khiển và chuyển giao dữ liệu)
a. Các module chương trình
Module chương trình có thể là một chương trình con, có thể là một nhómcác câu lệnh thực hiện một công việc nào đó độc lập.
Nhiều ngôn ngữ lập trình có các UNIT, CLASS, OBJECT. Đó thực chất là các nhóm module chương trình (thường được gọi là các phương thức). Đây là một sự gom nhóm một số module xung quanh một cấu trúc dữ liệu.
Một module có bốn đặc trưng sau: - Đặc trưng vào/ra:
+ Cái vào: Nó nhận được thông tin gì từ chương trình gọi nó. + Cái ra: Nó trả lại thông tin gì cho chương trình gọi nó.
- Đặc trưng chức năng: Là sự biến đổi từ thông tin vào thành thông tin ra.
- Đặc trưng của cơ chế hoạt động: Là phương thức cụ thể để biến đổi cái vào thành cái ra.
- Đặc trưng dữ liệu cục bộ: Là những ngăn nhớ hay các dữ liệu dùng riêng cho module.
b. Các yếu tố hợp thành LCT
- Các module: Biểu diễn bởi một hình chữ nhật với tên module ở bên trong. Và tên module phản ánh tóm tắt chức năng của module.
Nếu là module có sẵn đã được định nghĩa sẵn (trong hệ thống hay trong thư viện chương trình) thì được biểu diễn bằng hình chữ nhật có cạnh bên được vẽ kép.
- Kết nối các module với nhau:
Các module kết nối với nhau bằng các lời gọi, diễn tả bởi một mũi tên (cung)
Module A gọi Module B.
Module B thực hiện chức năng của mình rồi trả điều khiển cho A ở vị trí sau lời gọi. - Trong quá trình biểu diễn các kết nối người ta qui định:
+ Vị trí của lời gọi (trong module A), cũng như số lần gọi đều không được chỉ rõ. Điều này có nghĩa là ở giai đoạn lập LCT thì các chi tiết này có thể tạm bỏ qua, để giảm bớt sự phức tạp.
+ Trật tự trước sau của một lời gọi xuất phát từ cùng một module được thể hiện theo trật tự từ trái qua phải.
Hình 3. 2: Trình tự thực hiện các module <Tên module > <Tên module > A B A B C D
- Thông tin chuyển giao giữa các module:
Các thông tin được gửi đi kèm với lời gọi (các tham số) và thông tin trả về sau khi thực hiện lời gọi (trả lời) được thể hiện bằng các mũi tên nhỏ vẽ dọc theo cung biểu diễn cho lời gọi, có kèm theo tên của thông tin.
3.5.3. Chuyển từ biểu đồ luồng dữ liệu sang lược đồ cấu trúc
a.Yêu cầu chung:
Kết quả của thiết kế hệ thống là các biểu đồ luồng dữ liệu của các hệ thống con. Ứng với mỗi biểu đồ luồng dữ liệu là một hệ thống con. Và ta lập một LCT tương ứng; LCT này phải đạt các yêu cầu sau:
- Các chức năng xử lý trong DFD chuyển thành các module chương trình
- Thiết kế các module giao diện cho chức năng là các giao diện để người sử dụng có thể làm việc với hệ thống qua giao diện này người sử dụng thấy được hệ thống mà mình đang sử dụng, hình dung ra cách họ phải thực hiện và đánh giá được hệ thống có đáp ứng được yêu cầu đặt ra hay không?
- Tiếp cận từ trên xuống: Bản chất của LCT là sự phân cấp. Vì vậy cách thành lập LCT tốt nhất là triển khai dần từ trên xuống. Sự triển khai từ trên xuống đó lại có thể kết hợp chặt chẽ với sự phân mức các DFD mà ta thu được từ giai đoạn phân tích.
b. Các phương thức định hướng cho việc chuyển DFD thành LCT
Có hai phương thức:
- Phương thức theo biến đổi (Transform analysis). - Phương thức theo thao tác (Transaction analysis).
Hai phương thức này không đối lập và có thể kết hợp với nhau. Ở đây chúng ta chỉ đưa ra những gợi ý, định hướng cho nhà phân tích thiết kế.
* Phương thức theo biến đổi:
- Dựa theo sự phát hiện trung tâm biến đổi thông tin chủ yếu (tính toán, kết xuất) - Các phần còn lại sẽ bị cắt rời không còn liên kết được với nhau sau khi ta cắt đi trung tâm biến đổi.
Sau khi đã lấy ra trung tâm biến đổi, thì phần còn lại là luồng thông tin đầu vào gọi là thượng lưu, và luồng thông tin đầu ra gọi là hạ lưu.
Quá trình xây dựng gồm năm bước:
+ Bước 1: Dõi theo các luồng dữ liệu vào (thượng lưu) vượt qua các chức năng biến đổi thông tin sơ bộ cho đến khi dữ liệu được biến đổi trừu tượng nhất hoặc đến lúc không xem nó là dữ liệu vào được nữa thì chúng ta ngắt (đánh dấu) luồng vào từ vị trí đó.
+ Bước 2: Xác định các nguồn dữ liệu ra, đi ngược dòng vượt qua các chức năng chế biến thông tin cho đến khi không xem được đó là dữ liệu ra, thì dừng lại và đánh dấu.
+ Bước 3: Căn cứ vào các điểm đánh dấu khoanh vùng để cô lập trung tâm biến đổi. + Bước 4: Vẽ hai mức cao nhất trong LCT:
Mức 1 là một module chính Tên thông tin
Mức 2 tiếp theo gồm ba module:
Một module vào cho mỗi luồng dữ liệu vào (trái). Một module ra cho mỗi luồng dữ liệu ra (phải). Một module thông tin biến đổi (giữa).
+ Bước 5: Triển khai mỗi module vào, ra và biến đổi ở mức trên thành mức thấp hơn làm xuất hiện dần các module tương ứng với chức năng xử lý trong DFD.
* Phân tích theo giao dịch/ giao tác
- Giao dịch đó là các thông tin mà khi xuất hiện thì nó khởi động một loạt các chức năng trong DFD. Một giao tác bao gồm:
+ Các sự kiện trong môi trường hệ thống(event). + Tác nhân kích thích(stimulus).
+ Các hành động (activity).
+ Các phản ứng, đáp ứng của hệ thống (response). + Những kết quả, ảnh hưởng của giao tác (effect). - Các bước thực hiện xây dựng LCT qua giao dịch:
+ Bước 1: Phát hiện một chức năng xử lý trong DFD: nhận một luồng dữ liệu vào và cho ra nhiều dữ liệu loại trừ lẫn nhau.
+ Bước 2: Xác định các loại giao tác khác nhau tương ứng với các luồng ra của chức năng nói trên và các chức năng được khởi động từ các giao tác đó.
+ Bước 3: Vẽ LCT ở hai mức cao nhất: Mức 1: Một module chính.
Mức 2: Một module cho mỗi loại giao tác và các module giao tác này được module chính gọi qua phép chon. Cũng có thể thêm các module lấy các thông tin vào/ ra.
+ Bước 4: Triển khai các module xuống mức thấp.
Các mức thấp hơn có thể phối hợp theo cả hai phương pháp: Phân tích theo biến đổi chính.
Phân tích theo các giao tác. 3.5.4. Gộp các module thành chương trình
- Một module chương trình muốn thực hiện được phải đưa vào bộ nhớ trong (được gọi là được nạp hay được tải). Mỗi lần tải phải tốn một phần thời gian của hệ thống.
- Người ta gọi module tải (load modul) là một nhóm module chương trình được tải vào bộ nhớ trong đồng thời. Lý tưởng nhất là tất cả các module trong một LCT hợp thành một module tải. Như thế thì thời gian tiêu tốn cho việc tải chương trình là ít nhất, và chương trình chạy một cách thuận lợi, vì gọi module nào thì module đó đã sẵn sàng.
Tuy nhiên như vậy đòi hỏi bộ nhớ lớn, nhiều khi không đáp ứng nổi. Ngược lại, mỗi module chương trình là một module tải thì tiết kiệm được chỗ nhớ, nhưng lại tốn nhiều thời gian. Vì vậy cần tìm một giải pháp trung gian cho module tải. Bởi vậy nhiệm vụ cuối cùng trong thiết kế chương trình là cắt LCT thành các module tải.
+ Đóng gói theo dòng dữ liêu vào, đóng gói theo các phạm vi điều khiển có hình dáng chẻ dọc lược đồ, chuyển giao theo nguồn dữ liệu.
+ Đóng gói chẻ ngang theo mức LCT, thường sử dụng đối với module lựa chọn. + Đóng gói theo một thư viện chương trình.
+ Đóng gói theo module gọi lặp thường xuyên và ghép chung vào module gọi. + Nếu phép chọn buộc phải cắt ra thì nên khảo sát phép chọn cân đối hay không, gộp nhánh được gọi thường xuyên vào chương trình con.
Bộ nhớ là hạn chế vì vậy không phải tất cả đều được lưu trữ vào bộ nhớ trong, Người ta phải phân chia thành các module để tải dần vào trong bộ nhớ.
- Đặc tả module chương trình:
Thực chất việc đặc tả module chương trình là chỉ ra đầu vào, đầu ra của module và cách thực hiện hay nội dung của module bằng một ngôn ngữ giải thuật nào đó, chẳng hạn:
+ Sơ đồ khối (flowchart).
+ Ngôn ngữ giả trình (Pseudo code).
Dựa trên đặc tả này người xây dựng chương trình sẽ mã hóa thành các chương trình ứng dụng một cách dễ dàng.
3.5.5. Thiết kế mẫu thử
Người thiết kế hệ thống sau khi thiết kế các module còn có trách nhiệm thiết kế và đưa ra các mẫu thử nhằm đảm bảo tính khách quan. Các mẫu thử này chính là yêu cầu người lập trình phải đảm bảo thực hiện đúng các chức năng và yêu cầu khái quát của hệ thống cũng như các yêu cầu chi tiết của từng module chương trình.
Hiện nay, mẫu thử (test) gần như là biện pháp duy nhất để kiểm tra chương trình.
* Các loại mẫu thử:
- 1 % loại mẫu thử hoàn chỉnh/ không hoàn chỉnh: Mẫu thử hoàn chỉnh bảo đảm dự kiến mọi trường hợp có mặt trong chương trình. Mẫu thử không hoàn chỉnh khi ta chỉ cần kiểm tra các mốc quan trọng, còn các phần không quan trong có thể cho phép bỏ qua không ảnh hưởng sai lệch tới tính chất của hệ thống cũng như từng module riêng lẻ.
- 2% Loại mẫu thử ngẫu nhiên/ không ngẫu nhiên: Trước tiên ta nên thử không ngẫu nhiên, sau đó tiến hành những mẫu thử ngẫu nhiên.
- 3% mẫu thử đa dạng, phong phú và đủ lớn.
* Trình bày mẫu thử:
Mẫu thử có thể trình bày theo bảng có dạng sau: Mẫu thử (1) Kết quả thu được
(2)
Kết quả mong đợi (dự đoán) (3) Sai lệch thực tế giữa (2) và (3) Nhận xét D1 dn k1 kn k1 kn % %
C) TÀI LIỆU HỌC TẬP
[1] Nguyễn Văn Ba (2006), Phân tích và thiết kế hệ thống thông tin, NXB Đại học Quốc gia Hà Nội.
[2] Thạc Bình Cường, Nguyễn Thị Tĩnh (2005), Phân tích và thiết kế hệ thống thông tin, NXB Đại học Sư phạm.
[3] Nguyễn Văn Ba (2005), Phát triển hệ thống hướng đối tượng với UML 2.0 và C++, NXB Đại học Quốc Gia Hà Nội.
[4] Nguyễn Văn Vỵ (2007), Phân tích và thiết kế hệ thống thông tin quản lý, NXB Khoa học Tự nhiên và Công nghệ, Hà Nội.
D) CÂU HỎI, BÀI TẬP, NỘI DUNG ÔN TẬP VÀ THẢO LUẬN Câu 1: Thiết kế tổng thể thực hiện các nhiệm vụ gì?
Câu 2: Với hệ thống tuyển sinh vào các trường đại học, hãy phân định hệ thống máy tính
và thủ công cho hợp lý và logic.
Câu 3: Mục đích và yêu cầu của thiết kế màn hình là gì ?
Câu 4: Hãy trình bày các tiêu chuẩn để đánh giá chất lượng của thiết kế giao diện ? Câu 5: Hãy thiết kế giao diện cho chương trình cập nhật dữ liệu khi có độc giả yêu cầu
mượn sách trong hệ thống thư viện.
Câu 6: Điểm hở là gì? Nội dung nghiên cứu các điểm hở ?
Câu 7: Hãy nêu các phương pháp bảo mật thông tin? Cho ví dụ minh họa.
Câu 8: Hãy trình bày phương pháp thực hiện thiết kế lược đồ logic? Khi thiết kế các file
dữ liệu ta dựa vào biểu đồ nào? Căn cứ nào cho ta xác định các thuộc tính của tệp: Tên tệp, tênS thuộc tính, các khóa, và thuộc tính kết nối.
Câu 9: Từ biểu đồ luồng dữ liệu hãy xây dựng lược đồ cấu trúc chương trình cho hệ thống
Tính lương và hệ thống Giao dịch mượn trả sách.
Câu 10: Thông tin bàn giao giữa các module là gì ? Chỉ ra các nguyên tắc cụ thể .
Câu 11: Trong hệ quản trị cơ sở dữ liệu, tương tác giữa các module có xảy ra hay không ?
TÀI LIỆU THAM KHẢO
[1] Nguyễn Văn Ba (2006), Phân tích và thiết kế hệ thống thông tin, NXB Đại học Quốc gia Hà Nội.
[2] Thạc Bình Cường, Nguyễn Thị Tĩnh (2005), Phân tích và thiết kế hệ thống thông tin, NXB Đại học Sư phạm.
[3] Nguyễn Văn Ba (2005), Phát triển hệ thống hướng đối tượng với UML 2.0 và C++, NXB Đại học Quốc Gia Hà Nội.
[4] Tô Văn Nam (2007), Giáo trình phân tích thiết kế hệ thống, NXB Giáo dục.
[5] Nguyễn Văn Vỵ (2007), Phân tích và thiết kế hệ thống thông tin quản lý, NXB Khoa học Tự nhiên và Công nghệ, Hà Nội.