Apa penyebab yang menyebabkan perangkat lunak overbloated? [Tutup]


9

Hari ini saya memutuskan untuk melakukan instalasi bersih untuk driver Creative Sound Blaster, karena mereka selalu mulai mengalami glitching sendiri setelah beberapa waktu. Dan itu berarti saya harus melalui seluruh prosedur pembersihan. Dan itu memakan waktu hampir 2 jam ..

Dan jujur, saya tidak bisa melihat alasannya ?! Dan meskipun Creative, IMHO, adalah pemenang pertama mutlak untuk menghasilkan perangkat lunak berkualitas buruk yang tidak pernah berfungsi, masalah yang menggembung tidak eksklusif bagi mereka.

PC dengan driver kamera digital Canon akan memiliki sekitar 10 entri Canon yang saling berhubungan dengan semua jenis koneksi. Visual Studio juga merupakan contoh utama, ada sekitar 50 atau lebih entri untuk instalasi penuh, dan memperbaiki hal itu hanya mungkin dengan nuking lengkap. Dan bahkan setelah itu berhasil merusak seluruh menginstal OS ketika saya meningkatkan dari VS2k8 ke VS2k8SP1 atau sesuatu. Ternyata 5GB ruang kosong tidak cukup untuk tambalan 300MB ...

Jadi ini sepertinya merupakan masalah yang tersebar luas. Hampir setiap aplikasi saat ini biasanya berisi unpacker, beberapa "teman" spywarish yang diinstal, driver biasanya sekitar 600MB untuk semua termasuk printer dan sebagainya.

Tapi kenapa? Apakah ini kesalahan pengembang? Aplikasi seperti itu adalah mimpi buruk untuk didukung, mereka tidak pernah berfungsi 100% saat ini, dan hampir semua pengguna yang saya tahu sangat negatif tentang semua mengasapi yang mereka dapatkan sebagai driver wajib menginstal untuk USB thumb drive / Printer / Kamera / Sound Card / Browser.

Tampaknya NSIS dari Nullsoft adalah satu-satunya sistem pengaturan bersih yang tidak membengkak, dari yang saya tahu, misalnya, instal Firefox. Bersih, cukup banyak instal berbasis xcopy tanpa masalah.

Jadi mengapa orang tidak menggunakan pengaturan dan aplikasi sederhana yang tidak di-root lebih dari 30 lapisan interkoneksi? Apakah karena pengembang malas? Gunakan alat codegen? Apakah karena perusahaan memaksakan aplikasi kelas berat sebagai sesuatu yang disukai pengguna? Apa penyebabnya, dan apakah ada harapan perangkat lunak akan kembali ke dasar suatu hari nanti? Apa langkah-langkah untuk menghindari penulisan mengasapi ketika Anda memulai aplikasi baru dari awal?


4
Merayap fitur. Tidak ada fitur baru, tidak ada yang bisa dilakukan pengembang.
Robert Harvey

2
"Pemenang 1 mutlak untuk menghasilkan perangkat lunak berkualitas buruk yang tidak pernah berfungsi" - Jelas Anda belum pernah menggunakan Samsung Kies ;-)
Dean Harding

1
Penyebab yang sama yang menyebabkan dapur berantakan: meningkatkan entropi. Dibutuhkan banyak fokus dan energi untuk menjaga semuanya tetap teratur. Kemungkinannya adalah beberapa perubahan ekstra akan menciptakan lebih banyak kekacauan daripada lebih banyak pesanan.
Ayub

2
Pertanyaan ini tampaknya bukan tentang mengasapi, tetapi lebih tentang masalah dengan menginstal dan menghapus instalan perangkat lunak.
David Thornley

2
Manajemen dan Arsitektur buruk di situs.
Paul

Jawaban:


2

