Apakah pembuatan kode meningkatkan kualitas kode?


12

Berdebat untuk pembuatan kode, saya mencari beberapa contoh cara meningkatkan kualitas kode. Untuk memperjelas apa yang saya maksud dengan pembuatan kode, saya hanya dapat berbicara tentang proyek saya:

Kami menggunakan file XML untuk menggambarkan hubungan entitas dalam skema basis data kami, sehingga mereka membantu kami membuat kerangka ORM dan formulir HTML kami yang dapat digunakan untuk menambah, menghapus, dan memodifikasi entitas.

Menurut saya, ini meningkatkan kualitas kode karena kesalahan manusia berkurang. Jika sesuatu diimplementasikan secara tidak benar, itu rusak dalam model, yang baik karena kesalahan mungkin muncul lebih cepat karena kode yang dihasilkan lebih banyak rusak juga.

Karena saya ditanya definisi kualitas kode , izinkan saya mengklarifikasi hal ini, yang saya maksud adalah kualitas perangkat lunak .

Kualitas Perangkat Lunak : Ini bukan satu atribut tetapi banyak, misalnya efisiensi, kemampuan modifikasi, keterbacaan, kebenaran, ketahanan, kelengkapan, kegunaan, portabilitas dll. Yang berdampak satu sama lain.


3
Apa definisi Anda tentang kualitas kode?
NoChance

@EmmadKareem Saya menambahkan definisi singkat tentang itu pada pertanyaan awal.
platzhirsch

1
Saya pikir pembuatan kode otomatis akan membantu meningkatkan konsistensi dan keseragaman dalam kode Anda. Dalam beberapa kasus yang memang meningkatkan kualitas tetapi saya tidak berpikir itu semua.
joshin4colours

Jawaban:


38

Generator kode tidak dapat menghasilkan kode yang lebih baik daripada orang yang menulis generator.

Pengalaman saya dengan pembuat kode adalah mereka baik-baik saja selama Anda tidak perlu mengedit kode yang dihasilkan . Jika Anda bisa berpegang pada aturan itu, maka Anda baik untuk pergi. Ini berarti Anda dapat dengan andal membuat ulang bagian sistem itu dengan percaya diri dan cepat, secara otomatis menambahkan lebih banyak fitur jika diperlukan. Saya kira itu bisa dihitung untuk kualitas.

Saya pernah mendengar argumen untuk generator kode bahwa seorang programmer dapat menghasilkan begitu banyak baris kode per hari dan dengan generator kode, mereka dapat menghasilkan ribuan baris! Jelas itu bukan alasan kami menggunakan generator.


6
+ bagian yang dicetak miring seribu kali. Pembuat kode harus berfungsi seperti kompiler atau mekanisme template C ++: Anda tidak perlu mengedit outputnya secara manual. Satu-satunya saat Anda harus membaca hasilnya adalah jika Anda mencurigai ada bug.
anon

1
Sayang sekali saya tidak bisa memilih lagi ...
Fabricio Araujo

@anon: Homans umumnya tidak boleh mengedit output dari pembuat kode atau kompiler, tetapi kadang-kadang sangat masuk akal untuk memiliki proses pembuatan yang mengharuskan menjalankan satu bagian kode yang dihasilkan mesin melalui program yang menerapkan beberapa modifikasi pada kode tersebut. Ada juga saat-saat ketika mungkin diperlukan untuk memiliki tangan manusia mengedit hasil proses build jika perlu untuk menambal kode lapangan sambil mengubah jumlah minimal byte, tetapi ketika kode itu tweak dengan tangan dengan cara seperti itu, kita harus juga arsip semua file dari proses build (bukan hanya sumber!) dan ...
supercat

... juga perbarui kode sumber untuk mencocokkan semantik kode objek yang diedit dengan tangan.
supercat

20

Saya berpendapat sebaliknya - anggap Anda menulis aplikasi yang menarik, pembuatan kode mengurangi kualitas kode. Sifat pembuatan kode menghargai kerangka kerja yang sangat cookie cutter, overblown, over-ditentukan yang menjadi sangat sulit untuk ditangani tanpa terus bergantung pada alat pembuat kode untuk terus menghasilkan lebih banyak, lebih kompleks, lebih banyak kumpulan kode yang lebih buruk. Meskipun bisa menjadi alat yang baik, itu seharusnya tidak menjadi alat utama dalam kotak.


3
Setuju, sampah yang keluar dari beberapa ORM (sampah dari sudut pandang seseorang yang tahu cara menulis kode basis data yang berkinerja baik) adalah contoh yang baik. Sering kali ini semacam bekerja cukup untuk seseorang yang tidak tahu apa yang mereka lakukan untuk berpikir itu berhasil. Dan programmer baru tidak mendapatkan keterampilan untuk melakukan hal-hal sulit yang perlu dilakukan di luar generator karena mereka tidak mengerti konsep dasar.
HLGEM

