Pangembangan ing steroid: Ping-pong Programming lan TDD

Foto dening Michael Hoyt ing Unsplash

Nalika miwiti karir profesional minangka pangembang, aku seneng dadi a pemain solo pangembang. Wiwit aku otodidak lan aku kudu sinau pemrograman piyambak lan dhewe kanggo taun iku apik.

Sawetara taun sabanjure aku ngerti yen sampeyan bisa nambah karir nalika main kanggo tim sampeyan.

🥺 Kacilakan kasebut … kacilakan

Ing pengalaman pisanan minangka pangembang Android, aku mung pengin nulis kode lan ngirim aplikasi. Iku apik, Aku ngatur kanggo ngirim app pisanan saka ngeruk ing perusahaan aku kerjo kanggo nanging dumadakan kita miwiti nabrak.

Aku nekat. Aplikasi pisanan. Kacilakan pisanan. Banjur aku terus ndandani pengiriman lan fitur-fitur anyar lan uga miwiti kacilakan anyar. Iki ora apa-apa, iki bakal kelakon karo app apa wae, kuwi pengalaman sing bakal dialami saben pangembang seluler.

Aku piyambak lan aku kudu ngerti carane kanggo nyegah masalah kuwi kanggo gaweyan mangsa: Aku sinau bab Testing.

Nalika aku nyoba nyoba kode ing perusahaan iki, dheweke ora gelem amarga “tes nulis butuh wektu akeh”. Dheweke ujar 4 taun kepungkur nanging aku yakin saiki isih ana sawetara pangembang sing padha mikir. Ayo kula nyoba ngganti pikiran sampeyan.

Pengalaman pisanan karo tes nulis ngasilake: “mbosen banget” 😑.

Sampeyan nulis fitur rumit kasebut kanthi jaringan, caching, lapisan presentasi, lan liya-liyane. Banjur sampeyan ngelingi sampeyan kudu nulis tes lan iki pancen mboseni lan kabeh wong bakal rumangsa kesed, ta?

Paling ora aku bisa ngomong dhewe … iki persis kaya sing dakrasakake lan ora ana sing salah. Tes sing mboseni nganti ora: ayo aku ngenalake sampeyan Test-driven Programming emas TDD. ✨

Nalika maca tembung-tembung iki, sampeyan bisa uga mikir iki minangka teknik sing rumit, nanging ora perlu, kita mung bisa miwiti kanthi gampang.

Testing + TDD = 💛

TDD minangka kunci kanggo miwiti tes tresna lan uga dadi sebab aku nulis artikel iki ing kene. Aku ora pengin adoh banget, nanging ana 3 hukum dhasar kanggo metodologi iki:

  1. Sampeyan ora diijini kanggo nulis kode produksi kajaba iku kanggo nggawe gagal Unit test pass.
  2. Sampeyan ora diijini kanggo nulis liyane saka test unit saka cukup kanggo gagal, lan gagal kompilasi gagal.
  3. Sampeyan ora diijini nulis kode produksi luwih saka cukup kanggo lulus tes unit sing gagal.

Iki bisa uga katon rumit ing wiwitan, nanging kita bisa nyederhanakake: nulis tes gagal > gawe lulus > nggawe luwih apik > baleni.

Kenapa TDD?

Kaya sing wis sampeyan ngerteni, aku dudu penggemar tes nulis, nanging wiwit miwiti TDD, aku seneng nglakoni.

Kasunyatane yaiku yen sampeyan kudu nulis tes sawise implementasine wis ditulis, sampeyan bisa uga bakal ngubungake tes menyang implementasine mung supaya bisa lulus, lan iki salah amarga tes sampeyan ora bakal gumantung ing rincian implementasine amarga bisa uga. ijol-ijolan.

Skenario ing ndhuwur rawan kesalahan lan uga mboseni. Nalika sampeyan miwiti nulis tes dhisik, sampeyan duwe nduwur sirah kurang kognitif amarga sampeyan ngerti persis apa sing kudu ditindakake supaya bisa lulus.

Keuntungan saka TDD

Saka pengalaman pribadi karo metodologi iki, keuntungan sing bisa dakkandhakake yaiku:

  • Kurang overhead kognitif
  • Pangembangan luwih cepet ing seluler: Aku lagi wae kudu mbukak emulator nalika aku nulis tes kanggo logika presentation sandi. Aku dipercaya lan yen wis rampung fitur, aku bakal mbukak app. Ora perlu mbukak emulator mung kanggo nyoba logika presentasiku.
  • Terus-terusan Refactoring
  • Ningkatake katrampilan alus Kepemimpinan, Pembimbingan / Pengajaran, lan Kepemilikan Produk.

Sampeyan bisa uga wis mulai mikir kenapa metodologi pangembangan mbantu aku nambah sawetara katrampilan alus?

Sejatine aku gabungke TDD kanthi teknik liyane sing diwenehake manajerku ing Perry Street Software: Pemrograman Ping pong.

Teknik anyar iki sukses banget kanggo aku lan manajerku amarga aku loro bisa sinau lan mulang. Teknik iki nyengkuyung sampeyan nggawe pasangan kerja saben dina lan uga nggunakake TDD.

Kenapa Ping Pong?

