Phương pháp tính chi phí dự án theo COCOMO là gì?

COCOMO model (Formal estimation model)

  • COCOMO là từ viết tắt của COstructive COst MOdel, đây là phương pháp được sử dụng rộng rãi nhất trong software estimation trên thế giới.

  • Mô hình COCOMO dự báo số effort và duration của một project dựa vào đầu vào liên quan đến kích thước của kết quả hệ thống và một số "cost drives" ảnh hưởng đến Productivity.

  • COCOMO được xác định theo ba mô hình khác nhau gồm:

    3 model trên sắp xếp theo thứ tự độ phức tạp tăng dần. Model càng phức tạp thì càng đưa ra được estimate chính xác do tính toán nhiều yếu tố ảnh hưởng đến Software Project.

    • Basic model
    • Intermediate model
    • Detailed model
  • Yếu tố quan trọng nhất góp phần vào thời gian và chi phí của dự án là Development Mode. Development Mode thì bao gồm 3 mode như bên dưới, tương ứng với 3 chủng loại Project.

    • Organic mode: Dự án được phát triển trong môi trường ổn định, quen thuộc. Sản phẩm tương tự với các sản phẩm được phát triển trước đó. Sản phẩm tương đối nhỏ và đòi hỏi ít sự sáng tạo.
    • Semidetached mode: Đặc điểm của dự án là trung gian giữa Organic mode và Embedded mode, team size trung bình, công việc pha trộn giữa kinh nghiệm và đổi mới. Yêu cầu cũng ít cứng nhắc hơn.
    • Embedded mode: Dự án đặc trưng bởi những rằng buộc cứng nhắc, chặt chẽ và yêu cầu về giao diện. Một dự án thuộc Embedded mode thường đòi hỏi nhiều sáng tạo và đổi mới.

Tiếp sau sẽ giới thiệu chi tiết cách tính theo Basic model thông qua một ví dụ để các bạn có thể dễ hình dung hơn.

Basic COCOMO

Phương trình của Basic COCOMO thì được tính như bên dưới

  • Effort Applied (E) = a(KLOC)^b [ man-months ]
  • Development Time (D) = c(Effort Applied)^d [months]
  • People required (P) = Effort Applied / Development Time [count]

Hệ số a, b, c, d được đưa ra như table bên dưới

Các hệ số trên là kết quả đúc kết dựa trên số liệu của rất nhiều các dự án develop trong quá khứ. Theo như công thức trên thì ta thấy các con số đều khá đơn giản và rõ ràng. Chỉ có một ẩn số duy nhất cần phải tính toán đó là số KLOC (1K line of code = 1000[LOC]). Vậy chúng ta sẽ cùng tìm hiểu tiếp làm sao để tìm ra số KLOC này.

  • Công thức tính số KLOC thì như sau:
    • KLOC = FunctionPoint (FP) * LOC_per_FP / 1000
    • LOC = Language Factor * FP
    • FP = Unadjusted Function Points (UFP) * Technical Complexity Factor (TCF)
    • TCF = 0.65 + 0.01 * DI (Degree of Influence)
    • UFP = Unadjusted Function Point count (UFC) * Weight Factor

Nhìn xong list công thức trên các bạn có cảm giác như thế nào, có thể tất cả chúng ta đã bắt đầu thấy rối loạn một chút rồi. Chúng ta sẽ cùng tìm hiểu tiếp quá trình đưa ra được số KLOC theo thứ tự từ dưới lên trên. Ví dụ chúng ta có một bài toán như sau.

Phần mềm kiểm tra chính tả này sẽ nhận input là document file và personal dictionary. Trình kiểm tra này sẽ list tất cả các từ không có trong từ điển và trong personal dictionary. Người dùng có thể biết được số từ được xử lý và số lỗi ở bất kỳ thời điểm nào của xử lý. Chúng ta sẽ tính số KLOC theo các step dưới đây.

  • Step 1: Để tính Function Point đầu tiên ta phải tính số UFC. Số UFC thì được count theo các categories như sau:

    • External input: những item được cung cấp bởi user (giống như file name hay menu selection)
    • External output: những item cung cấp cho user (ví dụ như report hay message)
    • External inquiry: những input đòi hỏi response từ hệ thống
    • External files: machine-readable interfaces sử dụng để truyền thông tin tới hệ thống khác.
    • Internal files: file logic chính trong hệ thống.

    Phân tích ví dụ trên ta sẽ có list như sau:

    • 2 user input: document file, personal dictionary
    • 3 usser output: fault report, word count, misspelled
    • 2 user request: xử lý word, tìm lỗi
    • 1 internal file: dictionary
    • 2 external file: document file, personal dictionary
  • Step 2: Nhân UFC đã xác định bên trên với Weight Factor (được đánh trọng số theo độ phức tạp) như bảng bên dưới

Ví dụ: UFP = (4*2) + (5*3) + (4*2) + (10*1) + (7*2) = 55
  • Step 3: Tính total TCF (Technical Complexity Factor) bằng cách đánh giá trị từ 0 đến 5 theo tầm quan trọng cho các điểm dưới đây.

  • Step 4: Cộng tất cả các trọng số ở step 3 để ra được số DI (Degree of Influece)

    DI = 30

  • Step 5: Tính số TCF đựa trên DI đã có ở step 4

    TCF = 0.65 + 0.01 * 30 = 0.95

  • Step 6: Tính số FP = UFP*TCF

    FP = 55*0.95 = 52.25

  • Step 7: Tính số KLOC = FunctionPoint (FP) * LOC_per_FP / 1000. Trong đó LOC được tính theo bảng dưới đây, dựa vào mỗi ngôn ngữ khác nhau thì số LOC trên mỗi FP cũng khác nhau.

Giả sử phần mềm sẽ sử dụng ngôn ngữ Java, và LOC trên FP của Java là 53.
* KLOC = 52.25 * 53 /1000 = 2.76 (KLOC)

Vậy ứng với mỗi chủng loại dự án ta sẽ có số effort như sau
* Organic mode: E = 2.4 * (2.76^1.05)
* Semidetached mode: E = 3.0 * (2.76^1.12)
* Embeded mode: E = 3.6 * (2.76^1.2)

Sau khi có số Effort thì việc tính toán Duration và Resource cần cho dự án chỉ là vấn đề công thức. Phương pháp Basic COCOMO về cơ bản là khá tốt cho việc ước lượng nhanh chi phí phát triển phần mềm. Nhưng nó không tính toán sự khác biệt về phần cứng, kinh nghiệm và chất lượng của resource .v.v. Nên nếu muốn chính xác hơn nữa, các bạn có thể áp dụng phương pháp Intermediate COCOMO hay Detailed DOCOMO.

Via viblo

Category