1
Ooh, +1 atau -1 .... di satu sisi pembuatan kode sangat berguna untuk menghapus kode berulang yang membosankan di mana Anda memiliki definisi yang hanya diperluas menjadi kode, tetapi kemudian Anda benar bahwa itu akan digunakan secara berlebihan untuk segala macam cara. Kompleksitas 'hemat waktu' yang akhirnya menjadi anti-pola itu sendiri.
gbjbaanb

13

Saya pikir pembuatan kode otomatis dan kualitas kode agak ortogonal dan tidak selalu berkorelasi.

Pembuatan kode hanyalah cara untuk menyelesaikan tugas teknis tertentu. Apakah itu menghasilkan peningkatan kualitas kode sangat tergantung pada apa yang Anda lakukan.

Situasi Anda adalah contoh yang baik dari pembuatan kode yang menghasilkan peningkatan kualitas kode melalui penangkapan awal kesalahan potensial.

Saya dapat memberi Anda contoh lain ketika pembuatan kode otomatis mengurangi kualitas kode. Ini WebForms ASP.NET luar biasa. Itu pembuatan kode otomatis dengan menerjemahkan hirarki kontrol UI ke dalam markup HTML, yang semuanya stabil, dapat diprediksi dan dikelola.

Untuk menarik kesimpulan, pembuatan kode otomatis dapat membantu meningkatkan kualitas kode bila digunakan dengan benar.


11

Pembuatan kode tidak memengaruhi kualitas kode , begitu juga konsistensi kode .

Kode yang dihasilkan akan konsisten di antara instance generasi. Jika generator dirancang untuk memancarkan kode kualitas yang baik, maka kode yang dihasilkan akan berkualitas baik secara konsisten. Namun, jika pembuat kode mengeluarkan kode kualitas buruk, maka Anda akan mendapatkan kode yang secara konsisten buruk.

Pembuatan kode juga dapat digunakan untuk membuat kode lebih cepat . Lebih cepat, namun, tidak berarti lebih baik ... Itu bisa berarti Anda mendapatkan kode kualitas buruk yang jauh lebih cepat.


6

Pembuatan kode baik jika:

  • kode yang dihasilkan tidak seharusnya diedit
  • generator kode memberi Anda cukup fleksibilitas untuk melakukan apa yang perlu Anda lakukan
  • bahasa input ke pembuat kode lebih baik (yaitu KERING) daripada apa yang seharusnya Anda tulis
  • generator kode menciptakan kode andal yang bagus yang tidak perlu Anda khawatirkan, meskipun itu bertele-tele

Ketika hal ini terjadi, kode yang kualitasnya perlu Anda pertimbangkan adalah kode yang dimasukkan ke generator.

Ukuran kualitas yang sederhana adalah, untuk perubahan khas dalam persyaratan, berapa banyak pengeditan manual yang harus Anda lakukan. Semakin sedikit, semakin baik.


dan bahwa kode yang dihasilkan secara transparan memetakan kembali ke aslinya, sehingga Anda tidak perlu melakukan debug pada kode yang dihasilkan.

@ Thorbjørn: Saya setuju. Pada satu aplikasi saya harus menjaga di sana dihasilkan Fortran. Kebutuhan untuk dapat men-debug itu hilang selama bertahun-tahun, dan saya adalah satu-satunya yang cukup bodoh untuk tetap ada untuk melakukan panggilan layanan :)
Mike Dunlavey

Saya tidak setuju bahwa pembuat kode harus fleksibel. Perlu ditargetkan - lakukan satu hal dengan baik, tidak banyak hal. Ini harus mengambil input yang kecil dan terdefinisi dengan baik dan menulis sejumlah kode untuk Anda. Ketika mulai menjadi program, itu menuju kegagalan.
gbjbaanb

@ gbjbaanb: Saya setuju. Itu sebabnya saya katakan cukup fleksibel . Bagi saya, masalahnya bukan generator kode itu sendiri, tetapi domain-spesifik-bahasa yang berfungsi sebagai inputnya. Jika DSL itu terlalu fleksibel, pengguna harus berenang dalam pilihan. Jika tidak cukup spesifik, pengguna harus mengatasi keterbatasannya. Saya bisa memberikan contoh ini.
Mike Dunlavey

4

Peningkatan kualitas kode karena KERING (Jangan ulangi sendiri).

Aturan pembuatan kode ditulis satu kali; mereka bukan kode keras untuk setiap contoh kode yang dihasilkan, dan dengan demikian mengurangi potensi kesalahan manusia dalam menyalin / menempel konten dengan sedikit modifikasi.


