Gần đây, công ty chúng tôi đã bắt đầu đo độ phức tạp chu kỳ (CC) của các hàm trong mã hàng tuần và báo cáo các chức năng nào đã được cải thiện hoặc xấu đi. Vì vậy, chúng tôi đã bắt đầu chú ý nhiều hơn đến CC của các chức năng.Tìm kiếm giải thích về cấu trúc mã để giảm độ phức tạp chu kỳ
Tôi đã đọc rằng CC có thể được tính không chính thức là 1 + số điểm quyết định trong một hàm (ví dụ: nếu câu lệnh, cho vòng lặp, chọn v.v ...) hoặc số lượng đường dẫn thông qua hàm ...
tôi hiểu rằng cách dễ nhất để giảm CC là sử dụng Extract Method refactoring nhiều lần ...
có somethings tôi không chắc chắn, ví dụ: CC của các đoạn mã sau là gì?
1)
for (int i = 0; i < 3; i++)
Console.WriteLine("Hello");
Và
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Cả hai đều làm điều tương tự, nhưng phiên bản đầu tiên có CC cao hơn vì câu lệnh for?
2)
if (condition1)
if (condition2)
if (condition 3)
Console.WriteLine("wibble");
Và
if (condition1 && condition2 && condition3)
Console.WriteLine("wibble");
Giả sử các ngôn ngữ không đánh giá ngắn mạch, chẳng hạn như C#, sau đó hai đoạn mã có tác dụng tương tự ... nhưng là CC của mảnh đầu tiên cao hơn bởi vì nó có 3 điểm quyết định/nếu phát biểu?
3)
if (condition1)
{
Console.WriteLine("one");
if (condition2)
Console.WriteLine("one and two");
}
Và
if (condition3)
Console.WriteLine("fizz");
if (condition4)
Console.WriteLine("buzz");
Hai đoạn mã làm những việc khác nhau, nhưng họ có cùng CC? Hay câu lệnh if lồng nhau trong đoạn đầu tiên có CC cao hơn không? tức là lồng nhau nếu các câu lệnh phức tạp hơn về mặt tinh thần để hiểu, nhưng điều đó được phản ánh trong CC?
Bạn đang đề cập đến bài báo gốc nào? bạn có thể cung cấp một liên kết? – RickL
Đã thêm liên kết và tên (Thomas J McCabe) – moogs
Cảm ơn, tôi đã lướt qua giấy, thật khó đọc vì nó theo kiểu kỹ thuật chính xác. – RickL