Studi Kasus: Mengungkap COCOMO - Metode Estimasi Proyek Perangkat Lunak yang Akurat

COCOMO Python Language


Overvew

COCOMO (Constructive Cost Model) adalah model perkiraan biaya perangkat lunak yang banyak digunakan yang membantu manajer proyek memperkirakan usaha, waktu, dan sumber daya yang diperlukan untuk sebuah proyek pengembangan perangkat lunak. COCOMO mengkategorikan proyek menjadi tiga mode:

  1. Organic Mode : Mode yang cocok untuk proyek perangkat lunak sederhana dengan tim yang sudah memiliki pengalaman dalam pengembangan perangkat lunak. Proyek ini cenderung memiliki struktur yang sederhana dan tidak terlalu kompleks.

  2. Semi-detached Mode: Mode ini cocok untuk proyek perangkat lunak yang memiliki tingkat kompleksitas dan ukuran yang sedang. Tim pengembang biasanya memiliki campuran antara pengalaman dan keahlian yang beragam.

  3. Embedded Mode: Mode yang cocok untuk proyek perangkat lunak yang sangat kompleks dan besar, seperti sistem embedded atau perangkat lunak militer. Tim pengembang dalam mode ini biasanya terdiri dari berbagai disiplin ilmu dan memiliki tingkat spesialisasi yang tinggi.

 

Problem

Anda telah ditunjuk sebagai project manager untuk pengembangan healthcare apps. Ruang lingkup proyek berfokus pada pengembangan bagian penting aplikasi yang meliputi: registrasi, melihat jadwal dokter, membuat janji, dan memesan resep.

Berdasarkan pengalaman atau pengetahuan Anda, silakan sebutkan peran yang diperlukan untuk proyek ini (misalnya: back end, front end, dll) dan perkirakan berapa hari kerja yang diperlukan untuk menyelesaikan proyek. Harap juga berikan analisis dari perkiraan Anda.

 

Solving

Dalam proyek ini, kita bertugas untuk memperkirakan usaha yang diperlukan untuk pengembangan aplikasi kesehatan. Fitur-fitur penting meliputi registrasi, melihat jadwal dokter, membuat janji, dan memesan resep.

Langkah 1: Impor pustaka yang diperlukan

import math
import pandas as pd
import matplotlib.pyplot as plt

library ini akan digunakan untuk perhitungan matematis, manipulasi data, dan visualisasi.

 

Langkah 2: Fungsi untuk menghitung perkiraan COCOMO

def calculate_effort(kloc, em, days_in_a_month):
   # Effort in person-months
   effort_pm = kloc * em
   # Convert to person-days
   effort_days = effort_pm * days_in_a_month
​
   # Print the results
   print("Effort estimate using COCOMO")
   print("--------------------------------------")
   print(f"Lines of code (KLOC): {kloc}")
   print(f"Effort multiplier (EM): {em}")
   print(f"Estimated effort : {effort_days:.2f} person-days")
   print(f"Estimated effort : {effort_pm:.2f} person-months")
   return effort_days

Fungsi ini menghitung effort yang diperlukan dalam person-days berdasarkan baris kode (KLOC) dan effort multiplier (EM).

Angka 22 dalam perhitungan effort_days = effort_pm * 22 adalah perkiraan jumlah hari kerja dalam satu bulan. Angka ini didasarkan pada asumsi bahwa rata-rata orang bekerja 5 hari dalam seminggu dan 8 jam sehari, dengan akhir pekan dan hari libur nasional. Oleh karena itu, ada sekitar 22 hari kerja dalam satu bulan.

perhitungan effort_days = effort_pm * 22 digunakan untuk mengonversi perkiraan effort dalam person-months menjadi perkiraan effort dalam person-days. Hal ini dilakukan karena kebanyakan proyek perangkat lunak diukur dalam person-days, bukan person-months.

Berikut contoh penggunaannya:

  • Jika perkiraan usaha dalam person-months adalah 2, maka perkiraan usaha dalam person-days adalah:

    effort_days = 2 * 22 = 44

    Ini berarti proyek diperkirakan akan memakan waktu 44 hari kerja untuk diselesaikan.

Penting untuk dicatat bahwa angka 22 ini hanya perkiraan dan dapat bervariasi tergantung pada faktor-faktor tertentu, seperti:

  • Jam kerja per hari

  • Jumlah hari libur

  • Hari libur nasional

Oleh karena itu, penting untuk menyesuaikan angka 22 ini berdasarkan kondisi spesifik proyek kita.

 

Langkah 3: Parameter Proyek

# Project parameters
kloc = 300            # Estimated lines of code (KLOC)
em = 1.05             # Effort multiplier (organic mode)
days_in_a_month = 22  # Estimatd of the number of working days

Mengatur parameter untuk proyek, termasuk perkiraan baris kode dan effort multiplier yang dipilih untuk organic mode.

