Perkiraan biaya perangkat lunak [ditutup]

10

Saya telah melihat di tempat kerja saya (sebuah Universitas) sebagian besar siswa membuat biaya estimasi perangkat lunak pekerjaan diploma akhir mereka menggunakan COCOMO . Dugaan saya adalah bahwa cara memperkirakan biaya ini agak lama (tanggal COCOMO tahun 1981), maka pertanyaan saya:

How do you estimate costs in your software?

Saya telah melihat hal-hal seperti:

Biaya = (HoursOfWork + EstimatedIddle) * HourlyRate

Bukan itu yang saya inginkan, saya mencari model biaya yang didefinisikan dengan baik (secara ilmiah)

EDIT Saya telah menemukan beberapa pertanyaan terkait pada SO:

David Conde
sumber
30
"Bagaimana Anda memperkirakan biaya dalam perangkat lunak Anda?" Buruk, sama seperti orang lain.
Rein Henrichs
1
Ini sebenarnya, dua pertanyaan. Saya sarankan Anda menulis ulang sebagai salah satu pertanyaan utama yang tidak tergantung pada perangkat lunak esoterik. Saya ragu Anda akan mendapatkan banyak jawaban jika persyaratannya adalah pengetahuan dengan Cocomo
Eran Galperin
@ Eran, saya akan menerima saran Anda dan menulis ulang pertanyaannya kemudian ...
David Conde
4
Steve McConnell dianggap sebagai pemimpin pemikiran di ruang ini oleh banyak orang di bidang TI. Anda harus melihat bukunya. stevemcconnell.com/est.htm
Jeff
5
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini bukan tentang masalah pemrograman konseptual dalam lingkup yang ditentukan di pusat bantuan .
durron597

Jawaban:

16

Jika Anda terjebak dalam Mode Terjun, satu-satunya metode yang cukup akurat yang saya gunakan adalah:

  1. Buat Struktur Rincian Kerja
  2. Pastikan itu cukup detail sehingga Anda dapat menghubungkan besarnya setiap tugas dengan sesuatu yang Anda (atau seseorang yang dapat Anda ajak bicara) telah dilakukan sebelumnya.
  3. Untuk setiap tugas, buatlah angka kasus terbaik, kemungkinan, dan terburuk berdasarkan pengalaman. Kasus terbaik adalah jika semuanya berjalan dengan sempurna, kasus terburuk adalah jika Anda harus melakukannya kembali (mungkin dua kali) dan kemungkinan ada di suatu tempat di sana.
  4. Gunakan beberapa rumus pembobotan seperti (1 * terbaik + 4 * kemungkinan + 1 * terburuk) / 6 untuk menghasilkan estimasi untuk setiap tugas yang memperhitungkan rentang.
  5. Saya juga melihat varian di mana Anda dapat menambahkan komponen "risiko" untuk setiap tugas. Tiga tingkat risiko adalah 0, 1, dan 2. Risiko 0 berarti Anda pernah melakukannya sebelumnya (atau sesuatu yang sangat dekat), 1 berarti Anda belum pernah melakukannya sebelumnya, tetapi itu dilakukan secara teratur di industri Anda, 2 berarti itu mungkin belum pernah dilakukan sebelumnya di industri. Anda mengambil angka risiko dan mengalikannya dengan perkiraan "standar deviasi" estimasi Anda. Tambahkan itu ke taksiran tertimbang Anda. Jadi risiko 0 tidak memindahkannya, tetapi risiko 2 memindahkannya cukup dekat dengan nomor kasus terburuk Anda.
  6. Tambahkan semua tugas.
  7. Tambahkan kemungkinan (beberapa%) untuk "tidak dikenal".

Anda akan berakhir dengan angka yang sangat tepat. Saya tidak mengatakan itu akurat, tetapi akan tepat.