Kecuali Anda harus mengedit kode yang dihasilkan - yang tidak KERING sama sekali .... Saya harus melakukan itu baru-baru ini - itu tidak menyenangkan sama sekali . Jika saya harus mengedit basis kode autogenerated secara manual lagi, saya akan menagih tiga kali lipat !!!
Fabricio Araujo

1
Anda tidak harus mengedit kode itu; sunting kode yang menghasilkan generasi itu sendiri dan tambahkan dengan aturan tambahan jika perlu. Mengedit kode yang dihasilkan harus menjadi pilihan terakhir.
earlNameless

1
Saya ingin punya pilihan itu .. Saya tidak punya.
Fabricio Araujo

2

Saya berasumsi maksud Anda generator kode berpemilik yang dikontrol untuk penggunaan in-house tertentu karena jika tidak ada kekurangan kode mesin adalah pembuat kode. Tapi ini dia:

masukkan deskripsi gambar di sini

Saya pikir sangat diperdebatkan bahwa node graph dalam Blueprints lebih mudah untuk dipelihara dan jauh lebih rentan kesalahan daripada kode GLSL / HLSL yang dihasilkannya (dan kalau tidak perlu harus ditulis tangan).

Ini juga jauh lebih produktif untuk menghasilkan shader baru karena Anda mendapatkan umpan balik visual realtime tentang bagaimana hasil akhirnya terlihat ketika Anda mengubah grafik. Saya pasti lebih suka mempertahankan ribuan shader yang diwakili dengan grafik nodal dengan cara ini daripada kode GLSL / HLSL, dan saya sebenarnya lebih akrab dengan menulis GLSL / HLSL daripada menggunakan Blueprints. Saya pikir itu sebenarnya praktis tidak mungkin menyebabkan seperti bug utama selain mungkin beberapa kesalahan visual kecil yang mungkin Anda tangkap segera karena "bahasa visual" memaksakan kendala yang masuk akal dengan seringnya gaya fungsional murni yang tidak memungkinkan Anda untuk, katakan, menabrak shader, setidaknya AFAIK (saya akui bukan pakar Blueprints).

Bahkan tidak ada "kode" untuk dipertahankan lagi. Anda cukup menempatkan node di dalam grafik dan menggambar tautan di antara mereka dan, voila, itu menghasilkan kode shader untuk Anda. Siapa yang memelihara hal ini dan berkata, " Anda tahu, hidup saya akan jauh lebih mudah dan saya akan memiliki lebih banyak waktu luang jika ini hanya ditulis dalam kode GLSL daripada menggunakan Cetak Biru. " Mungkin tidak pernah.

Yang mengatakan, saya telah mengalami bagian saya dari generator kode eksklusif yang memang membuat hidup lebih sulit, membuat saya belajar bahasa meta bodoh ini yang memiliki manfaat sangat terbatas, jika ada, lebih dari menulis kode dalam bahasa kode yang dihasilkannya. Bagi saya tanda generasi kode yang shite adalah salah satu yang tidak lebih dari mengurangi sejumlah kecil boilerplate dan tidak benar-benar mengurangi, katakanlah, kemungkinan bug. Anda tahu itu terutama shite jika itu benar-benar memperkenalkan cara baru untuk menyebabkan bug yang bahasa aslinya tidak miliki. Tetapi ada kasus-kasus untuk pembuatan kode, seperti di atas, di mana peningkatan produktivitas begitu besar, menjadikan hal-hal yang sangat teliti yang menghabiskan banyak waktu sekarang membutuhkan biaya yang sangat mahal, sehingga tidak seorang pun akan menggunakannya dan kemudian melihat ke belakang.

Bagi saya, ada argumen yang lebih sah untuk pengembangan Blueprints di antara tim Epic daripada banyak bahasa pemrograman yang dibuat di luar sana dibuat untuk masyarakat umum yang nyaris tidak membawa sesuatu yang baru ke meja.


1

Saya akan mengatakan dalam kasus Anda itu mungkin meningkatkan kualitas sedikit, tetapi mengurangi waktu pengembangan banyak. Terkadang kode yang dihasilkan rapuh, canggung, atau buruk. Dalam kasus tersebut, kode yang dihasilkan dapat menurunkan kualitas dan menambah lebih banyak waktu pengujian / perbaikan / pengujian regresi untuk proyek. Dan beberapa tugas terlalu rumit untuk dibuat dengan mudah - generator menjadi sistem yang terpisah (mungkin lebih besar dan lebih kompleks daripada proyek utama) untuk dirinya sendiri.

Pembuat kode baik-baik saja, tetapi hati-hati dengan mereka!


1

