Theo [6]: “Software metrics phân làm 2 loại: Process Metrics (các đơn vị đo về quá trình) và Products Metrics (các đơn vịđo về sản phẩm).”
+ Process Metrics (các đơn vị đo về quá trình): đơn vị đo về quá trình được gọi là đơn vị quản lý và sử dụng đểđo các tính chất của quá trình tạo ra phần mềm. Đơn vị quá trình bao gồm các đơn vịđo chi phí, đo sự nỗ lực, đo sự tiến triển và các đơn vịđo về khả năng tái sử dụng. Đơn vị về quá trình giúp cho việc dựđoán kích thước của hệ thống cuối cùng và xác định xem liệu một dự án có chạy theo đúng lịch trình không?
+ Products Metrics (các đơn vị đo về sản phẩm): đơn vị đo sản phẩm cũng được biết đến như là thước đo chất lượng và được sử dụng để đo lường các đặc tính của phần mềm. Đơn vị sản phẩm bao gồm đơn vị vềđộ tin cậy, chức năng, hiệu xuất, đơn vị về khả năng sử dụng, đơn vị về chi phí, đơn vị về kích thước, đơn vị về độ phức tạp và đơn vị về kiểu. Đơn vị sản phẩm giúp nâng cao chất lượng các thành phần khác nhau của hệ thống và so sánh giữa các hệ thống hiện có.
Theo [6], ta có thể phân loại các đơn vịđo phần mềm như sơđồ hình 3.1.
Hình 3.1 Sơ đồ phân loại các đơn vị đo phần mềm Size metrics (các số liệu về kích thước)
LOC (Lines of code): Đây là một trong những đơn vịđầu tiên và cơ bản để tính toán kích thước của chương trình. Nó thường được sử dụng trong tính toán và so sánh năng xuất của các lập trình viên. Năng xuất được đo là: LOC/người/tháng. Trong đơn vị này, bất kỳ dòng văn bản nào (không kể dòng trắng và chú thích) không kể tới số các lệnh hoặc các bộ phận của lệnh trên dòng đều được coi là một dòng lệnh.
Token Count: Trong đơn vị này, một chương trình máy tính được coi là một tập các thẻ từ (token), có thểđược phân loại thành các toán tử hoặc toán hạng. Tất cả các
Sofware metrics
Product metrics Process metrics
Static metrics Dynamic metrics
Size metrics s Design metrics Control Flow metrics Information metrics Weighted metrics Data structure metrics software science metrics testability LOC Token
đơn vị khoa học phần mềm có thể được xác định nhờ các ký hiệu cơ bản này (các ký hiệu này được gọi là thẻ từ - token). Các đơn vị cơ bản là:
n1= số các toán tử duy nhất n2= số các toán hạng duy nhất
N1= tổng số lần xuất hiện của các toán tử N2= tổng số lần xuất hiện của các toán hạng
Xét về mặt tổng số các thẻ từ được sử dụng, kích thước của chương trình là: N=N1 + N2
Function count: Kích thước của một sản phẩm phần mềm lớn có thể được ước tính thông qua một đơn vị lớn hơn gọi là mô-đun. Một mô-đun có thểđược định nghĩa là một đoạn mã có thểđược biên dịch độc lập. Ví dụ, một sản phẩm phần mềm yêu cầu n mô-đun. Kích thước của một mô-đun khoảng 50-60 dòng lệnh. Do đó, ước tính kích thước của sản phẩm phần mềm này là n x 60 dòng lệnh.
Software science metrics (các đơn vị khoa học phần mềm)
Mô hình của Halstead được biết như là lý thuyết về khoa học phần mềm, dựa trên giả thuyết rằng việc xây dựng chương trình liên quan đến một quá trình thao tác của các toán tử duy nhất ( n1 ) và toán hạng duy nhất ( n2). Nghĩa là một chương trình có N1 toán tử và N2 toán hạng được xây dựng bằng cách chọn từ các toán tử duy nhất n1 và các toán hạng duy nhất n2. Bằng cách sử dụng mô hình này, Halstead thu được một số phương trình liên quan đến lập trình cấp chương trình, cũng thực hiện như vậy với cấp độ ngôn ngữ. Một đặc điểm quan trọng và thú vị là mô hình này có thể phân tích một chương trình với nhiều tính năng khác nhau như kích thước, những nỗ lực…
Từ vựng chương trình được định nghĩa là n = n1 + n2. Và độ dài thực tế là N = N1 + N2
Một giả thuyết của lý thuyết này là các chiều dài của chương trình hướng cấu trúc là một hàm của chỉ n1 và n2. Mối quan hệ này được gọi là phương trình dự đoán chiều dài được định nghĩa là: Nh = n1*log2n1 + n2*log2n2 .
Control flow metrics (các đơn vị luồng điều khiển)
McCabe’s Cyclomatic Metric: McCabe giải thích một chương trình máy tính là một tập hợp các kết nối mạnh trong đồ thị có hướng. Các nút đại diện cho các bộ phận của mã nguồn không có các nhánh và vòng cung đại diện cho sự chuyển hướng có thể trong quá trình thực hiện chương trình. Khái niệm vềđồ thị của chương trình đã được sử dụng để đo số lượng các đường đi trong một chương trình. McCabe đề xuất V (G) là một số của cyclomatic, là một số chỉ sự phức tạp của phần mềm. Số cyclomatic bằng với sốđường tuyến tính độc lập thông qua một chương trình trong đồ thịđại diện
của nó. Với một đồ thị luồng điều khiển của chương trình G, số cyclomatic V (G) được định nghĩa là: V (G) = E - N + P Trong đó: E = Số lượng các cạnh trong đồ thị G N = Số lượng các nút trong đồ thị G P = Số lượng các thành phần kết nối trong đồ thị G
Stetter’s Program Complexity Measure: Đơn vị đo của Stetter cho biết luồng dữ liệu cùng với luồng điều khiển của chương trình có thể tính toán được từ mã nguồn. Vì thế nó có thểđược xem như một chuỗi các khai báo và các lệnh:
P= (d1, d2, --- , dk s1 , s2, ---, sm) Trong đó:
+ ds là các khai báo + ss là các lệnh.
+ P là một chương trình
Ở đây, khái niệm vềđồ thị chương trình đã được mở rộng đến các khái niệm về đồ thị luồng. Một đồ thị luồng của một chương trình P có thểđược định nghĩa là một tập hợp các nút và các cạnh. Một nút đại diện cho một khai báo hoặc một lệnh trong khi một cạnh đại diện cho một trong các khía cạnh sau:
1. Luồng điều khiển từ một nút lệnh si sang nút lệnh sj khác.
2. Luồng điều khiển từ một nút lệnh dj sang một nút si mà được khai báo trong dj.
3. Luồng từ một nút khai báo dj đến nút lệnh si thông qua một truy cập của một biến hoặc một hằng số trong si mà được khai báo trong dj. Biện pháp này được định nghĩa là F(P) = E - ns + nt
Với:
E = Số lượng các cạnh trong đồ thị G ns = số nút nhập
nt = số nút thoát
Information flow metrics (các đơn vị luồng thông tin)
Đơn vị luồng thông tin đo sự phức tạp được tính bằng cách quan sát dòng chảy của thông tin giữa các thành phần hoặc các module của hệ thống. Đơn vị này được đưa ra bởi Henry và Kafura. Vì vậy, nó còn được gọi là đơn vị của Henry và Kafura.
Đơn vị này dựa trên việc đo các dòng chảy thông tin giữa các module của hệ thống. Biện pháp này gồm sự phức tạp của một module phần mềm được định nghĩa là tổng sự phức tạp của các thủ tục chứa trong module. Một thủ tục góp thêm sự phức tạp do hai yếu tố sau đây:
+ Sự phức tạp trong bản thân mã lệnh của thủ tục
+ Sự phức tạp do kết nối của thủ tục với môi trường của nó. Ảnh hưởng của yếu tố đầu tiên là LOC (Số dòng lệnh của mã). Đối với việc định lượng yếu tố thứ hai, Henry và Kafura đã xác định là những FAN-IN và FAN-OUT. FAN-IN của một thủ tục là tổng các cấu trúc dữ liệu mà thủ tục này lấy thông tin. FAN-OUT của một thủ tục là tổng các cấu trúc dữ liệu mà thủ tục này cập nhật.
Object oriented metrics (Các số liệu hướng đối tượng)
Weight Method per Class (WMC): đơn vịđo này dùng đểđo sự dễ hiểu, khả năng tái sử dụng và bảo trì của các phương thức trong class.
Response for Class (RFC): Một thông báo là một yêu cầu mà một đối tượng gửi cho đối tượng khác để thực hiện một hoạt động. Các hoạt động thực hiện như là kết quả của việc nhận được thông báo được gọi là một phương thức.
RFC là tổng số tất cả các phương thức được gọi để đáp ứng các thông báo gửi đến một đối tượng. Điều này bao gồm tất cả các phương thức có thể truy cập trong class.
Số liệu này được sử dụng để kiểm tra sự phức tạp của class. Nếu số lượng các phương thức lớn hơn thì sự phức tạp của lớp tăng lên.
Lack of Cohesion of Methods (LCOM): sử dụng biến hoặc các thuộc tính để đo mức độ tương tự giữa các phương thức.
….