Apa rujukan pertama yang dipublikasikan untuk pengujian-pemrograman pertama?


11

Saya membaca ulang Refactoring oleh Martin Fowler. Dalam Bab 4, Tes Bangunan, saya menemukan bagian berikut.

Bahkan, salah satu waktu paling berguna untuk menulis tes adalah sebelum Anda memulai pemrograman. Saat Anda perlu menambahkan fitur, mulailah dengan menulis tes. Ini tidak terbelakang seperti kedengarannya. Dengan menulis tes, Anda bertanya pada diri sendiri apa yang perlu dilakukan untuk menambahkan fungsi. Menulis tes juga berkonsentrasi pada antarmuka daripada implementasi (selalu merupakan hal yang baik). Ini juga berarti Anda memiliki titik jelas di mana Anda selesai melakukan pengkodean - saat tes bekerja.

Sementara saya seorang penganjur pengembangan yang didorong oleh tes sekarang, saya tidak ingat telah diperkenalkan dengan konsep ini ketika saya membaca buku ini hampir 5 tahun yang lalu.

Menurut Amazon.com, buku ini awalnya diterbitkan pada 8 Juli 1999. Apakah ini referensi pertama yang diterbitkan untuk menguji pemrograman pertama atau apakah ada sesuatu yang lebih awal?


Itu tidak subyektif. Apakah ini relevan? Saya kira tidak. Jika Anda memiliki motif yang bagus untuk membuka kembali pertanyaan ini, poskan di meta.programmers.stackexchange.com
Maniero

@ Bigown: Saya tidak yakin saya mengerti. Apakah Anda mengatakan bahwa Anda menutup pertanyaan ini karena tidak subyektif atau tidak relatif?
Eric Weilnau

Ini jelas obyektif.
Maniero

2
Ini juga pemrograman yang terkait dan menarik, dan meskipun mungkin ada satu jawaban yang benar, membuktikannya tidak mudah. Kemana lagi dia pergi? ProgrammingHistory.stackexchange?
AShelly

4
kami dapat mengizinkan pertanyaan obyektif di sini - kami lebih memilih pertanyaan subjektif tetapi sama seperti Stack Overflow memiliki beberapa pertanyaan SUBYEKTIF yang bertahan, situs ini dapat memiliki beberapa pertanyaan TUJUAN yang bertahan. (Saya tidak akan berharap untuk melihat "bagaimana cara mendapatkan kode Perl ini untuk bekerja" pertanyaan di sini, meskipun)
Jeff Atwood

Jawaban:


9

Pengembangan yang digerakkan oleh tes serupa dengan desain berdasarkan kontrak, di mana Anda memiliki prasyarat, invarian, dan postkondisi.

Istilah ini diciptakan oleh Bertrand Meyer sehubungan dengan desainnya tentang bahasa pemrograman Eiffel dan pertama kali dijelaskan dalam berbagai artikel mulai tahun 1986 [Wikipedia]

Metode formal paling tidak berasal dari tahun 1983, dan telah digunakan untuk sistem kritis keselamatan seperti metro Paris tanpa pengemudi menggunakan metode-B:

Dalam versi pertama dan paling abstrak, yang disebut Mesin Abstrak, desainer harus menentukan tujuan desain. [Wikipedia]

Ini bisa menjadi beberapa hal dari mana Kent Beck "membantu perintis ... penemuan kembali pemrograman uji-pertama".

Lebih penting lagi: Rupanya awal tahun 1960-an Proyek Mercury NASA adalah proyek perangkat lunak pertama yang menggunakan pengembangan berbasis tes dan praktik tangkas lainnya. Saya tidak dapat menemukan dokumentasi awal, tetapi inilah laporan tahun 2003 yang mengutip komunikasi anggota proyek:

Project Mercury berjalan dengan iterasi yang sangat pendek (setengah hari) yang bertanda waktu. Tim pengembang melakukan peninjauan teknis terhadap semua perubahan, dan, yang menarik, menerapkan praktik Pemrograman Ekstrim dari tes pengembangan pertama, perencanaan dan penulisan sebelum setiap kenaikan mikro.

Sisa dari laporan ini juga menarik, selanjutnya dikatakan:

Referensi paling awal yang kami temukan yang secara khusus berfokus pada menggambarkan dan merekomendasikan pengembangan berulang adalah laporan tahun 1968 dari Brian Randell dan FW Zurcher di IBM TJ Watson Research.

Selain pengujian otomatis, laporan 1968 menganjurkan pengkodean dan pengujian paralel, jika bukan tes-pertama:

g. Desain detail, pengkodean, dan dokumentasi masing-masing blok program.
h. Desain dan dokumentasi metode pengujian untuk setiap blok program secara paralel dengan langkah (g).


4

Jon Bently dalam Programming Pearls (aslinya diterbitkan tahun 1986) tidak secara khusus menyebutkan pemrograman Test-First. Tetapi dalam bab "Menulis Program yang Benar", ia menjelaskan menulis algoritma dengan terlebih dahulu mendefinisikan prasyarat, invarian dan postkondisi, dan pada bab berikutnya menjelaskan kerangka pengujian otomatis.

Ini bukan tes-pertama, tapi dia jelas meletakkan beberapa dasar.

Juga,

CIO Magazine, Maret 1993, Bug Busters , oleh Lucie Juneau, hal 84 :

Test case ... dapat dikembangkan bahkan sebelum kode apa pun telah ditulis. Idealnya kasus ini didasarkan pada persyaratan aplikasi ... Jika pengembang diberikan tes berbasis persyaratan sebelum mereka mulai menulis kode, mereka akan merancang produk yang dapat lulus tes ... "


Edisi ke-2 diterbitkan pada 7 Oktober 1999 menurut Amazon.com. Edisi 1 diterbitkan sekitar tahun 1986. Apakah referensi ini ada di edisi 1?
Eric Weilnau

Saya hanya membaca edisi ke-2. Kata pengantar tampaknya menunjukkan bahwa satu-satunya bab "Menulis Program yang Benar" ada di edisi 1, bab pengujian otomatis lebih baru.
AShelly

3

Itu adalah Kent Beck , dalam bukunya Extreme Programming , juga diterbitkan pada tahun 1999 .

teks alternatif


Menurut Amazon.com, buku ini awalnya diterbitkan pada 5 Oktober 1999. Ini hampir 3 bulan setelah Refactoring diterbitkan. Saya telah mengedit pertanyaan saya untuk memasukkan tanggal publikasi yang tepat menurut Amazon.com. Saya belum membaca buku Kent tetapi berasumsi bahwa buku itu memberikan lebih banyak informasi tentang pemrograman uji-pertama.
Eric Weilnau

3
Sangat menarik bahwa sampul belakang buku itu mengatakan Kent Beck "membantu perintis .. penemuan kembali pemrograman tes pertama." Dari mana dia menemukannya kembali?
AShelly

Temuan menarik, ASHelly!

1
@ AShelly: Beberapa tahun yang lalu Kent Beck memberikan keynote di RailsConf. Di dalamnya dia menggambarkan bagaimana dia menghasilkan TDD dan dia menyebutkan bahwa dia membacanya di sebuah artikel lama dari tahun 60an.
Jörg W Mittag
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.