2008-10-31 43 views
6

Chúng ta đều biết để giữ cho nó đơn giản, phải không?Khi đánh giá thiết kế, bạn đánh giá mức độ phức tạp như thế nào?

Tôi đã thấy sự phức tạp được đo lường là số lượng tương tác giữa các hệ thống và tôi đoán đó là một nơi rất tốt để bắt đầu. Ngoài cảm giác ruột, các phương pháp nào khác (tốt hơn là khách quan) có thể được sử dụng để xác định mức độ phức tạp của một thiết kế hoặc phần mềm cụ thể?

Quy tắc hoặc chẩn đoán yêu thích của BẠN là gì?

Trả lời

0

Nếu ứng dụng của bạn được xây dựng, bạn có thể đo lường theo thời gian (thời gian thực hiện một nhiệm vụ cụ thể) hoặc tính toán (bao nhiêu mã được thực thi mỗi khi tác vụ được chạy).

Nếu bạn chỉ có thiết kế, bạn có thể xem có bao nhiêu thành phần thiết kế cần thiết để chạy một tác vụ nhất định hoặc để chạy một tác vụ trung bình. Ví dụ, nếu bạn sử dụng MVC làm mẫu thiết kế của mình, thì bạn có ít nhất 3 thành phần được chạm vào phần lớn các tác vụ, nhưng tùy thuộc vào việc triển khai thiết kế, bạn có thể kết thúc với hàng tá thành phần 3 lớp, ví dụ).

3

Đây là của tôi:

1) Làm cách nào để giải thích cho người hiểu vấn đề nhưng chưa nghĩ về giải pháp? Nếu tôi giải thích vấn đề với ai đó trong hội trường (có thể đã hiểu vấn đề nếu họ đang ở trong hội trường) và có thể giải thích giải pháp, thì nó không quá phức tạp. Nếu phải mất hơn một giờ, rất có thể là giải pháp tốt của overengineered.

2) Bạn phải đi sâu bao nhiêu trong hàm lồng nhau? Nếu tôi có một đối tượng yêu cầu một thuộc tính được giữ bởi một đối tượng được giữ bởi một đối tượng khác, thì rất có thể là những gì tôi đang cố gắng làm là quá xa khỏi chính đối tượng đó. Những tình huống đó trở thành vấn đề khi cố gắng làm cho các đối tượng an toàn ren, bởi vì sẽ có nhiều đối tượng có độ sâu khác nhau từ vị trí hiện tại của bạn để khóa.

3) Bạn đang cố giải quyết các sự cố đã được giải quyết trước đây chưa? Không phải mọi vấn đề đều mới (và một số người cho rằng không có vấn đề gì). Có mô hình hoặc nhóm mẫu hiện có bạn có thể sử dụng không? Nếu bạn không thể, tại sao không? Đó là tất cả tốt để làm cho các giải pháp mới của riêng bạn, và tôi là tất cả cho nó, nhưng đôi khi mọi người đã trả lời vấn đề. Tôi sẽ không viết lại STL (mặc dù tôi đã thử, tại một thời điểm), bởi vì giải pháp đã tồn tại và nó là một giải pháp tốt.

3

Khi tôi tham dự hội thảo Mô hình hóa hệ thống phức tạp tại Viện Hệ thống phức hợp New England (http://necsi.org/), một trong các biện pháp mà họ đã sử dụng là số lượng trạng thái hệ thống.

Ví dụ, nếu bạn có hai nút, mà tương tác, A và B, và mỗi người trong số này có thể là 0 hoặc 1, trạng thái có thể của bạn là:

A B 
0 0 
1 0 
0 1 
1 1 

Vì vậy, một hệ thống chỉ có 1 sự tương tác giữa hệ nhị phân các thành phần thực sự có thể dẫn đến 4 trạng thái khác nhau. Vấn đề là tính phức tạp của hệ thống không nhất thiết tăng tuyến tính khi số lượng tương tác tăng lên.

3

Mức độ phức tạp có thể được ước tính với khớp nối và cách cố kết là tất cả các đối tượng của bạn. Nếu một cái gì đó có quá nhiều khớp nối hoặc không đủ gắn kết, thì thiết kế sẽ bắt đầu phức tạp hơn.

1

các biện pháp tốt cũng có thể là số lượng tệp, số vị trí lưu trữ cấu hình, thứ tự biên dịch trên một số ngôn ngữ.

Ví dụ:

.- tệp thuộc tính, cấu hình cơ sở dữ liệu, tệp xml để giữ thông tin liên quan.

.- hàng chục ngàn lớp với các giao diện, và ánh xạ cơ sở dữ liệu

.- một cực kỳ dài và phức tạp xây dựng tập tin (build.xml, Makefile, những người khác ..

+0

Không phải sự phức tạp của mã nhưng thiết kế, khó biết số lượng tệp khi thiết kế;) –

-1

Có số liệu chính thức. Đọc lên trên Cyclomatic Complexity, ví dụ.


chỉnh sửa.

Ngoài ra, nhìn vào Function Points. Họ cung cấp cho bạn một đo lường định lượng không cảm giác của hệ thống phức tạp.

+0

Độ phức tạp chu trình là tính toán từ mã nguồn - bạn không có mã nguồn trong khi thiết kế! –

+0

@Steven A. Lowe: Tuy nhiên, bạn có cùng khái niệm về câu lệnh if. Bạn có thể dễ dàng ghi các phần của thiết kế của bạn với sự phức tạp dựa trên các lựa chọn và quyết định được mô tả trong các thông số kỹ thuật hoặc các yêu cầu. –

+0

Cyclomatic tốt hơn khi bạn có mã nguồn. Trong thiết kế nó chỉ đơn giản là không hiệu quả để cố gắng ước tính số vòng lặp và comparaison. –

0

Cuối cùng, thứ gì đó LOC thực sự có thể giúp đo lường? :)

tôi nghĩ sự phức tạp được xem là số thứ cần tương tác tốt nhất.

Thiết kế phức tạp sẽ có các cấp n trong khi thiết kế đơn giản chỉ có hai.

Mức độ phức tạp cần thiết để giải quyết các vấn đề đơn giản không thể khắc phục, do đó, không phải lúc nào cũng là vấn đề.

Có một vấn đề trong việc xác định độ phức tạp nói chung là phức tạp thường có một nhiệm vụ liên kết với nó. Điều gì đó có thể phức tạp để hiểu, nhưng đơn giản để xem (mã rất ngắn) Số lần tương tác nhận trang web này từ máy chủ đến máy tính của bạn rất phức tạp, nhưng sự trừu tượng của giao thức http rất đơn giản.

Vì vậy, việc ghi nhớ (ví dụ: bảo trì) trước khi chọn biện pháp có thể làm cho nó hữu ích hơn. (tức là thêm một tập tin cấu hình và đăng nhập vào một ứng dụng làm tăng độ phức tạp khách quan của nó [vâng, chỉ một chút chắc chắn], nhưng đơn giản hóa việc bảo trì).

Các vấn đề liên quan