Pemrograman Ping-Pong (alias. Pemrograman Pasangan Ping-Pong) minangka jinis Pemrograman Pasangan sing nindakake TDD (Test Driven Development). Ing tembung liyane, iku kombinasi saka Pair Programming lan TDD.

Aku bisa ngedongkrak katrampilan alus karir amarga teknik iki nyengkuyung aku kanggo mulang manajerku katrampilan anyar lan sinau babagan sing anyar. Dheweke duwe pengalaman luwih saka 10 taun lan duwe kesempatan kanggo sinau saka dheweke yaiku steroid sing dibutuhake kanggo karirku.

Rekan setim liyane uga duwe akeh pengalaman ing macem-macem subjek, mula kenapa ora nuduhake kawruh uga?

Ayo kita duwe rong pangembang sing diarani vlad lan Katarina sing loro nulis kode ing Kotlin lan padha miwiti kanggo bisa ing fitur kanggo nuduhake dhaftar TODO kang ing app. Dheweke wis duwe lapisan infrastruktur sing digawe lan sing isih ana yaiku lapisan presentation. Dheweke mutusake kanggo miwiti mbangun ViewModel.

class TodosViewModel(
private val repository: TodosRepository
) {

}

Dheweke nggawe kothong iki ViewModel kelas nanging mutusake kanggo miwiti nulis tes tinimbang nganggo skema ing ngisor iki:

  • Katarina: nulis tes pisanan
  • vlad: gawe gagal
  • Katarina: gawe lulus
  • vlad: dadi luwih apik
  • vlad: nulis tes kapindho
  • …

Sejatine ana giliran kita kudu ngormati supaya duwe pengalaman apik kanggo loro devs. Nggunakake teknik iki sampeyan ora ngandelake driver lan co-driver maneh, loro-lorone pembalap lan loro-lorone bakal nulis kode kasebut.

// Todo(id: Long, name: String)
class TodosViewModelTest {
private val fakeRepository = FakeRepository()
private val viewModel = TodosViewModel(repository = FakeRepository())

// Katarina's turn
@Test fun `should return a list of todos`() {
val expected = listOf(
Todo(id = 1, name = "First"),
Todo(id = 2, name = "Second")
)

assertEquals(
expected,
viewModel.todos.test().lastValue(), // TestObserver
"Todos does not match"
)
}
}

// interface TodosRepository
class TodosViewModel(private val repository: TodosRepository) {
// Vlad's turn
// + val todos: Observable> = Observable.empty()

// Katarina's turn
// + val todos: Observable> = Observable.just(
// + listOf(Todo(id = 1, name = "First"), Todo(id = 2, name = "Second"))
// + )

// Vlad's turn
val todos: Observable> = repository.fetchAll() // ...

// repeat with Vlad writing test now
}

Apa sing dakkarepake yaiku loro pangembang bakal nyopir lan loro-lorone bisa nuduhake pikirane lan pendapat babagan apa sing ditindakake. Iki persis sing dibutuhake kanggo berkembang ing pirang-pirang aspek karirku.

Sawise aku duwe pengalaman mbukak mripat iki, aku uga miwiti nyengkuyung supaya wong liya uga bisa ndeleng mupangat kanggo nindakake karo kanca-kancane.

  • Pemrograman ping-pong nambah hubungan antarane kanca-kanca.
  • Sinau teknologi anyar karo kanca-kanca.

Teknik iki sing daktuduhake ing ndhuwur bisa gampang ditrapake ing loco, nanging amarga jagad iki wis adoh (ing Perry Street Software kita ❤️ remot) uga penting kanggo ngerti manawa iki uga bisa ditindakake kanthi nggunakake sawetara alat sing kasedhiya kayata:

  • Tujuan umum: watara emas Pop.
  • Kode karo Aku saka Jetbrains: Kotlin, Android utawa basa apa IntelliJ IDEA ndhukung.
  • Live Share @VSCode.

Sadurunge kita nggunakake Pop kanggo layar kaca, nanging iku pengalaman nglarani amarga kita kudu ngalih layar sak dadi. Saiki kita nyoba metu Kode karo Aku saka Jetbrains.

Code With Me minangka layanan coding lan pasangan program kolaborasi anyar. Iku ndadekake iku bisa kanggo sampeyan ngajak liyane menyang project IDE Panjenengan, lan bisa bebarengan ing wektu nyata.

Ora perlu nuduhake layar maneh, mung ngajak wong liya kanggo nggabungake IDE lan bisa miwiti nulis kode ing mesin dhewe. Kasedhiya kanggo loro AndroidStudio lan Intellij IDEA. Kita uga miwiti nyoba Around kanggo sesi pasangan amarga kita nggunakake alat iki ing karya saben dina kanggo komunikasi langsung.

Muga-muga artikel iki bisa mbantu sampeyan nemokake alternatif kanggo nambah karir ing katrampilan hard lan alus. Iki mbantu aku akeh lan sinau teknik kasebut ing ndhuwur dadi game-changer kanggo karirku.

Aku cukup manawa iku uga bakal nindakake padha kanggo sampeyan minangka biaya kanggo miwiti nindakake iku $0 lan kabeh sing perlu iku dicokot saka sabar. Kawruh iku gratis dadi ayo. 🦅

Leave a Comment

Your email address will not be published. Required fields are marked *