Memahami Effort Multiplier (EM) :

  • EM tidak ditentukan berdasarkan peran individu. Ini adalah faktor yang memperhitungkan atribut tingkat proyek yang dapat memengaruhi usaha, seperti:

    • Team experience (Pengalaman tim)

    • Product complexity (Kompleksitas produk)

    • Required reliability (Keandalan yang diperlukan)

    • Use of modern programming practices (Penggunaan praktik pemrograman modern)

    • Development tools (Alat pengembangan)

  • COCOMO menyediakan tiga mode untuk menentukan EM:

    • Organic mode (small teams, familiar with the problem domain): EM = 1.05

    • Semi-detached mode (intermediate team size and experience): EM = 1.12

    • Embedded mode (tight constraints, high reliability needs): EM = 1.20

Untuk proyek ini, kita mengasumsikan mode organik (EM = 1,05) berdasarkan faktor-faktor berikut:

  • Ukuran tim kecil

  • Proyek pengembangan baru

  • Keterampilan tim dalam pengembangan aplikasi kesehatan

Jika salah satu dari faktor-faktor ini berubah, nilai EM mungkin perlu dievaluasi kembali.

Poin Penting:

  • Kebutuhan staf didasarkan pada perkiraan usaha dan jangka waktu proyek.

  • EM adalah faktor tingkat proyek, bukan spesifik peran.

  • Pilih mode COCOMO berdasarkan karakteristik proyek.

  • Evaluasi kembali perkiraan dan EM seiring perkembangan proyek.

 

  • Rekomendasi:

    • Secara teratur tinjau perkiraan dan kebutuhan staf.

    • Libatkan anggota tim dalam perkiraan dan perencanaan untuk penilaian yang lebih akurat.

    • Gunakan alat manajemen proyek untuk melacak kemajuan dan menyesuaikan sumber daya sesuai kebutuhan.

    • Komunikasikan secara efektif dengan pemangku kepentingan tentang kemajuan proyek dan kebutuhan sumber daya.

 

Langkah 4: Hitung usaha menggunakan COCOMO

# Calculate effort using COCOMO
effort_days = calculate_effort(kloc, em, days_in_a_month)

Output :

Effort estimate using COCOMO
--------------------------------------
Lines of code (KLOC): 300
Effort multiplier (EM): 1.05
Estimated effort : 6930.00 person-days
Estimated effort : 315.00 person-months

Menerapkan model COCOMO untuk memperkirakan usaha yang diperlukan dalam person-days.

Penjelasan :

  • Perkiraan ini didasarkan pada COCOMO, model perkiraan biaya perangkat lunak yang banyak digunakan.

  • Nilai KLOC adalah perkiraan berdasarkan ruang lingkup dan kompleksitas proyek.

  • Nilai EM dipilih untuk mode organik, yang biasa untuk proyek pengembangan baru.

  • Perkiraan usaha memberikan titik awal untuk perencanaan proyek dan alokasi sumber daya.

 

Langkah 5 : Hitung waktu pengembangan menggunakan rumus mode organik

# Calculate development time using the organic mode formula
c = 2.5
d = 0.38
​
development_time = c * math.pow(effort_days / days_in_a_month, d)  # Months
​
# Print the result
print(f"Development Time: {development_time:.2f} months")

Output :

Development Time: 22.25 months

Menggunakan koefisien mode organik untuk menghitung perkiraan waktu pengembangan dalam person-months. Rumus :

Development Time = c*(Effort)^d 

Koefisien intermediate COCOMO

Project ai bi ci di
Organic 2,4 1,05 2,5 0,38
Semidetached 3,0 1,12 2,5 0,35
Embedded 3,6 1,20 2,5 0,32

GeeksforGeeks. (2023, 26 Desember). Model Software Engineering COCOMO. https://www.geeksforgeeks.org/software-engineering-cocomo-model/

Penjelasan :

  • c dan d adalah koefisien tetap yang bergantung pada mode COCOMO (organik, semi-detached, atau embedded).

  • Usaha adalah perkiraan total usaha dalam person-days (Dalam kasus kita, perhitungan ini sudah dilakukan pada Langkah 4).

Menurut Koefisien Mode Organik :

  • c = 2,5

  • d = 0,38

 

Langkah 6 : Hitung bulan orang yang diperlukan

# Calculate person-months required
person_months = effort_days / 22;
print(f"Person Estimated: {person_months:.2f} months")

Output :

Person Estimated: 315.00 months

Menentukan perkiraan bulan orang yang diperlukan untuk proyek

 

Langkah 7 : Alokasi Usaha Berdasarkan Role

# Define roles
roles = ["Back-end developer", "Front-end developer", "Mobile developer", "QA tester", "Project manager"]
​
# Collect role's percentage
percentages = [39, 26, 17.5, 13, 4.5]
​
# Calculate effort_days based on percentages
allocation = [effort_days * (percentage / 100) for percentage in percentages]
​
# Create DataFrame with roles and effort_days
role_effort_df = pd.DataFrame({"Role": roles, "Estimated Effort (man-days)": allocation})
​
# Print the DataFrame
print(role_effort_df)

Output :

                  Role  Estimated Effort (man-days)
0   Back-end developer                      2702.70
1 Front-end developer                      1801.80
2     Mobile developer                      1212.75
3           QA tester                       900.90
4     Project manager                       311.85
Allocating effort estimates to different roles and creating DataFrame for better organization

