Sebuah studi kasus yang menarik tentang masalah-masalah proyek penskalaan yang menggunakan bahasa yang dinamis dan ditafsirkan dapat ditemukan dalam Beginning Scala oleh David Pollak.
Saya mulai mencari cara untuk mengekspresikan kode di otak saya dengan cara yang lebih sederhana dan lebih langsung. Saya menemukan Ruby dan Rails. Saya merasa terbebaskan. Ruby mengizinkan saya untuk mengekspresikan konsep dalam baris kode yang jauh lebih sedikit. Rails jauh lebih mudah digunakan daripada Spring MVC, Hibernate, dan kerangka kerja web Java "ramping" lainnya. Dengan Ruby dan Rails, saya harus mengekspresikan lebih banyak dari apa yang ada di kepala saya dalam periode waktu yang lebih singkat. Itu mirip dengan pembebasan yang saya rasakan ketika saya pindah dari C ++ ke Java ...
Ketika proyek Ruby dan Rails saya tumbuh melampaui beberapa ribu baris kode dan ketika saya menambahkan anggota tim ke proyek saya, tantangan bahasa dinamis menjadi jelas.
Kami menghabiskan lebih dari setengah tes penulisan waktu pengkodean, dan sebagian besar keuntungan produktivitas yang kami lihat hilang dalam penulisan tes . Sebagian besar pengujian tidak perlu dilakukan di Jawa karena kebanyakan dari mereka diarahkan untuk memastikan bahwa kami telah memperbarui penelepon ketika kami melakukan refactored kode dengan mengubah nama metode atau jumlah parameter. Juga, saya menemukan bahwa bekerja di tim di mana ada pikiran berbaur antara dua hingga empat anggota tim, semuanya berjalan dengan baik di Ruby, tetapi ketika kami mencoba untuk membawa anggota baru ke dalam tim, koneksi mental sulit untuk ditransmisikan ke anggota tim baru .
Saya mencari bahasa baru dan lingkungan pengembangan. Saya mencari bahasa yang ekspresif seperti Ruby tetapi seaman dan berkinerja tinggi seperti Java ...
Seperti yang Anda lihat, tantangan utama dalam penskalaan proyek untuk penulis ternyata adalah dalam pengembangan pengujian dan transfer pengetahuan.
Secara khusus, penulis membahas lebih rinci dalam menjelaskan perbedaan dalam penulisan tes antara bahasa yang diketik secara dinamis dan statis di Bab 7. Di bagian "Bunignily Killing Bunnies: Dwemthy's Stairs" penulis membahas Scala port dari contoh Ruby tertentu:
Why the Lucky Stiff ... memperkenalkan beberapa konsep pemrograman Ruby di Array Dwemthy's di mana seekor kelinci bertarung melawan berbagai makhluk. N8han14 memperbarui contoh untuk bekerja di Scala ...
Dibandingkan dengan kode Ruby, bagian perpustakaan dari kode Scala lebih kompleks. Kami harus melakukan banyak pekerjaan untuk memastikan jenis kami benar. Kami harus menulis ulang properti Creature secara manual di kelas DupMonster dan CreatureCons. Ini lebih banyak pekerjaan daripada method_missing
. Kami juga harus melakukan sejumlah pekerjaan yang adil untuk mendukung kekekalan dalam Makhluk dan Senjata kami.
Di sisi lain, hasilnya jauh lebih kuat daripada versi Ruby. Jika kita harus menulis tes untuk kode Ruby kita untuk menguji apa yang meyakinkan kompiler Scala kita, kita akan membutuhkan lebih banyak baris kode. Sebagai contoh, kita dapat yakin bahwa Kelinci kita tidak dapat menggunakan Kapak. Untuk mendapatkan jaminan ini di Ruby, kami harus menulis tes yang memastikan bahwa memohon |^
Kelinci tidak berhasil. Versi Scala kami memastikan bahwa hanya Senjata yang ditentukan untuk Makhluk tertentu yang dapat digunakan oleh Makhluk itu, sesuatu yang akan membutuhkan banyak refleksi runtime di Ruby ...
Membaca di atas dapat membuat orang berpikir bahwa ketika proyek tumbuh lebih besar, penulisan tes mungkin menjadi rumit. Alasan ini akan salah, sebagaimana dibuktikan oleh contoh-contoh proyek sangat besar yang berhasil disebutkan dalam pertanyaan ini ("Python berhasil digunakan untuk ... YouTube").
Masalahnya, penskalaan proyek tidak benar-benar mudah. Proyek yang sangat besar dan berumur panjang dapat "membeli" proses pengembangan pengujian yang berbeda, dengan ruang uji kualitas produksi, tim pengembang pengujian profesional, dan barang-barang kelas berat lainnya.
Suite tes Youtube atau Java Compatibility Kit tentu saja memiliki kehidupan yang berbeda dari tes dalam proyek tutorial kecil seperti Dwemthy's Array .