Gunakan cakupan kode untuk menentukan berapa banyak kode yang sedang diuji

Untuk menentukan proporsi kode proyek Anda yang sedang diuji oleh pengujian berkode seperti pengujian unit, Anda dapat menggunakan fitur cakupan kode Visual Studio. Untuk mengantisipasi bug secara efektif, pengujian Anda harus melakukan pengujian atau 'mencakup' proporsi besar dari kode Anda.

Analisis cakupan kode dimungkinkan untuk kode terkelola (CLR) dan tidak dikelola (asli). Instrumentasi statis dan dinamis didukung. Untuk menggunakan cakupan kode dalam skenario baris perintah, gunakan alat vstest.console.exe atau Microsoft.CodeCoverage.Console, yang merupakan ekstensi untuk cakupan dotnet yang juga mendukung kode asli.

Opsi cakupan kode tersedia di bawah menu Uji saat Anda menjalankan metode pengujian menggunakan Test Explorer. Tabel hasil menunjukkan persentase kode yang dijalankan di setiap perakitan, kelas, dan prosedur. Editor sumber menyoroti kode yang diuji. Anda dapat mengekspor hasilnya dalam format populer seperti Cobertura.

Persyaratan

Nota

Cakupan kode tersedia di edisi Visual Studio Enterprise, Community, dan Professional. Di Visual Studio 2022 dan versi sebelumnya, fitur cakupan kode terbatas pada edisi Visual Studio Enterprise.

Nota

Cakupan kode hanya tersedia dengan Visual Studio Enterprise. Untuk cakupan kode .NET, Anda dapat menggunakan alat baris perintah, dotnet-coverage.

Menganalisis cakupan kode

  1. Pada menu Pengujian, pilih Analisis Cakupan Kode untuk Semua Pengujian.

    Cuplikan layar menu Uji dengan Cakupan kode Analisis disorot.

    Tips

    Anda juga dapat menjalankan cakupan kode dari jendela alat Test Explorer.

  2. Setelah pengujian berjalan, untuk melihat baris mana yang telah dijalankan, pilih Cuplikan layar menu Analisis cakupan kode di Visual StudioTampilkan Pewarnaan Cakupan Kode di jendela Hasil Cakupan Kode . Secara default, kode yang dicakup oleh pengujian disorot dengan warna biru muda.

    Cuplikan layar menampilkan sorotan cakupan kode.

    Di daftar drop-down untuk opsi Tampilkan Pewarnaan Cakupan Kode, Anda dapat memilih apakah pewarnaan berlaku pada baris-baris kode, simbol-simbol di margin kiri, atau keduanya.

  3. Untuk mengubah warna atau menggunakan teks tebal, pilih Alat>Opsi>Lingkungan>Font dan Warna>Tampilkan pengaturan untuk: Editor Teks. Di bawah item Tampilan, sesuaikan pengaturan untuk item "Cakupan", misalnya, Cakupan Area Tidak Disentuh.

    Cuplikan layar yang menunjukkan font dan warna cakupan kode

  4. Jika hasilnya menunjukkan cakupan yang rendah, periksa bagian kode mana yang tidak dijalankan, dan tulis lebih banyak tes untuk mencakupnya. Tim pengembangan biasanya bertujuan untuk cakupan kode sekitar 80%. Dalam beberapa situasi, cakupan yang lebih rendah dapat diterima. Misalnya, cakupan yang lebih rendah dapat diterima di mana beberapa kode dihasilkan dari templat standar.

Tips

Untuk mengoptimalkan cakupan kode:

  • Nonaktifkan pengoptimalan pengkompilasi.
  • Jika Anda bekerja dengan kode yang tidak dikelola (asli), gunakan build debug.
  • Hasilkan file .pdb (simbol) untuk setiap assembly.

Jika Anda tidak mendapatkan hasil yang Anda harapkan, lihat Memecahkan masalah cakupan kode.