Mengalokasikan perkiraan usaha ke berbagai peran dan membuat DataFrame untuk pengaturan yang lebih baik

 

Berikut adalah pembagian perkiraan usaha untuk setiap peran, berdasarkan model COCOMO dan pertimbangan khusus proyek:

  1. Initial Effort Calculation:

    • Total estimated effort (man-days) = (?) (seperti yang sebelumnya dihitung menggunakan COCOMO pada Langkah 4)

     

  2. Role-Based Effort Allocation:

    • Back-end developer:

      • Diperkirakan membutuhkan usaha paling banyak karena:

        • Pengembangan logika inti sisi server, interaksi database, dan integrasi API.

        • Potensi penanganan data kesehatan yang sensitif, memerlukan langkah keamanan tambahan.

    • Front-end developer:

      • Bertanggung jawab atas pengembangan antarmuka pengguna, yang sering melibatkan:

        • Desain dan implementasi beberapa layar, formulir, dan interaksi.

        • Memastikan kegunaan dan responsivitas di berbagai perangkat.

    • Mobile developer :

      • Fokus pada pengembangan aplikasi seluler asli, yang biasanya:

        • Memiliki ruang lingkup yang lebih kecil dibandingkan dengan backend dan frontend secara keseluruhan.

        • Mungkin melibatkan pertimbangan dan optimisasi yang spesifik untuk platform.

    • QA tester:

      • Waktu dialokasikan untuk pengujian menyeluruh terhadap:

        • Fungsionalitas, kegunaan, kinerja, dan keamanan.

        • Memastikan kepatuhan terhadap regulasi industri kesehatan.

    • Project manager

      • Bertanggung jawab atas perencanaan, koordinasi, dan pengawasan, tetapi:

        • Tidak secara langsung terlibat dalam tugas pengembangan sebanyak peran lain.

     

  3. Benchmarking untuk Distribusi Usaha:

    • Meskipun tidak ada benchmark yang diterima secara universal untuk distribusi usaha di antara peran, praktik umum dan norma industri dipertimbangkan:

      • Pengembangan backend seringkali menyumbang bagian usaha yang lebih besar dalam aplikasi berbasis web, terutama yang memiliki manajemen data yang kompleks dan integrasi.

        • Alokasi usaha pengembangan frontend sesuai dengan pola pengembangan aplikasi web yang khas.

        • Usaha pengembangan seluler disesuaikan berdasarkan ruang lingkup aplikasi seluler dan integrasinya dengan backend.

        • Usaha pengujian QA sebanding dengan ukuran dan kompleksitas proyek secara keseluruhan, memastikan jaminan kualitas.

        • Usaha manajemen proyek diperkirakan berdasarkan standar industri untuk tugas dan aktivitas manajemen proyek.

 

Pertimbangan Penting:

  • Perkiraan ini didasarkan pada asumsi dan pemahaman awal proyek.

  • Usaha sebenarnya dapat bervariasi tergantung pada:

    • Persyaratan spesifik

    • Pengalaman tim

    • Alat pengembangan

    • Tantangan yang tidak terduga

  • Sangat penting untuk:

    • Secara teratur meninjau dan menyesuaikan perkiraan seiring perkembangan proyek.

    • Melibatkan anggota tim dalam perkiraan dan perencanaan untuk penilaian yang lebih akurat.

 

Langkah 8 : Plotting Alokasi Usaha Berdasarkan Role

# Plotting the Role-Based Effort Allocation
plt.figure(figsize=(10, 6))
plt.bar(roles, allocation, color=['blue', 'orange', 'green', 'red', 'purple'])
plt.title('Role-Based Effort Allocation')
plt.xlabel('Roles')
plt.ylabel('Estimated Effort (man-days)')
plt.show()

img

 

Untuk analisis yang lebih detail, termasuk alokasi usaha berdasarkan peran, perhitungan waktu pengembangan, dan rekomendasi, silakan lihat laporan lengkapnya. https://github.com/dikhimartin/simple-cocomo-project-estimation/blob/master/cocomo-project-estimation-approach.ipynb

 

Kesimpulan

Pendekatan langkah demi langkah ini menjelaskan proses penerapan model COCOMO untuk perkiraan proyek, termasuk pengaturan parameter, perhitungan usaha, alokasi usaha berdasarkan peran, dan visualisasi. Hasilnya memberikan wawasan berharga tentang kebutuhan sumber daya untuk proyek pengembangan aplikasi kesehatan.

Terima kasih, mohon bantu saya memperbaiki pemahaman saya tentang COCOMO. Tanggapan dari teman-teman sangat membantu dalam pembelajaran saya.

 

Referensi

Software Engineering | COCOMO Model - javatpoint. (n.d.). www.javatpoint.com. https://www.javatpoint.com/cocomo-model

GeeksforGeeks. (2023, 26 Desember). Model Software Engineering COCOMO. https://www.geeksforgeeks.org/software-engineering-cocomo-model/

Bagikan postingan ini

Penulis
Dikhi Martin

Dikhi MartinSoftware Engineer