{"id":957,"date":"2025-04-30T15:32:15","date_gmt":"2025-04-30T15:32:15","guid":{"rendered":"https:\/\/serhatdiker.com\/?p=957"},"modified":"2025-05-20T12:29:48","modified_gmt":"2025-05-20T12:29:48","slug":"yapay-zeka-ile-unit-test-yazimi","status":"publish","type":"post","link":"https:\/\/serhatdiker.com\/index.php\/2025\/04\/30\/yapay-zeka-ile-unit-test-yazimi\/","title":{"rendered":"Yapay Zeka ile Unit Test Yaz\u0131m\u0131"},"content":{"rendered":"\n<p>Kodlamada i\u015fin g\u00f6r\u00fcnen k\u0131sm\u0131 kadar g\u00f6r\u00fcnmeyen k\u0131sm\u0131 da \u00f6nemli. Evet, \u00e7al\u0131\u015f\u0131yor olabilir\u2026 ama nas\u0131l test edildi? Ne kadar kapsay\u0131c\u0131? Hangi u\u00e7 durumlar g\u00f6z \u00f6n\u00fcnde bulunduruldu?<\/p>\n\n\n\n<p>Uzun zamand\u0131r fark etti\u011fim bir \u015fey var: Yaz\u0131l\u0131mc\u0131lar olarak kodu yaz\u0131p \u00e7al\u0131\u015ft\u0131rmay\u0131 bir ba\u015far\u0131 olarak g\u00f6r\u00fcyoruz ama test yaz\u0131m\u0131n\u0131 \u00e7o\u011fu zaman geri plana at\u0131yoruz. Oysa s\u00fcrd\u00fcr\u00fclebilir bir yaz\u0131l\u0131m altyap\u0131s\u0131 i\u00e7in <strong>unit test<\/strong> k\u00fclt\u00fcr\u00fc vazge\u00e7ilmez.<\/p>\n\n\n\n<p>Son d\u00f6nemde bu konuda en \u00e7ok dikkatimi \u00e7eken konu ise \u015fu: <strong>Yapay zeka destekli ara\u00e7lar art\u0131k unit test yaz\u0131m\u0131nda ciddi bir rol \u00fcstleniyor.<\/strong><\/p>\n\n\n\n<hr \/>\n\n\n\n<h3 class=\"wp-block-heading\">Neden Unit Test Yaz\u0131m\u0131 Zor Geliyor?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zaman al\u0131yor gibi g\u00f6r\u00fcn\u00fcyor<\/li>\n\n\n\n<li>Kodun test edilebilir yap\u0131da olmamas\u0131<\/li>\n\n\n\n<li>Test senaryosu \u00fcretme konusunda ilhams\u0131zl\u0131k<\/li>\n\n\n\n<li>Mock&#8217;lama i\u015flemlerinin karma\u015f\u0131kl\u0131\u011f\u0131<\/li>\n\n\n\n<li>Gereklili\u011fi tam olarak i\u00e7selle\u015ftirilmemi\u015f olmas\u0131<\/li>\n<\/ul>\n\n\n\n<p>Ama yapay zeka bu engelleri bir bir ortadan kald\u0131r\u0131yor. Art\u0131k IDE\u2019lerdeki AI eklentileri ya da d\u0131\u015f kaynak ara\u00e7lar, var olan fonksiyonlara uygun test senaryolar\u0131 olu\u015fturabiliyor, mock objeler tan\u0131ml\u0131yor ve coverage oran\u0131n\u0131 iyile\u015ftiriyor.<\/p>\n\n\n\n<hr \/>\n\n\n\n<h3 class=\"wp-block-heading\">Hangi Ara\u00e7lar ile Neler Yapabiliyoruz?<\/h3>\n\n\n\n<p>A\u015fa\u011f\u0131daki ara\u00e7lar \u015fu anda AI destekli unit test \u00fcretimi konusunda \u00f6ne \u00e7\u0131k\u0131yor:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GitHub Copilot<\/strong>: Fonksiyonlar\u0131 anl\u0131yor ve onlara uygun test fonksiyonlar\u0131 \u00f6nerebiliyor.<\/li>\n\n\n\n<li><strong>Codeium<\/strong>: \u00d6zellikle JavaScript ve Python projelerinde ba\u015far\u0131l\u0131 test kal\u0131plar\u0131 sunuyor.<\/li>\n\n\n\n<li><strong>Amazon CodeWhisperer<\/strong>: AWS tabanl\u0131 projelerde, test kodlar\u0131n\u0131 \u00f6neriyor ve veri haz\u0131rl\u0131\u011f\u0131 yap\u0131yor.<\/li>\n\n\n\n<li><strong>IntelliTest (Visual Studio + Roslyn)<\/strong>: C# projelerinde otomatik test veri setleri ve test class&#8217;lar\u0131 \u00fcretimi i\u00e7in \u00e7ok iyi bir ba\u015flang\u0131\u00e7 noktas\u0131.<\/li>\n<\/ul>\n\n\n\n<p>Ayr\u0131ca baz\u0131 \u00f6zel VS Code eklentileri ile, metottaki kontrol bloklar\u0131n\u0131 analiz ederek test edilmesi gereken senaryolar\u0131 listeliyor ve ona uygun test iskeletlerini olu\u015fturuyorlar.<\/p>\n\n\n\n<p><strong>\u00d6rnek Senaryo: C# Projesinde AI ile Test \u00dcretimi<\/strong><\/p>\n\n\n\n<pre><code><code>public class KrediHesaplayici\n{\n    public decimal AylikTaksit(decimal anapara, int ay, double faiz)\n    {\n        if (ay &lt;= 0 || anapara &lt;= 0 || faiz &lt; 0) throw new ArgumentException();\n        return anapara * (decimal)(1 + faiz \/ 100) \/ ay;\n    }\n}<\/code> <\/code><\/pre>\n\n\n\n<blockquote class=\"is-layout-flow wp-block-quote-is-layout-flow\">\n\n<p>GitHub Copilot\u2019a veya Codeium\u2019a \u015fu prompt yaz\u0131ld\u0131\u011f\u0131nda:<\/p>\n\n<\/blockquote>\n\n\n\n<blockquote class=\"is-layout-flow wp-block-quote-is-layout-flow\">\n\n<p><code>Write a unit test in xUnit for the function AylikTaksit<\/code><\/p>\n\n<\/blockquote>\n\n\n\n<p>AI \u015fu \u015fekilde cevap veriyor:<\/p>\n\n\n\n<pre><code><code>[Fact]\npublic void AylikTaksit_ValidInput_ReturnsExpectedResult()\n{\n    var hesaplayici = new KrediHesaplayici();\n    var sonuc = hesaplayici.AylikTaksit(10000, 10, 12);\n    Assert.Equal(1120, Math.Round(sonuc));\n}<\/code><\/code><\/pre>\n\n\n\n<p>Ayr\u0131ca hata durumlar\u0131 i\u00e7in <code>[Theory]<\/code> kullanarak s\u0131n\u0131r testlerini de otomatik \u00f6neriyor.<\/p>\n\n\n\n<hr \/>\n\n\n\n<h3 class=\"wp-block-heading\">Ne Kazand\u0131r\u0131yor?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zaman tasarrufu (\u00f6zellikle repetitif testlerde)<\/li>\n\n\n\n<li>Coverage art\u0131\u015f\u0131<\/li>\n\n\n\n<li>Yeni ba\u015flayan yaz\u0131l\u0131mc\u0131lar i\u00e7in \u00f6\u011frenme f\u0131rsat\u0131<\/li>\n\n\n\n<li>Tak\u0131m i\u00e7i test k\u00fclt\u00fcr\u00fcn\u00fcn geli\u015fmesi<\/li>\n\n\n\n<li>Daha g\u00fcvenli CI\/CD s\u00fcre\u00e7leri<\/li>\n<\/ul>\n\n\n\n<hr \/>\n\n\n\n<h3 class=\"wp-block-heading\">Gelecek Ne Getiriyor?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AI\u2019\u0131n t\u00fcm s\u0131n\u0131flar\u0131 analiz edip test coverage a\u00e7\u0131klar\u0131n\u0131 \u00f6nermesi<\/li>\n\n\n\n<li>Otomatik test datas\u0131 \u00fcretimi (\u00f6rne\u011fin faker destekli)<\/li>\n\n\n\n<li>Testlerin zamanla optimizasyonu (\u00f6rne\u011fin redundant testlerin temizlenmesi)<\/li>\n\n\n\n<li>Geli\u015ftiricinin stiline g\u00f6re test \u00f6nerileri (parametrik, mock\u2019lu, vs.)<\/li>\n<\/ul>\n\n\n\n<hr \/>\n\n\n\n<h3 class=\"wp-block-heading\">Son S\u00f6z<\/h3>\n\n\n\n<p>AI ile unit test yazmak, test k\u00fclt\u00fcr\u00fcn\u00fc geli\u015ftirmek i\u00e7in dev bir f\u0131rsat. Bu sistemler, sadece i\u015fleri h\u0131zland\u0131rm\u0131yor, ayn\u0131 zamanda iyi bir yaz\u0131l\u0131m geli\u015ftiricinin sorumluluk duygusunu da besliyor.<\/p>\n\n\n\n<p>Kodun sadece \u00e7al\u0131\u015fmas\u0131 de\u011fil, do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131n da kan\u0131tlanmas\u0131 gerekiyor. Ve art\u0131k bu s\u00fcreci yaln\u0131z y\u00fcr\u00fctmek zorunda de\u011filiz. AI, bu yolda da yan\u0131m\u0131zda.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522.png\" alt=\"\" class=\"wp-image-959\" srcset=\"https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522.png 1024w, https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522-300x300.png 300w, https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522-150x150.png 150w, https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522-768x768.png 768w, https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522-200x200.png 200w, https:\/\/serhatdiker.com\/wp-content\/uploads\/2025\/04\/003f44b9-de8b-4aa1-b5c7-8bb6cddba522-50x50.png 50w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Kodlamada i\u015fin g\u00f6r\u00fcnen k\u0131sm\u0131 kadar g\u00f6r\u00fcnmeyen k\u0131sm\u0131 da \u00f6nemli. Evet, \u00e7al\u0131\u015f\u0131yor olabilir\u2026 ama nas\u0131l test edildi? Ne kadar kapsay\u0131c\u0131? Hangi u\u00e7 durumlar g\u00f6z \u00f6n\u00fcnde bulunduruldu? Uzun&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":959,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[79,84,81,90,74,85,92,89,88,80,87,83,86,91,82],"class_list":["post-957","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-ai-2","tag-ai-destekli-test-yazimi","tag-csharp-2","tag-githubcopilot","tag-kodkalitesi-2","tag-otomatik-unit-test-uretimi","tag-testotomasyonu","tag-testyazimi","tag-unit-test-coverage-artirma","tag-unittest-2","tag-xunit-ai-entegrasyonu","tag-yapay-zeka-ile-unit-test-yazimi","tag-yapay-zeka-ile-yazilim-testleri","tag-yazilimtestleri","tag-yazilimtrendleri2025"],"_links":{"self":[{"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/posts\/957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/comments?post=957"}],"version-history":[{"count":3,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/posts\/957\/revisions"}],"predecessor-version":[{"id":962,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/posts\/957\/revisions\/962"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/media\/959"}],"wp:attachment":[{"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/media?parent=957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/categories?post=957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serhatdiker.com\/index.php\/wp-json\/wp\/v2\/tags?post=957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}