Apa yang membuat proyek besar? [Tutup]

32

Hanya ingin tahu apa perbedaan antara proyek ukuran kecil, sedang dan besar? Apakah diukur dengan baris kode atau kompleksitas atau apa?

Saya sedang membangun sistem barter dan sejauh ini memiliki sekitar 1000 baris kode untuk login / registrasi. Meskipun ada banyak LOC saya tidak akan menganggapnya sebagai proyek besar karena tidak rumit meskipun ini adalah proyek pertama saya jadi saya tidak yakin. Bagaimana cara mengukurnya?

Jonathan
sumber
2
Ya ............ Lebih banyak kerumitan berarti lebih banyak baris kode.
Robert Harvey
3
KLOC pertama adalah yang paling sulit ...
Selanjutnya Anda harus bertanya, "Apa yang membuat proyek kompleks? Baris kode? Lapisan abstraksi?"
Steven Evers
Anda menyebutkan 1.000 baris kode sebagai "banyak." Itu benar-benar tidak berarti apa-apa tanpa konteks. Saya telah mengerjakan beberapa proyek yang memiliki lebih dari sejuta baris kode. Saya juga bekerja pada apa yang saya sebut proyek "kecil" yang hanya memiliki 50.000 garis atau lebih, tetapi karena kerumitannya mereka tidak akan dianggap sebagai "kecil" karena jumlah sumber daya yang mereka butuhkan untuk merancang, kode, dan uji. Tetapi dalam pengalaman pribadi saya, saya tidak bisa memikirkan kasus di mana saya akan menganggap 1.000 baris menjadi banyak. Saya hanya menyebutkan bahwa untuk memberikan beberapa perspektif untuk proyek tinju Anda. Semoga berhasil!
TMarshall
Saya akan mengatakan bahwa "kebesaran" dari sebuah proyek tergantung pada lebih dari 1 faktor ...
kiwixz

Jawaban:

20

Kompleksitas.

Semakin kompleks, semakin sulit untuk mempelajari segala sesuatu dalam proyek.


sumber
5
Itu mirip dengan imo tautologi. Sistem yang kompleks adalah sinonim untuk sistem besar; kecuali berbicara tentang kompleksitas kode dan kemudian mungkin sangat baik sehingga semuanya dipisahkan dengan baik dan memiliki tanggung jawab tunggal, di mana kompleksitas kode kasus sebenarnya mungkin lebih rendah untuk proyek-proyek besar. Oleh karena itu, mengatakan bahwa kompleksitas berarti bahwa proyek itu besar benar-benar tidak mengatakan apa-apa.
Henrik
... atau secara alami ukuran kompleksitas lainnya.
Henrik
@ Henrik, "sistem kompleks" tidak setara dengan "sistem besar".
1
Tidak, itu sinonim.
Henrik
@Henrik, saya tidak setuju. Suatu sistem bisa besar tetapi teratur - yaitu banyak hal diselesaikan dengan cara yang hampir sama, di mana Anda dapat memprediksi bagaimana hal-hal dilakukan berdasarkan pengalaman Anda dengan sisa sistem - dan suatu sistem bisa kecil tetapi masih sangat kompleks.
34

