24/05/2018, 21:09

Chất luợng thiết kế

Như đã đề cập ở trên, rất khó để có thể xác định được thế nào là thiết kế tốt, nó phụ thuộc vào ứng dụng và vào yêu cầu dự án. Một thiết kế tốt phải là một thiết kế mà nó cho phép sản sinh ra mã hữu hiệu; nó có thể là một thiết kế tối thiểu mà theo đó là ...

Như đã đề cập ở trên, rất khó để có thể xác định được thế nào là thiết kế tốt, nó phụ thuộc vào ứng dụng và vào yêu cầu dự án. Một thiết kế tốt phải là một thiết kế mà nó cho phép sản sinh ra mã hữu hiệu; nó có thể là một thiết kế tối thiểu mà theo đó là việc thực hiện là càng chặt càng tốt; hoặc nó là thiết kế bảo dưỡng được tốt nhất hay chỉ là tiêu chuẩn tốt cho người dùng. Một thiết kế bảo dưỡng tốt có thể thích nghi với việc cải biên các chức năng và việc thêm các chức năng mới. Do đó, thiết kế như thế phải là dễ hiểu và việc sửa đổi chỉ có hiệu ứng cục bộ. Các thành phần của thiết kế là kết dính theo nghĩa là tất cả các phần trong thành phần đó phải có một quan hệ logic chặt chẽ. Các thành phần ấy phải là được nối ghép lỏng lẻo. Sự nối ghép là một độ đo của tính độc lập của các thành phần. Nối ghép càng lỏng lẻo thì càng dễ thích nghi.

Thực tế, đã có một vài công việc được tiến hành để thiết lập độ đo chất lượng thiết kế dùng để xem một thiết kế có là tốt hay không.

Sự kết dính của một thành phần là độ đo về tính khớp lại với nhau. Một thành phần hẳn thực hiện một chức năng logic hoặc thực hiện một thực thể logic. Tất cả các phần của thành phần đó đều tham gia vào việc thực hiện đó. Nếu một thành phần không trực tiếp tham gia vào việc chức năng logic đó thì mức độ kết dính của nó là thấp.

Theo một số chuyên gia thì có bảy mức kết dính theo thứ tự tăng dần sau đây:

a) Kết dính gom góp: Các phần của thành phần không liên quan với nhau, song lại bị bó vào một thành phần.

b) Hội hợp logic: Các thành phần cùng thực hiện các chức năng tương tự chẳng hạn như vào, xử lý lỗi,... là được đặt vào cùng một thành phần.

c) Kết dính theo thời điểm: Tất cả các thành phần cùng hoạt hoá một lúc, chẳng hạn như khởi sự và kết thúc, là được bó lại với nhau.

d) Kết dính thủ tục: Các phần tử trong thành phần được ghép lại trong một dãy điều khiển.

e) Kết dính truyền thông: Tất cả các phần tử của thành phần cùng thao tác trên một dữ liệu vào và đưa cùng một dữ liệu ra.

f) Kết dính tuần tự: Trong một thành phần, ra của phần tử này là vào của phần tử khác.

g) Kết dính chức năng: Mỗi phần của thành phần đều là cần thiết để thi hành cùng một chức năng nào đó.

Ghép nối liên quan đến kết dính. Nó chỉ ra độ ghép nối giữa các đơn vị của chương trình. Hệ thống có ghép nối cao sẽ có độ ghép nối mạnh giữa các đơn vị, các đơn vị phụ thuộc lẫn nhau. Hệ thống nối ghép lỏng lẻo làm cho các đơn vị là độc lập hoặc là tương đối độc lập với nhau.

Các module là được ghép nối chặt chẽ nếu chúng dùng các biến chung và nếu chúng trao đổi các thông tin điều khiển (ghép nối chung nhau và ghép nối điều khiển). Ghép nối lỏng lẻo đạt được khi đảm bảo rằng các thông tin biểu diễn là được giữ trong thành phần này và giao diện dữ liệu của nó với các đơn vị khác lại thông qua danh sách tham số của nó.

Tiêu chuẩn của các ghép nối trong chương trình được đánh giá như sau:

- Một phép nối chuẩn là một phép gọi tới một module khác bằng tên.

- Một phép nối điều khiển xấu là một phép chuyển tới bất kỳ một điểm vào thứ cấp nào được xác định trong một module khác.

- Một phép nối dữ liệu xấu là một sự liên hệ tới dữ liệu xác định trong một module khác nhưng không phải bởi một phép truyền tường minh qua một phép nối chuẩn.

- Một ghép cặp (couple) tính toán là một mục dữ liệu dùng chung được module nhận dùng làm cơ sở tính toán hay lập chỉ mục, nhưng không phải để lập quyết định.

Sự hiểu được liên quan tới một số các đặc trưng thành phần sau đây:

a) Tính kết dính: Có thể hiểu được thành phần đó mà không cần tham khảo đến một thành phần nào khác hay không?

b) Đặt tên: Phải chăng là mọi tên được dùng trong thành phần đó đều có nghĩa? Tên có nghĩa là những tên phản ánh của thực thể trong thế giới thực được mô hình bởi thành phần đó.

c) Soạn tư liệu: Thành phần có được soạn thảo tư liệu sao cho ánh xạ giữa các thực thể của thế giới thực và thành phần đó là rõ ràng?

d) Độ phức tạp: độ phức tạp của các thuật toán được dùng để thực hiện thành phần đó là như thế nào? Từ phức tạp ở đây được dùng theo nghĩa không hình thức. Độ phức tạp cao ám chỉ nhiều quan hệ giữa các thành phần khác nhau của thành phần thiết kế đó và một cấu trúc logic phức tạp mà nó dính líu đến độ sâu lồng nhau của phát biểu. Các thành phần phức tạp là khó hiểu, vì thế người thiết kế nên làm cho thiết kế thành phần càng đơn giản càng tốt.

