Apa yang harus direncanakan sebelum memulai pengembangan proyek? [Tutup]

17

Katakanlah saya telah menerima spesifikasi untuk suatu proyek dari klien, dan sekarang saatnya untuk mulai mengembangkannya. Biasanya, saya baru mulai dengan modul pertama (biasanya pendaftaran pengguna) dan kemudian beralih dari satu modul ke modul berikutnya. Saya hanya merencanakan di kepala saya sesaat sebelum saya memulai modul bagaimana cara kerjanya, tetapi tidak ada perencanaan sebelumnya.

Namun, saya pikir akan lebih baik jika saya memeriksa spesifikasi dan merencanakan bagaimana sistem akan bekerja sebelum saya mengkodekannya, misalnya apa komponen utama, bagaimana mereka akan berinteraksi, dll. Saya hanya tidak yakin apa yang harus saya rencanakan.

Untuk memberikan ide yang lebih baik tentang apa yang saya minta, bagaimana saya harus-

a) Membagi proyek menjadi beberapa komponen,

b) Rencanakan interaksi mereka, mis. haruskah saya membuat diagram kelas, menulis tes unit, dll?

Ada ide?

Klik Upvote
sumber
"Aku hanya tidak yakin apa yang harus aku rencanakan"? Kenapa tidak? Anda mencantumkan topik tertentu. Apa yang salah dengan topik yang Anda cantumkan. Apa yang salah dengan "apa komponen utama, bagaimana mereka akan berinteraksi"? Karena itu adalah hal-hal yang Anda khawatirkan, mengapa tidak mulai dari sana?
S.Lott
4
Klien Anda cepat atau lambat akan mengubah spesifikasi. Rencanakan interaksi modul sedemikian rupa sehingga perubahan tidak akan mengacaukan seluruh basis kode Anda.
Reno

Jawaban:

23

Ketika Anda memiliki hak istimewa untuk memulai proyek baru Anda memiliki kanvas kosong - yang sekaligus mengasyikkan sekaligus menakutkan. Saya bekerja di iterasi, dan ini adalah bagaimana saya membagi pekerjaan:

  • Mulailah dengan sasaran untuk proyek tersebut. Sasaran tentu saja paling samar, tetapi membantu Anda fokus pada apa yang ingin dilakukan oleh klien atau pengguna dengan perangkat lunak. Pada akhirnya, Anda ingin memuaskan tujuan-tujuan itu - bahkan jika itu berarti menjatuhkan beberapa fitur yang sangat keren.
  • Lalu saya mulai memecah aplikasi ke dalam subdomain itu. Mungkin ada seratus cara berbeda untuk melakukan ini, itulah sebabnya kami mulai dengan tujuan proyek. Kami ingin memecah aplikasi menjadi beberapa subsistem terkait yang mendukung tujuan tersebut. Ini membantu kita fokus pada tugas selanjutnya.
  • Identifikasi bagaimana dan kapan subsistem perlu berinteraksi. Kami tidak menangani perincian, hanya informasi tingkat tinggi untuk memastikan kami memiliki sistem subsistem terintegrasi. Anda memerlukan gagasan umum tentang hal ini sehingga Anda dapat menyempurnakan rincian yang mendukung tujuan keseluruhan untuk proyek tersebut.
  • Hanya detail penawaran untuk subsistem yang sedang saya kerjakan saat ini (mirip dengan strategi Anda saat ini). Saya sudah tahu bagaimana subsistem ini perlu berinteraksi dengan subsistem lain, tetapi saya mungkin perlu mencari beberapa alternatif sehingga itu paling masuk akal. Setiap subsistem dipisahkan oleh sebuah antarmuka, jadi saya dapat menyesuaikan implementasi sebanyak mungkin tanpa merusak sistem secara keseluruhan.
  • Tinjau bagaimana hal-hal diimplementasikan dalam subsistem saya saat ini dibandingkan dengan bagaimana hal itu diterapkan di subsistem lainnya. Setiap pendekatan yang tidak konsisten adalah sesuatu yang harus dipelajari pengguna. Tidak apa-apa jika kita berbicara tentang konsep baru. Demi kegunaan, kami tidak ingin 5 cara berbeda untuk menghapus informasi yang hadir hanya karena kami malas. Menggunakan kembali elemen antarmuka pengguna yang sama adalah cara tercepat untuk membuat aplikasi lebih intuitif. Mempelajari tiga konsep jauh lebih mudah daripada belajar 20.

Pada dasarnya, pendekatan mendefinisikan proyek secara progresif dari tingkat yang sangat tinggi ke desain yang lebih rinci telah membantu saya dengan baik. Bahkan interaksi antara subsistem bisa disempurnakan saat Anda benar-benar berusaha mengimplementasikannya. Itu hal yang baik.