Kira-kira bagaimana saya menyetujui sesuatu - ingatlah ini kurang lebih sewenang-wenang. "Ukuran" proyek dalam gabungan dari faktor-faktor lain seperti kompleksitas, baris sumber kode, jumlah fitur / nilai bisnis, dll. Produk yang sangat kecil dapat memberikan nilai yang besar, dll. Yang dikatakan:

  • 2m + SLOC adalah besar untuk proyek besar. Ini umumnya sangat kompleks sehingga hanya sedikit jika ada orang yang 'lancar' di seluruh sistem; alih-alih tanggung jawab cenderung dimodulasi di sepanjang struktur kode. Proyek-proyek ini sering memberikan nilai bisnis yang sangat besar dan mungkin misi kritis. Mereka juga terkadang berada di bawah tekanan hutang teknis yang besar dan masalah warisan lainnya.

  • 100k - 2m sloc adalah proyek berukuran sedang. Ini adalah jalan tengah saya: proyek ini cukup rumit untuk membutuhkan pengetahuan ahli, dan kemungkinan telah menimbulkan beberapa tingkat utang teknis; kemungkinan juga memberikan beberapa nilai bisnis.

  • 10k - 100k adalah proyek kecil, tapi tidak terlalu kecil untuk memiliki cukup kompleksitas yang akan Anda ingin pertimbangan ahli; jika Anda open source, pertimbangkan untuk mendapatkan orang yang Anda percaya untuk meninjau komit Anda.

  • Apa pun yang kurang dari 10k sloc itu kecil, sungguh. Itu tidak berarti itu tidak dapat memberikan nilai sama sekali, dan banyak proyek yang sangat menarik memiliki jejak yang sangat kecil (misalnya Camping, yang sumbernya ~ 2 kb (!)). Non-ahli umumnya dapat mendorong kekhawatiran nilai - bug fix dan fitur add - tanpa harus tahu terlalu banyak tentang domain.

Joseph Weissman
sumber
4
Saya akan memilih ini dua kali jika saya bisa. Jumlahnya tentu saja sewenang-wenang, tetapi saya pikir deskripsi tentang apa yang menyiratkan derajat "besar" yang tepat.
Eric Anderson
1
@EricAnderson Hal ini pasti lebih mudah untuk memikirkan ini dalam hal deskripsi dari ukuran SLOC. Program Erlang sloc 100k mudah urutan besarnya "lebih besar" dari program C ++ sloc 100k, hanya berdasarkan apa yang dikerjakannya terlepas dari betapa mudahnya kode dibaca di level yang lebih tinggi. Pada titik tertentu membaca kode bahkan tidak sesulit hanya mengingat apa yang terjadi di dalam sistem pada tingkat tinggi karena ada begitu banyak fitur dan pusat logika.
zxq9
@ zxq9 Saya agak tidak setuju. Benar, itu menyiratkan bahwa pilihan bahasa dapat membuat proyek besar lebih kecil. Apa yang digunakan untuk komputer besar sekarang terlalu lambat, dan apa yang digunakan untuk proyek perangkat lunak besar bisa sepele saat ini. Apa yang tidak berubah adalah biaya / kompleksitas suatu proyek. Sementara SLOC bukanlah pengukuran yang sempurna, masih terkait erat dengan biaya dan kompleksitas dari software project.-Sama seperti mesin besar tidak selalu lebih baik, proyek perangkat lunak besar tidak baik. Jika memungkinkan, pisahkan proyek menjadi komponen independen, dan pilih teknologi yang tepat untuk membuatnya lebih kecil.
Yongwei Wu
14

Ukuran proyek diukur dengan tingkat unmaintainability.

mojuba
sumber
2
Itu pesimistis: D
Henrik
.... dan pengukuran itu?
Casey Patton
1
@Casey Patton pengukuran secara harfiah adalah biaya perawatan.
mojuba
12

Kompleksitas yang dapat diperkirakan dalam beberapa cara:

  1. Anggaran. Proyek dengan anggaran $ 10.000.000 + mungkin sangat berbeda dari yang di bawah $ 10.000 misalnya. Ini dapat mencakup tenaga kerja, perangkat lunak, perangkat keras, dan biaya lain yang dikeluarkan dalam melakukan suatu proyek.
  2. Jam kerja orang untuk menyelesaikan proyek. Akankah ini membutuhkan sejuta jam atau yang lainnya? Ini juga dapat dilihat sebagai faktor garis waktu di mana beberapa proyek mungkin memakan waktu bertahun-tahun yang menurut saya besar dibandingkan dengan yang lain yang mungkin membutuhkan waktu kurang dari seminggu. Perhatikan bahwa jam orang dapat menyesatkan karena seseorang mungkin berpikir dengan menggandakan staf sehingga ada dua kali lebih banyak mengerjakan proyek maka jadwalnya dapat dibagi dua yang jarang akan bekerja di pikiran saya.
  3. Jumlah perangkat keras, sistem lain, dan orang-orang yang menggunakan proyek yang sedang dibangun. Jika ada sesuatu yang mengikat ke dalam sistem 101 maka kemungkinan akan lebih rumit jika itu berdiri sendiri dan tidak mengikat ke hal lain.