Saya dulu bekerja di toko yang sangat bergantung pada pembuatan kode. Dalam pikiran saya itu membuat kode untuk proyek sangat seragam. Dan dalam hal itu, kualitasnya oke.

Namun, ketika Anda tidak lagi diizinkan untuk menulis kode khusus karena semuanya harus melalui generator maka saya pikir Anda kehilangan beberapa keunggulan menjadi seorang programmer.

Jadi saya pikir ini adalah topik pedang bermata dua. Ya generator itu hebat karena mereka mengurangi kesalahan dan meningkatkan standar kode, namun, mereka juga membuat "beberapa" programmer bodoh, karena mereka bergantung pada generator daripada harus membuat tangan mereka kotor.

Hanya 2 sen saya.


3
Programmer bahasa assembly biasa mengatakan ini tentang kompiler. Jadi saya tidak yakin ini argumen yang bagus. Terpaksa membuat tangan Anda kotor bisa menjadi pengalaman belajar yang baik, tetapi begitu Anda sudah belajar, Anda harus menggunakan alat paling produktif yang tersedia.
MarkJ

@ MarkJ: Kadang-kadang perakitan sebenarnya bisa lebih baik daripada bahasa yang dikompilasi untuk keseragaman. Sebagai contoh, dalam beberapa sistem embedded, berguna untuk dapat membuat kode yang setara x=someValue ^ 0xFF ^ 0xFF ^ 0xFF ^ 0xFF;dan membuatnya dikodekan dengan empat instruksi XOR-literal. Jika media penyimpanan kode hanya dapat menulis byte kosong (0xFF), konstruk di atas akan memungkinkan empat perubahan sewenang-wenang terhadap nilai. Bahkan jika seseorang menulis ulang ekspresi sebagai x=someValue; x = x ^ 0xFF ^ 0xFF ^ 0xFF ^ 0xFF;dan kompiler mengevaluasi semua xors saat runtime, mungkin masih menggunakan "melengkapi semua bit" ...
supercat

... instruksi daripada langsung atau langsung.
supercat

1

Selain jawaban Martin, saya akan menambahkan bahwa pembuatan kode SQL sangat baik ketika Anda bekerja secara record-by-record (pilih * dari tab1 di mana tab1.pkcolumn =: parameter, perbarui tab1 set [sejumlah kolom] di mana tab1.pkcolumn =: parameter, dll). Dan ORM Anda akan bersinar dalam skenario itu, karena SQL yang perlu dihasilkan memang berulang.

Kekhawatiran utama saya adalah metaqueries - pertanyaan tentang properti objek yang diterjemahkan ORM ke SQL menggunakan algoritma apa pun. Metaqueries yang sangat mirip dapat menghasilkan SQL yang benar-benar berbeda - dan tidak memiliki jaminan bahwa SQL yang dihasilkan ini performatik.

Bahasa metaquery yang diterjemahkan ke bahasa lain (SQL) yang menerjemahkan ke rencana kueri untuk secara efektif menjalankan pengumpulan data. Dan hasil yang dihasilkan harus berupa objek, sehingga ORM harus membuat instance objek yang terkena dampak - sehingga dapat memicu hujan pertanyaan lain untuk mengisi atribut objek yang tidak dibawa oleh metaquery itu sendiri ...


0

Saya sepenuhnya setuju dengan mereka yang mengatakan bahwa pembuatan kode baik-baik saja selama Anda tidak perlu mengedit (lebih disukai, tidak harus melihat) kode yang dihasilkan.

Jika kami dapat menerima bahwa kode yang dihasilkan kira-kira sama dengan jumlah baris yang ditulis tangan, dan jika kami dapat mengatakan bahwa itu bebas bug, maka jumlah baris yang berpotensi mengandung bug telah berkurang. Ergo, kualitas kode seharusnya meningkat.


Tambahan: tentu saja, faktor-faktor lain, seperti waktu eksekusi, dapat berperan.

Secara pribadi, saya telah menulis beberapa generator kode, tetapi tidak pernah sebagai pendekatan awal.

Itu selalu ketika saya melihat pola berulang dalam kode yang ada, jadi generator saya mengambil beberapa kode yang ada saat menambahkan kode baru, tetapi serupa, dan parametrized beberapa bagian variabel itu.

Sejauh itu, kode yang saya hasilkan hampir identik dengan kode tulisan tangan yang ada (kecuali bahwa kode itu cenderung lebih ditata secara visual dan lebih seragam, yang saya temukan keterbacaannya, jika memang harus dilihat).

Btw, saya menganjurkan untuk memasukkan komentar pembuka / penutup yang menunjukkan bahwa kode dihasilkan, termasuk perincian alat dan pengelolanya.

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.