Berin Loritsch
sumber
"Mungkin ada seratus cara berbeda untuk melakukan ini, itulah sebabnya kami mulai dengan tujuan proyek." Saya pikir Anda lebih mungkin mulai dengan pola desain yang sesuai dengan tujuan. Saya tidak berpikir Anda berpikir tentang 'tujuan'.
S.Lott
1
Sebagian besar klien yang saya temui dapat mengartikulasikan tujuan mereka dengan cukup baik, tetapi mereka mengalami kesulitan dengan yang lainnya. Pada dasarnya, saya ingin memastikan desain saya memenuhi apa yang mereka butuhkan. Ketika sasaran proyek dan sasaran klien selaras, hal itu sangat membantu. Jadi agar lebih konkret, ya saya memperbaiki desain saya dan memilih cara saya memecahkan masalah sehingga semuanya berbaris.
Berin Loritsch
8

Saya pikir akan lebih baik jika saya memeriksa spesifikasi

Baik. Ide bagus.

merencanakan bagaimana sistem akan bekerja sebelum saya mengkodekannya.

Baik. Lakukan lebih dari itu.

apa saja komponen utamanya,

Luar biasa.

bagaimana mereka akan berinteraksi,

Benar.

Saya hanya tidak yakin persis apa yang harus saya rencanakan.

Bagaimana Anda bisa tidak yakin ketika Anda sudah mendaftarkan banyak hal? Jika itu adalah hal-hal yang menjadi perhatian Anda, mengapa tidak fokus saja pada hal-hal itu?

Baca pada model tampilan 4 + 1: http://en.wikipedia.org/wiki/4%2B1_Architectural_View_Model

Bacalah kerangka kerja Zachman: http://en.wikipedia.org/wiki/Zachman_Framework

Itulah yang perlu Anda rencanakan.

bagaimana seharusnya saya a) Membagi proyek menjadi beberapa komponen,

Gunakan pola desain yang diadopsi secara luas untuk proyek serupa lainnya.

Jika ragu, baca cetak biru J2EE untuk gagasan.

http://www.oracle.com/technetwork/java/javaee/blueprints/index.html

bagaimana saya harus b) Merencanakan interaksi mereka, misalnya saya harus melakukan diagram kelas, menulis tes unit, dll.?

Iya. Ide bagus, semuanya.

S.Lott
sumber
4

Hal terpenting yang harus dilakukan: meninjau spesifikasi, berinteraksi dengan pelanggan untuk mendapatkan lebih banyak spesifikasi yang disempurnakan.

Persyaratannya tidak diragukan lengkap, tidak jelas, atau salah. Buang-buang waktu terbesar adalah melakukan hal yang salah. Pelanggan bukan insinyur perangkat lunak profesional, dan tidak dapat diharapkan pandai mengembangkan serangkaian persyaratan yang baik.

Jadi, Anda harus meninjau spesifikasi, mewawancarai pelanggan dan mencari tahu apakah ini yang benar-benar ia butuhkan dan inginkan, dan mampu, dll.

Kembangkan test / use cases dan tinjau dengan pelanggan. Jika suatu persyaratan tidak dapat diuji, buanglah.

Kembangkan desain dan pastikan jika semua bagian berfungsi dengan benar bahwa secara teori akan melakukan apa yang Anda butuhkan.

Kembangkan prototipe arsitektur yang menguji semua teknologi yang akan digunakan di setiap lapisan tetapi abaikan fungsionalitasnya. Anda menguji arsitektur, bukan spesifikasi fungsional. Memiliki arsitektur yang salah berarti Anda harus menulis ulang semuanya, jadi mendapatkan arsitektur yang tepat adalah penting. Pastikan dapat memenuhi persyaratan Anda untuk kecepatan, efisiensi, keamanan, dll.

Larry Watanabe
sumber
3

Anda pasti ingin memiliki beberapa desain sebelum memulai pengkodean.

Setelah Anda memilikinya, saya biasanya lebih suka melakukan fase arsitektur awal terlebih dahulu untuk menentukan bagaimana lapisan aplikasi Anda cocok bersama. Ini akan mencakup hal-hal tulang punggung seperti keamanan dan pencatatan.

Lalu saya membangun 1 fitur dari atas ke bawah sehingga Anda mengimplementasikan sesuatu sepenuhnya.

Lalu pergi dari sana.

ozz
sumber
0

Segala sesuatu

Rencanakan semuanya, lebih mudah untuk mengubahnya di atas kertas daripada sekali bagian dari itu sudah dikodekan, Anda mendapatkan dasar yang bagus untuk dokumentasi, dan banyak manfaat lainnya.

Tim
sumber
3
-1 Saya tidak berpikir jawabannya membantu dan dalam kebanyakan kasus 'semuanya' jelas bukan cara untuk pergi.
KeesDijk