Sementara persyaratan bisa terdengar seperti cara yang bagus untuk mengukur ini, seringkali ada lebih banyak persyaratan yang akan ditemukan ketika sebuah proyek dilakukan dengan asumsi metodologi non-Air Terjun saya percaya.

JB King
sumber
11

Ukuran proyek mungkin paling baik diukur dengan jumlah persyaratan yang dimiliki sistem, di mana persyaratan tidak dapat dikurangi lebih jauh.

Tentu saja, lebih banyak persyaratan sebagian besar berarti lebih banyak kompleksitas, tetapi tidak selalu demikian.

David_001
sumber
1
Itu mungkin bukan ukuran yang baik: persyaratan untuk kompiler dan kernel OS mungkin tidak proporsional besar dibandingkan dengan jenis produk lainnya.
mojuba
2
@mojuba: "Besar" adalah istilah yang cukup luas, saya akan membayangkan bahwa menulis kompiler atau OS akan menjadi proyek "besar"
David_001
@ David_001: ambil kompiler Turbo Pascal, mis., Yang ukuran binernya pada satu titik adalah 70 kilobyte dan namun TP adalah bahasa pemrograman berorientasi objek yang lengkap. Kami belum pernah melihat sumbernya tetapi 70kb yang dapat dieksekusi tidak bisa menjadi proyek besar.
mojuba
@ David_001: bukannya saya sepenuhnya tidak setuju dengan Anda secara umum. Definisi apa pun dari proyek "besar" akan sama kaburnya dengan kata "besar" itu sendiri.
mojuba
@mojuba: Ketika saya menggunakan Turbo Pascal, itu tidak berorientasi objek sama sekali.
David Thornley
4

Saya akan mengukur ukuran proyek dengan seberapa sulitnya untuk melihat keseluruhan proyek sebagai satu gambaran besar. Sebagai contoh, saya memiliki basis kode eksplorasi / prototyping untuk masalah pembelajaran mesin yang sedang saya kerjakan. Ini hanya 5k baris kode, tetapi rasanya seperti proyek besar. Ada banyak opsi konfigurasi yang berinteraksi dengan cara yang tidak terduga. Anda dapat menemukan hampir setiap pola desain yang dikenal manusia di suatu tempat dalam basis kode untuk mengelola semua kerumitan itu. Desainnya sering suboptimal karena hal itu tumbuh banyak oleh evolusi dan tidak direactored sesering yang seharusnya. Saya satu-satunya yang bekerja pada basis kode ini, namun saya sering terkejut dengan bagaimana segala sesuatu berinteraksi.

Di sisi lain, salah satu proyek hobi saya memiliki sekitar 3-4x kode lebih banyak, namun rasanya jauh lebih kecil karena pada dasarnya merupakan perpustakaan fungsi matematika yang sebagian besar ortogonal satu sama lain. Hal-hal tidak berinteraksi dengan cara yang kompleks, dan cukup memahami setiap fungsi secara terpisah. Sangat mudah untuk melihat gambaran besarnya sejauh ada, karena tidak banyak yang bisa dilihat.

dsimcha
sumber
3

Jawaban sewenang-wenang: Seberapa besar proyek ini seberapa besar Anda berharap telah melakukannya dengan sumber-sumber acara dan SOA sejak awal. Atau bahwa penulis sistem telah membaca buku Evan "DDD: Menangani Kompleksitas di Jantung Perangkat Lunak";)

Henrik
sumber
2

Compexity & Lingkup

Kompleksitas dan Cakupan Saya percaya adalah apa yang menentukan seberapa besar proyek sebenarnya. Namun, ada beberapa hal tak berwujud yang dapat mempengaruhi ukuran proyek juga.

Persyaratan