Jangan lupa menjalankan pengujian cakupan kode lagi setelah memperbarui kode Anda. Hasil cakupan dan pewarnaan kode tidak diperbarui secara otomatis setelah Anda mengubah kode atau saat menjalankan pengujian.

Tips

Mulai Visual Studio 2022 versi 17.2, Anda dapat mengaktifkan fitur cakupan kode terbaru dengan memilih Alat > Opsi > Fitur Pratinjau > Lingkungan, lalu memilih peningkatan pengalaman cakupan kode , lalu memulai ulang Visual Studio.

Laporkan dalam blok atau baris

Cakupan kode dihitung dalam blok . Blok adalah bagian dari kode dengan tepat satu titik masuk dan satu titik keluar. Jika alur kontrol program melewati blok selama eksekusi pengujian, blok tersebut dihitung sebagai tercakup. Berapa kali blok digunakan tidak memengaruhi hasilnya.

Anda juga bisa menampilkan hasil untuk baris dengan memilih Tambahkan/Hapus Kolom di header tabel. Beberapa pengguna lebih suka hitungan baris karena persentasenya lebih sesuai dengan ukuran fragmen yang Anda lihat di kode sumber. Blok perhitungan yang panjang akan dihitung sebagai satu blok meskipun menempati banyak baris.

Tips

Baris kode dapat berisi lebih dari satu blok kode. Jika demikian, dan uji coba menjalankan semua blok kode dalam baris, itu dihitung sebagai satu baris. Jika beberapa tetapi tidak semua blok kode dalam baris diuji, itu dihitung sebagai baris sebagian.

Tampilan hasil cakupan kode

Jendela Hasil Cakupan Kode biasanya menstrukturkan laporan dalam hierarki proyek/kelas/metode. Anda dapat mengubah ini untuk menampilkan cakupan pada tingkat direktori/file/metode.

  • Untuk melihat Laporan sumber, pilih ikon Konfigurasi Tampilan Cakupan Kode di jendela Hasil Cakupan Kode. Lalu pilih Tampilan Sumber dari menu drop-down Gaya Laporan.

Jendela Hasil Cakupan Kode biasanya menunjukkan hasil untuk seluruh solusi. Hasilnya dapat difilter untuk menampilkan hasil hanya untuk file yang telah diperbarui di cabang saat ini.

  • Untuk melihat Laporan set perubahan, pilih ikon Konfigurasikan Tampilan Cakupan Kode di jendela Hasil Cakupan Kode. Lalu pilih Laporan Set Perubahan dari menu drop-down Konten Laporan. Perbarui Repositori Aktif dan Cabang Dasar untuk dibandingkan untuk memberikan laporan perbandingan.

Dari kotak pencarian di jendela Hasil Cakupan Kode, ada beberapa cara laporan dapat disaring.

  • Untuk Cari berdasarkan nama (Perlihatkan hanya yang cocok dengan string pencarian di jendela), masukkan string pencarian di kotak pencarian.
  • Untuk Filter berdasarkan jenis, masukkan nama jenis ke dalam kotak pencarian.
  • Untuk Perlihatkan semua kosongkan kotak pencarian.
  • Untuk Tampilkan 100%tercakup sepenuhnya, masukkan "Tercakup (%Lines)":"100" di kotak pencarian.
  • Untuk Tampilkan (>0% && < 100%) yang dicakup sebagian, masukkan "Sebagian Tercakup (%Lines)":"<##" mengganti ## dengan persentase yang tercakup.
  • Untuk Tampilkan 0%tercakup, masukkan "Tidak Tercakup (%Lines)":"0" di kotak pencarian.

Mengelola hasil cakupan kode

Jendela Hasil Cakupan Kode biasanya menunjukkan hasil eksekusi terbaru. Hasilnya akan bervariasi jika Anda mengubah data pengujian, atau jika Anda hanya menjalankan beberapa pengujian setiap kali.

Jendela Hasil Cakupan Kode juga dapat digunakan untuk melihat hasil sebelumnya, atau hasil yang diperoleh di komputer lain.