Dugaan saya adalah bahwa ada banyak fitur yang menurut seseorang adalah ide yang bagus. Namun, jika banyak orang memiliki ide-ide terpisah yang dapat disatukan ke dalam satu aplikasi, ini adalah bagaimana hal itu dapat menjadi sangat rumit. Saya tidak akan menyalahkan pengembang dalam hal produk perusahaan besar di mana harus ada manajer produk yang memiliki tanggung jawab atas apa yang ada dalam produk dan bagaimana mengoptimalkannya dari berbagai perspektif.

Sisi lain dari hal ini adalah hutang teknis yang kemungkinan besar tidak dikelola dengan baik dalam banyak kasus karena tidak dilihat sebagai investasi waktu yang besar. Saya menduga fitur baru dan perbaikan bug lebih masuk akal daripada refactorings atau tugas utang lain yang mungkin tampak memiliki sedikit nilai bisnis langsung. Seberapa sering tim pengembang mendapatkan beberapa minggu untuk membersihkan kode lawas jika basis kode agak lama? Dugaan saya tidak akan sering.


10

Mengutip Joel dalam Strategy Letter IV: Bloatware and the 80/20 Myth :

[...] ada banyak alasan bagus untuk bloatware. Pertama, jika pemrogram tidak perlu khawatir tentang seberapa besar kode mereka, mereka dapat mengirimkannya lebih cepat. [...] Jika vendor perangkat lunak Anda berhenti, sebelum pengiriman, dan menghabiskan dua bulan menekan kode ke bawah untuk membuatnya 50% lebih kecil, manfaat bersih untuk Anda akan menjadi tak terlihat. [...] Tetapi kerugian bagi Anda untuk menunggu dua bulan ekstra untuk versi baru ini jelas, dan kerugian bagi perusahaan perangkat lunak yang harus menyerah dalam dua bulan penjualan bahkan lebih buruk.

Banyak pengembang perangkat lunak tergoda oleh aturan "80/20" yang lama. Ini tampaknya membuat banyak akal: 80% dari orang menggunakan 20% dari fitur. Jadi, Anda meyakinkan diri sendiri bahwa Anda hanya perlu menerapkan 20% fitur, dan Anda masih bisa menjual 80% salinannya.

Sayangnya, 20% tidak pernah sama. Semua orang menggunakan serangkaian fitur yang berbeda . [...]

Ketika Anda mulai memasarkan produk "lite" Anda, dan Anda memberi tahu orang-orang, "hei, itu lite, hanya 1MB," mereka cenderung sangat senang, lalu mereka bertanya apakah itu memiliki fitur penting mereka , dan itu tidak, jadi mereka tidak membeli produk Anda.


Ini adalah satu hal "jika programmer tidak perlu khawatir tentang seberapa besar kode mereka" ketika menulis hanya kode yang diperlukan dan benar, dan hal yang sangat berbeda membuat programmer secara sembarangan menulis dan menambahkan kode yang tidak perlu akan meningkatkan ukuran program tanpa perlu hanya demi pengiriman lebih cepat. Tetapi ukuran kode TIDAK benar-benar masalah; masalahnya adalah bahwa sebagian besar jika tidak semua program kembung tidak efisien, lambat, bermasalah, tidak dapat diandalkan, sering macet, menyebabkan banyak ketidaknyamanan dan frustrasi bagi pengguna, atau menyebabkan kematian. Bloatware itu buruk. Ingin mengirim lebih cepat? Menulis program lean.
Only You

Berbicara tentang persepsi, manfaat, dan peningkatan? "Jika vendor perangkat lunak Anda berhenti, sebelum pengiriman, dan menghabiskan dua bulan menekan kode untuk membuatnya 50% lebih kecil, manfaat bersih untuk Anda akan menjadi tak terlihat." Jelas, kami ingin menghindarinya, khususnya ketika tidak ada kebutuhan kritis atau penting.
Only You

