Kode pemeriksaan masa depan


33

Di mana saya bekerja, pengembang selalu memberi tahu saya bahwa "Saya menambahkan ini untuk berjaga-jaga di masa depan" atau "Saya pikir ini ide yang baik untuk melakukan ini karena mereka mungkin akan menginginkannya suatu hari". Saya pikir itu hebat bahwa mereka proaktif dalam mencoba mengantisipasi perubahan di masa depan tetapi saya tidak dapat berpikir bahwa itu tidak perlu dan berisiko menulis kode yang mungkin tidak pernah diperlukan dan oleh karena itu tidak produktif (Saya juga berpikir bahwa beberapa pengembang hanya ingin mencoba sesuatu baru demi itu). Apakah argumen untuk pemeriksaan di masa mendatang tidak valid jika Anda hanya menulis kode terorganisir yang baik dan bersih?


5
Saya pikir satu-satunya kode futureproof adalah ... spasi baik. :)
Adam Arold

6
"Tepat pada waktunya, tidak hanya dalam kasus".
Rein Henrichs

4
@edem Saya tidak setuju, bahwa bahasa tidak ada bedanya dengan yang lain untuk pemeriksaan di masa depan ... (^ _—) en.wikipedia.org/wiki/Whitespace_(programming_language)
Izkata

Jawaban:


62

Nah pertama-tama, ada beberapa hal yang perlu diklarifikasi:

  • Pemeriksaan di masa depan tidak menambahkan barang.
  • Pemeriksaan di masa depan memastikan Anda dapat dengan mudah menambahkan kode / fitur tanpa merusak fungsi yang ada.

Ini berarti bahwa menulis kode "bukti masa depan", memastikan bahwa kode tersebut ditulis dalam cara yang longgar, cukup abstrak, tetapi juga kode yang tidak sepenuhnya menyembunyikan level abstraksi, sehingga selalu ada cara untuk menuju ke level abstraksi yang lebih rendah. jika diperlukan.

Menulis kode bukti masa depan adalah seni tersendiri dan sangat erat dengan praktik SOLID untuk versi komponen, pemisahan masalah, pelapisan dan abstrak fungsionalitas. Pemeriksaan kedepan tidak ada hubungannya dengan menambahkan fitur sebelumnya, tetapi dengan memastikan Anda dapat menambahkan fitur di masa depan dengan cara yang tidak melanggar , melalui desain kode / pustaka yang baik.

2c saya


Ini dan @ Thorbjørn Ravn Andersen mengenai tes yang digabungkan akan menjadi jawaban yang sempurna.
Andy Lowry

2
Saya telah melihatnya berkali-kali, "ho kita akan menambahkan ini karena suatu hari kita akan membutuhkannya", baik hari itu tidak pernah datang, atau ketika datang dengan baik, Anda terjebak dengan struktur data atau struktur program yang tidak benar-benar cocok kebutuhan aktual ketika akhirnya muncul. Cara yang benar adalah mengeluarkan barang-barang lama dan membangun yang baru tetapi biasanya kecenderungan untuk bukti di masa depan seperti ini sering dikaitkan dengan penghinaan yang kuat untuk membuang kode yang sudah dilakukan tidak peduli apakah itu baik atau tidak. Tim seperti itu biasanya cenderung membuat desain bawang, menutupi serangga dari satu lapisan dengan lapisan lainnya.
Newtopian

Pemeriksaan di masa depan mungkin tidak menambahkan fitur tetapi tentu saja Anda dapat menambahkan kode. Salah satu teknik adalah menambahkan pemeriksaan keamanan dan secara eksplisit melarang perilaku tidak terdefinisi.
edA-qa mort-ora-y

18

Jangan menulis kode yang tidak akan digunakan untuk waktu yang lama. Ini akan sia-sia karena kemungkinan besar tidak akan sesuai dengan kebutuhan pada saat itu (yang menurut Anda belum tahu).

Jadikan kode tersebut tangguh terhadap situasi masalah yang tidak terduga yang memungkinkan pemulihan dengan cepat atau gagal, tetapi jangan menulis kode untuk kemungkinan penggunaan di masa mendatang.

Cara yang baik untuk memastikan itu adalah dengan menggunakan desain dan pengembangan yang digerakkan oleh tes. Kasus uji berasal dari spesifikasi dan kasus penggunaan. Semua kode harus lulus uji. Kode yang tidak dibutuhkan tidak boleh ditulis. Dengan melakukannya dengan cara ini, sangat mudah untuk menentukan apakah diperlukan atau tidak.


+1: Sangat sulit untuk memprediksi masa depan. Cukup menggunakan desain yang bagus - dan menyebutnya "desain yang baik" - lebih baik daripada berpura-pura memprediksi masa depan.
S.Lott

17