Akurasi sepenuhnya tergantung pada kemampuan untuk menghasilkan angka untuk setiap tugas berdasarkan pengalaman masa lalu, atau untuk menemukan seseorang yang telah melakukannya sebelumnya. Semakin banyak pengalaman yang Anda miliki, semakin baik estimasi Anda.

Ketika Anda menjalankan proyek, melacak waktu Anda terhadap setiap tugas, dan menuliskan yang Anda lewatkan, sehingga Anda dapat membandingkan. Ini akan membuat Anda lebih baik seiring waktu.

Scott Whitlock
sumber
Terima kasih @ Esc, saya akan merekomendasikan sesuatu seperti ide Anda ..
David Conde
1
Lakukan estimasi Anda dengan cara ini, lalu perkirakan secara independen dengan cara kedua (dan / atau orang kedua yang melakukan estimasi). Bandingkan hasilnya. Apa pun yang berjauhan atau berbeda secara signifikan dengan "insting" perlu ditinjau. Pengalaman saya (25 tahun +) adalah bahwa "firasat" seringkali lebih akurat daripada formula mewah lainnya, abaikan saja.
mattnz
@ mattnz - firasat memiliki peringatan yang sama: itu hanya berfungsi jika Anda memiliki banyak pengalaman. Setiap pelanggan memiliki "firasat" bahwa biayanya akan jauh lebih murah daripada yang seharusnya, karena mereka tidak memahami jumlah pekerjaan yang terlibat dalam kasus sudut.
Scott Whitlock
3
Kiat lain: "Saya tidak menegosiasikan perkiraan. <Long jeda>" adalah ungkapan yang sangat berguna dalam pertemuan dengan bos / pelanggan. Lagipula, apakah mekanik atau ahli bedah mobil Anda yang melakukannya? Dia mungkin menegosiasikan harga, dia mungkin menegosiasikan pekerjaan apa yang dilakukan atau bagaimana melakukannya, tetapi saya belum pernah melihat seorang pedagang untuk profesional di bidang apa pun selain perangkat lunak menegosiasikan berapa lama pekerjaan akan berlangsung.
mattnz
@ mattnz - Saya bernegosiasi dengan seorang mekanik mobil minggu lalu tentang berapa lama waktu yang dibutuhkan untuk memperbaiki pintu mobil saya tergantung pada bagaimana hal itu dilakukan.
sixtyfootersdude
3

Perkiraan perangkat lunak sangat sulit. Salah satu pendekatan yang saya gunakan adalah untuk memecah persyaratan menjadi halus mungkin dan memperkirakan masing-masing bagian secara terpisah. Kemudian tambahkan "faktor fudge" yang bisa berupa pengganda (gandakan) atau jumlah tetap (x jam untuk pekerjaan yang tidak terduga). Jika Anda tidak memiliki estimasi persyaratan yang baik, mustahil untuk tujuan praktis.

Mark B
sumber
1
Taksiran paling sukses yang pernah saya lihat (tidak termasuk yang menggunakan metode canggih) adalah yang kira-kira dua kali lipat perkiraan aslinya.
Bernard Dy
1
Yup, dobel. Salah satu manajer yang paling sukses secara politis tempat saya bekerja mengambil perkiraan pengembang, melipattigakannya , lalu bernegosiasi dengan pengguna menjadi dua kali lipat. Lebih sering daripada tidak, tanggal pengiriman yang dinegosiasikan terpukul.
DaveE
0

Industri ini telah belajar banyak dalam 30 tahun sejak '81. Memperkirakan seperti itu tidak pernah berhasil. Dengan kegilaan Agile yang pada dasarnya menulis ulang lansekap, kami menggunakan "poin cerita" mewakili beberapa "kesulitan komparatif" yang kabur. Kami kemudian mendapatkan "kecepatan" sehingga mucky mucky dapat melakukan estimasi $$ mereka dengan sejumlah data empiris.

Edward Strange
sumber
0

