Cara dengan mudah mereproduksi hasil yang dipublikasikan di artikel saya sendiri menggunakan kode saya sendiri

15

Saya menulis sebuah program / perpustakaan yang saya gunakan untuk mendapatkan hasil dalam sebuah artikel. (Di sini adalah , tapi pertanyaan saya adalah umum.) Saya harus tes yang saya jalankan secara teratur menggunakan ctest(dibutuhkan beberapa menit untuk berjalan). Untuk mereproduksi beberapa tabel atau angka dalam artikel, saya harus membuat skrip atau program driver sederhana, yang berjalan mungkin 10 menit, kadang-kadang lebih, jadi saya tidak ingin memiliki bagian dari test suite reguler ini. Pada saat yang sama, saya ingin memastikan bahwa hasil dari artikel tersebut dapat:

  • direproduksi nanti
  • pastikan mereka masih memberikan hasil yang sama / benar setelah saya terus mengembangkan perpustakaan

Saat ini saya mencoba untuk memiliki program driver kecil yang saya jalankan sebagai bagian dari test suite reguler, dan jika saya ingin mereproduksi hasil dari artikel, saya menghapus tanda komentar beberapa baris di sana. Tentu saja, saya tidak pernah tahu baris mana yang tepat dan apakah saya harus mengubah beberapa parameter lain untuk mendapatkan hasil yang persis sama seperti pada artikel.

Saya juga mencoba untuk memiliki skrip Python yang menghitung angka / tabel yang tepat dari artikel. Skrip seperti itu biasanya berhenti berfungsi setelah pembaruan ke perpustakaan, karena skrip tersebut tidak dijalankan secara reguler (membutuhkan terlalu banyak waktu).

Metode terbaik yang terpikir oleh saya adalah memiliki contoh Fortran (atau C / C ++), yang akan dikompilasi secara teratur (sebagai bagian dari perpustakaan), tetapi tidak dijalankan dalam test suite reguler. Dengan begitu, setidaknya saya tahu bahwa itu mengkompilasi dengan baik (dan dengan demikian mudah-mudahan juga berjalan). Dan saya akan menguji beberapa contoh sederhana (lebih kecil) sebagai bagian dari test suite reguler.

Apa cara optimal untuk menangani masalah ini?

OndČej Čertík
sumber
2
Pertanyaan yang bagus, reaksi pertama saya adalah Anda harus membagi pengujian Anda menjadi regresi cepat yang dapat dijalankan dengan cepat dan dilakukan sebelum setiap komit dan regresi yang lebih lama yang ingin Anda gunakan sebagai bagian dari upaya integrasi berkelanjutan. Apakah Anda secara khusus dalam situasi di mana Anda hanya memiliki tes varietas sebelumnya dan belum membaginya?
Aron Ahmadia
Saya memiliki banyak tes yang berjalan cepat, lihat di sini: github.com/certik/hfsolver/tree/master/src/tests , tapi saya tidak tahu bagaimana menangani perhitungan aktual untuk artikel (mis. 10 menit untuk setiap tabel / Angka memberikan total beberapa jam dengan mudah).
Ondřej Čertík
2
Jalankan tes panjang secara otomatis setiap malam (atau mingguan, bulanan, dll.) Menggunakan server integrasi berkelanjutan. Karena Anda tidak harus memperhatikan apa pun selain hasilnya, Anda tidak akan peduli berapa lama waktu yang dibutuhkan.
David Ketcheson

Jawaban:

6

Dalam deal.II, kami memiliki testuite yang digerakkan oleh Makefile Unix biasa. Ini memiliki target default yang menjalankan semua tes biasa, dan target terpisah untuk tes mahal. Menjalankan setiap tes dilakukan dengan menggunakan aturan umum tetapi target default memanggil aturan umum hanya untuk tes tertentu dan target mahal menyebutnya untuk tes mahal. Karena semuanya dilakukan dengan menggunakan aturan umum, itu harus up to date pada waktu tertentu; yang mungkin sudah ketinggalan zaman hanya dapat berupa daftar nama tes.

Pembaruan: Teks di atas benar pada 2012. Sejak 2014, kesepakatan. II testuite didasarkan pada CTest, tetapi gagasan umum tetap valid.

Wolfgang Bangerth
sumber
Terima kasih! Berikut tautan ke dokumen: dealii.org/7.2.0/development/testsuite.html#regress_tests dan inilah hasil dari "tes biasa": dealii.org/cgi-bin/regress_quick.pl dan di sini "tes mahal": dealii.org/cgi-bin/regress.pl , apakah saya benar? Jadi, Anda menjalankan "tes biasa" di setiap revisi dan "tes mahal" hanya setiap beberapa revisi?
Ondřej Čertík
Tidak terlalu. Hasil untuk tes mahal biasanya tidak diposting ke situs web.
Wolfgang Bangerth
Jadi Anda menjalankannya secara manual katakanlah sebelum setiap rilis? Berapa lama untuk berlari? Saya suka pendekatan Anda.
Ondřej Čertík
1
Ya, secara manual. Sesekali, sebelum rilis pasti. Untuk beberapa proyek mereka membutuhkan waktu satu jam atau lebih tetapi karena mereka hanya menguji sebagian kecil perpustakaan (mereka sebagian besar menguji proyek tambahan untuk berurusan. II) itu tidak selalu layak atau mungkin dijalankan dengan setiap revisi.
Wolfgang Bangerth
Apakah Anda memiliki tes paralel yang hanya dapat dijalankan pada superkomputer, misalnya, tes skala besar apa pun yang dilakukan p4est?
Aron Ahmadia