Tetapi kami juga ingin menghindari hal ini: "Software mengasapi adalah proses dimana versi berturut-turut dari program komputer menjadi lebih lambat, menggunakan lebih banyak memori / ruang disk atau kekuatan pemrosesan, atau memiliki persyaratan perangkat keras yang lebih tinggi daripada versi sebelumnya sementara hanya membuat pengguna yang meragukan terlihat. perbaikan. " Ukuran demi ukuran juga tidak bagus. Membuat program besar lebih kecil tidak selalu membuatnya lebih baik atau lebih efisien. Sekali lagi tujuan penting harus efisiensi program terlepas dari ukuran program. en.wikipedia.org/wiki/Software_bloat
Only You

1
Pengembangan lean dapat diringkas oleh tujuh prinsip: 1 Menghilangkan limbah 2 Memperkuat pembelajaran 3 Putuskan selambat mungkin 4 Memberikan secepat mungkin 5 Memberdayakan tim 6 Membangun integritas dalam 7 Lihat keseluruhan en.wikipedia.org/wiki/Lean_software_development
Only Anda

4

Sebagian besar hubungannya dengan ketergantungan suatu produk. Sistem operasi Anda dikirimkan dengan banyak perpustakaan standar untuk semua jenis hal. Namun, pustaka standar ini memiliki versi berbeda sepanjang evolusi OS, dan penginstal generik apa pun tidak dapat mengasumsikan bahwa versi spesifik yang dibuatnya akan benar-benar hadir di OS.

Oleh karena itu penginstal lengkap harus menyertakan versi yang benar dari setiap dependensi untuk memastikan bahwa semuanya pasti akan berfungsi setelah instalasi, tidak peduli apa keadaan awal dari setiap ketergantungan pada komputer target. Ini bisa menjadi mengasapi yang cukup signifikan untuk jenis aplikasi tertentu, misalnya. Aplikasi berbasis NET yang perlu digunakan untuk sistem Windows XP.

Sampai baru-baru ini, satu sistem penginstal yang saya gunakan memerlukan setiap versi .NET sebelumnya untuk dapat menginstal versi terbaru, sehingga itu berarti aplikasi .NET 3.5 memerlukan binari instalasi untuk .NET 1, 2, 2.5 dan 3 DI ATAS 3.5. Dalam hal ini, hanya penginstal yang bengkak.

Salah satu solusinya adalah penginstal web, yang hanya mengunduh komponen-komponen yang sebenarnya tidak ada pada sistem target - dan ini bisa menjadi keuntungan besar / keuntungan besar. Tentu saja itu membatasi instalasi Anda ke sistem yang memiliki konektivitas internet.


Ini sangat buruk pada platform Linux. Mengganggu pada platform Windows, tetapi membuat saya merobek rambut saya ketika bekerja pada proyek berbasis Linux!
Brian Knoblauch

2
Ini sangat buruk pada platform Windows. Mengganggu pada platform Linux, tetapi membuat saya merobek rambut saya ketika bekerja pada proyek berbasis Windows!
Paul

setidaknya di Linux Anda bisa menjalankan apt-get atau yum dan semua deps diinstal dalam waktu singkat. Windows ... hampir tidak mudah.
gbjbaanb

2

Saya pikir banyak yang harus dilakukan dengan lapisan demi lapisan kode perpustakaan. Jelas ketika Anda menggunakan perpustakaan, Anda tidak menggunakan semua yang ada di dalamnya, sehingga kelebihan bertambah saat Anda memasukkan lebih banyak perpustakaan.

Gabungkan bahwa dengan fakta bahwa biaya satu jam kerja dari seorang programmer semakin mahal sementara daya pemrosesan / penyimpanan komputer tipikal semakin murah dari tahun ke tahun, Anda melihat bahwa sebenarnya lebih hemat biaya dengan cara ini.