Anda dapat menggabungkan hasil beberapa eksekusi, misalnya dari eksekusi yang menggunakan data pengujian yang berbeda.

  • Untuk melihat kumpulan hasil sebelumnya, pilih dari menu drop-down. Menu menampilkan daftar sementara yang dibersihkan saat Anda membuka solusi baru.

  • Untuk melihat hasil dari sesi sebelumnya, pilih Impor Hasil, navigasikan ke folder TestResults dalam solusi Anda, dan impor file .coverage.

    Pewarnaan cakupan mungkin salah jika kode sumber telah berubah sejak file .coverage dibuat.

  • Untuk membuat hasil dapat dibaca sebagai teks, pilih Ekspor Hasil, pilih .xml sebagai Simpan sebagai jenis. Ini menghasilkan file .xml yang dapat dibaca, yang dapat Anda proses dengan alat lain atau mengirim dengan mudah melalui email. Anda juga dapat memilih format ekspor seperti Cobertura.

  • Untuk mengirim hasil ke orang lain, kirim file .coverage atau file .xml yang diekspor. Mereka kemudian dapat mengimpor file. Jika mereka memiliki versi kode sumber yang sama, mereka dapat melihat pewarnaan cakupan.

Menggabungkan hasil dari eksekusi yang berbeda

Dalam beberapa situasi, blok yang berbeda dalam kode Anda akan digunakan tergantung pada data pengujian. Oleh karena itu, Anda mungkin ingin menggabungkan hasil dari eksekusi pengujian yang berbeda.

Misalnya, ketika Anda menjalankan pengujian dengan input "2", Anda menemukan bahwa 50% fungsi tertentu tercakup. Saat Anda menjalankan pengujian untuk kedua kalinya dengan input "-2", Anda akan melihat dalam tampilan pewarnaan cakupan yang dicakup oleh 50% fungsi lainnya. Sekarang Anda menggabungkan hasil dari dua eksekusi pengujian, dan tampilan pewarnaan laporan dan cakupan menunjukkan bahwa 100% fungsi tercakup.

Gunakan ikon untuk tombol Gabungkan di jendela Cakupan Kode.Gabungkan Hasil untuk melakukan ini. Anda dapat memilih kombinasi apapun dari eksekusi terbaru dan hasil yang diimpor. Jika Anda ingin menggabungkan hasil yang diekspor, Anda harus mengimpornya terlebih dahulu.

Gunakan Hasil Ekspor untuk menyimpan hasil operasi penggabungan.

Batasan dalam penggabungan

  • Jika Anda menggabungkan data cakupan dari versi kode yang berbeda, hasilnya ditampilkan secara terpisah, tetapi tidak digabungkan. Untuk mendapatkan hasil gabungan sepenuhnya, gunakan build kode yang sama, hanya mengubah data pengujian.

  • Jika Anda menggabungkan file hasil yang telah diekspor lalu diimpor, Anda hanya dapat melihat hasilnya menurut baris, bukan dengan blok. Gunakan perintah Tambahkan/Hapus Kolom untuk memperlihatkan data baris.

  • Jika Anda menggabungkan hasil dari pengujian proyek ASP.NET, hasil untuk pengujian terpisah ditampilkan, tetapi tidak digabungkan. Perilaku ini hanya berlaku untuk artefak ASP.NET itu sendiri: hasil untuk rakitan lain akan digabungkan.

Mengecualikan elemen dari hasil cakupan kode

Anda mungkin ingin mengecualikan elemen tertentu dalam kode Anda dari skor cakupan, misalnya jika kode dihasilkan dari templat teks. Tambahkan atribut System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute ke salah satu elemen kode berikut: kelas, struktur, metode, properti, setter properti atau getter, peristiwa.

Tips

Mengecualikan sebuah kelas tidak berarti mengecualikan kelas turunannya.

Misalnya:

using System.Diagnostics.CodeAnalysis;
...
public class ExampleClass1
{
    [ExcludeFromCodeCoverage]
    void ExampleMethod() {...}

