Menggunakan cakupan kode untuk menentukan seberapa 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 secara efektif menjaga terhadap bug, pengujian Anda harus berolahraga atau 'menutupi' proporsi besar 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

Fitur cakupan kode hanya tersedia di edisi Visual Studio Enterprise.

Catatan

Untuk cakupan kode .NET, Anda dapat menggunakan alat baris perintah, cakupan dotnet.

Menganalisis cakupan kode

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

    Cuplikan layar menu Uji dengan Cakupan analisis kode disorot.

    Cuplikan layar menu Uji dengan Cakupan analisis kode disorot.

    Tip

    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 memperlihatkan cakupan kode disorot.

    Cuplikan layar memperlihatkan cakupan kode disorot.

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

  3. Untuk mengubah warna atau menggunakan tampilan tebal, pilih Alat>Opsi>Lingkungan>Font dan Warna>Tampilkan pengaturan untuk: Editor Teks. Pada Tampilkan item, sesuaikan pengaturan untuk item "Cakupan", misalnya, Area Cakupan Tidak Tersentuh.

    Cuplikan layar memperlihatkan font dan warna cakupan kode

    Cuplikan layar memperlihatkan font dan warna cakupan kode.

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

Tip

Untuk mengoptimalkan cakupan kode:

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

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

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

Tip

Mulai Visual Studio 2022 Update 2, Anda dapat mengaktifkan hasil pengujian cakupan kode yang lebih cepat dengan memilih Alat > Opsi > Lingkungan > Fitur Pratinjau, lalu memilih Peningkatan pengalaman cakupan kode, lalu memulai ulang Visual Studio.

Melaporkan dalam blok atau baris

Cakupan kode dihitung dalam blok. Blok adalah bagian dari kode dengan tepat satu titik masuk dan keluar. Jika alur kontrol program melewati blok selama 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 penghitungan yang panjang akan dihitung sebagai satu blok meskipun menempati banyak baris.

Tip

Baris kode dapat berisi lebih dari satu blok kode. Jika demikian, dan pengujian menjalankan semua blok kode dalam baris, itu dihitung sebagai satu baris. Jika beberapa tetapi tidak semua blok kode dalam baris dijalankan, blok tersebut dihitung sebagai baris parsial.

Memfilter hasil cakupan kode

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 Changeset Report 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 difilter.

  • Untuk Mencari berdasarkan nama (Perlihatkan hanya yang cocok dengan string pencarian di jendela), masukkan string pencarian di kotak pencarian.
  • Untuk Memfilter menurut jenis masukkan nama jenis dalam kotak pencarian.
  • Untuk Memperlihatkan semua bersihkan kotak pencarian.
  • Untuk Menampilkan 100% tercakup sepenuhnya, masukkan "Tercakup (%Baris)":"100" di kotak pencarian.
  • Untuk Menampilkan (>0% && < 100%) tercakup sebagian, masukkan "Sebagian Tercakup (%Baris)":"<##" mengganti ## dengan persentase tercakup.
  • Untuk Memperlihatkan 0% tercakup, masukkan "Tidak Tercakup (%Baris)":"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 dari beberapa eksekusi, misalnya dari eksekusi yang menggunakan data pengujian yang berbeda.

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

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

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

  • Agar hasil dapat dibaca sebagai teks, pilih Ekspor Hasil Cakupan Kode. Ini menghasilkan file .coveragexml yang dapat dibaca, yang dapat diproses dengan alat lain atau dikirim dengan mudah melalui email. Anda juga dapat memilih format ekspor seperti Cobertura.

  • Untuk mengirim hasil ke orang lain, kirim file .coverage atau file .coveragexml yang diekspor. Kemudian mereka dapat mengimpor file-nya. Jika 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 menjalankan pengujian dengan input "2", Anda menemukan bahwa 50% dari fungsi tertentu tercakup. Ketika menjalankan pengujian untuk kedua kalinya dengan input "-2", Anda akan melihat dalam tampilan pewarnaan cakupan bahwa 50% fungsi lainnya tercakup. 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.Hasil Cakupan Kode Penggabungan untuk melakukan ini. Anda dapat memilih kombinasi eksekusi terbaru atau hasil yang diimpor. Jika ingin menggabungkan hasil yang diekspor, Anda harus mengimpornya terlebih dahulu.

Gunakan Ekspor Hasil Cakupan Kode 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 menggabungkan file hasil yang telah diekspor lalu diimpor, Anda hanya dapat melihat hasilnya menurut baris, bukan menurut blok. Gunakan perintah Tambahkan/Hapus Kolom untuk menampilkan 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, pengatur dan pengambil properti, peristiwa.

Tip

Mengecualikan kelas tidak mengecualikan kelas turunannya.

Contohnya:

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 adalah nama yang unik.

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

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

  • #include <CodeCoverage\CodeCoverage.h>

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

  • Anda dapat memasukkan pengecualian di file kode pengujian unit atau file kode aplikasi.

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

Catatan

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

Menyertakan atau mengecualikan elemen tambahan

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

Anda dapat lebih mengontrol rakitan dan elemen yang dipilih untuk analisis cakupan kode dengan menulis file .runsettings. Misalnya, Anda dapat mengecualikan rakitan dari jenis tertentu tanpa harus menambahkan atribut ke kelasnya. Untuk informasi selengkapnya, lihat Menyesuaikan analisis cakupan kode.

Menganalisis cakupan kode di Alur Azure

Saat Anda memeriksa kode, pengujian Anda berjalan di server build bersama dengan pengujian dari anggota tim lain. Sangat berguna untuk menganalisis cakupan kode di Alur Azure untuk mendapatkan gambaran cakupan terbaru dan komprehensif dalam keseluruhan 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 /EnableCodeCoverage opsi.

  1. Luncurkan Perintah Pengembang untuk Visual Studio:

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

  2. Pada perintah, jalankan perintah berikut ini:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
    

    Tip

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

Pecahkan masalah

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