|
Sayap-Jadikan pengujian unit cerdas dan sepenuhnya otomatiskata pengantar Pengujian unit adalah sarana yang sangat efektif untuk memastikan kualitas perangkat lunak, baik itu dari perspektif konsep intervensi dini dalam pengujian atau dari karakteristik pengujian unit yang dapat diverifikasi dengan kecepatan tinggi tanpa terpengaruh oleh UI, sehingga pengembangan berbasis pengujian yang dianjurkan oleh industri, driver uji yang disebutkan dalam hal ini lebih mengacu pada driver uji unit. Namun, tim pengembangan umum masih jarang melakukan pengujian unit secara sistematis, dan pengujian perangkat lunak aplikasi lebih banyak dilakukan oleh tim pengujian profesional untuk melakukan pengujian kotak hitam. Kesulitan terbesar pengujian unit bukanlah karena input dan output tidak dapat ditentukan, lagipula, itu sudah ditentukan dalam tahap pengembangan modul, tetapi bahwa penulisan kasus uji unit akan menghabiskan banyak jam kerja pengembang, dan menurut statistik yang relevan, waktu kasus uji unit bahkan akan jauh melebihi waktu pengembangan fungsi itu sendiri. Berikut adalah beberapa alasan paling umum mengapa pengembangan tidak menulis pengujian satuan: ● Persyaratan selalu tidak terbatas, dan masih ada persyaratan fungsional yang harus direalisasikan pada tahap selanjutnya, dan tidak ada waktu untuk mengisi unit ● Ada terlalu banyak tes unit untuk ditambah, dan tidak ada cara untuk memulai, jadi saya menolak secara subjektif. ● Tes unit sulit ditulis. Di satu sisi, alasannya mungkin karena implementasi fungsi fungsional tidak cukup masuk akal, dan di sisi lain, tidak ada (atau tidak diketahui) kerangka kerja uji unit dan kerangka kerja tiruan yang berguna. ● Pengujian unit tidak termasuk dalam beban kerja. Kedua, persyaratan fungsional masih tidak stabil, dan kinerja biaya penulisan tes unit tidak tinggi. Dengan kata lain, jika persyaratan berubah besok, tidak hanya kode fungsional yang akan dihapus, tetapi juga pengujian unit. Jika Anda tidak menulis pengujian satuan, maka bagian dari upaya ini tidak akan-. Faktanya, akar penyebab dari poin-poin di atas adalah bahwa penulisan pengujian unit terlalu memakan waktu, yang pada akhirnya menyebabkan hilangnya tenaga mesin yang digerakkan oleh uji, menyebabkan visi indah pengembangan yang digerakkan oleh pengujian terhenti dalam skenario nyata, karena terlalu sulit dan mahal untuk membuat mesin untuk penggerak ini. Berbagai unit "x" di pasaran dan kerangka kerja pengujian unit hanya memecahkan masalah menghasilkan bingkai luar yang digerakkan oleh pengujian, tanpa logika kasus penggunaan dan kemampuan pembuatan data berdasarkan pemahaman program yang mendalam. Oleh karena itu, membuat pengembang resisten dalam berbagai skenario terkait pengembangan. Rilis Wings (saat ini untuk C) memecahkan salah satu masalah terbesar bagi pemrogram, dan memiliki potensi untuk secara mendasar mengubah status quo pengujian unit, yang secara efektif akan meringankan tekanan pengujian kotak hitam tingkat sistem dan pengujian otomatis berdasarkan sumber daya manusia yang besar. Kasus pengujian kendala secara otomatis dihasilkan oleh program, dan teknologi dasar yang paling penting adalah teknologi penguraian parameter yang kompleks. Artinya, dapat secara sewenang-wenang menentukan penguraian rekursif tingkat berlapis di tingkat kompiler untuk jenis kompleks yang sewenang-wenang. Tanpa terobosan dalam teknologi penting ini, sistem pembuatan kasus uji otomatis tidak akan mampu secara komersial atau berkembang untuk menghasilkan data pengujian yang sesuai dengan efisiensi yang sangat rendah. Misalnya, alat fuzzing terkenal American Fuzzy Lop tidak dapat mengidentifikasi jenis struktur yang diperlukan oleh program pengguna, dan perlu mengembangkan algoritma pencarian berdasarkan lapisan terluar. Karakteristik program ini adalah bahwa input pada tingkat antarmuka dan persyaratan data modul internal jauh, dan data eksternal biasanya diubah lapis demi lapis transformasi kompleks menjadi jenis struktur data yang dibutuhkan oleh modul internal, sehingga jumlah komputasi dan waktu yang diperlukan untuk mengeksplorasi dari lapisan luar tidak akan terbayangkan. Berdasarkan Fuzzy Lop Amerika, agar dapat menghasilkan pernyataan SQL yang sah, modul internal program perlu dieksplorasi dalam beberapa hari, jauh dari menit atau jam. Kendala lain adalah bahwa input yang dapat diambil alih setiap program adalah data yang disusun dan dikompilasi dengan hati-hati dengan sejumlah besar aturan, dan sangat tidak realistis dan sangat memakan waktu untuk menghasilkan data ini melalui metode acak + eksplorasi. Oleh karena itu, tidak layak untuk menghasilkan kasus penggunaan yang dihasilkan secara otomatis dari kotak hitam serta input terluar. Jika kasus penggunaan yang digerakkan dihasilkan dari analisis struktur internal perangkat lunak, perlu untuk memiliki pemahaman yang mendalam tentang struktur kompilasi perangkat lunak. Sistem pembuatan kasus uji yang layak harus didasarkan pada bagian tengah program (titik masuk kunci) sebagai titik masuk pengujian yang paling tepat. Input modul ini telah mengubah input fuzzy menjadi parameter yang sangat terstruktur. Selama struktur kompleks ini dapat diidentifikasi, tipe data yang kompleks dapat didegradasi menjadi tipe data sederhana selangkah demi selangkah, dan konstruksi parameter dapat diselesaikan pada saat yang sama, pembuatan kasus penggunaan penggerak dapat diselesaikan secara otomatis. Pengujian berbasis modul, yang dapat diklasifikasikan sebagai pengujian unit tradisional, adalah cara terbaik untuk menemukan dan menahan cacat dalam fase R&D. Namun, karena keterbatasan pengujian unit, sejumlah besar driver perlu dikembangkan, dan promosi serta aplikasi di industri sangat terbatas. Tentu saja, pengujian unit juga dapat dilakukan setelah sistem terintegrasi untuk menghindari pembuatan program rintisan virtual. Produk Wings Nebulas Testing, yang diluncurkan di dunia untuk pertama kalinya beberapa hari yang lalu, adalah sistem pembuatan kasus uji unit yang cerdas dan sepenuhnya otomatis, yang telah mempelajari dan memecahkan kesulitan berikut, dan sekarang dibagikan kepada Anda. (1) Analisis mendalam parameter program Wings menggunakan teknologi yang mendasari kompiler untuk membentuk objek modul berdasarkan file sumber input sesuai dengan fungsinya. Objek berisi parameter input fungsi, jenis nilai pengembalian, dan informasi lainnya, yang dapat digunakan oleh modul fungsi driver dan modul kasus pengujian. Setiap file adalah unit yang melakukan analisis mendalam dari setiap parameter dari setiap fungsi di dalamnya, dan dapat mencapai penguraian dan dekomposisi yang akurat untuk jenis bersarang, tipe kompleks, dll., menjelaskan jenis kompleks lapis demi lapisan sebagai tipe data dasar, dan menghasilkan file deskripsi (PSD) dari struktur parameter. (2) Fungsi penggerak pembuatan modul otomatis Menurut informasi format file PSD, semua fungsi driver dari program sumber yang diuji dihasilkan secara otomatis, dan proses pengujian unit tidak lagi bergantung pada pengembang untuk menulis fungsi pengujian secara manual, tetapi hanya perlu mengkompilasi fungsi driver yang dihasilkan dan file sumber yang diuji bersama-sama, dan hasil pengujian dapat dijalankan dan hasil pengujian dapat dilihat. Driver uji secara otomatis menghasilkan program berdasarkan deskripsi PSD, sepenuhnya secara otomatis membangun semua parameter dan variabel global yang diperlukan yang mendorong pengujian yang sedang diuji, dan dapat menghasilkan driver pengujian terstruktur sesuai dengan hierarki variabel kompleks, yang dapat menghemat banyak waktu dalam menulis kasus pengujian unit. (3) Pembuatan dan pengelolaan data pengujian secara otomatis Ini digunakan untuk menghasilkan data pengujian secara otomatis, yang sesuai dengan informasi yang diekstraksi oleh fungsi pengujian dan data disimpan dalam file JSON dengan hubungan logis hierarkis tertentu. Data dan tipe data setelah dekomposisi dan ekspansi sesuai satu sama lain. Pengguna dapat secara sewenang-wenang meminggirkan data ini sesuai dengan kebutuhan bisnis, dan menggunakan file JSON untuk menampilkannya secara terstruktur dan hierarkis, yang sangat jelas. Data pengujian mencakup nilai variabel global dan nilai parameter saat fungsi yang diuji dipanggil. Wings menyediakan metode pengujian unit untuk menghasilkan fungsi driver secara otomatis, yang terutama mencakup langkah-langkah berikut: Gambar 1: Alur build yang digerakkan oleh pengujian unit 1 Ekstraksi informasi program yang diujiInformasi struktur program yang diuji terutama mencakup variabel global dan informasi fungsi dalam program, dan informasi fungsi terutama mencakup jumlah parameter, jenis parameter, dan jenis nilai pengembalian fungsi. Yang paling penting adalah mengekstrak informasi simbol dan informasi jenis untuk beberapa jenis kompleks, dan menganalisisnya menjadi tipe data dasar lapis demi lapis untuk menyelesaikan konstruksi variabel global dan parameter fungsi. Jenis-jenis variabel umumnya dibagi menjadi tipe dasar, tipe konstruksi, tipe penunjuk dan tipe null. Wings menggunakan teknologi kompilasi yang mendasarinya untuk menangani berbagai jenis variabel dengan cara yang berbeda. (1) Jenis dasar, seperti unsigned int u_int=20, Wings akan mengurai nama variabel ke u_int dan tipe data ke unsigned int. (2) Jenis konstruksi, jenis konstruksi secara kasar dibagi menjadi array, struct, commons, dan jenis enumerasi. ● Jenis array, seperti intarray[2][3], nama array adalah array, jenis int dan panjang array 2D, perilaku 2, kolom 3. ● Jenis struktur, untuk struktur sebagai array, daftar tertaut struct, dll., Penanda yang berbeda dibagi. (3) Jenis penunjuk, misalnya int **ptr = 0; , mengurai penunjuk sebagai penunjuk level 2 dari tipe int. (4) Tipe null, yang diselesaikan menjadi NULL. (5) Jenis sistem, seperti File, size_t, dll., ditandai sebagai jenis sistem, dan akan ditambahkan ke templat dan ditetapkan oleh pengguna. (6) Jenis penunjuk fungsi, analisis jenis nilai pengembalian, jenis parameter, dan jumlah parameter fungsi Untuk setiap unit kompilasi program sumber yang diuji, informasi fungsi yang diurai disimpan dalam struktur PSD yang sesuai, dan contoh kode sumber berikut dijelaskan:
Dalam program di atas, batalkan StructTypeTest3(myy_struct mm_struct[2])Struktur PSD yang disimpan adalah sebagai berikut:
Arti setiap node dalam file PSD adalah sebagai berikut: ●StructTypeTest3 mewakili nama fungsi, parmType0 mewakili jenis parameter, dan parmNum mewakili jumlah parameter ●mm_struct mewakili simbol parameter fungsi, baseType1 mewakili klasifikasi jenis (tipe data dasar, jenis konstruksi, tipe penunjuk, tipe null), jenis mewakili jenis tertentu, termasuk int, char, short, long, double, float, bool, dan jenis jenis yang tidak ditandatangani dan jenis dasar lainnya, dan ada beberapa jenis khusus seperti: ZOA_FUN jenis mewakili jenis fungsi, StructureOrClassType mewakili jenis struct, dll., dan name mewakili nama jenis struct, union, dan enum ●i_int mewakili tipe dasar, yang merupakan unit penugasan terkecil ●array_one mewakili jenis array, RowSize mewakili panjang array, dan array dapat dibagi menjadi array satu dimensi, array dua dimensi, dll ● titik mewakili jenis penunjuk, penunjuk dibagi menjadi penunjuk tingkat pertama, penunjuk tingkat kedua, dll., dan penunjuk umum digunakan sebagai parameter fungsi sebagai array, jadi untuk jenis penunjuk dasar, metode array alokasi dinamis digunakan untuk menetapkan nilai, dan pengguna dapat memodifikasi file nilai yang sesuai sesuai dengan kebutuhan. ● W mewakili jenis bidang bit, dan bitfileld mewakili jumlah digit ●functionPtr mewakili jenis penunjuk fungsi, yang masing-masing menganalisis jenis parameter, jumlah parameter, dan informasi nilai pengembalian ● Dem adalah singkatan dari tipe konsorsium ● dy mewakili jenis enum, dan nilai mewakili nilai jenis enum ● file mewakili jenis struktur, SystemVar mewakili variabel ini milik variabel dalam file header sistem, untuk jenis variabel ini, Wings menambahkan variabel template ke perpustakaan template, pengguna dapat menetapkan nilai khusus sesuai dengan kebutuhan tertentu. Misalnya, Jenis File ditangani sebagai berikut:
Pengguna juga dapat menambahkan metode penugasan mereka sendiri. Untuk jenis sistem, Wings dapat dibedakan dari jenis biasa yang ditentukan pengguna, dan saat mengurai ke jenis sistem bawaan, Wings dapat menghentikan analisis rekursif ke bawah. ●g_int mewakili variabel global, dan globalType mewakili variabel global ●next mewakili struktur daftar tertaut, dan NodeType mewakili struktur ini sebagai daftar tertaut ●returnType mewakili jenis nilai pengembalian fungsi. 2 Pembuatan driver otomatisDalam makalah di atas, informasi struktural variabel dan fungsi global dianalisis dan diekstraksi, dan informasi berikut digunakan untuk menyimpan di PSD untuk menyelesaikan keseluruhan pembuatan kerangka kerja pendorong program sumber yang diuji. Generasi terutama dibagi menjadi aspek-aspek berikut: Ø Deklarasi variabel global Ø Pengoperasian penetapan parameter fungsi, sesuai dengan jumlah parameter fungsi, tetapkan nilai secara bergantian Ø Penetapan variabel global dilakukan secara berurutan sesuai dengan jumlah variabel global yang digunakan oleh analisis Ø Panggilan fungsi asli Beberapa poin yang perlu diperhatikan adalah sebagai berikut: ● Selama proses pembuatan driver, beberapa fungsi khusus, seperti fungsi utama, fungsi statis, dll., tidak diproses sementara karena tidak dapat diakses oleh dunia luar. ● Untuk setiap file sumber yang diuji, file driver yang sesuai dihasilkan. ● Kontrol drive disertakan dalam Driver_main.cpp untuk secara otomatis mengonfigurasi jumlah pengujian fungsi melalui makro Fungsi driver yang dihasilkan oleh program sumber di atas adalah sebagai berikut: ● Semua variabel diberi nama sebelum nama variabel asli, tambahkan _ ● Dengan mendapatkan data pengujian yang sesuai, variabel ditetapkan secara bergantian ● Untuk parameter bawaan sistem dan parameter khusus pengguna, metode penugasan dikonfigurasi secara seragam melalui metode templat. ● Tetapkan dan panggil parameter ke fungsi yang diuji. 3 Data pengujian dibuat secara otomatisBerikut ini adalah kumpulan data yang dihasilkan dalam format PSD pada Gambar 3, setiap set data disimpan dalam format JSON, sehingga memudahkan untuk melihat hubungan hierarkis data.
Untuk setiap unit kompilasi, satu set file data pengujian yang sesuai dengan semua fungsi dihasilkan secara default, dan pembuatan nilai dapat dimodifikasi dengan jumlah konfigurasi. 4 MysqlHasil tes program ditampilkanCara menyelesaikan pembuatan framework driver, berikut ini adalah penjelasan detail mengenai proses pembuatan lengkap program open source MySQL. Berikut ini adalah diagram antarmuka utama Wings yang menguji Mysql: Klik File tombol untuk mengatur direktori proyek program sumber yang sedang diuji. Setelah pengaturan selesai, klik operasi fungsi, yang terutama mencakup penguraian parameter, pembuatan driver, pembuatan file nilai, dan penambahan templat. Folder berikut dihasilkan untuk analisis: Di antara mereka, modul penguraian parameter menghasilkan FunXml dan GlobalXml, yang masing-masing menyimpan informasi fungsi dan informasi variabel global dari setiap unit kompilasi yang diekstraksi. Modul pembuatan driver akan dihasilkan Wings_Projects folder yang sesuai, yang menyimpan file driver untuk setiap unit kompilasi Modul perolehan nilai menyimpan data pengujian yang dihasilkan untuk setiap unit kompilasi. Gambar berikut menunjukkan informasi struktur file driver yang dimuat oleh Mysql, dan pohon navigasi di sebelah kiri adalah file driver yang dihasilkan, yang berisi fungsi setiap unit kompilasi, serta parameter dan variabel global fungsi. Klik salah satu unit kompilasi untuk memuat file driver yang sesuai dan file nilai yang sesuai. Di atas adalah file driver dan file nilai yang sesuai dengan keseluruhan generasi Mysql, dan file driver dijelaskan secara rinci dalam kode berikut. ● Untuk setiap unit kompilasi, referensi variabel global adalah dengan extern. ● Fungsi driver secara seragam dinamai sebagai metode Driver_XXX, JSON digunakan sebagai cara untuk mendapatkan data pengujian, dan waktu mewakili jumlah pengujian dari satu fungsi. ● Untuk setiap operasi penetapan parameter, format penyimpanan PSD yang diurai digunakan untuk menetapkan nilai ke setiap struktur lapisan secara bergantian. Penerapan Wings sangat sederhana, berikut ini adalah indeks statistik dari data pengujian yang dihasilkan menggunakan kode Mysql yang dapat dikompilasi secara normal di Visual Studio 2015 sebagai contoh, seluruh proses pembuatan tidak memerlukan intervensi manual apapun, hanya perlu merumuskan jalur kode sumber yang perlu dihasilkan dan digerakkan. MySQLData pengujian | Mysqlversi | | | | Waktu yang dibutuhkan untuk menganalisis (PSDWaktu generasi) | | Waktu yang dibutuhkan untuk mendorong pembangkit | | Nilai dihasilkan oleh waktu yang dibutuhkan untuk menghasilkannya | |
Instruksi konfigurasi komputer: | Sistem operasi | | | Inter(R) Core(TM) i7-7700cpu 3.60GHz | | | | |
Di bawah ini adalah hasil yang diperoleh menggunakan alat statistik kode sumber, dengan lebih dari 4 juta baris kode uji unit valid yang dihasilkan oleh Wings sepenuhnya secara otomatis. Yang lebih menarik lagi adalah dapat dilihat bahwa biaya pengembangan manual kode-kode ini mencapai 1.079 bulan-kerja, dan biayanya sebanyak 10,79 juta.
Wings telah mewujudkan langkah pertama eksplorasi oleh program untuk menghasilkan program secara otomatis, versi pertama saat ini dirilis, pengembang yang tertarik dapat mengunduhnya langsung di platform cloud kode (https://gitee.com/teststars/wings_release), lisensi komersial menyediakan periode pengalaman fungsi tak terbatas selama satu bulan, Anda dapat dengan cepat merasakan kekuatan magis Wings, versi bahasa Wings c mendukung berbagai platform, seperti studio visual, vxworks, gcc, qt, dll. Wings dirancang dan dikembangkan oleh tim pengujian Nebulas (www.teststar.cc), dan pengembang yang tertarik dapat menghubungi tim pengujian Nebulas melalui platform interaktif Codecloud untuk menyumbangkan ide desain dan umpan balik penggunaan produk mereka (untuk saran luar biasa yang diadopsi, Nebulas dapat memperpanjang periode penggunaan gratisnya setidaknya selama tiga bulan). Wings memiliki gen yang kuat dan mendasari untuk sangat meningkatkan kualitas perangkat lunak, dan di masa depan, Wings akan sangat mengoptimalkan keterbacaan program yang ditulis secara otomatis (lebih dekat ke tingkat penulisan pemrogram yang baik) dan dukungan untuk bahasa C++.
|