    [ExcludeFromCodeCoverage] // exclude property
    int ExampleProperty1
    { get {...} set{...}}

    int ExampleProperty2
    {
        get
        {
            ...
        }
        [ExcludeFromCodeCoverage] // exclude setter
        set
        {
            ...
        }
    }

}
[ExcludeFromCodeCoverage]
class ExampleClass2 { ... }

Gunakan makro berikut:

ExcludeFromCodeCoverage( ExclusionName, L"FunctionName");

ExcludeSourceFromCodeCoverage( ExclusionName, L""); SourceFilePath

  • ExclusionName bisa berupa nama unik apa pun.

  • FunctionName adalah nama fungsi yang sepenuhnya memenuhi syarat. Mungkin berisi kartubebas. Misalnya, untuk mengecualikan semua fungsi kelas, tulis MyNamespace::MyClass::*

  • SourceFilePath adalah jalur lokal atau UNC dari file .cpp. Mungkin berisi kartubebas. Contoh berikut mengecualikan semua file dalam direktori tertentu: \\MyComputer\Source\UnitTests\*.cpp

  • #include <CodeCoverage\CodeCoverage.h>

  • Lakukan panggilan ke makro pengecualian di namespace global, bukan dalam namespace atau kelas apa pun.

  • Anda dapat menempatkan pengecualian baik dalam file kode pengujian unit atau file kode aplikasi.

  • Pengecualian harus dikompilasi sebagai kode yang tidak dikelola (asli), baik dengan mengatur opsi pengkompilasi atau dengan menggunakan #pragma managed(off).

Nota

Untuk mengecualikan fungsi dalam kode C++/CLI, terapkan atribut [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] ke fungsi . Ini sama dengan untuk C#.

Sertakan atau kecualikan elemen tambahan

Analisis cakupan kode hanya dilakukan pada rakitan yang dimuat dan file .pdb tersedia di direktori yang sama dengan file .dll atau .exe. Oleh karena itu, Anda dalam beberapa keadaan dapat memperluas kumpulan rakitan yang sudah termasuk dengan mendapatkan salinan file .pdb yang sesuai.

Anda dapat melakukan kontrol lebih besar atas rakitan dan elemen mana yang dipilih untuk analisis cakupan kode dengan menulis .runsettings file. Misalnya, Anda dapat mengecualikan assembly dari jenis tertentu tanpa perlu menambahkan atribut ke kelasnya. Untuk informasi selengkapnya, lihat Menyesuaikan analisis cakupan kode.

Menganalisis cakupan kode di Azure Pipelines

Saat Anda memeriksa kode, pengujian Anda berjalan di server build bersama dengan pengujian dari anggota tim lain. Ini berguna untuk menganalisis cakupan kode di Azure Pipelines untuk mendapatkan gambaran cakupan paling up-todan komprehensif dalam seluruh proyek. Cakupan kode di Azure Pipelines juga mencakup pengujian sistem otomatis dan pengujian berkode lainnya yang biasanya tidak Anda jalankan pada komputer pengembangan.

Menganalisis cakupan kode dari baris perintah

Untuk menjalankan pengujian dari baris perintah, gunakan utilitas vstest.console.exe. Cakupan kode adalah opsi utilitas vstest.console.exe yang dipanggil oleh opsi /EnableCodeCoverage.

  1. Luncurkan Perintah Pengembang untuk Visual Studio:

    Di menu Windows Mulai, cari Developer Command Prompt for VS dan pilih Hasil aplikasi yang terkait dengan teks pencarian Anda.

  2. Pada prompt perintah, jalankan perintah berikut:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
    

    Tips

    Untuk Developer PowerShell, direktori awal shell adalah Lokasi Proyek Visual Studio. Ganti MyTestAssembly.dll dengan jalur dan nama file uji. Untuk informasi selengkapnya, lihat VSTest.Console.exe opsi baris perintah.

Pemecahan Masalah

Jika Anda tidak melihat hasil cakupan kode, artikel Memecahkan masalah cakupan kode mungkin membantu Anda.