Jadi, ya, diagram terkadang tidak sesuai. Kapan itu tidak pantas? Ketika Anda membuat mereka tanpa kode untuk memvalidasinya, dan kemudian bermaksud untuk mengikutinya. Tidak ada yang salah dengan menggambar diagram untuk mengeksplorasi ide.
Pengembangan Perangkat Lunak Agile: Prinsip, Pola, dan Praktek - Robert C. Martin
Apa sebenarnya yang dia maksudkan dengan ini? Bukankah UML dirancang untuk membantu merencanakan bagaimana menyusun kode Anda sebelum "menyelam"? Apa gunanya menggunakannya jika Anda tidak mengikuti diagram yang Anda buat?
Konteks: Dalam bab ini, Paman Bob membuat diagram UML untuk Penjaga Skor dari game Bowling. Kemudian dia melanjutkan untuk mengembangkan program dengan cara yang didorong oleh tes, tanpa berkonsultasi dengan diagram UML. Program yang dihasilkan tidak seperti diagram UML, dan Paman Bob sampai pada kesimpulan yang dikutip di atas.
sumber
Jawaban:
Untuk menjelaskan ini dengan benar, kita perlu pelajaran sejarah singkat. Pada masa awal rekayasa perangkat lunak, analogi yang sering digunakan adalah membangun rumah. Seorang arsitek dan insinyur struktur mendiskusikan rencana dengan pelanggan dan membuat desain. Pembangun kemudian mengikuti desain itu untuk membangun rumah yang sebenarnya. Menulis kode dipandang setara dengan membangun rumah yang sebenarnya. Dengan demikian, ada kebutuhan yang dirasakan untuk desain di muka sebelum membangun itu bisa terjadi. Berbagai alat desain grafis dibuat, dengan UML menjadi salah satunya.
Ide awalnya dengan UML, adalah bahwa seseorang akan sepenuhnya mendesain sistem dengan UML, kemudian menyerahkannya ke coders untuk menerjemahkan desain itu ke dalam kode. Pada kenyataannya, ini tidak berhasil, dan menyebabkan programmer bertahun-tahun dipandang sebagai "pelaksana", bukan "desainer", proyek terlambat, desain harus terus berubah setelah mereka seharusnya selesai dll.
Alasannya sederhana. Pengkodean adalah desain . Dengan analogi rumah, kode adalah gambar arsitek. Compiler adalah pembangun yang mengambil desain itu dan membangun program darinya. Realisasi ini kemudian mengarah pada teknik lincah, TDD dll dilahirkan: alat untuk membantu meningkatkan kualitas desain kode itu.
Sama seperti seorang arsitek dapat menghasilkan sketsa awal untuk membantunya dan timnya memvisualisasikan desain keseluruhan, sehingga pengembang dapat menggunakan UML, atau alat lain, untuk membantu memvisualisasikan desain yang dibutuhkan. Sama seperti sketsa-sketsa itu tidak diikuti secara membabi buta, jadi UML tidak boleh diikuti secara membabi buta. Desain kode harus berkembang dari iterasi gesit dan menggunakan TDD. Demikian juga, seperti halnya arsitek mungkin membangun model rumah untuk membantunya dan timnya memvisualisasikan gambar, sehingga UML dapat digunakan untuk membantu memvisualisasikan struktur kode.
Seperti kata Paman Bob, Anda tidak dapat memvalidasi UML, Anda hanya dapat memvalidasi kode. Oleh karena itu kode adalah dokumentasi desain utama dan UML, jika digunakan, adalah dokumentasi sekunder saja.
sumber
Saya kira tidak semua idiom pemrograman (atau desain, atau kode) cocok dengan UML (yang saya akui saya tidak tahu - hanya membaca beberapa buku tentang itu -, saya tidak pernah menggunakannya, dan saya mungkin tidak menyukainya).
Kode C biasa (mis. Kode sumber kernel Linux) mungkin tidak dimodelkan dengan tepat oleh UML.
Kode Ocaml (dengan modul dan functorsnya) atau bahkan kode C ++ 11 (dengan lambdas dan templat) mungkin tidak cocok dengan UML.
Pemrograman multistage à la MetaOcaml mungkin tidak cocok dengan UML.
Kode prolog atau kode Common Lisp mungkin tidak cocok dengan UML.
Lihat juga ini jawaban & ini pertanyaan saya.
Bacalah Pragmatik Bahasa Pemrograman Scott dan Konsep, Teknik, dan Model Pemrograman Komputer Van Roy , lalu tanyakan pada diri Anda apakah setiap model pemrograman di sana sesuai dengan UML.
Lihat juga Martin Fowler's Is Design Dead? blog.
sumber