Manajer menginginkan pengembangan gabungan & lingkungan produksi

19

Saya bekerja di tim pemrograman kecil yang mendukung organisasi yang lebih besar. Tahun ini manajer kami telah memutuskan kami akan menggunakan teknologi Oracle Apex untuk menangani sebagian besar data perusahaan kami.

Ini akan baik-baik saja, kecuali kita hanya memiliki satu server Apex. Manajer kami telah memutuskan bahwa semuanya terjadi dalam satu kejadian itu. Tim kami sedang mengembangkan aplikasi, sementara manajer kami melakukannya, dan klien internal kami menggunakannya, yang karena alasan yang jelas sudah menyebabkan masalah!

Saya hanya bisa mengharapkan ini menjadi lebih buruk karena kita menjadi lebih banyak berinvestasi di Apex, aplikasi menjadi lebih kompleks dan jumlah pengguna bertambah. Saya pernah mendengar bahwa praktik terbaik adalah memiliki lingkungan pengembangan, pengujian, dan produksi terpisah, tetapi mengapa demikian?

Pertanyaannya: Mengapa kita harus memiliki lingkungan pengembangan, pengujian, dan produksi yang terpisah?

Segera
sumber
4
Di negara mana Anda tinggal dan jenis data apa yang Anda simpan dalam database ini? Jika Anda menyimpan data keuangan apa pun dan tinggal di AS, ada kemungkinan nyata bahwa atasan Anda meminta Anda untuk melanggar hukum. Pembatasan Sarbanes-Oxley sangat ketat tentang pemisahan tugas dan akses pengembang ke lingkungan produksi.
DanK
5
Apakah Anda berada dalam industri yang diatur? Kesehatan, kedirgantaraan, dan keuangan adalah beberapa contohnya. Jika demikian, industri apa dan Anda tahu tentang sertifikasi spesifik atau dokumen peraturan yang harus Anda patuhi?
Thomas Owens
1
Jawaban yang ingin saya lihat di sini akan menjelaskan pro dan kontra pengembangan dalam produksi vs pementasan dalam lingkungan pengembangan sebelum pindah ke produksi. Tidak bersaing proklamasi untuk melakukannya dengan cara tertentu.
candied_orange
9
Oh jangan khawatir, tunggu saja cukup lama dan Anda akan tahu mengapa langsung.
Karl Bielefeldt
1
@Anon Dugaan saya di sini adalah bahwa manajer ingin melakukan ini untuk menghemat uang. Anda mungkin harus membingkai jawaban Anda dalam hal biaya sebanyak mungkin. Jika Anda bisa, Anda dan kolega Anda juga harus memberitahukan kepada organisasi yang lebih besar bahwa ini adalah proposisi yang sangat berisiko. Dengan begitu, jika Anda tidak dapat meyakinkan manajer ini, masalah yang tak terhindarkan yang akan datang tidak akan terjadi pada Anda.
JimmyJames

Jawaban:

19

Mengapa kita harus memiliki lingkungan pengembangan, pengujian, dan produksi yang terpisah?

Anda memiliki beberapa kegiatan yang terjadi bersamaan:

  • pengembangan - di mana pengembang melakukan kode, membuat kesalahan, bereksperimen, dll ...
  • pengujian - di mana pengujian dijalankan, secara manual atau otomatis, dan karena kompleksitasnya, dapat menghabiskan banyak sumber daya.
  • produksi - di mana nilai diciptakan untuk pelanggan dan / atau bisnis

Apakah Anda ingin semua ini terjadi di lingkungan yang sama? Apakah Anda ingin bisnis terhenti karena tes baru telah mendorong server Anda untuk menukar hard drive dan menghabiskan setiap inti pada prosesor? Apakah Anda ingin tes Anda terhenti karena pengembang membuat bom fork yang berbelit-belit dari percobaan penskalaan? Apakah Anda ingin kode yang Anda pikir berhasil karena benang pengembang dan lakban dalam pengujian untuk dijalankan dalam produksi? Apakah Anda ingin pengembang bekerja dengan data produksi yang berpotensi sensitif (saya tahu ini bukan masalah di semua bisnis, tetapi banyak di antaranya)?

Apa yang mencegah masalah ini terjadi?

Lingkungan yang terpisah.

Jadi apa yang Anda butuhkan?

Anda memerlukan lingkungan yang terpisah.

Secara formal

Anda memerlukan lingkungan terpisah untuk alasan berikut:

  • untuk mengurangi risiko memblokir pengembangan bisnis dan perangkat lunak.
  • untuk mengurangi risiko memasukkan kode ke dalam produksi yang lulus pengujian karena kecurangan ad-hoc pengembang.
  • untuk mengurangi risiko data produksi masuk ke tangan yang salah (sangat penting ketika organisasi berurusan dengan data sensitif, seperti nomor ID dan informasi keuangan dan kesehatan) atau menjadi berbaur dengan data uji atau dihancurkan.

