Mengapa UML tidak digunakan di sebagian besar perangkat lunak gratis (mis. Di Linux)?

29

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

Basile Starynkevitch
sumber
30
Mungkin menyebabkan UML omong kosong? Atau karena kebanyakan perangkat lunak bebas tidak memiliki dokumentasi yang baik?
BЈовић
19
Anda memilikinya sebaliknya. Pasti ada alasan obyektif untuk menggunakan UML, bukan sebaliknya. FOSS tidak menggunakan UML, baik tidak ada alasan objektif, atau semua alasan tidak diterima oleh komunitas FOSS.
Euforia
18
Untuk beberapa proyek yang Anda daftarkan, alasannya agak jelas: karena perjalanan waktu belum ditemukan. UML pertama kali distandarisasi pada tahun 1997. Proyek GNU adalah dari tahun 1983, GCC 1987, Bash 1988, GNU membuat 1989, Qt 1991, OCaml 196, Gnome 1997. Hanya lighttpd dan Unison yang cukup muda untuk dikembangkan menggunakan UML, tetapi lighttpd ditulis dalam C dan Unison dalam OCaml, keduanya merupakan bahasa yang tidak dapat dijelaskan dengan baik dalam UML. Plus, pengembang Perangkat Lunak Bebas umumnya percaya pada penulisan kode sedemikian rupa sehingga dapat dipahami tanpa bantuan alat eksternal.
Jörg W Mittag
26
UML tidak banyak digunakan dalam pengembangan perangkat lunak sumber terbuka atau tertutup. Ini sebagian besar digunakan oleh orang-orang yang berbicara tentang pengembangan perangkat lunak.
Karl Bielefeldt
16
Alasan yang sama UML tidak banyak digunakan dalam pengembangan perangkat lunak tidak bebas. Kedengarannya bagus di atas kertas tetapi dalam praktiknya tampaknya tidak menawarkan manfaat nyata.
JohnB

Jawaban:

37

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.

Thomas Owens
sumber
1
Banyak teks tetapi hanya yang terakhir tetapi satu paragraf sebenarnya menjawab pertanyaan. Juga, apakah Anda membuka kembali pertanyaan agar Anda dapat menjawabnya?
Euforia
6
@ Euphoric Meskipun paragraf terakhir menjawab pertanyaan, selebihnya diperlukan untuk mengatur latar belakang dan menormalkan istilah dan konsep. Dan tidak, itu sudah memiliki 4 suara yang dibuka kembali - saya memberikan suara ke-5 dan menjawab.
Thomas Owens
3
+1 jawaban yang sangat komprehensif. Menurut pendapat saya, paragraf sebelumnya menjelaskan kesimpulannya. Sudah selesai dilakukan dengan baik!
Andres F.
8

Mari kita gunakan Linux sebagai contoh,

  • Ini bukan proyek Berorientasi Objek, beberapa bagian, seperti VFS dapat dimodelkan dalam UML, tetapi yang lain tidak bisa atau tidak sangat efektif, yaitu pada dasarnya hanya terjemahan langsung dari structke dalam diagram kelas tanpa hubungan.
  • UML baik untuk dokumentasi, untuk mendapatkan seseorang yang baru dalam suatu proyek semakin cepat. Itu bukan sesuatu yang benar-benar dipenuhi oleh Linux, orang diharapkan untuk mempelajarinya sendiri.
  • Tidak yakin alat UML apa yang digunakan, orang harus menyetujui sesuatu jika itu akan dipertahankan. Ada aplikasi java gratis untuk itu, tapi saya rasa tidak banyak yang mau menggunakannya.
  • Pada 90-an GUI masih menjadi tantangan di Linux. Cukup gali arsip milis, saya yakin Anda tidak akan menemukan gambar apa pun selain logo untuk Linux itu sendiri dalam format xpm untuk ditampilkan dalam waktu boot up. Teks biasa adalah format yang disukai.
  • Saya rasa tidak ada yang peduli dengan desain. Orang-orang peduli tentang fitur dan jika mereka diterima maka kode akan diteliti. Kasus penggunaan masih dijelaskan dengan kata-kata, seperti bagaimana standar seperti POSIX dan SUS ditulis.
  • Banyak objek dalam domain sistem operasi dipahami dengan baik dan terstandarisasi dalam komunitas. Misalnya orang akan tahu bagaimana struct in_addrrupa dalam memori, tidak ada diagram yang bisa membuatnya lebih jelas.
  • UML tidak banyak membantu dalam algoritma pemodelan, seperti pengalokasi memori, penjadwal, penangan interupsi, dll. Sumbernya mungkin lebih mudah dipahami.

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.

imel96
sumber
4
Linux memang menggunakan orientasi objek, hanya saja tidak menggunakan bahasa yang berorientasi objek . Benar, linux juga mengandung bagian-bagian yang ditulis dengan gaya yang sangat prosedural, tetapi bagian-bagian lain, seperti antarmuka modul kernel, jelas berorientasi objek.
cmaster
Ada lebih dari sekadar diagram kelas di UML.
Michael Dorner
Setiap proyek perangkat lunak besar membutuhkan desain berorientasi objek.
Kais
Para kontributor perlu memahami bahasa pemodelan standar sebelum mengerjakan proyek, dan itulah yang membenarkan kebutuhan dokumentasi pemodelan perangkat lunak baik dalam UML, SysML, IDEF0, ODL atau OCL.
Kais
2

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 diffantara 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.

Mike Dunlavey
sumber