Sebagai yang bersertifikat Scrum, saya cenderung cenderung untuk metodologi Agile saat mengembangkan suatu sistem, dan bahkan menggunakan beberapa kanvas dari kerangka kerja Scrum untuk mengelola pekerjaan saya sehari-hari.
Selain itu, saya bertanya-tanya apakah TDD adalah opsi dalam pengembangan game, apakah itu layak?
Jika saya percaya pertanyaan GD ini, TDD tidak banyak digunakan dalam pengembangan game.
Mengapa MVC & TDD tidak dipekerjakan lebih banyak dalam arsitektur game?
Saya berasal dari pemrograman industri di mana proyek-proyek besar dengan anggaran besar perlu bekerja dengan sempurna, karena dapat menghasilkan skenario bencana jika kode tersebut tidak diuji secara hati-hati di dalam dan luar.
Plus, mengikuti aturan Scrum mendorong untuk memenuhi tanggal jatuh tempo pekerjaan Anda sementara setiap tindakan di Scrum adalah kotak waktu! Jadi, saya setuju ketika dalam pertanyaan yang ditautkan di atas mereka mengatakan berhenti berusaha membangun sistem, dan mulai menulis permainan. Inilah yang dikatakan Scrum, cobalah untuk tidak membangun sistem yang sempurna, pertama: membuatnya bekerja pada akhir Sprint. Kemudian, refactor kodenya sambil bekerja di Sprint kedua jika perlu!
Saya mengerti bahwa jika tidak semua departemen yang bertanggung jawab atas pengembangan game menggunakan Scrum, Scrum menjadi tidak berguna. Tapi mari kita pertimbangkan sejenak bahwa semua departemen menggunakan Scrum ... Saya pikir TDD akan baik untuk menulis kode bebas bug, meskipun Anda tidak ingin menulis sistem / permainan "sempurna".
Jadi pertanyaan saya adalah sebagai berikut:
Apakah TDD layak dalam pengembangan game?
sumber
Jawaban:
Ini tentu saja dapat dilakukan, meskipun banyak programmer game belum benar-benar memahami ide tersebut, atau memiliki pemahaman yang baik tentang cara menguji sistem yang rumit. Saya mengakui bahwa saya jarang menggunakannya, kecuali untuk sistem yang tidak berhubungan dengan gameplay yang mudah untuk diuji.
Berharap untuk menggunakan banyak benda tiruan. Karena betapa terikatnya banyak sistem, sulit untuk menguji komponen individu itu.
Ditambah banyak hal yang tidak dapat diuji secara menyeluruh. Bagaimana Anda menguji drive, katakanlah, sistem partikel? Bagaimana Anda menguji apakah sistem animasi Anda berfungsi dengan benar? Banyak hal bersifat visual, dan tidak jelas (setidaknya bagi saya) tentang cara melakukan pengujian yang tepat.
Namun, ada banyak hal yang belum tentu unit test dalam pengertian tradisional kata, tetapi yang ada sebagai "tes" untuk fitur tertentu. Hal-hal seperti level tes untuk navigasi AI sangat umum, tetapi tidak selalu hal termudah untuk diotomatisasi.
Ada aspek-aspek tertentu dari permainan yang dapat (dan mungkin harus) memiliki tes unit tertulis untuk mereka. Segala jenis sistem "pembacaan file" generik harus diuji. Mungkin ada beberapa tes untuk inisialisasi hal-hal perangkat keras (permukaan 3d, dll). Mungkin ada beberapa server tiruan dan uji kode interaksi klien / server Anda. Hal-hal seperti itu.
sumber
Keys.Down
,Keys.Left
dll. Itu untuk mengatakan bahwa permainan tahu ke mana pengguna ingin ular pergi, dan ular harus pergi ke tempat permainan mengatakannya, meskipun itu hanya ular yang tahu caranya untuk bergerak ke arah yang berbeda, maka posisinya juga dalam permainan. Setelah mengatakan ini, IMHO, menjadikanSnake
kelas yang dapat diuji! (Bersambung ...)Vector2.Zero
, dengan kecepatan10.0f
pada kedua sumbu X dan Y dalam game 2D ini. Pertanyaan pertama adalah: Apakah diposisikan pada posisi awal yang seharusnya dan bagaimana cara mengujinya? Kemudian, Anda berpikir bahwaPosition
properti tersebut akan terbuka untuk umum. Kedua: bagaimana membuatnya bergerak? Metode gerakan harus baik, jadi Anda menulis tes untuk setiap metode arahMoveDown
,MoveLeft
dan seterusnya. Sekarang, pergi dan tulis deklarasi metode Anda dan lihat apakah tesnya mengeluh. Kemudian, verifikasi kembali posisi ular ituMoveDown
panggilan metode! Karena Anda tahu bahwaPosition
properti tersebut diuji secara menyeluruh, itu adalah anggota yang dapat Anda andalkan! Anda bisa menebak kelanjutannya di sini! ;-) Artinya komponen visual pasti tidak dapat diuji, tetapi ular harus terlihat seperti ular, semua tergantung dari jenis ular yang Anda inginkan dalam permainan. Artis yang menggambar ular harus membuktikan kepuasan yang cukup dengan gambar ular itu, yang tidak dapat diuji melalui TDD, tentu saja! Tapi posisinya relatif terhadap objek lain bisa, dan kelas yang mewakili ular ini juga. Bahkan, TDDSaya tidak berpikir TDD, dengan demikian, cocok sebagai dasar untuk pengembangan game. Pengujian unit otomatis sebagai bagian dari metodologi, tentu saja, tetapi terlalu banyak perhatian utama pengembangan game bersifat subjektif dan tidak dapat diuji mesin untuk pengujian sebagai pendorong pengembangan. Bagaimana Anda akan menulis tes skrip untuk mengetahui apakah seorang mekanik permainan itu menyenangkan? Level itu menarik secara visual? Bahkan level itu membutuhkan pemain biasa sekitar 15 menit untuk menyelesaikan? TDD cocok dengan situasi di mana kematangan proyek dapat diukur secara kuantitatif dalam hal kepatuhannya terhadap spesifikasi, dan itu bukan pengembangan game.
sumber
Agak sulit untuk mengetahui persis apa yang Anda minta karena judulnya murni tentang TDD tetapi Anda tampaknya menjadikan Scrum bagian integral dari pertanyaan juga - dan seperti yang saya pahami, yang satu tidak memerlukan yang lain.
Itu betul. Saya tidak berpikir saya pernah mendengarnya digunakan dalam praktik di industri game. (Tetapi kemudian saya tidak pernah mendengar tentang itu digunakan di luar industri game - hanya oleh individu.)
Game tidak perlu bekerja dengan sempurna. Jadi ada jauh lebih sedikit penekanan pada kebenaran kode. TDD tidak menjamin kebenaran kode, tetapi beberapa orang merasa mengurangi kesalahan. Saya belum melihat buktinya.
Saya belum pernah melihat metodologi yang tidak mendorong tanggal jatuh tempo rapat, atau memiliki tindakan yang tidak sesuai waktu. Masalahnya adalah apa pun metodologi yang Anda gunakan, memperkirakan kompleksitas perangkat lunak cukup sulit. Bukan tidak mungkin, tetapi memperkirakannya secara akurat tidak banyak hubungannya dengan proses. Jika tugas saya adalah menambahkan panel GUI baru, atau untuk memperbaiki bug dengan animasi, atau menambahkan statistik baru ke karakter, maka penggunaan Scrum tidak akan mempercepat itu sama sekali, dan penggunaan TDD akan meningkat untuk memperlambat tugas (pada kemungkinan manfaat mengurangi tugas pemeliharaan lebih lanjut nanti). Mereka tentu tidak akan membuatnya lebih mudah untuk memperkirakan durasi tugas.
Jika TDD terbukti menulis kode yang lebih baik daripada metode lain, maka ya.
Apakah ada buktinya? Fakta bahwa industri mungkin menggunakannya bukanlah bukti. Industri terkenal karena menghasilkan kode yang buruk yang dikirimkan terlambat. Tidak adanya contoh proyek TDD besar yang gagal atau terlambat mungkin hanya karena ini merupakan pendekatan baru dan sedikit orang yang benar-benar menyelesaikan proyek semacam itu. (Dan yang terlambat ... mungkin masih berjalan.)
Giat? Tentu saja. Bermanfaat? Itu belum terbukti.
sumber
Spacecraft
kelas saya menjadi kelas yang sepenuhnya dapat diuji dengan metode dan properti. Ini adalah jenis hal yang benar-benar dapat, IMHO, diuji sepenuhnya menggunakan TDD. Katakanlah Anda membutuhkan pesawat ruang angkasa, kemudian Anda menulis tes untuk apa yang Anda butuhkan untuk menyelesaikan satu tes pada suatu waktu.maaf untuk bahasa Inggris saya yang buruk dan maaf untuk sudut pandang saya yang bias: saya bukan seorang desainer game tetapi seorang pembuat kode.
Saya pikir ada beberapa kesalahpahaman dalam diskusi ini. saya akan berbicara tentang TDD dalam bentuk yang lebih umum, yang disebut BDD. Pengembangan yang didorong oleh perilaku bukanlah cara untuk menguji proyek (tes adalah sesuatu seperti efek samping). BDD adalah cara untuk mendesain , cara untuk melakukan refactor dan desain perangkat lunak selama semua produksi (lihat beberapa moto sebagai KISS, "jaga kualitas dalam", "tes awal, tes sering") dan bukan dalam fase sendirian. BDD adalah kebalikan dari beberapa proses perangkat lunak klasik seperti proses air terjun atau metodologi berulang lainnya untuk membuat perangkat lunak.
Poin lain adalah bahwa pengujian otomatis untuk fitur yang dapat diuji secara otomatis oleh mesin komputasi. tidak ada tes untuk bersenang-senang dalam game, dan tidak ada tes untuk kegunaan antarmuka pengguna grafis. kesenangan atau kegunaan adalah bahan untuk pekerjaan lain dan bukan untuk pengembangan perangkat lunak seperti perancang interaksi, dunia dan tingkat d. dengan cara yang sama seperti bagian artistik (pemodelan, texturing, dll) untuk artis yang menggunakan komputer sebagai alat untuk kreativitas - jelas pekerjaan itu dapat dilakukan oleh orang yang sama yang menulis kode, tetapi ini bukan intinya. fisika dapat diuji, algoritma optimisasi dapat diuji, perilaku objek tunggal dapat diuji (dengan mengolok-olok, bertopik dan boneka seperti yang disebutkan sebelumnya)
pemikiran terakhir adalah bahwa, imho, adalah bahwa tidak hanya desain game tetapi seluruh kode penulisan adalah seni.
sumber
Berikut ini adalah studi kasus dari seseorang yang berpikir TDD dan gamedev mencampur dengan cukup baik:
http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf
Diakui, ini adalah proyek kecil di Pygame, tetapi memberikan gagasan bagian mana yang dapat diuji dengan permainan grafis dan mana yang tidak. Saya terkejut pada seberapa banyak yang bisa dilakukan dengan TDD dalam skenario ini.
sumber
Tidak, Pengembangan Test Driven tidak cocok untuk Pengembangan Game. Tentu Anda dapat menulis tes untuk beberapa bagian yang ingin Anda uji, tetapi proses Pengembangan Game benar-benar berbeda dari Pengembangan yang Didorong Tes yang memerlukan spesifikasi yang tepat sebelum kemajuan dimulai.
Game jarang memiliki spesifikasi yang tepat ketika dimulai. Dan jika mereka melakukannya, mereka selalu berubah dan berkembang selama proses pengembangan.
Desain game adalah seni, Anda tidak dapat memiliki tes khusus untuk mengetahui kapan seni itu baik atau lengkap.
sumber