Untuk konteks Anda, platform teknologi baru

Mungkin ini belum benar-benar produksi (karena ini adalah platform yang relatif baru), tetapi Anda akan mendapatkan lingkungan yang terpisah ketika bisnis mulai bergantung padanya dan mereka cukup bijak untuk meramalkan risiko atau menyadarinya dengan mempelajari hard cara.

Aaron Hall
sumber
Untuk menambah satu alasan lagi: untuk mengurangi risiko bahwa percobaan yang gagal oleh pengembang menghancurkan informasi bisnis penting setelah pemulihan.
Bart van Ingen Schenau
Ada juga risiko besar bahwa versi pengembangan atau pengujian perangkat lunak secara tidak sengaja dirujuk dari proses produksi atau sebaliknya pengujian memodifikasi data produksi.
JimmyJames
7

Saya pernah mendengar bahwa praktik terbaik adalah memiliki lingkungan pengembangan, pengujian, dan produksi terpisah, tetapi mengapa demikian?

Tidak jelas memotong hari ini.

Banyak tempat tidak melakukan pengujian manual lagi, jadi tidak memiliki data pengujian per-se. Banyak tempat yang memiliki skala seperti itu, sehingga mereka tidak dapat mereproduksi lingkungan produksi mereka karena biaya. Dan terutama dengan pertumbuhan eksplosif dari layanan-layanan mikro, menjadi tantangan untuk menjaga lingkungan pergeseran yang cepat tidak cukup sinkron untuk memastikan bahwa pengujian dalam lingkungan QA mereproduksi hal-hal secara akurat untuk menangkap bug yang akan muncul dalam produksi.

Mengapa kita harus memiliki lingkungan pengembangan, pengujian, dan produksi yang terpisah?

  • Jika data pengujian Anda dilihat oleh pengguna akan sangat buruk.
  • Jika memiliki data prod Anda dilihat oleh devs / penguji akan sangat buruk.
  • Jika Anda tidak dapat mempercayai pengembang Anda untuk tidak merusak barang-barang dengan buruk, dan Anda tidak dapat memperbaiki situasi itu dengan cepat.
  • Jika Anda memiliki CI otomatis di tempat sehingga kode promosi cepat dan mudah.

Pada dasarnya, jika biaya memiliki lingkungan lebih rendah daripada biaya tidak memiliki lingkungan .

Telastyn
sumber
2
+1. Ini pada dasarnya adalah nonanswer, tetapi nonanswer adalah jawaban dalam kasus ini.
enderland
1
Jika saya memiliki tim pengembang, yang masing-masing saya tahu memiliki hati emas dan sangat cerdas dan teliti, saya masih tidak akan mempercayai mereka untuk berkembang dalam lingkungan produksi kecuali taruhannya sangat rendah (dalam hal ini taruhannya sangat rendah). tidak benar-benar produksi, kan?)
Aaron Hall
2
@ AaronHall - Tidak, Anda menganggapnya dikembangkan secara lokal terlebih dahulu, dengan unit test untuk memverifikasi fungsionalitas inti. Kemudian di banyak perusahaan, penyebaran Anda akan pergi ke beberapa subset produksi untuk mengujinya - biasanya dengan pengujian A / B, pemutus sirkuit, atau semacam flag fitur yang membuatnya mudah untuk diputar kembali. Taruhannya bisa rendah dalam produksi untuk banyak industri dengan dukungan devops yang tepat.
Telastyn
3

Alasan utama (dan paling jelas) adalah bahwa Anda tidak pernah ingin mencampur data pengujian dan produksi. Ini dapat menjadi sangat membingungkan dengan sangat cepat bagi pengguna sistem maupun pengembang. Ketika Anda mengelola jaminan kualitas dan pengujian unit (yang harus Anda lakukan), Anda perlu memastikan semuanya berada dalam lingkungan yang sepenuhnya terpisah. Jika sesuatu meledak di lingkungan pengembangan Anda atau di QA, itu akan berdampak buruk pada produksi dan dengan demikian tinggal pengguna dan data penting mereka! Anda benar-benar tidak ingin ini mempengaruhi produksi!

Ini meluas ke layanan normal yang harus Anda gunakan dalam pekerjaan sehari-hari Anda seperti kontrol versi Anda. Anda tidak dapat menggunakan kontrol versi dengan benar jika kode yang Anda kontrol ada di lingkungan langsung! Pengguna Anda akan menjadi gila - bagaimana jika Anda perlu mengembalikan atau mengembalikan? Bagaimana jika Anda membuat kesalahan yang drastis dalam waktu lima belas komit? Bagaimana Anda menangani percabangan?

