Return to Video

5.8 - 5.11 - Coverage, Unit vs. Integration Tests, Other Testing Concepts, and Perspectives

  • 0:00 - 0:01
    Jadi kami menghabiskan banyak waktu
  • 0:01 - 0:03
    dalam beberapa terakhir dari kuliah
  • 0:03 - 0:05
    berbicara tentang berbagai jenis pengujian
  • 0:05 - 0:08
    tentang pengujian versus integrasi pengujian unit
  • 0:08 - 0:10
    Kami berbicara tentang bagaimana Anda menggunakan RSpec
  • 0:10 - 0:12
    untuk benar-benar mengisolasi bagian dari kode Anda ingin menguji
  • 0:12 - 0:14
    kau juga, Anda tahu, karena PR 3,
  • 0:14 - 0:18
    dan hal-hal lain, kita telah melakukan BDD,
  • 0:18 - 0:20
    di mana kita telah menggunakan mentimun untuk mengubah cerita pengguna
  • 0:20 - 0:22
    ke dalam, pada dasarnya, integrasi dan penerimaan tes
  • 0:22 - 0:25
    Jadi Anda telah melihat pengujian dalam beberapa tingkat yang berbeda
  • 0:25 - 0:27
    dan tujuan di sini adalah semacam melakukan beberapa komentar
  • 0:27 - 0:29
    kau tahu, mari kita kembali sedikit
  • 0:29 - 0:33
    melihat gambaran besar dan mengikat hal-hal bersama-sama
  • 0:33 - 0:34
    Jadi ini semacam meliputi bahan
  • 0:34 - 0:37
    yang mencakup tiga atau empat bagian dalam buku
  • 0:37 - 0:39
    dan saya ingin hanya memukul poin yang tinggi di kuliah
  • 0:39 - 0:41
    Jadi pertanyaan yang muncul
  • 0:41 - 0:43
    Saya yakin itu telah datang untuk kalian semua
  • 0:43 - 0:44
    seperti yang Anda telah melakukan pekerjaan rumah
  • 0:44 - 0:45
    adalah: "pengujian berapa banyak yang cukup?"
  • 0:45 - 0:48
    Dan, sayangnya, untuk waktu yang lama
  • 0:48 - 0:51
    jenis jika Anda bertanya pertanyaan ini dalam industri
  • 0:51 - 0:52
    Jawabannya adalah pada dasarnya
  • 0:52 - 0:53
    "Yah, kita memiliki tenggat waktu pengiriman,
  • 0:53 - 0:54
    Jadi namun banyak pengujian dapat kita lakukan
  • 0:54 - 0:56
    sebelum tenggat waktu itu, itu berapa banyak."
  • 0:56 - 0:58
    Itulah apa yang Anda punya waktu untuk.
  • 0:58 - 1:00
    Jadi, Anda tahu, itu sedikit flip
  • 1:00 - 1:01
    jelas tidak sangat baik
  • 1:01 - 1:02
    Sehingga Anda dapat melakukan sedikit lebih baik, kan?
  • 1:02 - 1:03
    Ada sudah beberapa langkah-langkah yang statis
  • 1:03 - 1:06
    seperti berapa banyak baris kode aplikasi Anda memiliki
  • 1:06 - 1:08
    dan berapa banyak baris tes Anda punya?
  • 1:08 - 1:10
    Dan ini bukan tidak biasa dalam industri
  • 1:10 - 1:12
    dalam sepotong diuji dengan baik perangkat lunak
  • 1:12 - 1:14
    untuk jumlah baris tes
  • 1:14 - 1:17
    untuk jauh melampaui jumlah baris kode
  • 1:17 - 1:19
    Jadi, integer kelipatan tidak biasa
  • 1:19 - 1:21
    Dan saya pikir bahkan untuk semacam itu, Anda tahu,
  • 1:21 - 1:23
    penelitian kode atau classwork
  • 1:23 - 1:26
    rasio, kau tahu, mungkin 1.5 tidak masuk akal
  • 1:26 - 1:30
    Jadi satu setengah kali jumlah tes kode
  • 1:30 - 1:32
    karena Anda memiliki kode aplikasi
  • 1:32 - 1:34
    Dan dalam banyak sistem produksi
  • 1:34 - 1:35
    di mana mereka benar-benar peduli tentang pengujian
  • 1:35 - 1:36
    Hal ini lebih tinggi dari itu
  • 1:36 - 1:38
    Jadi mungkin pertanyaan yang lebih baik untuk bertanya:
  • 1:38 - 1:39
    Alih-alih mengatakan "pengujian berapa banyak yang cukup?"
  • 1:39 - 1:42
    adalah dengan bertanya "bagaimana baik adalah pengujian yang saya lakukan sekarang?
  • 1:42 - 1:44
    Bagaimana menyeluruh itu?"
  • 1:44 - 1:45
    Kemudian di semester ini
  • 1:45 - 1:46
    Profesor Sen akan berbicara tentang
  • 1:46 - 1:48
    sedikit tentang metode formal
  • 1:48 - 1:50
    dan semacam Apakah pada batas-batas pengujian dan debugging
  • 1:50 - 1:52
    Tetapi beberapa hal-hal yang kita dapat berbicara tentang
  • 1:52 - 1:54
    berdasarkan apa yang Anda sudah tahu
  • 1:54 - 1:57
    adalah beberapa konsep dasar tentang cakupan uji
  • 1:57 - 1:59
    Dan meskipun aku akan mengatakan
  • 1:59 - 2:01
    kau tahu, kita sudah mengatakan sepanjang
  • 2:01 - 2:03
    metode formal, mereka tidak benar-benar bekerja pada sistem yang besar
  • 2:03 - 2:05
    Saya pikir pernyataan itu, dalam pendapat pribadi saya
  • 2:05 - 2:07
    benar benar-benar jauh lebih daripada dulu
  • 2:07 - 2:09
    Saya pikir ada sejumlah tempat tertentu
  • 2:09 - 2:10
    terutama dalam pengujian dan debugging
  • 2:10 - 2:12
    di mana metode formal benar-benar membuat kemajuan cepat
  • 2:12 - 2:15
    dan Koushik Sen adalah salah satu pemimpin dalam yang
  • 2:15 - 2:17
    Sehingga Anda akan memiliki kesempatan untuk mendengar lebih banyak tentang hal ini nanti
  • 2:17 - 2:21
    tapi untuk saat ini saya pikir, jenis roti dan mentega
  • 2:21 - 2:22
    adalah Mari kita bicara tentang cakupan pengukuran
  • 2:22 - 2:24
    karena ini adalah di mana karet meets the road
  • 2:24 - 2:26
    dalam hal bagaimana Anda akan dievaluasi
  • 2:26 - 2:28
    Jika Anda melakukan hal ini untuk real
  • 2:28 - 2:29
    Jadi apa adalah beberapa dasar-dasar?
  • 2:29 - 2:30
    Di sini adalah benar-benar sederhana dapat Anda gunakan
  • 2:30 - 2:32
    untuk berbicara tentang cara yang berbeda untuk mengukur
  • 2:32 - 2:34
    Bagaimana pengujian kami mencakup kode ini
  • 2:34 - 2:36
    Dan ada beberapa tingkatan yang berbeda
  • 2:36 - 2:37
    dengan terminologi yang berbeda
  • 2:37 - 2:40
    Hal ini tidak benar-benar universal di seluruh semua rumah perangkat lunak
  • 2:40 - 2:42
    Tapi umum satu set terminologi
  • 2:42 - 2:43
    buku mengekspos
  • 2:43 - 2:44
    adalah kita bisa bicara tentang S0
  • 2:44 - 2:47
    di mana kita akan hanya berarti Anda telah dipanggil setiap metode sekali
  • 2:47 - 2:50
    Sehingga Anda tahu, jika Anda memanggil foo, dan Anda memanggil bar, Anda sudah selesai
  • 2:50 - 2:52
    Itulah S0 cakupan: tidak sangat menyeluruh
  • 2:52 - 2:54
    Sedikit lebih ketat, S1, adalah
  • 2:54 - 2:56
    Anda dapat mengatakan, kita menyebut setiap metode
  • 2:56 - 2:57
    dari setiap tempat itu bisa disebut
  • 2:57 - 2:58
    Jadi apa artinya itu?
  • 2:58 - 3:00
    Itu berarti, misalnya
  • 3:00 - 3:01
    Ianya tidak cukup untuk memanggil bar
  • 3:01 - 3:02
    Anda harus memastikan bahwa Anda harus menyebutnya
  • 3:02 - 3:05
    setidaknya sekali dari di sini
  • 3:05 - 3:07
    serta menyebutnya sekali
  • 3:07 - 3:10
    dari setiap fungsi eksterior yang mungkin menyebutnya
  • 3:10 - 3:12
    C0 yang adalah apa yang mengukur SimpleCov
  • 3:12 - 3:15
    (mereka yang sudah SimpleCov dan berjalan)
  • 3:15 - 3:18
    pada dasarnya mengatakan bahwa Anda telah dilaksanakan setiap pernyataan
  • 3:18 - 3:20
    Anda telah menyentuh setiap pernyataan dalam kode Anda sekali
  • 3:20 - 3:22
    Tapi peringatan ada adalah bahwa
  • 3:22 - 3:25
    conditional benar-benar hanya dihitung sebagai satu pernyataan
  • 3:25 - 3:28
    Jadi, jika Anda, tidak peduli yang cabang ini "jika" Anda mengambil
  • 3:28 - 3:31
    selama Anda menyentuh salah satu cabang lainnya
  • 3:31 - 3:33
    Anda telah dieksekusi "jika ' pernyataan
  • 3:33 - 3:35
    Jadi bahkan C0 adalah masih, Anda tahu, liputan semacam dangkal
  • 3:35 - 3:37
    Tapi, seperti yang kita akan lihat
  • 3:37 - 3:39
    cara bahwa Anda akan ingin untuk membaca informasi ini adalah:
  • 3:39 - 3:41
    Jika Anda mendapatkan * buruk * cakupan setinggi C0
  • 3:41 - 3:44
    maka Anda memiliki cakupan yang benar-benar benar-benar buruk
  • 3:44 - 3:46
    Jadi jika Anda tidak baik membuat
  • 3:46 - 3:47
    tingkat ini sederhana liputan dangkal
  • 3:47 - 3:50
    maka pengujian Anda mungkin kurang
  • 3:50 - 3:51
    C1 adalah langkah berikutnya dari itu
  • 3:51 - 3:53
    Kita bisa mengatakan:
  • 3:53 - 3:55
    Yah, kita harus mengambil setiap cabang di kedua arah
  • 3:55 - 3:56
    Jadi, ketika kita melakukan pernyataan "jika" ini
  • 3:56 - 3:58
    kita harus memastikan bahwa
  • 3:58 - 3:59
    kita lakukan "Jika x" bagian sekali
  • 3:59 - 4:05
    dan "jika tidak x" bagian setidaknya sekali untuk memenuhi C1
  • 4:05 - 4:08
    Anda dapat menambah bahwa dengan keputusan cakupan
  • 4:08 - 4:09
    berkata: Yah, kalau kita gonna…
  • 4:09 - 4:12
    Jika kita memiliki "jika" statments di mana kondisi
  • 4:12 - 4:13
    terdiri dari beberapa istilah
  • 4:13 - 4:15
    kita harus memastikan bahwa setiap subexpression
  • 4:15 - 4:17
    telah dievaluasi kedua arah
  • 4:17 - 4:19
    Dengan kata lain, yang berarti bahwa
  • 4:19 - 4:22
    Jika kita akan gagal pernyataan "jika" ini
  • 4:22 - 4:24
    kita harus pastikan untuk gagal itu setidaknya sekali
  • 4:24 - 4:26
    karena y palsu dalam sekurang-kurangnya sekali karena z palsu
  • 4:26 - 4:28
    Dengan kata lain, setiap subexpression yang bisa
  • 4:28 - 4:31
    independen mengubah hasil dari kondisi
  • 4:31 - 4:34
    harus dilaksanakan di kedua arah
  • 4:34 - 4:36
    Dan kemudian,
  • 4:36 - 4:38
    jenis, yang itu, kau tahu, banyak orang bercita-cita untuk
  • 4:38 - 4:41
    Namun ada ketidaksepakatan tentang berapa banyak lebih berharga itu
  • 4:41 - 4:42
    Anda mengambil setiap jalan melalui kode
  • 4:42 - 4:45
    Jelas, ini agak sulit karena
  • 4:45 - 4:48
    itu cenderung menjadi eksponensial dalam beberapa kondisi
  • 4:48 - 4:53
    Dan secara umum sulit
  • 4:53 - 4:55
    untuk mengevaluasi jika Anda telah meluangkan setiap jalan melalui kode
  • 4:55 - 4:57
    Ada teknik formal yang dapat Anda gunakan
  • 4:57 - 4:58
    untuk memberitahu Anda di mana lubang
  • 4:58 - 5:01
    tapi intinya adalah bahwa
  • 5:01 - 5:03
    di rumah-rumah perangkat lunak komersial
  • 5:03 - 5:04
    Aku akan berkata, tidak ada konsensus lengkap
  • 5:04 - 5:06
    pada berapa banyak lagi berharga C2 adalah
  • 5:06 - 5:08
    dibandingkan dengan C0 atau C1
  • 5:08 - 5:10
    Jadi, saya kira, dengan tujuan untuk kelas kami
  • 5:10 - 5:11
    Anda mendapatkan terpapar ide
  • 5:11 - 5:13
    Bagaimana Anda menggunakan cakupan informasi
  • 5:13 - 5:16
    SimpleCov mengambil keuntungan dari beberapa fitur Ruby built-in
  • 5:16 - 5:18
    untuk memberikan C0 cakupan
  • 5:18 - 5:19
    [Itu] tidak benar-benar baik laporan
  • 5:19 - 5:21
    Kita bisa melihat itu semacam
  • 5:21 - 5:22
    pada tingkat setiap baris dalam file Anda
  • 5:22 - 5:24
    Anda dapat melihat apakah Anda cakupan
  • 5:24 - 5:27
    dan saya rasa itulah jenis, Anda tahu
  • 5:27 - 5:31
    awal yang baik untuk di mana kita berada
  • 5:31 - 5:33
    Jadi, setelah melihat semacam rasa yang berbeda dari tes
  • 5:33 - 5:37
    Melangkah mundur dan melihat kembali pada gambaran besar
  • 5:37 - 5:38
    apa yang berbeda tes
  • 5:38 - 5:40
    yang kita lihat secara konkret?
  • 5:40 - 5:42
    dan apa yang dilema
  • 5:42 - 5:43
    antara menggunakan orang-orang macam tes?
  • 5:43 - 5:47
    Jadi kita telah melihat pada tingkat kelas individu atau metode
  • 5:47 - 5:50
    Kami menggunakan RSpec, dengan luas penggunaan mengejek dan stubbing
  • 5:50 - 5:53
    Jadi, misalnya ketika kita melakukan pengujian metode dalam model
  • 5:53 - 5:55
    yang akan menjadi contoh unit testing
  • 5:55 - 5:59
    Kami juga melakukan sesuatu yang sangat mirip dengan
  • 5:59 - 6:00
    fungsional atau modul pengujian
  • 6:00 - 6:02
    di mana ada lebih dari satu modul berpartisipasi
  • 6:02 - 6:04
    Jadi, misalnya ketika kami melakukan controller spesifikasi
  • 6:04 - 6:07
    kita melihat bahwa-kami mensimulasikan tindakan posting
  • 6:07 - 6:09
    tapi ingat bahwa tindakan posting
  • 6:09 - 6:10
    harus pergi melalui subsistem routing
  • 6:10 - 6:12
    sebelum sampai ke controller
  • 6:12 - 6:14
    Setelah controller selesai ia akan mencoba untuk membuat tampilan
  • 6:14 - 6:16
    Jadi bahkan ada potongan lain
  • 6:16 - 6:17
    yang berkolaborasi dengan controller
  • 6:17 - 6:19
    yang harus bekerja dalam rangka untuk controller spesifikasi untuk lulus
  • 6:19 - 6:21
    Jadi itu adalah suatu tempat Peralihan:
  • 6:21 - 6:23
    di mana kami melakukan lebih dari satu metode
  • 6:23 - 6:25
    menyentuh lebih dari satu kelas
  • 6:25 - 6:27
    tapi kami masih berkonsentrasi perhatian [kita]
  • 6:27 - 6:28
    di sepotong cukup sempit sistem pada satu waktu
  • 6:28 - 6:31
    dan kami masih menggunakan mengejek dan stubbing luas
  • 6:31 - 6:35
    untuk mengisolasi semacam itu perilaku yang kita ingin menguji
  • 6:35 - 6:36
    Dan kemudian pada tingkat mentimun skenario
  • 6:36 - 6:38
    ini lebih seperti integrasi atau sistem tes
  • 6:38 - 6:41
    Mereka melaksanakan lengkap jalan di seluruh aplikasi
  • 6:41 - 6:43
    Mereka mungkin menyentuh banyak modul yang berbeda
  • 6:43 - 6:46
    Mereka memanfaatkan minimal mengolok-olok dan Rintisan bertopik
  • 6:46 - 6:48
    karena bagian dari tujuan integrasi menguji
  • 6:48 - 6:50
    Itulah untuk menguji interaksi antara lembar
  • 6:50 - 6:53
    Jadi Anda tidak ingin tulisan rintisan atau mengontrol interaksi mereka
  • 6:53 - 6:54
    Anda benar-benar ingin membiarkan sistem yang melakukan
  • 6:54 - 6:56
    akan benar-benar apa
  • 6:56 - 6:58
    Jika ini adalah skenario yang terjadi dalam produksi
  • 6:58 - 7:00
    Jadi bagaimana kita membandingkan berbagai jenis tes?
  • 7:00 - 7:02
    Ada beberapa sumbu yang berbeda kita dapat melihat
  • 7:02 - 7:05
    Salah satunya adalah berapa lama mereka ambil untuk menjalankan
  • 7:05 - 7:06
    Sekarang, RSpec dan ketimun
  • 7:06 - 7:09
    memiliki, jenis, awal tinggi kali dan hal-hal seperti itu
  • 7:09 - 7:10
    Tapi, seperti yang akan Anda lihat
  • 7:10 - 7:11
    Ketika Anda mulai menambahkan lebih banyak dan lebih RSpec tes
  • 7:11 - 7:14
    dan menggunakan autotest untuk menjalankan mereka di latar belakang
  • 7:14 - 7:17
    pada umumnya, sekali RSpec jenis terangsang pad peluncuran
  • 7:17 - 7:19
    membentang spesifikasi yang benar-benar cepat
  • 7:19 - 7:21
    sedangkan menjalankan mentimun fitur hanya memakan waktu yang lama
  • 7:21 - 7:24
    karena pada dasarnya kebakaran Anda seluruh aplikasi
  • 7:24 - 7:26
    Dan kemudian di semester ini
  • 7:26 - 7:28
    kita akan melihat cara untuk membuat mentimun lebih lambat-
  • 7:28 - 7:30
    yang akan memilikinya api seluruh browser
  • 7:30 - 7:33
    pada dasarnya bertindak seperti boneka, remote-mengendalikan Firefox
  • 7:33 - 7:35
    Jadi Anda dapat menguji kode Javascript
  • 7:35 - 7:37
    Kami akan melakukan bahwa ketika kita benar-benar —
  • 7:37 - 7:40
    Saya pikir kita akan mampu bekerja dengan teman-teman kita di SourceLabs
  • 7:40 - 7:42
    sehingga Anda dapat melakukannya di awan-yang akan menarik
  • 7:42 - 7:45
    Jadi, "lari cepat" versus "berjalan lambat"
  • 7:45 - 7:46
    Resolusi:
  • 7:46 - 7:48
    Jika kesalahan terjadi di unit Anda tes
  • 7:48 - 7:49
    Hal ini biasanya cukup mudah
  • 7:49 - 7:52
    untuk mengetahui dan melacak apa sumber kesalahan itu adalah
  • 7:52 - 7:53
    karena tes begitu terisolir
  • 7:53 - 7:56
    Anda telah stubbed keluar segala sesuatu yang tidak peduli
  • 7:56 - 7:58
    dan Anda berfokus pada hanya perilaku bunga
  • 7:58 - 7:59
    Jadi, jika Anda telah melakukan pekerjaan yang baik melakukan hal itu
  • 7:59 - 8:01
    ketika sesuatu yang tidak beres di salah satu tes Anda
  • 8:01 - 8:03
    tidak ada banyak tempat
  • 8:03 - 8:04
    itu sesuatu yang bisa pergi salah
  • 8:04 - 8:07
    Sebaliknya, jika Anda menjalankan skenario mentimun
  • 8:07 - 8:08
    yang punya, Anda tahu, 10 langkah
  • 8:08 - 8:10
    dan setiap langkah menyentuh
  • 8:10 - 8:11
    sejumlah besar potongan-potongan dari app
  • 8:11 - 8:12
    bisa memakan waktu lama
  • 8:12 - 8:14
    benar-benar mendapatkan ke bawah bug
  • 8:14 - 8:16
    Jadi itu adalah jenis tradeoff
  • 8:16 - 8:17
    antara seberapa baik dapat Anda pelokalan kesalahan
  • 8:17 - 8:20
    Cakupan:
  • 8:20 - 8:23
    Dimungkinkan jika Anda menulis paket yang baik
  • 8:23 - 8:24
    unit dan tes fungsional
  • 8:24 - 8:26
    Anda bisa mendapatkan benar-benar tinggi cakupan
  • 8:26 - 8:27
    Anda dapat menjalankan laporan SimpleCov
  • 8:27 - 8:30
    dan Anda dapat benar-benar mengidentifikasi baris tertentu dalam file Anda
  • 8:30 - 8:32
    yang tidak dilaksanakan oleh tes
  • 8:32 - 8:34
    dan kemudian Anda dapat pergi kanan di tes yang menutupi mereka
  • 8:34 - 8:36
    Jadi, mencari tahu bagaimana untuk meningkatkan cakupan Anda
  • 8:36 - 8:37
    misalnya di tingkat C0
  • 8:37 - 8:40
    adalah sesuatu yang jauh lebih mudah dilakukan dengan unit test
  • 8:40 - 8:42
    Padahal, dengan tes mentimun —
  • 8:42 - 8:43
    dengan skenario mentimun —
  • 8:43 - 8:45
    Anda * adalah * menyentuh banyak bagian dari kode
  • 8:45 - 8:47
    tapi Anda melakukannya sangat jarang
  • 8:47 - 8:49
    Jadi, jika tujuan Anda adalah untuk mendapatkan liputan Anda
  • 8:49 - 8:51
    penggunaan alat-alat yang pada saat itu berada di tingkat unit
  • 8:51 - 8:53
    sehingga Anda dapat berfokus pada pemahaman
  • 8:53 - 8:54
    bagian apa atau kode saya adalah undertested
  • 8:54 - 8:56
    dan kemudian Anda dapat menulis tes yang sangat bertarget
  • 8:56 - 8:58
    hanya untuk fokus pada mereka
  • 8:58 - 9:01
    Dan, semacam itu, kau tahu, menempatkan potongan-potongan bersama-sama
  • 9:01 - 9:03
    unit test
  • 9:03 - 9:05
    karena dari isolasi mereka dan resolusi mereka baik-baik saja
  • 9:05 - 9:07
    cenderung menggunakan banyak mengolok-olok
  • 9:07 - 9:09
    untuk mengisolasi perilaku Anda tidak peduli
  • 9:09 - 9:11
    Tapi itu berarti bahwa, menurut definisi
  • 9:11 - 9:12
    Anda tidak pengujian antarmuka
  • 9:12 - 9:14
    dan itu adalah semacam "menerima kebijaksanaan" dalam perangkat lunak
  • 9:14 - 9:16
    bahwa banyak menarik bug
  • 9:16 - 9:18
    terjadi pada antarmuka antara lembar
  • 9:18 - 9:20
    dan tidak semacam dalam kelas atau dalam metode —
  • 9:20 - 9:22
    mereka adalah semacam bug yang mudah untuk melacak
  • 9:22 - 9:24
    Dan pada ekstrim yang lain
  • 9:24 - 9:26
    semakin Anda mendapatkan menuju pengujian integrasi ekstrim
  • 9:26 - 9:29
    Kau seharusnya kurang dan kurang mengandalkan mengolok-olok
  • 9:29 - 9:30
    untuk alasan yang tepat
  • 9:30 - 9:32
    Sekarang kita lihat, jika Anda menguji sesuatu seperti
  • 9:32 - 9:34
    mengatakan, dalam SOA
  • 9:34 - 9:35
    di mana Anda harus berinteraksi dengan situs remote
  • 9:35 - 9:37
    Anda masih berakhir
  • 9:37 - 9:38
    harus melakukan cukup banyak mengejek dan stubbing
  • 9:38 - 9:40
    sehingga Anda tidak bergantung pada Internet
  • 9:40 - 9:41
    dalam rangka untuk tes Anda untuk lulus
  • 9:41 - 9:43
    tetapi, secara umum
  • 9:43 - 9:47
    Anda mencoba untuk menghapus sebanyak mengolok-olok yang dapat Anda
  • 9:47 - 9:48
    dan membiarkan sistem menjalankan cara yang itu akan mencalonkan diri dalam kehidupan nyata
  • 9:48 - 9:52
    Jadi, kabar baiknya adalah Anda * adalah * pengujian antarmuka
  • 9:52 - 9:54
    * tapi * ketika sesuatu berjalan salah dalam salah satu antarmuka
  • 9:54 - 9:57
    karena resolusi Anda tidak sebagus
  • 9:57 - 10:00
    mungkin butuh waktu lebih lama untuk mencari tahu apa itu
  • 10:00 - 10:05
    So, what's semacam sedikit tinggi urutan dari tradeoff ini
  • 10:05 - 10:07
    Anda benar-benar tidak ingin bergantung
  • 10:07 - 10:08
    terlalu berat pada jenis satu tes
  • 10:08 - 10:10
    Mereka melayani tujuan yang berbeda dan, tergantung pada
  • 10:10 - 10:13
    Apakah Anda mencoba untuk latihan Anda antarmuka yang lebih
  • 10:13 - 10:15
    atau Anda mencoba untuk meningkatkan cakupan denda-butiran
  • 10:15 - 10:18
    yang mempengaruhi bagaimana Anda mengembangkan test suite
  • 10:18 - 10:20
    dan Anda akan berkembang bersama dengan perangkat lunak Anda
  • 10:20 - 10:24
    Jadi, kami telah menggunakan serangkaian terminologi dalam pengujian
  • 10:24 - 10:26
    Ini adalah istilah yang, oleh dan besar
  • 10:26 - 10:29
    ini paling sering digunakan dalam komunitas Rails
  • 10:29 - 10:30
    tetapi ada beberapa variasi
  • 10:30 - 10:33
    [dan] beberapa istilah lain bahwa Anda mungkin mendengar
  • 10:33 - 10:35
    Jika Anda pergi mendapatkan pekerjaan di suatu tempat
  • 10:35 - 10:36
    dan Anda mendengar tentang mutasi pengujian
  • 10:36 - 10:38
    yang belum kita lakukan
  • 10:38 - 10:40
    Ini adalah ide yang menarik, saya pikir, diciptakan oleh
  • 10:40 - 10:43
    Ammann dan Offutt, yang memiliki, semacam
  • 10:43 - 10:44
    buku definitif pengujian perangkat lunak
  • 10:44 - 10:46
    Idenya adalah:
  • 10:46 - 10:48
    Kira saya memperkenalkan bug yang disengaja ke kode saya
  • 10:48 - 10:49
    Apakah yang memaksa beberapa tes gagal?
  • 10:49 - 10:53
    Karena, jika aku berubah, Anda tahu, "Jika x" untuk "jika tidak x"
  • 10:53 - 10:56
    dan tidak ada tes gagal, maka baik aku kehilangan beberapa liputan
  • 10:56 - 10:59
    atau saya app sangat aneh dan entah bagaimana nondeterministic
  • 10:59 - 11:03
    Fuzz pengujian, yang Koushik Sen mungkin berbicara lebih banyak tentang
  • 11:03 - 11:07
    pada dasarnya, ini adalah "10.000 monyet di mesin tik
  • 11:07 - 11:09
    melemparkan masukan acak pada kode Anda"
  • 11:09 - 11:10
    Apa yang menarik tentang hal itu adalah bahwa
  • 11:10 - 11:11
    Kami telah melakukan tes
  • 11:11 - 11:13
    pada dasarnya yang dibuat untuk menguji app
  • 11:13 - 11:15
    Cara dirancang
  • 11:15 - 11:16
    dan ini, Anda tahu, fuzz pengujian
  • 11:16 - 11:19
    tentang pengujian app dalam cara itu * tidak * dimaksudkan untuk digunakan
  • 11:19 - 11:22
    Jadi, apa yang terjadi jika Anda melempar pengiriman form besar
  • 11:22 - 11:25
    Apa yang terjadi jika Anda meletakkan kontrol karakter dalam bentuk Anda?
  • 11:25 - 11:27
    Apa yang terjadi jika Anda mengirimkan hal yang sama berulang-ulang?
  • 11:27 - 11:29
    Dan, Koushik memiliki statistik yang
  • 11:29 - 11:32
    Microsoft menemukan hingga 20% bug mereka
  • 11:32 - 11:34
    menggunakan beberapa variasi fuzz pengujian
  • 11:34 - 11:36
    dan sekitar 25 %
  • 11:36 - 11:39
    Program baris perintah Unix yang umum
  • 11:39 - 11:40
    dapat dibuat untuk crash
  • 11:40 - 11:44
    [ketika] menempatkan melalui agresif fuzz pengujian
  • 11:44 - 11:46
    Penggunaan mendefinisikan cakupan adalah sesuatu yang belum kita lakukan
  • 11:46 - 11:48
    tapi itu adalah konsep menarik lain
  • 11:48 - 11:50
    Idenya adalah bahwa pada setiap titik dalam program saya
  • 11:50 - 11:52
    ada tempat di mana aku mendefinisikan —
  • 11:52 - 11:54
    atau saya menetapkan nilai ke beberapa variabel-
  • 11:54 - 11:56
    dan kemudian ada tempat Hilir
  • 11:56 - 11:57
    di mana mungkin aku akan mengkonsumsi nilai-
  • 11:57 - 11:59
    seseorang akan menggunakan nilai tersebut
  • 11:59 - 12:01
    Memiliki aku menutupi setiap pasangan?
  • 12:01 - 12:02
    Dengan kata lain, punya tes di mana setiap pasangan
  • 12:02 - 12:04
    mendefinisikan variabel dan menggunakannya di suatu tempat
  • 12:04 - 12:07
    dieksekusi di beberapa bagian dari test suites
  • 12:07 - 12:10
    Kadang-kadang disebut DU-cakupan
  • 12:10 - 12:14
    Dan ketentuan lain yang saya pikir tidak secara luas digunakan lagi
  • 12:14 - 12:17
    BlackBox versus whitebox, atau blackbox versus glassbox
  • 12:17 - 12:20
    Secara kasar, tes blackbox adalah salah satu yang ditulis dari
  • 12:20 - 12:22
    sudut pandang spesifikasi eksternal yang
  • 12:22 - 12:24
    [Misalnya:] "Ini adalah tabel hash
  • 12:24 - 12:26
    Ketika saya meletakkan di kunci saya harus mendapatkan kembali nilai
  • 12:26 - 12:28
    Jika saya menghapus kunci nilai boleh ada"
  • 12:28 - 12:29
    Itu adalah tes blackbox karena ia tidak mengatakan
  • 12:29 - 12:32
    apa-apa tentang bagaimana tabel hash diimplementasikan
  • 12:32 - 12:34
    dan tidak mencoba untuk stres pelaksanaan
  • 12:34 - 12:36
    Tes whitebox sesuai mungkin:
  • 12:36 - 12:38
    "Aku tahu sesuatu tentang fungsi hash
  • 12:38 - 12:39
    dan aku akan untuk sengaja menciptakan
  • 12:39 - 12:41
    kunci Hash di saya uji kasus
  • 12:41 - 12:43
    yang menyebabkan banyak hash tabrakan
  • 12:43 - 12:45
    untuk memastikan bahwa aku pengujian bagian fungsi"
  • 12:45 - 12:49
    Sekarang, C0 tes cakupan alat, seperti SimpleCov
  • 12:49 - 12:52
    akan mengungkapkan bahwa jika semua yang Anda miliki adalah blackbox tes
  • 12:52 - 12:53
    Anda mungkin menemukan bahwa
  • 12:53 - 12:55
    kode cakupan tabrakan tidak dipukul sangat sering
  • 12:55 - 12:56
    Dan yang mungkin Anda tip off mengatakan:
  • 12:56 - 12:58
    "Ok, jika benar-benar ingin untuk memperkuat bahwa-
  • 12:58 - 13:00
    untuk satu, jika saya ingin meningkatkan cakupan untuk tes
  • 13:00 - 13:02
    Sekarang aku harus menulis whitebox atau tes glassbox
  • 13:02 - 13:04
    Aku harus melihat ke dalam, melihat apa pelaksanaan
  • 13:04 - 13:05
    dan menemukan cara-cara khusus
  • 13:05 - 13:10
    untuk mencoba memecahkan pelaksanaan dalam cara-cara jahat"
  • 13:10 - 13:13
    Jadi, saya pikir, pengujian semacam cara hidup, benar?
  • 13:13 - 13:16
    Kita sudah jauh dari tahap
  • 13:16 - 13:18
    "Kita akan membangun semuanya dan kemudian kami akan menguji it"
  • 13:18 - 13:19
    dan kita sudah ke tahap
  • 13:19 - 13:20
    "Kami sedang menguji sebagai kita pergi"
  • 13:20 - 13:22
    Pengujian benar-benar lebih mirip sebuah alat pengembangan
  • 13:22 - 13:24
    dan seperti begitu banyak alat-alat pengembangan
  • 13:24 - 13:25
    efektivitas itu tergantung
  • 13:25 - 13:27
    pada apakah Anda menggunakannya dalam cara yang gurih
  • 13:27 - 13:31
    Jadi, Anda bisa mengatakan: "Yah, mari kita lihat-saya menendang ban
  • 13:31 - 13:33
    Kau tahu, aku bersemangat browser, saya mencoba beberapa hal
  • 13:33 - 13:35
    (tepuk tangan tangan) Tampak seperti itu bekerja! Menyebarkan!"
  • 13:35 - 13:38
    Itulah jelas cavalier lebih sedikit daripada yang Anda ingin menjadi
  • 13:38 - 13:41
    Dan, omong-omong, salah satu hal yang kami menemukan
  • 13:41 - 13:43
    dengan kursus online ini hanya memulai
  • 13:43 - 13:45
    Ketika 60.000 orang terdaftar dalam kursus
  • 13:45 - 13:48
    dan 0,1% dari orang-orang memiliki masalah
  • 13:48 - 13:50
    Anda akan mendapatkan email 60
  • 13:50 - 13:53
    Wajar adalah: bila situs Anda digunakan oleh banyak orang
  • 13:53 - 13:55
    beberapa bug bodoh bahwa Anda tidak menemukan
  • 13:55 - 13:57
    tapi yang bisa ditemukan dengan menguji
  • 13:57 - 13:59
    bisa sangat cepat menghasilkan * banyak * sakit
  • 13:59 - 14:02
    Di sisi lain, Anda tidak ingin dogmatis dan mengatakan
  • 14:02 - 14:04
    "Eh, sampai kami punya 100% cakupan dan menguji setiap adalah hijau
  • 14:04 - 14:06
    Kami benar-benar akan tidak kapal"
  • 14:06 - 14:07
    Itu tidak sehat baik
  • 14:07 - 14:08
    Dan kualitas tes
  • 14:08 - 14:10
    tidak selalu berkorelasi dengan pernyataan
  • 14:10 - 14:11
    kecuali Anda dapat mengatakan sesuatu
  • 14:11 - 14:12
    tentang kualitas tes Anda
  • 14:12 - 14:14
    hanya karena Anda telah dilaksanakan setiap baris
  • 14:14 - 14:17
    tidak berarti bahwa Anda telah diuji interesting kasus
  • 14:17 - 14:18
    Jadi, di suatu tempat di antara, Anda bisa mengatakan
  • 14:18 - 14:20
    "Yah, kita akan menggunakan alat-alat cakupan untuk mengidentifikasi
  • 14:20 - 14:23
    undertested atau buruk-diuji bagian kode
  • 14:23 - 14:24
    dan kita akan menggunakannya sebagai panduan
  • 14:24 - 14:27
    untuk mengurutkan membantu meningkatkan tingkat keyakinan keseluruhan kami"
  • 14:27 - 14:29
    Tapi ingat, Agile tentang merangkul perubahan
  • 14:29 - 14:30
    dan dealing with it
  • 14:30 - 14:32
    Bagian dari perubahan adalah hal-hal akan berubah yang akan menyebabkan
  • 14:32 - 14:33
    bug yang Anda tidak meramalkan
  • 14:33 - 14:34
    dan reaksi yang benar adalah:
  • 14:34 - 14:36
    Cukup nyaman untuk alat-alat pengujian
  • 14:36 - 14:37
    [hal] bahwa Anda dapat dengan cepat menemukan bug tersebut
  • 14:37 - 14:39
    Menulis tes yang mereproduksi bug itu
  • 14:39 - 14:40
    Dan kemudian membuat tes hijau
  • 14:40 - 14:41
    Kemudian Anda akan benar-benar memperbaikinya
  • 14:41 - 14:43
    Itu berarti, adalah cara yang Anda benar-benar memperbaiki bug
  • 14:43 - 14:45
    Jika Anda membuat tes yang benar gagal
  • 14:45 - 14:46
    untuk mereproduksi bug itu
  • 14:46 - 14:48
    dan kemudian Anda kembali dan tetap kode
  • 14:48 - 14:49
    untuk membuat tes lulus
  • 14:49 - 14:51
    Demikian pula, Anda tidak ingin mengatakan
  • 14:51 - 14:53
    "Yah, unit test memberi Anda lebih baik cakupan
  • 14:53 - 14:54
    Mereka lebih teliti dan terperinci
  • 14:54 - 14:56
    Jadi mari kita fokus kami pada hal itu"
  • 14:56 - 14:57
    sebagai lawan untuk
  • 14:57 - 14:58
    "Oh, fokus pada tes integrasi
  • 14:58 - 15:00
    karena mereka lebih realistis, kan?
  • 15:00 - 15:01
    Mereka mencerminkan apa yang dikatakan pelanggan yang mereka inginkan
  • 15:01 - 15:03
    Jadi, jika tes integrasi lewat
  • 15:03 - 15:05
    menurut definisi kita akan bertemu kebutuhan pelanggan"
  • 15:05 - 15:07
    Sekali lagi, kedua ekstrem tidak jenis sehat
  • 15:07 - 15:09
    karena masing-masing ini dapat menemukan masalah
  • 15:09 - 15:11
    yang akan dilewatkan oleh yang lain
  • 15:11 - 15:12
    Jadi, memiliki kombinasi yang baik dari mereka
  • 15:12 - 15:15
    semua jenis yang it's all about
  • 15:15 - 15:18
    Hal terakhir yang saya ingin meninggalkan Anda dengan adalah, aku berpikir
  • 15:18 - 15:20
    dalam hal pengujian, adalah "TDD versus
  • 15:20 - 15:22
    apa yang saya sebut konvensional debugging —
  • 15:22 - 15:24
    yaitu, cara bahwa kita semua jenis melakukannya
  • 15:24 - 15:25
    Meskipun kita berkata kita tidak"
  • 15:25 - 15:26
    dan kita semua mencoba untuk mendapatkan lebih baik, benar?
  • 15:26 - 15:27
    Kami semua jenis di selokan
  • 15:27 - 15:29
    Beberapa dari kami yang memandang bintang-bintang
  • 15:29 - 15:31
    mencoba untuk meningkatkan praktik kami
  • 15:31 - 15:33
    Tapi, setelah sekarang tinggal dengan ini untuk 3 atau 4 tahun sendiri
  • 15:33 - 15:35
    dan -aku akan jujur-3 tahun yang lalu saya tidak melakukan TDD
  • 15:35 - 15:37
    Saya melakukannya sekarang, karena saya menemukan bahwa lebih baik
  • 15:37 - 15:40
    dan di sini adalah saya distilasi mengapa saya berpikir ia bekerja untuk saya
  • 15:40 - 15:43
    Maaf, warna sedikit aneh
  • 15:43 - 15:45
    tetapi pada kolom kiri tabel
  • 15:45 - 15:46
    [itu] mengatakan "Konvensional debug"
  • 15:46 - 15:47
    dan sisi kanan mengatakan "TDD"
  • 15:47 - 15:49
    Jadi apa adalah cara saya gunakan untuk menulis kode?
  • 15:49 - 15:51
    Mungkin sebagian dari Anda masih melakukan hal ini
  • 15:51 - 15:53
    Aku menulis sejumlah garis
  • 15:53 - 15:54
    mungkin beberapa puluhan baris kode
  • 15:54 - 15:55
    Aku * yakin * mereka benar —
  • 15:55 - 15:56
    Maksudku, aku * am * programmer yang baik, benar?
  • 15:56 - 15:57
    Ini tidak terlalu sulit
  • 15:57 - 15:59
    Saya menjalankan TI-tidak bekerja
  • 15:59 - 16:01
    OK, api up debugger-mulai meletakkan di printf's
  • 16:01 - 16:04
    Jika saya telah menggunakan TDD apa yang akan saya lakukan bukan?
  • 16:04 - 16:08
    Yah aku akan menulis * sedikit * baris kode, setelah menulis tes pertama
  • 16:08 - 16:10
    Jadi segera seiring tes dari merah menjadi hijau
  • 16:10 - 16:12
    Aku tahu aku menulis kode yang bekerja-
  • 16:12 - 16:15
    atau setidaknya bagian dari perilaku yang ada dalam pikiran saya
  • 16:15 - 16:16
    Bagian-bagian dari perilaku bekerja, karena saya punya tes
  • 16:16 - 16:19
    OK, kembali ke konvensional debugging:
  • 16:19 - 16:21
    Aku sedang menjalankan program saya, mencoba untuk menemukan bug
  • 16:21 - 16:23
    Aku mulai meletakkan di printf di mana-mana
  • 16:23 - 16:24
    untuk mencetak nilai hal
  • 16:24 - 16:25
    yang dengan cara banyak menyenangkan
  • 16:25 - 16:26
    Ketika Anda mencoba untuk membacanya
  • 16:26 - 16:28
    keluar dari garis 500 log output
  • 16:28 - 16:29
    bahwa Anda akan mendapatkan dalam Rails app
  • 16:29 - 16:30
    mencoba untuk menemukan * Anda * printf's
  • 16:30 - 16:32
    kau tahu, "Aku tahu apa yang akan saya lakukan-
  • 16:32 - 16:34
    Aku akan menaruh di 75 tanda bintang sebelum dan sesudah
  • 16:34 - 16:36
    Yang akan membuat mudah dibaca"(tertawa)
  • 16:36 - 16:38
    Yang tidak-Ok, angkat tangan Anda jika Anda tidak melakukan ini!
  • 16:38 - 16:40
    Terima kasih atas kejujuran Anda. (tertawa) Oke.
  • 16:40 - 16:43
    Atau- Atau aku bisa melakukan hal yang lain, saya bisa mengatakan:
  • 16:43 - 16:45
    Alih-alih mencetak nilai variabel
  • 16:45 - 16:47
    Mengapa tidak menulis tes yang memeriksa itu
  • 16:47 - 16:48
    dalam sebuah harapan yang harus
  • 16:48 - 16:50
    dan aku akan tahu segera dalam huruf merah cerah
  • 16:50 - 16:53
    Jika tidak bertemu dengan harapan bahwa
  • 16:53 - 16:56
    OK, saya sedang kembali pada konvensional debugging sisi:
  • 16:56 - 16:58
    Aku keluar big guns: saya mengeluarkan Ruby debugger
  • 16:58 - 17:02
    Cara menetapkan debug breakpoint, dan sekarang mulai * tweaker * dan mengatakan
  • 17:02 - 17:04
    "Oh, mari kita lihat, aku harus bisa melewati itu pernyataan 'if'
  • 17:04 - 17:06
    Jadi aku harus mengatur hal itu
  • 17:06 - 17:07
    Oh, saya harus memanggil metode dan jadi saya perlu untuk..."
  • 17:07 - 17:08
    Tidak!
  • 17:08 - 17:10
    Aku * bisa * Sebaliknya-jika aku akan melakukan itu tetap-
  • 17:10 - 17:13
    Mari kita lakukan saja dalam file, mengatur beberapa mengolok-olok dan Rintisan bertopik
  • 17:13 - 17:16
    untuk mengontrol jalur kode, membuatnya pergi cara yang saya inginkan
  • 17:16 - 17:19
    Dan sekarang, "Ok, pasti aku sudah fixed it!
  • 17:19 - 17:22
    Aku akan mendapatkan keluar dari debugger, jalankan sekali lagi! "
  • 17:22 - 17:24
    Dan, tentu saja, 9 kali dari 10, Anda tidak memperbaikinya
  • 17:24 - 17:26
    atau Anda jenis sebagian tetap itu tetapi Anda tidak benar-benar memperbaikinya
  • 17:26 - 17:30
    dan sekarang saya harus melakukan semua hal-hal manual lagi
  • 17:30 - 17:32
    * atau * saya sudah memiliki sekelompok tes
  • 17:32 - 17:34
    dan jalankan saya dapat hanya kembali mereka secara otomatis
  • 17:34 - 17:35
    dan aku bisa, jika beberapa dari mereka gagal
  • 17:35 - 17:36
    "Oh, aku tidak memperbaiki semuanya
  • 17:36 - 17:38
    Tidak masalah, saya akan hanya pergi kembali!"
  • 17:38 - 17:39
    Jadi, intinya adalah bahwa
  • 17:39 - 17:41
    kau tahu, Anda * bisa * melakukannya di sisi kiri
  • 17:41 - 17:45
    tapi Anda menggunakan teknik yang sama dalam kedua kasus
  • 17:45 - 17:48
    Satu-satunya perbedaan adalah, dalam salah satu kasus yang Anda melakukannya secara manual
  • 17:48 - 17:50
    membosankan dan rawan kesalahan
  • 17:50 - 17:51
    Jika Anda melakukan sedikit lebih banyak pekerjaan
  • 17:51 - 17:53
    tapi Anda dapat membuatnya otomatis dan berulang
  • 17:53 - 17:55
    dan, Anda tahu, beberapa keyakinan tinggi
  • 17:55 - 17:57
    bahwa Anda mengubah hal-hal dalam kode Anda
  • 17:57 - 17:58
    Anda tidak melanggar hal-hal yang digunakan untuk bekerja
  • 17:58 - 18:00
    dan pada dasarnya lebih produktif
  • 18:00 - 18:02
    Jadi kalian semua sama hal-hal
  • 18:02 - 18:04
    tetapi dengan, misalnya, "delta" ekstra bekerja
  • 18:04 - 18:07
    Anda menggunakan usaha Anda di banyak leverage yang lebih tinggi
  • 18:07 - 18:10
    Jadi itu sebabnya jenis pandangan saya terhadap TDD adalah hal yang baik
  • 18:10 - 18:11
    Benar-benar, tidak memerlukan keterampilan baru
  • 18:11 - 18:15
    Ini hanya memerlukan [Anda] refactor keterampilan yang ada
  • 18:15 - 18:18
    Saya juga mencoba ketika saya-lagi, jujur pengakuan, kanan?-
  • 18:18 - 18:19
    Ketika saya mulai melakukan hal ini rasanya
  • 18:19 - 18:21
    "Ok, saya akan mengajar kursus di rel
  • 18:21 - 18:22
    Aku benar-benar harus fokus pada pengujian
  • 18:22 - 18:24
    Jadi aku kembali ke beberapa kode yang telah kutulis
  • 18:24 - 18:26
    itu * bekerja *-Anda tahu, itu layak kode-
  • 18:26 - 18:29
    dan aku mulai mencoba menulis tes untuk itu
  • 18:29 - 18:31
    dan itu * begitu menyakitkan *
  • 18:31 - 18:33
    karena kode tidak ditulis dalam cara yang dapat diuji
  • 18:33 - 18:34
    Ada semua jenis interaksi
  • 18:34 - 18:36
    Ada, seperti, bersarang conditional
  • 18:36 - 18:38
    Dan jika Anda ingin memisahkan pernyataan tertentu
  • 18:38 - 18:41
    dan tes-tes memicu-hanya pernyataan itu
  • 18:41 - 18:44
    jumlah hal-hal yang Anda harus mengatur dalam pengujian Anda
  • 18:44 - 18:45
    telah terjadi-
  • 18:45 - 18:46
    Ingat ketika berbicara tentang pura-pura kereta kecelakaan-
  • 18:46 - 18:48
    Anda harus mengatur semua infrastruktur ini
  • 18:48 - 18:49
    hanya untuk mendapatkan * satu * baris kode
  • 18:49 - 18:51
    dan Anda melakukan itu dan Anda pergi
  • 18:51 - 18:52
    "Aduh, pengujian ini benar-benar tidak layak!
  • 18:52 - 18:54
    Aku menulis 20 baris setup
  • 18:54 - 18:56
    supaya aku dapat menguji dua baris dalam fungsi saya!"
  • 18:56 - 18:58
    Apa yang benar-benar memberitahu Anda-seperti sekarang menyadari —
  • 18:58 - 19:00
    adalah fungsi Anda * buruk *
  • 19:00 - 19:01
    Itu adalah fungsi sangat ditulis
  • 19:01 - 19:02
    Hal ini tidak dapat diuji fungsi
  • 19:02 - 19:03
    It's got terlalu banyak bagian yang bergerak
  • 19:03 - 19:06
    dependensi yang * dapat Jadilah rusak
  • 19:06 - 19:07
    Ada tidak ada jahitan di fungsi saya
  • 19:07 - 19:11
    yang memungkinkan saya untuk menguji secara individual perilaku yang berbeda
  • 19:11 - 19:12
    Dan sekali Anda mulai melakukan tes pertama pembangunan
  • 19:12 - 19:15
    karena Anda harus menulis tes Anda dalam potongan kecil
  • 19:15 - 19:17
    itu agak membuat masalah berlalu
  • 19:17 -
    Sehingga telah pencerahan
Title:
5.8 - 5.11 - Coverage, Unit vs. Integration Tests, Other Testing Concepts, and Perspectives
Video Language:
English
aalatas added a translation

Indonesian subtitles

Revisions