Adalah penting untuk menyadari bahwa membuat kode bukti masa depan , dan menulis kode jika diperlukan di masa depan adalah dua hal yang sangat berbeda. Yang pertama sangat penting untuk aplikasi yang baik, yang lebih rendah biasanya bukan praktik pengkodean yang baik.

  • Bagi saya, pembuktian kode di masa depan, adalah menulisnya sedemikian rupa sehingga akan dapat berinteraksi dengan teknologi yang berkembang. Ini melibatkan memodulasi kode Anda, sehingga setiap bagian dari aplikasi Anda dapat berinteraksi secara independen dari bahasa dan teknologi aplikasi secara keseluruhan. Contoh yang baik dari hal ini adalah menggunakan XML atau JSON untuk mengirimkan data antara berbagai bagian aplikasi. Namun teknologi berkembang, sangat mungkin bahwa ia akan selalu dapat membaca XML dan JSON.

  • Mirip dengan yang di atas, mengekspos bagian dari aplikasi Anda melalui SOAP atau REST API mencapai hal yang sama. Apa pun teknologi yang berkembang, Anda tidak perlu menulis ulang setiap bagian dari aplikasi karena teknologi baru masih dapat berkomunikasi dengan yang lama.

  • Pada titik penulisan kode seandainya diperlukan , saya pikir itu sangat berbahaya karena kodenya mungkin memiliki sedikit atau tidak ada pengujian.

Jadi, dengan segala cara, buat pembuktian masa depan kode (NASA masih mengirim pesawat ruang angkasa menggunakan Fortran), tetapi jangan menulis kode 'berjaga-jaga'.


1
+1 untuk perbedaan antara 'bukti masa depan' dan 'kalau-kalau diperlukan untuk masa depan'
John Shaft

2
Saran desain suara. Satu-satunya hal yang hilang dari ini adalah pernyataan yang jelas bahwa "bukti masa depan" hanyalah frase-buzz yang tidak berarti yang berarti "dirancang dengan cukup baik".
S.Lott

11

Pikirkan berapa kali Anda telah mengaktifkan sepotong kode di lingkungan produksi dan berpikir, "Terima kasih Tuhan, saya menulisnya 2 tahun yang lalu!".

Kode harus dapat dimodifikasi / diperpanjang dengan mudah. Jangan menambahkan kode yang tidak perlu segera, karena ini memberikan rasa aman yang sangat keliru dan menyia-nyiakan sumber daya dev / test dalam dunia dengan persyaratan yang terus berubah.


3
Apakah Anda menyarankan "Alhamdulillah saya menulis itu 2 tahun yang lalu!" jarang? Dalam pengalaman saya itu tidak pernah terjadi, tapi mungkin itu hanya saya.
S.Lott

4
Ini adalah kejadian yang sangat jarang - karena basis kode yang tetap solid tanpa 2 tahun / memprediksi perubahan 2 tahun lagi sangat sulit didapat.
Subu Sankara Subramanian

2
Yah, aku sebenarnya punya beberapa saat "Terima kasih Tuhan aku menulisnya setahun yang lalu" Saya lebih pintar dari yang saya kira.
Falcon

1
@ Falcon peduli untuk menguraikan momen-momen ini? Akan sangat menarik untuk mengetahui mana yang benar.

7

Banyak jawaban lain membahas masalah desain yang lebih besar, atau agak abstrak. Jika Anda berpikir tentang apa yang akan terjadi di masa depan, Anda dapat mendefinisikan beberapa teknik yang jelas untuk membantu pembuktian kode di masa depan .

Terutama berpikir bahwa di masa depan seseorang akan mencoba menambahkan fitur ke kode, atau akan mencoba untuk menggunakan kembali kode Anda di tempat lain. Mereka juga dapat mencoba untuk memperbaiki fitur dalam kode. Tentunya hanya memiliki kode bersih yang baik adalah titik awal yang diperlukan, tetapi ada juga beberapa teknik khusus yang dapat dilakukan.

Pemrograman Defensif : Lakukan pengecekan input melebihi apa yang sebenarnya dibutuhkan oleh aplikasi Anda saat ini. Setiap kali Anda menelepon API, pastikan untuk memeriksa bahwa inputnya adalah sesuatu yang Anda harapkan. Di masa depan orang akan mencampur kode versi baru bersama-sama, sehingga cakupan kesalahan dan pengembalian API akan berubah dari apa yang sekarang.

Menghilangkan Perilaku Tidak Terdefinisi : Banyak kode memiliki perilaku yang hanya berevolusi entah dari mana. Kombinasi input tertentu mengarah ke output tertentu yang tidak diinginkan siapa pun, tetapi kebetulan saja. Sekarang pasti seseorang akan bergantung pada perilaku itu, tetapi tidak ada yang akan tahu tentang hal itu karena tidak didefinisikan. Siapa pun yang berusaha mengubah perilaku di masa depan akan secara tidak sengaja merusak sesuatu. Gunakan pemeriksaan keamanan sekarang dan cobalah untuk menghapus / memblokir semua penggunaan kode yang tidak ditentukan.

