Saya mencoba memahami mengapa UML tidak digunakan di sebagian besar proyek perangkat lunak gratis . Sebagai contoh, sistem Debian / Linux saya mungkin memiliki lebih dari sepuluh ribu paket perangkat lunak gratis, dan saya tidak dapat menyebutkan satu pun yang telah dikembangkan menggunakan kerangka kerja dan metodologi UML eksplisit . Misalnya, Qt , GCC , kernel Linux , bash , make GNU , Ocaml , Gnome , Unison , lighttpd , libonion , docker adalah proyek perangkat lunak bebas yang (AFAIK) tidak menyebutkan UML sama sekali.
(Dugaan saya adalah bahwa UML sangat cocok untuk subkontrak formal tugas-tugas pengembangan, dan bukan itu cara perangkat lunak bebas dikembangkan)
Perhatikan bahwa sementara saya membaca beberapa materi tentang UML, saya tidak mengklaim memiliki pemahaman yang baik tentang UML.
Sebenarnya, saya tidak dapat dengan mudah memberi nama perangkat lunak gratis di mana UML telah digunakan (kecuali mungkin beberapa alat UML diimplementasikan sebagai perangkat lunak bebas). Mungkin openstack adalah pengecualian (sesuatu di sana menyebutkan UML).
(bahkan proyek perangkat lunak gratis yang lama mungkin telah mengadopsi UML setelah dimulai, tetapi tidak)
Beberapa rekan yang bekerja pada Papyrus menyebutkan bahwa sebagian besar proyek perangkat lunak bebas pada awalnya tidak memiliki model formal apa pun (dan cukup dalam). Juga, UML terlihat jauh lebih terkait dengan Java daripada yang diklaimnya (saya tidak sepenuhnya yakin itu masuk akal untuk Ocaml atau Common Lisp atau Haskell atau Javascript, dan mungkin bahkan tidak untuk C ++ 11 ....). Mungkin pengembangan perangkat lunak yang gesit tidak ramah terhadap UML.
Lihat juga jawaban ini untuk pertanyaan yang terkait. Blog M.Fowler Is Design Dead? berwawasan luas.
PS. Saya tidak berpikir itu terutama masalah pendapat; harus ada alasan obyektif, dan beberapa karakteristik penting dari perangkat lunak bebas, yang menjelaskan alasannya. Saya cenderung menebak bahwa UML hanya berguna untuk subkontrak resmi, dan hanya berguna ketika beberapa bagian dari perangkat lunak yang dikembangkan disembunyikan, seperti dalam proyek-proyek berpemilik. Jika itu benar, UML tidak akan kompatibel dengan pengembangan perangkat lunak gratis.
NB: Saya sendiri bukan penggemar UML. Saya tidak mendefinisikan UML sebagai dokumentasi kertas saja, tetapi juga sebagai [meta-] format data untuk perangkat lunak
sumber
Jawaban:
Ada berbagai cara untuk menggunakan UML. Martin Fowler memanggil mode UML ini dan mengidentifikasi empat: UML sebagai Notes , UML sebagai Sketsa , UML sebagai Cetak Biru , dan UML sebagai Bahasa Pemrograman .
UML sebagai Bahasa Pemrograman tidak pernah benar-benar lepas landas. Ada beberapa pekerjaan di bidang ini dengan nama yang berbeda, seperti Model Driven Architecture atau Model Based Software Engineering. Dalam pendekatan ini, Anda membuat model yang sangat rinci dari sistem perangkat lunak Anda dan menghasilkan kode dari model-model itu. Mungkin ada beberapa kasus penggunaan di mana pendekatan ini berguna, tetapi tidak untuk perangkat lunak umum dan terutama tidak di luar perusahaan besar yang mampu membeli alat yang mendukung pendekatan ini. Ini juga merupakan proses yang memakan waktu - saya dapat mengetikkan kode untuk suatu kelas lebih cepat daripada saya dapat membuat semua model grafis yang diperlukan untuk mengimplementasikannya.
UML sebagai Cetak Biru sering menunjukkan proyek "desain besar di muka" . Tidak harus, tentu saja. Model ini dapat sepenuhnya dijelaskan untuk kenaikan tertentu, juga. Tetapi idenya adalah bahwa waktu dihabiskan untuk membuat desain dalam bentuk model UML yang kemudian diserahkan kepada seseorang untuk dikonversi menjadi kode. Semua detail dijabarkan dan konversi ke kode cenderung lebih mekanis.
UML sebagai Sketsa dan UML sebagai Notes pada dasarnya serupa, tetapi berbeda berdasarkan pada saat digunakan. Menggunakan UML sebagai Sketsa berarti bahwa Anda akan membuat sketsa desain menggunakan notasi UML, tetapi diagram tersebut kemungkinan tidak lengkap, tetapi akan fokus pada aspek-aspek tertentu dari desain yang Anda butuhkan untuk berkomunikasi dengan orang lain. UML sebagai Notes serupa, tetapi model dibuat setelah kode untuk membantu memahami basis kode.
Ketika Anda mempertimbangkan ini, saya pikir semua hal di atas berlaku untuk semua jenis notasi pemodelan. Anda dapat menerapkannya pada diagram hubungan entitas, diagram IDEF , notasi pemodelan proses bisnis, dan sebagainya. Terlepas dari notasi pemodelan, Anda dapat memilih kapan Anda menerapkannya (sebelum sebagai spesifikasi, setelah sebagai representasi alternatif) dan berapa banyak detail (detail lengkap untuk aspek-aspek utama).
Sisi lain dari ini adalah budaya open source.
Seringkali, proyek open source memulai untuk memecahkan masalah yang dialami individu (atau, hari ini, perusahaan). Jika diluncurkan oleh seorang individu, jumlah pengembang adalah 1. Dalam hal ini, overhead komunikasi sangat rendah dan ada sedikit kebutuhan untuk berkomunikasi tentang persyaratan dan desain. Dalam sebuah perusahaan, kemungkinan ada tim kecil. Dalam hal ini, Anda mungkin perlu mengomunikasikan kemungkinan desain dan mendiskusikan pertukaran. Namun, begitu Anda telah membuat keputusan desain, Anda perlu mempertahankan model Anda karena basis kode Anda berubah seiring waktu atau membuangnya. Dalam istilah Agile Modeling , "dokumentasikan terus menerus" dan pertahankan "satu sumber informasi" .
Sebagai tambahan singkat, ada gagasan bahwa kode adalah desain dan bahwa model hanyalah pandangan alternatif dari desain. Jack Reeves menulis tiga esai tentang kode sebagai desain , dan ada diskusi tentang wiki C2 juga, membahas ide-ide bahwa kode sumber adalah desain , desain adalah kode sumber , dan kode sumber serta pemodelan . Jika Anda berlangganan kepercayaan ini (yang saya lakukan), maka kode sumber adalah kenyataan dan diagram apa saja harus ada untuk membuat memahami kode dan, yang lebih penting, alasan di balik mengapa kode itu seperti apa adanya.
Proyek open source yang sukses, seperti yang Anda sebutkan, memiliki kontributor di seluruh dunia. Kontributor ini cenderung kompeten secara teknis dalam teknologi yang mendukung perangkat lunak dan cenderung juga menjadi pengguna perangkat lunak. Kontributor adalah orang yang dapat membaca kode sumber semudah model, dan dapat menggunakan alat (IDE dan alat rekayasa balik) untuk memahami kode (termasuk menghasilkan model, jika mereka merasa perlu). Mereka juga dapat membuat sketsa aliran sendiri.
Dari empat mode yang dijelaskan Fowler, saya tidak berpikir Anda akan menemukan proyek open source, atau sangat banyak proyek di mana saja, yang menggunakan bahasa pemodelan sebagai bahasa pemrograman atau cetak biru. Ini meninggalkan catatan dan sketsa sebagai kegunaan yang mungkin untuk UML. Catatan akan dibuat oleh kontributor untuk kontributor, jadi Anda mungkin tidak akan menemukannya diunggah di mana pun. Sketsa berkurang nilainya karena kode menjadi lebih lengkap dan kemungkinan tidak akan dipertahankan karena itu hanya perlu upaya dari pihak kontributor.
Banyak proyek open source tidak memiliki model yang tersedia karena tidak menambah nilai. Namun, itu tidak berarti bahwa model tidak dibuat oleh seseorang di awal proyek atau bahwa individu belum membuat model sistem mereka sendiri. Hanya saja lebih efektif untuk memelihara satu sumber informasi desain: kode sumber.
Jika Anda ingin menemukan orang yang bertukar informasi desain, saya sarankan melihat forum atau milis apa pun yang digunakan oleh kontributor. Seringkali, forum dan milis ini berfungsi sebagai dokumentasi desain untuk proyek. Anda mungkin tidak menemukan UML formal, tetapi Anda mungkin menemukan semacam representasi grafis dari informasi desain dan model di sana. Anda juga dapat masuk ke ruang obrolan atau saluran komunikasi lain untuk proyek - jika Anda melihat orang berbicara tentang keputusan desain, mereka mungkin berkomunikasi dengan model grafis. Tetapi mereka kemungkinan tidak akan menjadi bagian dari repositori karena mereka tidak bernilai begitu mereka telah melayani tujuan mereka dalam komunikasi.
sumber
Mari kita gunakan Linux sebagai contoh,
struct
ke dalam diagram kelas tanpa hubungan.struct in_addr
rupa dalam memori, tidak ada diagram yang bisa membuatnya lebih jelas.Itulah hal-hal yang dapat saya pikirkan dalam pengaturan proyek Linux. Ini tentang kepraktisan, saya kira. Anehnya, saya tidak ingat Tanenbaum menggunakan UML dalam buku teks OS- nya dalam menggambarkan Minix.
Mungkin layak disebut, saya juga tidak menggunakan UML di tempat kerja. Mungkin 20% orang yang bekerja dengan saya mengetahui beberapa bagian dari UML.
sumber
UML adalah representasi, jadi itu adalah bentuk bahasa, dan demi argumen mari kita asumsikan tujuannya adalah untuk mengkomunikasikan model mental dari satu orang ke orang lain.
Apa yang saya cari dalam suatu bahasa adalah efisiensinya dalam menangkap perubahan pada model mental seseorang. Misalkan setelah menulis deskripsi model seseorang, perubahan kecil perlu dilakukan. Seberapa besar perubahan yang harus dilakukan pada representasi? Dalam bahasa tekstual, cara untuk mengukur itu adalah dengan menjalankan
diff
antara kode sebelum dan sesudah, dan menghitung perbedaannya. Dalam bahasa grafis, harus ada cara yang sama untuk mengukur perbedaannya.IMHO, saya menyebut bahasa "domain spesifik" (DSL) dengan tingkat yang meminimalkan ukuran di atas, yang memiliki manfaat nyata dalam mengurangi biaya pemeliharaan dan bug. Bagaimana cara membuat DSL? Ada beberapa cara. Salah satu yang paling sederhana adalah dengan hanya mendefinisikan struktur data dan metode dalam bahasa pemrograman yang ada. Ini menambahkan kata benda dan kata kerja ke bahasa dasar, membuatnya lebih mudah untuk mengatakan apa yang diinginkan seseorang. (Catatan: Saya tidak mencari DSL yang tidak memiliki kurva belajar. Mungkin pembaca DSL harus menginvestasikan satu kali biaya mempelajarinya.)
Poin penting adalah: Dalam semua kasus, DSL harus mengandung ketentuan yang membuat mengekspresikan model seseorang, dan perubahan pada model itu nyaman. Karena tidak ada batasan yang jelas untuk rentang domain yang mungkin, tidak ada DSL tunggal yang dapat melayani semuanya.
Kesan saya terhadap UML adalah apa yang dicoba untuk dilakukan.
sumber