Đa số công việc về đo chất lượng thiết kế được tập trung vào cố gắng đo độ phức tạp của thành phần và từ đó thu được một vài độ đo về sự dễ hiểu của thành phần. Độ phức tạp phản ánh độ dễ hiểu, nhưng cũng có một số các nhân tố khác ảnh hưởng đến độ dễ hiểu, chẳng hạn như tổ chức dữ liệu và kiểu cách mô tả thiết kế. Các số đo độ phức tạp có thể chỉ cung cấp một chỉ số cho độ dễ hiểu của một thành phần.

Sự thừa kế trong một thiết kế hướng đối tượng phản ánh độ dễ hiểu. Nếu sự thừa kế được dùng để gắn các chi tiết thiết kế thì thiết kế sẽ dễ hiểu hơn. Mặc khác nếu sử dụng sự thừa kế đòi hỏi người đọc thiết kế phải phải nhìn nhiều lớp đối tượng khác nhau trong tôn ti thừa kế thì độ dễ hiểu của thiết kế là được rút gọn.

Nếu một thiết kế là nhằm được bảo trì thì nó phải là sẳn sàng thích nghi được. Dĩ nhiên điều đó suy ra rằng các thành phần của chúng nên được ghép nối lỏng lẻo. Tuy nhiên sự thích nghi được lại có nghĩa là thiết kế đó phải được soạn thảo tư liệu tốt, tư liệu thành phần phải là dễ hiểu và kiên định với sự thực hiện, và nghĩa là sự thực hiện phải được viết ra trong cách dễ đọc.

Một thiết kế dễ thích nghi hẳn là có mức nhìn thấy được cao. Nó có một quan hệ rõ ràng giữa các mức khác nhau của thiết kế. Người đọc thiết kế có thể tìm được các biểu diễn liên quan sao cho lược đồ cấu trúc biểu diễn sự vận chuyển của biểu đồ dòng dữ liệu.

Cần phải dễ dàng kết hợp chặt chẽ các biến đổi về thiết kế trong toàn bộ tư liệu thiết kế.

Nếu không như vậy thì các thay đổi thiết kế có thể sẽ không được đưa vào trong các mô tả liên quan. Tư liệu thiết kế đó có thể trở nên không kiên định. Các biến đổi tiếp sau là khó thực hiện (thành phần thiết kế này là ít thích nghi được) vì rằng sự cải biên đó không thể dựa vào tính kiên định của của tư liệu thiết kế.

Để có độ thích nghi tối ưu thì mỗi thành phần phải là tự chứa. Một thành phần có thể là ghép nối lỏng lẻo theo nghĩa chỉ là hợp tác với các thành phần khác thông qua việc chuyển các thông báo. Điều này không giống như là tự chứa vì rằng thành phần đó có thể dựa trên các thành phần khác chẳng hạn như các chức năng hệ thống hoặc các chức năng xử lý sai. Sự thích nghi với một thành phần có thể dính líu với sự thay đổi các phần của thành phần đó mà nó dựa trên các chức năng ngoại nên đặc tả của các chức năng ngoại này cũng xét đến sự cải biên đó.

Muốn tự chứa một cách hoàn toàn thì một thành phần không nên dùng các thành phần khác được xác định ngoại lai. Tuy nhiên, điều đó lại mâu thuẫn với kinh nghiệm nói rằng các thành phần hiện có nên là dùng lại được. Vậy là cần có một cân bằng giữa tính ưu việt của sự dùng lại các thành phần và sự mất mát tính thích nghi được của thành phần.

đen"

+ Linh hoạt đối với những yêu cầu thay đổi không định trước.

+ Dễ thử nghiệm.

+ Tính sáng sủa, dễ đọc

+ Kích thước module nhỏ

+ Tính độc lập module (tính mở/đóng giứa các module), sử dụng yếu tố "hộp

+ Phải quan hệ chặt chẽ giữa thiết kế và yêu cầu.

+ Mỗi module hoàn toàn độc lập, nó thực hiện một chức năng duy nhất và thực

hiện trọn vẹn chức năng đó.

+ Mọi thứ trong module ràng buộc với nhau qua việc xử lý nối tiếp nhau trên cùng một dòng dữ liệu.

+ Mọi thứ trong module được điều khiển bởi cùng một dữ liệu vào, hay cùng một phức hợp thiết bị, hay cùng thực hiện từng phần của cùng một kết xuất.

+ Module có thể hiểu được hoàn toàn dựa vào những tham biến truyền cho nó và nhận từ nó.

+ Khi thiết kế cố gắng giảm thiểu cấu trúc bằng việc tản ra nhiều và cố gắng co cụm khi chiều sâu tăng thêm.

+ Giữ phạm vi hiệu quả của một module bên trong phạm vi kiểm soát của module đó.

- Phạm vi hiệu quả của module m được định nghĩa là tất cả các module khác bị ảnh hưởng bởi một quyết định thực hiện trong module m.

- Phạm vi kiểm soát của module m là tất cả các module và mọi module thuộc cấp và thuộc cấp cuối cùng đối với module m.

+ Ước lượng giao diện module để giảm độ phức tạp, dư thừa và tăng tính nhất

+ Xác định các module có chức năng dự kiến được.

+ Cố gắng giữ các module một đầu vào và một đầu ra, tránh các "mối nối bệnh

0