Apa cara yang tepat untuk mengelola skrip pengembang?

15

Pengembang membuat skrip untuk membantu dalam pekerjaan mereka. Misalnya, untuk menjalankan Maven dengan parameter tertentu, untuk membunuh tugas latar belakang yang tidak diperlukan yang muncul dalam pengembangan, atau untuk menyambung ke server tertentu. Skrip bukan skrip build inti atau skrip yang digunakan di server Continuous Integration kami.

Apa cara terbaik untuk mengelolanya? Untuk meletakkannya di direktori (mungkin /scripts) dan memeriksanya di Git? Untuk memeliharanya secara terpisah di beberapa file server?

Argumen untuk memperlakukan mereka sebagai kode sumber adalah bahwa mereka adalah sumber dan dapat berubah. Argumen untuk tidak melakukannya adalah bahwa mereka hanyalah alat bantu dan bahwa tidak semua pengembang memerlukan skrip tertentu (misalnya skrip khusus Linux di mana beberapa pengembang bekerja pada Windows).

Joshua Fox
sumber
7
Praktis setiap proyek mengandung fungsionalitas yang hanya akan ditangani oleh beberapa pengembang. Itu bukan alasan untuk merahasiakannya. "Waspadalah terhadap seorang pria di kamar!" (Joel Spolsky)
Kilian Foth
1
Jika Anda memasukkannya ke dalam kontrol sumber, Anda memastikan bahwa Anda dapat menjalankan dan menjalankannya setelah terjadi kerusakan. Ini adalah keuntungan jika Anda dapat membuang PC Anda saat ini di tempat sampah, mengambil yang baru dan berdiri dan berjalan, menjadi produktif dalam satu jam.
Pieter B
"Waspadalah terhadap seorang pria di kamar!" (Steve McConnell, 1993) @KilianFoth
kubanczyk

Jawaban:

23

Skrip pengembang juga masuk ke kontrol versi, karena biasanya skrip ini juga bergantung pada item dalam kontrol versi, misalnya jalur file.

Jika skrip ini diversi, skrip ini juga harus bekerja untuk semua pengembang untuk menghindari setiap pengembang menulis set skripnya sendiri, yang menjadi neraka pemeliharaan.

Selain itu perbaikan bug atau perbaikan skrip ini secara otomatis diluncurkan ke setiap pengembang melalui kontrol versi.

Simon
sumber
10

Selain jawaban @ simon.

Tidak semua dalam rekayasa perangkat lunak adalah tentang pemrograman, perancangan atau pemodelan. Ada banyak sekali tugas yang kami lakukan terus menerus selama hari kerja. Anda telah menyebutkan satu - membangun proyek di luar IDE - tetapi ada banyak lagi.

Pengembang yang berpengalaman / proaktif cenderung mengotomatiskan tugas-tugas ini. Beberapa, bahkan membangun alat ketika tugas-tugas ini menjadi bagian dari SDLC dan mereka membosankan - dan rawan kesalahan - harus dilakukan dengan tangan. Program bagus dalam melakukan pekerjaan yang berulang, tidak peduli seberapa membosankannya mereka. Kita - manusia - tidak sebaik itu.

Alat / skrip ini memiliki efek samping positif lainnya

  1. Produktifitas
  2. Transfer pengetahuan
  3. Otonomi (untuk pendatang baru)

Jadi, ya skrip harus di SCM dan mereka harus menjadi satu alat lagi di kotak alat pengembang.

Mengenai folder /scriptssaya akan mengatakan bahwa itu tidak masalah. Untuk kesederhanaan saya meninggalkan mereka di direktori root proyek sehingga semua rute yang dinyatakan dalam skrip relatif ke folder proyek. Jika saya memerlukan akses ke folder atau file eksternal, saya membuat tautan lunak .

Hal yang perlu dipertimbangkan sebelum memeriksa skrip ke dalam SCM.

  • Untuk keamanan, pastikan skrip tidak memiliki kredensial hardcoded - idealnya, skrip harus parametrized dengan baik -

  • Pastikan skrip tidak melakukan hal-hal aneh pada sistem, seperti misalnya untuk mengeksekusi perintah yang tidak dapat dibatalkan (yang paling khas rm -rf).

  • Karena ini menjadi bagian dari sumber proyek, dokumentasi sangat dihargai.

  • Scripting bukan ilmu roket. Buat skrip ringkas. Alih-alih satu untuk memerintah mereka semua ... dan dalam kegelapan mengikat mereka , buat lebih, lebih kecil dan ringkas. Seolah Anda sedang menerapkan SRP.

