{"id":237,"date":"2026-03-30T23:01:51","date_gmt":"2026-03-30T23:01:51","guid":{"rendered":"https:\/\/blogs.giamkichsan.com\/?p=237"},"modified":"2026-03-30T23:01:51","modified_gmt":"2026-03-30T23:01:51","slug":"code-coverage-do-bao-phu-ma-nguon","status":"publish","type":"post","link":"https:\/\/blogs.giamkichsan.com\/index.php\/2026\/03\/30\/code-coverage-do-bao-phu-ma-nguon\/","title":{"rendered":"Code Coverage\u00a0(\u0110\u1ed9 bao ph\u1ee7 m\u00e3 ngu\u1ed3n)\u00a0"},"content":{"rendered":"\n<p>Trong Visual Studio,\u00a0<strong>Code Coverage<\/strong>\u00a0(\u0110\u1ed9 bao ph\u1ee7 m\u00e3 ngu\u1ed3n)\u00a0<mark>l\u00e0 m\u1ed9t t\u00ednh n\u0103ng gi\u00fap b\u1ea1n x\u00e1c \u0111\u1ecbnh xem c\u00f3 bao nhi\u00eau ph\u1ea7n tr\u0103m m\u00e3 ngu\u1ed3n c\u1ee7a d\u1ef1 \u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ea1y qua b\u1edfi c\u00e1c b\u00e0i ki\u1ec3m th\u1eed \u0111\u01a1n v\u1ecb (<strong>Unit Tests<\/strong>)<\/mark><\/p>\n\n\n\n<p>1. M\u1ee5c \u0111\u00edch c\u1ee7a Code Coverage<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0110\u00e1nh gi\u00e1 ch\u1ea5t l\u01b0\u1ee3ng ki\u1ec3m th\u1eed:<\/strong>\u00a0Gi\u00fap b\u1ea1n bi\u1ebft nh\u1eefng ph\u1ea7n n\u00e0o c\u1ee7a code \u0111\u00e3 \u0111\u01b0\u1ee3c ki\u1ec3m tra v\u00e0 nh\u1eefng ph\u1ea7n n\u00e0o c\u00f2n b\u1ecb b\u1ecf s\u00f3t.<\/li>\n\n\n\n<li><strong>Gi\u1ea3m thi\u1ec3u r\u1ee7i ro:<\/strong>\u00a0Ph\u00e1t hi\u1ec7n c\u00e1c \u0111o\u1ea1n code &#8220;ch\u1ebft&#8221; ho\u1eb7c c\u00e1c logic ch\u01b0a bao gi\u1edd \u0111\u01b0\u1ee3c th\u1ef1c thi, t\u1eeb \u0111\u00f3 gi\u1ea3m thi\u1ec3u l\u1ed7i ti\u1ec1m \u1ea9n khi v\u1eadn h\u00e0nh.<\/li>\n\n\n\n<li><strong>\u0110\u1ecbnh h\u01b0\u1edbng vi\u1ebft Test:<\/strong>\u00a0D\u1ef1a v\u00e0o b\u00e1o c\u00e1o coverage, l\u1eadp tr\u00ecnh vi\u00ean c\u00f3 th\u1ec3 b\u1ed5 sung c\u00e1c test case cho nh\u1eefng v\u00f9ng code ch\u01b0a \u0111\u01b0\u1ee3c bao ph\u1ee7.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>2. C\u00e1c ch\u1ec9 s\u1ed1 \u0111o l\u01b0\u1eddng ph\u1ed5 bi\u1ebfn<\/p>\n\n\n\n<p>Th\u00f4ng th\u01b0\u1eddng, Visual Studio cung c\u1ea5p c\u00e1c lo\u1ea1i bao ph\u1ee7 sau:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Line\/Statement Coverage:<\/strong>\u00a0\u0110o l\u01b0\u1eddng t\u1ef7 l\u1ec7 c\u00e1c d\u00f2ng code \u0111\u01b0\u1ee3c th\u1ef1c thi.<\/li>\n\n\n\n<li><strong>Branch\/Decision Coverage:<\/strong>\u00a0Ki\u1ec3m tra xem c\u00e1c nh\u00e1nh c\u1ee7a c\u00e2u l\u1ec7nh \u0111i\u1ec1u ki\u1ec7n (if\/else, switch) \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ea1y qua h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p \u0111\u00fang\/sai ch\u01b0a.\u00a0<img decoding=\"async\" src=\"blob:https:\/\/blogs.giamkichsan.com\/a228ee9f-e2b5-4c59-a2da-63cd24c43450\" alt=\"semiconvn.com\">semiconvn.com\u00a0+1<\/li>\n<\/ul>\n\n\n\n<p>3. C\u00e1ch s\u1eed d\u1ee5ng trong c\u00e1c phi\u00ean b\u1ea3n Visual Studio<\/p>\n\n\n\n<p>T\u00ednh n\u0103ng n\u00e0y c\u00f3 s\u1ef1 kh\u00e1c bi\u1ec7t t\u00f9y thu\u1ed9c v\u00e0o phi\u00ean b\u1ea3n b\u1ea1n \u0111ang d\u00f9ng:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Visual Studio Enterprise:<\/strong>\u00a0\u0110\u00e2y l\u00e0 phi\u00ean b\u1ea3n cao c\u1ea5p t\u00edch h\u1ee3p s\u1eb5n c\u00f4ng c\u1ee5\u00a0<strong>Analyze Code Coverage<\/strong>\u00a0m\u1ea1nh m\u1ebd trong menu\u00a0<em>Test<\/em>.<\/li>\n\n\n\n<li><strong>Visual Studio Community\/Professional:<\/strong>\u00a0C\u00e1c phi\u00ean b\u1ea3n n\u00e0y th\u01b0\u1eddng kh\u00f4ng t\u00edch h\u1ee3p s\u1eb5n t\u00ednh n\u0103ng b\u00e1o c\u00e1o coverage chi ti\u1ebft. Tuy nhi\u00ean, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c ti\u1ec7n \u00edch m\u1edf r\u1ed9ng (extensions) mi\u1ec5n ph\u00ed ho\u1eb7c th\u01b0 vi\u1ec7n b\u00ean th\u1ee9 ba:\n<ul class=\"wp-block-list\">\n<li><strong>Fine Code Coverage:<\/strong>\u00a0M\u1ed9t extension ph\u1ed5 bi\u1ebfn v\u00e0 mi\u1ec5n ph\u00ed cho Visual Studio gi\u00fap hi\u1ec3n th\u1ecb k\u1ebft qu\u1ea3 ngay trong IDE.<\/li>\n\n\n\n<li><strong>Coverlet:<\/strong>\u00a0M\u1ed9t th\u01b0 vi\u1ec7n cross-platform cho .NET d\u00f9ng \u0111\u1ec3 thu th\u1eadp d\u1eef li\u1ec7u coverage.<\/li>\n\n\n\n<li><strong>ReportGenerator:<\/strong>\u00a0C\u00f4ng c\u1ee5 gi\u00fap chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u th\u00f4 t\u1eeb c\u00e1c b\u1ed9 qu\u00e9t coverage th\u00e0nh b\u00e1o c\u00e1o HTML d\u1ec5 \u0111\u1ecdc.\u00a0<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>4. C\u00e1ch xem k\u1ebft qu\u1ea3<\/p>\n\n\n\n<p>Khi ch\u1ea1y Code Coverage, Visual Studio th\u01b0\u1eddng hi\u1ec3n th\u1ecb:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>B\u1ea3ng th\u1ed1ng k\u00ea:<\/strong>\u00a0Cho bi\u1ebft t\u1ef7 l\u1ec7 % bao ph\u1ee7 c\u1ee7a t\u1eebng Project, Namespace, Class v\u00e0 Method.<\/li>\n\n\n\n<li><strong>\u0110\u00e1nh d\u1ea5u m\u00e0u s\u1eafc tr\u1ef1c ti\u1ebfp tr\u00ean Code:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>M\u00e0u xanh:<\/strong>\u00a0D\u00f2ng code \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c thi b\u1edfi \u00edt nh\u1ea5t m\u1ed9t test case.<\/li>\n\n\n\n<li><strong>M\u00e0u \u0111\u1ecf:<\/strong>\u00a0D\u00f2ng code ch\u01b0a \u0111\u01b0\u1ee3c ch\u1ea1y qua.<\/li>\n\n\n\n<li><strong>M\u00e0u v\u00e0ng:<\/strong>\u00a0D\u00f2ng code ch\u1ee9a \u0111i\u1ec1u ki\u1ec7n v\u00e0 ch\u1ec9 m\u1ed9t ph\u1ea7n c\u1ee7a nh\u00e1nh \u0111i\u1ec1u ki\u1ec7n \u0111\u01b0\u1ee3c th\u1ef1c thi.\u00a0<img decoding=\"async\" src=\"blob:https:\/\/blogs.giamkichsan.com\/77353efb-3f90-446c-b625-802a3d2411da\" alt=\"semiconvn.com\"><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Trong Visual Studio,\u00a0Code Coverage\u00a0(\u0110\u1ed9 bao ph\u1ee7 m\u00e3 ngu\u1ed3n)\u00a0l\u00e0 m\u1ed9t t\u00ednh n\u0103ng gi\u00fap b\u1ea1n x\u00e1c \u0111\u1ecbnh xem c\u00f3 bao nhi\u00eau ph\u1ea7n tr\u0103m m\u00e3 ngu\u1ed3n c\u1ee7a d\u1ef1 <a class=\"mh-excerpt-more\" href=\"https:\/\/blogs.giamkichsan.com\/index.php\/2026\/03\/30\/code-coverage-do-bao-phu-ma-nguon\/\" title=\"Code Coverage\u00a0(\u0110\u1ed9 bao ph\u1ee7 m\u00e3 ngu\u1ed3n)\u00a0\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-237","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts\/237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/comments?post=237"}],"version-history":[{"count":1,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts\/237\/revisions"}],"predecessor-version":[{"id":238,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts\/237\/revisions\/238"}],"wp:attachment":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/media?parent=237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/categories?post=237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/tags?post=237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}