Paling tidak, Anda harus memisahkan lingkungan Anda menjadi beberapa contoh virtual, tetapi Anda benar-benar perlu melakukan apa yang Anda katakan dan memiliki contoh yang benar-benar terpisah untuk setiap lingkungan; pengembangan idealnya, QA, pementasan dan produksi.

Semua ini pada akhirnya sangat merugikan tidak hanya untuk aplikasi Anda yang menghadap ke depan (dan dengan demikian reputasi Anda dengan pengguna Anda), tetapi juga untuk efisiensi tim Anda.

Brian Wilbur
sumber
2

Hanya memiliki satu contoh Oracle yang tersedia tidak berarti sama dengan "tidak ada pemisahan antara lingkungan dev, pengujian & produksi"!

Anda menulis dalam komentar

Kami saat ini menggunakan skema berbeda untuk proyek yang berbeda

Ok, jadi dengan mendedikasikan beberapa proyek hanya untuk pengembangan, dan beberapa untuk pengujian, Anda dapat memisahkan lingkungan Anda sampai taraf tertentu, dengan menggunakan skema yang berbeda. Saya kira Anda sudah melakukan ini, karena ini adalah satu-satunya pendekatan yang masuk akal yang saya tahu ketika tidak ada pemisahan contoh yang direncanakan. Saya tidak bisa membayangkan manajer Anda menjadi sangat gila sehingga ia ingin Anda mencampur data dev, data uji, dan data pelanggan semuanya dalam satu skema dengan cara yang sewenang-wenang. Dia kemungkinan besar hanya ingin menghemat uang dengan tidak membeli server kedua atau menginvestasikan uang ke dalam lisensi untuk contoh kedua.

Karena itu, pertanyaan sebenarnya yang perlu Anda tanyakan adalah:

Apakah kita perlu menggunakan mesin virtual yang berbeda dan / atau server untuk memisahkan pengembangan, pengujian, dan lingkungan produksi, atau apakah pemisahan skema cukup?

Itu membuat jawabannya tidak begitu jelas seperti pada jawaban lain di sini. Skema yang berbeda memungkinkan hak akses yang berbeda, sehingga Anda setidaknya bisa mendapatkan isolasi hingga tingkat tertentu di dalam satu instance Oracle. Namun, pengembang Anda kemungkinan besar akan memerlukan beberapa hak administratif di dalam skema "mereka", sehingga akan lebih sulit untuk memastikan mereka tidak akan memiliki akses ke data produksi jika Anda hanya menggunakan satu contoh.

Selain itu, satu server contoh / satu juga akan berarti sumber daya bersama antara dev, administrasi pengguna dan administrasi berbagi-pakai, ruang disk bersama, CPU bersama, bandwidth jaringan bersama. Gabungkan ini dengan "hukum abstraksi bocor" , dan akan menjadi jelas bahwa menggunakan hanya satu contoh akan memiliki risiko tertentu mendapatkan efek samping yang tidak diinginkan antara lingkungan dev, test dan prod.

Pada akhirnya, Anda harus memutuskan sendiri: dapatkah Anda bekerja secara efektif dengan kelemahan pendekatan tersebut? Apakah aplikasi Anda tidak begitu padat sumber daya, dan data produksi Anda tidak begitu "rahasia" sehingga dapat ditoleransi untuk mengurangi tingkat pemisahan antara dev, pengujian dan produksi daripada tingkat yang akan Anda dapatkan dari "tiga contoh / tiga server" pendekatan? Jika Anda tidak dapat bekerja secara efektif seperti itu, atau tidak tanpa risiko tinggi mengganggu produksi dengan cara Anda mulai kehilangan pelanggan, Anda memiliki semua argumen yang Anda butuhkan untuk meyakinkan manajer Anda untuk membeli setidaknya server kedua.

Doc Brown
sumber
1
Kemungkinan besar OP mengabaikan menyebutkan skema terpisah untuk menegakkan pendapatnya. Ini adalah jawaban terbaik imho
winkbrace
1

Anda memerlukan beberapa tipe lingkungan dan mungkin bahkan beberapa server di setiap lingkungan.

Pengembang dapat memperbarui kode dalam pengembangan. Kode mungkin bahkan tidak berfungsi - mungkin aplikasi bahkan tidak akan memulai.

Itu tidak berdampak pada QA yang menguji bangunan stabil terbaru di lingkungan mereka sendiri.

Karena pengembangan dan QA memperbarui lingkungan mereka, produksi berada pada rilis rilis terbaru dari enam bulan lalu dan tidak terpengaruh oleh perubahan di lingkungan lain.