Saya telah mempelajari beberapa pendekatan "keras" seperti perkiraan titik fungsi dan beberapa variasi yang dirancang untuk aplikasi modern. Saya pikir bagian dari pendekatan ini yang berharga adalah itu memaksa analisis yang lebih rinci dari persyaratan yang dikenal maka saya mungkin memberikannya.

Mendapatkan set data yang baik untuk bekerja dengan sangat sulit bahkan jika Anda memiliki model yang baik. Mengukur produktivitas itu sulit. Game orang hampir semua metrik.

Saya telah berhenti menggunakannya karena organisasi saya terlalu disfungsional untuk mengambil manfaat dari perkiraan perangkat lunak, tetapi saya benar-benar memperhatikan kelompok Cost Xpert dan alat mereka; tetapi sangat mahal dan mungkin tidak sebanding dengan biaya dan kurva belajar untuk sebagian besar organisasi.

Jeremy
sumber
0

Sangat sulit untuk memperkirakan upaya dan biaya, tetapi jika Anda menginginkan sesuatu yang lebih tepat, maka:

  • bagi HoursOfWork menjadi 3 komponen:

    1. estimasi terbaik,
    2. estimasi kemungkinan besar,
    3. perkiraan yang lebih buruk.
  • hapus EstimatedIddle.

Perhatikan bahwa apa pun yang membutuhkan waktu lebih lama dari 8 jam akan menimbulkan kesalahan besar.

BЈовић
sumber
0

Apa yang biasanya kami lakukan adalah membagi lingkup kerja penuh menjadi modul / elemen utama yang dapat dianggap sebagai sub-proyek. Dengan kata lain mereka adalah bagian-bagian pekerjaan yang dianggap klien sebagai bagian terpisah dari proyek dan yang ingin ditaksir secara terpisah oleh klien.

Setelah selesai, kami membagi masing-masing modul menjadi tugas, sub tugas dan bahkan sub tugas yang lebih kecil sehingga masing-masing modul dapat diperkirakan dengan cukup mudah dan estimasi memakan waktu dari satu hingga sepuluh jam kerja. Dengan begitu kita mendapatkan rincian lingkup pekerjaan untuk proyek tersebut.

Langkah terakhir adalah mendistribusikan tugas di antara tonggak sejarah. Kami melakukannya dengan cara sehingga setelah setiap tonggak klien mendapatkan hasil yang terlihat. Itu membantu untuk melewati satu tonggak sejarah dan pindah ke tonggak lain. Jadi akhirnya kami mendapatkan sesuatu seperti:

Modul 1

    <ol>
        <li>
            Primary task 1 - 5 hrs
            <ol>
                <li>Subtask 1.1 – 3 hrs</li>
                <li>Subtask 1.2 – 2 hrs</li>
            </ol>
        </li>
        <li>
            Primary task 2 - 9 hrs
            <ol>
                <li>Subtask 2.1 – 1 hrs</li>
                <li>Subtask 2.2 – 2 hrs</li>
                 <li>Subtask 2.2 – 5 hrs</li>
            </ol>

Awalnya kami melakukannya hanya menggunakan lembar excel. Tetapi lebih dari dua tahun yang lalu kami mulai menggunakan alat perangkat lunak untuk itu. Ada beberapa produk serupa yang membantu dengan itu www.evenflow.com , www.swproposal.com dan beberapa lainnya. Saya tidak ingat semua daftar. Kami melakukan penelitian sejak lama. Semoga itu bisa membantu.

Pertanyaan yang bagus adalah bagaimana cara memperkirakan dengan tepat. Tidak ada estimasi yang benar 100% seperti yang kami yakini. Satu-satunya cara adalah membagi ruang kerja penuh menjadi tugas sekecil mungkin. Semakin kecil tugas yang Anda miliki, ulasan dan analisis yang lebih rinci tentang proyek yang Anda lakukan. Sehingga toh meningkatkan akurasi.

Nick Rogozhnikov
sumber