Laiv
sumber
4

Saya akan menawarkan pendapat yang agak lebih negatif. Di satu sisi, skrip pengembang yang generik, efektif, dan berguna tentu saja harus dibagikan dengan pengembang lain, dan cara terbaik untuk melakukannya adalah meminta mereka duduk dengan kode dalam repositori yang sama.

Namun saya akan menetapkan bar tinggi untuk entri karena skrip harus dilakukan. Script adalah kode, sama seperti perangkat lunak itu sendiri. Itu berarti mereka perlu diperlakukan serupa dengan potongan kode lainnya:

  • Melalui ulasan kode
  • Diuji dan diotomatisasi jika memungkinkan
  • Dianggap ketika membuat perubahan pada basis kode (khususnya, jika skrip digunakan oleh banyak pengembang, membuat perubahan yang merusak skrip akan menyebabkan banyak perselisihan)
  • Dipertahankan (dengan segala sesuatu yang memerlukan - prioritas, waktu, dokumentasi, dll.).

Ada sejumlah pertimbangan lebih lanjut yang berlaku lebih pada skrip daripada pada perangkat lunak itu sendiri:

  • Pertama dan terutama, jauh lebih sulit untuk meyakinkan organisasi dan pemangku kepentingan seseorang untuk berinvestasi dalam memelihara skrip yang membuat pengembang lebih mudah hidup. Itu berarti lebih sulit untuk mendapatkan waktu untuk memenuhi kriteria di atas - mudah untuk menulis skrip yang berfungsi untuk Anda di lingkungan Anda, tetapi membuat parameter itu, membuatnya stabil, mendokumentasikannya membutuhkan lebih banyak waktu. Ini berarti bahwa skrip dapat dan akan menjadi kode mati kecuali jika pengembang dapat membenarkan agar skrip tetap terkini.
  • Sangat kecil kemungkinannya bahwa banyak pengembang akan cukup akrab dengan skrip yang rumit untuk mempertahankannya, atau bahwa banyak pengembang merasakan kepemilikan kode. Ketika pengembang asli pergi, menemukan orang lain untuk diambil kepemilikannya bisa sulit (dan menemukan dan membenarkan waktu bagi mereka untuk mempelajari cara kerja skrip bisa menjadi lebih sulit).
  • Jauh lebih mungkin bahwa skrip akan berinteraksi dengan mesin pengembang dan membangun lingkungan dengan cara tertentu. Ini juga sangat mungkin bahwa Anda akan memiliki banyak pengembang dengan berbagai lingkungan yang berbeda. Jika skrip mengacaukan lingkungan karena tidak dikelola dengan baik atau tidak dianggap sebagai kasus sudut, Anda tidak hanya merusak perangkat lunak per malam, Anda berpotensi membuat pengembang menghabiskan waktu satu hari atau lebih untuk mendapatkan pekerjaan mereka. lingkungan kembali normal. Ini bisa menyebabkan baad darah dan kehilangan kepercayaan.
  • Karena skrip seringkali eksternal dari perangkat lunak itu sendiri, mempertahankannya bisa menjadi tantangan. Jika skrip tidak dijalankan melalui otomatisasi, mudah bagi mereka untuk menjadi basi atau dilupakan, pada titik mana mereka telah menjadi kode mati dan hanya hutang teknologi yang harus diluangkan seseorang untuk membersihkannya.

Untuk meringkas, skrip bisa sangat membantu bagi pengembang individu, tetapi berbagi kemudian sebagai bagian dari basis kode itu sendiri bisa menjadi tugas yang jauh lebih sulit, dan berpotensi menyebabkan lebih banyak masalah daripada yang dipecahkan.

Daniel
sumber
Saya setuju. Entah bagaimana, kami di sini mendelegasikan skrip ke profil senior atau pengembang dengan latar belakang dalam perkembangan semacam ini. 3 efek samping positif yang saya sebutkan hanya mungkin jika ada kualitas minimum :-). Skrip shell benar-benar diremehkan oleh pengembang yang hanya fokus pada SDK utama mereka. Lapisan OS dapat melakukan banyak hal untuk kita.
Laiv