Kejatuhan terbesar yang saya hadapi adalah kurangnya persyaratan. Dalam situasi khusus saya, manajer penjualan menentukan persyaratan. Fokusnya adalah pada penjualan ... harus mendapatkan penjualan. Dalam benaknya apa yang diminta oleh pelanggan tampaknya tidak terlalu rumit karena kami telah membangun sesuatu yang serupa. Persyaratan yang tidak jelas menyebabkan pekerjaan yang tidak terlalu mahal dan ekspektasi yang berlebihan.

Kurangnya CCMU

CCMU adalah apa yang saya sebut " Coo Ca Moo " (Hapus Pemahaman Saling Lengkap). Anda harus memiliki CCMU dengan pelanggan Anda.

Jika Anda memiliki proyek kecil dengan CCMU yang buruk maka Anda dapat menyelesaikan proyek tersebut sebanyak 2,3,4 kali atau lebih. Jadi, pekerjaan sederhana selama 20 jam berubah menjadi proyek 60 jam dengan staf yang stres dan pelanggan yang sangat tidak puas.

Cakupan Creep

Ini terjadi lebih sering daripada yang Anda pikirkan. Pelanggan memutuskan bahwa karena Anda sudah melakukan A, B & C seharusnya tidak terlalu sulit untuk menambahkan D atau bahkan F. Jika perilaku ini tidak dicentang, itu juga dapat mengubah proyek kecil menjadi proyek ukuran sedang. Dan tergantung pada bagaimana manajer penjualan menjual pekerjaan, ekspektasi creep lingkup ini mungkin tampak "GRATIS" kepada pelanggan.

Michael Riley - AKA Gunny
sumber
1

Aneh, membaca banyak jawaban ini saya menemukan saya melihat ukuran proyek yang sangat berbeda. Mungkin ini pekerjaan saya di sebuah perusahaan besar, tetapi saya cenderung memandang ukuran proyek sebagai lebih dari skala visibilitas / keinginannya kepada kliennya (tergantung pada area kerja Anda, ini bisa menjadi rekan kerja atau pelanggan yang membayar sebenarnya).

Kavet Kerek
sumber
1

Kompleksitas adalah jawaban yang tepat, tetapi bagaimana cara memperkirakannya?

Faktor-faktor tersebut adalah:

  1. Poin ekstensi dihitung
  2. Lapisan modul menghitung (fungsi, kelas, sistem kelas, perpustakaan, perpustakaan bersama, aplikasi, aplikasi jaringan, dll.)
  3. Jumlah ketergantungan (termasuk platform)
  4. Fitur jumlah saling ketergantungan.
  5. Sumber daya non-kode yang diperlukan (termasuk grafik / seni, skrip mengemudi - seperti skrip desain level - dan sumber daya lain yang diperlukan untuk melengkapi versi aplikasi).

Semakin banyak yang Anda miliki, semakin kompleks proyeknya.

Klaim
sumber
0

LOC adalah sangat tidak akurat untuk banyak pengukuran, tapi saya pikir Anda mencoba untuk mengukur sesuatu yang sebenarnya tidak ada cara yang akurat untuk mengukur. Mungkin alternatifnya mungkin kompleksitas siklomatik .

Namun pada akhirnya, saya pikir "besar" suatu proyek sulit untuk diukur. Ini hampir seperti menanyakan bagaimana Anda menentukan apakah seekor anjing besar atau tidak. Tidak hanya ada beberapa cara untuk mengukurnya (massa, volume, dll), tetapi saya pribadi tidak merasa sangat berguna. Kenyataannya adalah bahwa kriteria saya mungkin akan seperti "Seberapa besar kemungkinan saya lari dari anjing ini jika saya melihatnya di lorong yang gelap?"

Dan sebagai catatan, saya umumnya tidak akan menganggap 1k baris kode menjadi banyak. Ini akan menjadi sepotong yang cukup besar dari kode, tetapi itu tidak akan yang banyak dalam skema besar hal. Tentu saja, saya kira itu tergantung pada bahasa. Misalnya, 1k baris kode adalah kode yang jauh lebih sedikit dalam bahasa seperti C daripada dalam bahasa seperti Pyhon.

Jason Baker
sumber