Perubahan ini diluncurkan di berbagai lingkungan dapat berupa kode atau data. Mungkin QA perlu menguji skrip database yang dirancang untuk memperbaiki beberapa data buruk dalam produksi. Mungkin skrip memperburuk masalah - pulihkan cadangan basis data dan coba lagi. Jika itu terjadi dalam produksi, Anda dapat memiliki masalah keuangan yang sangat serius.

Apa yang terjadi jika Anda memiliki beberapa rilis? Mungkin Anda sedang mengembangkan versi 2.0, tetapi masih membutuhkan rilis perbaikan bug pada cabang pemeliharaan 1.0. Sekarang Anda membutuhkan beberapa pengembangan dan lingkungan QA untuk memastikan Anda selalu dapat mengembangkan dan menguji salah satu cabang ketika bug kritis ditemukan dan perlu diperbaiki kemarin.


sumber
0

Anda telah memperhatikan masalah yang tidak disebabkan oleh lingkungan yang terpisah. Di sana Anda punya alasan mendasar untuk lingkungan yang terpisah: untuk menghilangkan masalah yang disebabkan oleh konflik yang tak terhindarkan muncul ketika mencoba melakukan pengembangan, pengujian dan operasi produksi dalam satu lingkungan tunggal. Alasan yang sama berlaku untuk memberi pengembang kotak pasir individual untuk bekerja, itu membuat kesalahan satu pengembang atau bahkan hanya perubahan yang tidak kompatibel dari melumpuhkan seluruh tim pengembangan.

Ini juga merupakan argumen terbaik yang dapat Anda buat kepada manajemen untuk mengubah menjauh dari lingkungan tunggal: menunjuk ke masalah yang sudah disebabkan oleh lingkungan tunggal, menunjukkan garis tren dan berargumen bahwa cepat atau lambat jika hal-hal berlanjut karena mereka akan ada menjadi masalah yang akan membutuhkan biaya lebih besar untuk dibersihkan (baik dalam upaya langsung dan hilangnya kepercayaan pelanggan pada kemampuan perusahaan Anda untuk memberikan layanan) daripada mengkonfigurasi ulang hal-hal untuk lingkungan yang terpisah akan dikenakan biaya.

Todd Knarr
sumber
-1

Ada banyak kekuatan dan dinamika yang saling bertentangan. Ada biaya memiliki banyak server dan biaya hanya memiliki satu. Saya pikir pertanyaan ini dapat ditelusuri lebih jauh dari sekadar basis data? Saya mungkin salah paham, tetapi itu berhubungan dengan kesalahpahaman sistemik yang ada di sana adalah biaya bukti fisik vs abstrak

Biasanya biaya yang jelas mudah dipahami.

Biaya abstrak lebih sulit untuk diukur dan karenanya lebih sulit untuk dipahami. Pinjaman Teknis, biaya kesalahan, biaya stres, beban pengembang, efek perubahan, pengujian regresi, dampak downtime dan sebagainya lebih sulit untuk dijelaskan.

lingkungan yang berbeda Lingkungan biasanya dipisahkan untuk data dan / atau tujuan. Setiap lingkungan memiliki fungsi yang berbeda. Tingkat perubahan pada suatu sistem, yaitu. seberapa sering akan diperbarui, perubahan seperti apa dan dampak perubahan, semuanya dipertimbangkan.

Kami menggunakan lingkungan yang berbeda untuk meremehkan perubahan.

Kami menggunakan lingkungan yang berbeda, jadi kami menawarkan ketahanan dan kepastian lingkungan yang tidak berubah.

Kami menggunakan lingkungan untuk mempertimbangkan efek perubahan.

Kami menggunakan lingkungan untuk mengurangi biaya yang terlibat dengan perubahan.

biayanya banyak untuk menguji dan menstabilkan sistem Anda menciptakan lingkungan untuk mengamankan investasi yang dibuat pada lingkungan stabil.

Anda tidak pernah terlalu kecil sebagai tim untuk mematuhi pola proses yang pragmatis, hemat biaya, rajin dan terbukti.

Menggunakan satu lingkungan untuk semuanya seperti menyimpan semua foto Anda pada satu harddisk, Anda dapat melakukannya, tetapi Anda akan menyesalinya.

beberapa orang membutuhkan bukti. Saya telah dalam banyak situasi berurusan dengan klien atau orang lain yang tidak menghargai biaya untuk memastikan ketahanan dan mengikuti praktik terbaik. Saya sarankan Anda mengumpulkan beberapa contoh kasus nyata di mana biaya didefinisikan dengan jelas.

JonathanC
sumber
ini tampaknya tidak menawarkan sesuatu yang substansial atas poin yang dibuat dan dijelaskan dalam 6 jawaban sebelumnya
agas