Suite Uji Otomatis : Saya yakin Anda dapat menemukan volume yang ditulis tentang perlunya tes unit. Mengacu pada pembuktian di masa depan namun ini adalah titik kritis dalam memungkinkan seseorang untuk memperbaiki kode. Refactoring sangat penting untuk menjaga kode bersih, tetapi jika tidak memiliki serangkaian tes yang baik Anda tidak dapat dengan aman melakukan refactor.

Isolasi dan Segregasi : Enkapsulasi dan modularisasi yang tepat adalah prinsip desain yang baik, tetapi Anda harus melampaui itu. Anda akan sering menemukan bahwa Anda perlu menggunakan perpustakaan, atau API, atau produk, yang mungkin memiliki masa depan yang dipertanyakan. Mungkin karena masalah kualitas, masalah perizinan, atau pengembangan berkelanjutan oleh penulis. Dalam kasus ini, luangkan waktu ekstra untuk meletakkan lapisan antara Anda dan kode ini. Potong API sesuai kebutuhan Anda sehingga kopling sangat rendah untuk memungkinkan penggantian yang lebih mudah di masa mendatang.


6

Kode yang baik, bersih, dan terorganisasi dengan baik adalah bukti masa depan dalam arti bahwa itu membuat perubahan dan penambahan lebih mudah untuk diterapkan dengan benar.


5

"Bukti Masa Depan" paling banter berarti "desain yang digabungkan secara longgar". 80% dari waktu orang berarti "fleksibel" ketika mereka mengatakan "bukti masa depan". Terkadang mereka mengatakan itu untuk mencoba dan terdengar keren. Tapi setidaknya mereka memberikan sesuatu tepat waktu yang berfungsi.

"Bukti Masa Depan" paling buruk tidak ada artinya. 20% dari waktu, itu adalah alasan untuk membuang-buang waktu meneliti teknologi alternatif alih-alih hanya memberikan sesuatu. Mereka tidak mengirimkan apa pun (atau apa yang mereka kirimkan terlalu rumit untuk masalah yang dihadapi.)

Ada dua kasus tepi.

  1. Tinjauan ke masa depan yang gagal. Seseorang sebenarnya dapat memprediksi masa depan dengan akurat. Dalam hal ini, mohon terapkan tinjauan ke masa depan yang kuat ini untuk bukti kode di masa mendatang. Lebih baik, terapkan kejelian yang tak putus-putusnya untuk memprediksi tren pasar dan pensiun dini dan berhenti mengkode.

  2. Salah satunya adalah "mengarahkan" masa depan. Artinya, seseorang memiliki beberapa teknologi baru yang siap untuk digunakan di masa depan yang akan membutuhkan penulisan ulang hal yang disampaikan sekarang. Aneh bahwa seseorang tidak menggunakan hal yang keren ini di masa depan.

    Kita harus mengirimkan proyek "A", mengetahui bahwa proyek "B" akan mengarah pada penulisan ulang segera "A". Hanya dalam kasus ini, kita mungkin dapat bukti "A" di masa mendatang.


5

YAGNI = Anda Tidak Akan Membutuhkannya .

Insting Anda benar: kode mereka berlebihan, menambah beban pemeliharaan dan pengujian, dan membuang waktu untuk hal-hal yang tidak memiliki nilai bisnis yang konkret.

Lihat Juga: Pelapisan Emas .


4

Mengabaikan judul pertanyaan, dan menempelkan poin utama tentang "memasukkan barang karena seseorang mungkin menginginkannya suatu hari" ...

Jawabannya adalah tidak. Tak pernah. Jangan menulis tusuk kode yang tidak Anda butuhkan hari ini. Inilah alasannya:

  1. Program ini sekarang lebih rumit dari yang seharusnya.
  2. Anda mungkin tidak pernah membutuhkan fitur ini, sehingga Anda membuang-buang waktu.
  3. Anda tidak tahu apa persyaratan untuk fitur tersebut jika ada orang yang memintanya di masa depan. Jadi, Anda harus mencari tahu dan memodifikasinya.

Saya pikir poin pertama adalah yang paling penting. Jika Anda pernah bekerja dengan sistem yang penuh dengan kode generik untuk pelanggan yang berbeda, atau penuh dengan fitur-fitur yang tidak Anda perlukan, maka Anda tahu berapa banyak waktu dan upaya ekstra yang diperlukan untuk mempertahankan atau memperluas fungsionalitas karena bahwa. Jadi hindari bagaimanapun caranya.

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.