2
  • "Kita perlu melakukan sesuatu X. Mari kita gunakan perpustakaan $ BIGFATLIBDESIGNEDFORSOMETHINGELSE, karena saya menggunakannya dalam proyek yang berbeda"
  • "Saya pikir kita tidak memerlukan bagian kode ini lagi, tetapi untuk memastikan tidak ada yang rusak, simpan saja"
  • Tidak atau tidak cukup tes unit, yang mengarah ke
  • Tanpa refactoring
  • Tidak ada pelacakan, di mana pengaturan telah disimpan selama bertahun-tahun, jadi sekarang pengaturan ada di mana-mana
  • ...

1

Ini adalah lingkaran setan di mana setiap orang dalam siklus keputusasaan dapat disalahkan . Satu siklus keputusasaan terdiri dari langkah-langkah berikut:

  1. Para pebisnis meminta fitur yang membengkak.
  2. Pengembang mengimplementasikan fitur yang membengkak meskipun mereka tahu bahwa mereka seharusnya tidak melakukannya.
  3. Pelanggan membayar untuk fitur yang membengkak meskipun mereka hanya menginginkan produk tetapi bukan fitur yang bodoh.
  4. Para pebisnis percaya bahwa pelanggan menginginkan fitur yang membengkak.
  5. Pergi ke langkah satu dan ulangi.

Bagaimana Anda menghentikannya? Tidak ada jawaban yang mudah tentang caranya, tetapi jelas bahwa untuk menghentikan siklus maka salah satu langkah harus dipatahkan. Dengan demikian hanya dapat dipecah oleh bisnis, pengembang atau konsumen yang mengambil tindakan revolusioner.


0
  1. Seorang insinyur mencoba mengoptimalkan modul tetapi memperkenalkan beberapa masalah pelanggan. Kemudian, manajernya berkata tidak. Kemudian, insinyur itu memutuskan untuk tidak "membuat masalah" sampai masalah mengganggunya.
  2. Untuk sistem yang kompleks, vendor sudah menambahkan banyak tambalan dan memperbaiki ribuan bug untuk membuatnya stabil di lingkungan pelanggan. Itu tidak memiliki kualitas yang baik dari sudut pandang perangkat lunak tetapi berfungsi. Tidak ada yang ingin menulis ulang untuk memperbaiki jumlah bug yang sama lagi.
  3. untuk alasan kompatibilitas ke belakang, bahkan jika suatu fitur tidak populer di pasar, kita perlu menyimpannya di sana.

0

Kemalasannya selalu, itulah yang menyebabkan perut kembung. (atau lumpur seperti dalam artikel mani tentang hal ini, Big Ball of Mud )

Sebagai contoh, di mana saya bekerja, kami memiliki aplikasi C ++ "lawas" yang dirancang dengan cukup baik, Klien berbicara dengan API yang berbicara dengan server yang melakukan pekerjaan DB. Semua dilakukan dengan bijaksana. Baru-baru ini kami membutuhkan modul tambahan, tetapi alih-alih mengimplementasikannya dengan benar, dev memutuskan untuk mengimplementasikan ini dalam. NET, dan lebih buruk lagi, ia memutuskan bahwa mengakses data melalui API terlalu sulit (tidak seperti ...) ia akan membuat koneksi DB langsung. Jadi Anda lihat bagaimana kekacauan ini terjadi. (dan semua dengan persetujuan TA yang menempatkan "cepat" atas "baik")

Saya telah melihat hal semacam ini sebelumnya juga - di tempat lama, sebagian kecil dari GUI adalah html, karena beberapa pengembang menganggap itu ide yang baik untuk menulis data dalam html dan memiliki tampilan GUI itu. Jadi 1 bagian kecil melakukan sesuatu yang berbeda dari yang lain.

Singkatnya, kemalasan itu buruk, dan konsistensi baik (terlepas dari teknologi yang digunakan). Saya lebih suka memiliki aplikasi semua-MFC daripada yang merupakan bagian MFC dan sebagian Winforms dan bagian WebGL dengan banyak arsitektur back-end yang menyatukan semuanya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.