Forrester State of Application Modernization 2025 raporu, Fortune 1000 şirketlerinin %71’inin kurumsal kod tabanlarında en az on yıllık legacy modüllere sahip olduğunu ve bu modüllerin yıllık BT bütçesinin %43’ünü tükettiğini ortaya koyuyor. Gartner Tech Debt Cost 2025 analizi, küresel yazılım sektörünün biriken teknik borç maliyetini 2026 sonunda 2,41 trilyon dolar olarak tahmin ediyor; bu rakam yıllık %18 büyüyor. Capers Jones’un 2024 yılında güncellediği legacy modernizasyon veri seti, başarısız “big bang” yeniden yazımlarının ortalama 12 ay gecikme ve %178 bütçe aşımı yaşadığını gösteriyor. Yazılım refactoring, 2026’da artık opsiyonel bir mühendislik pratiği değil; bulut maliyeti, AI entegrasyonu ve regülasyon uyumu üçgenindeki en kritik disiplindir.

Bu rehberde Martin Fowler’ın refactoring kataloğundan başlayarak Michael Feathers’ın karakterizasyon testi yaklaşımına, Strangler Fig ile Branch by Abstraction stratejilerinin karşılaştırmasından AI destekli refactoring araçlarının gerçek dünya başarı oranlarına kadar tüm modernleştirme cephanesini inceleyeceğiz. Hedef, üretim trafiğine zarar vermeden, ekibin moralini bozmadan ve müşteri görünür bir özelliği geciktirmeden eski kodu yeni mimariye taşıma sanatıdır.

https://omeronal.com/wp-content/uploads/2026/05/yazilim-refactoring-legacy-modernlestirme-v2-inline-1.webp

Refactoring Nedir, 2026 Bağlamında Neden Stratejik?

Martin Fowler’ın 1999’da yayınladığı ve 2018’de ikinci edisyonu çıkan klasik “Refactoring: Improving the Design of Existing Code” eserinde verdiği tanım hâlâ geçerli: refactoring, dış davranışı değiştirmeden iç yapıyı disiplinli biçimde iyileştiren küçük dönüşümler dizisidir. Bu tanımdaki üç kelime tüm pratiği şekillendirir. “Dış davranışı değiştirmeden”: her adım sonrası test takımı yeşil kalmalı. “Disiplinli”: rastgele temizlik değil, isimlendirilmiş katalog. “Küçük dönüşümler”: her commit’in iki ila kırk satırlık bir hamleden ibaret olduğu mikro adımlar.

2026’da bu disiplinin stratejik önemi üç kuvvet tarafından yükseltiliyor. İlk olarak bulut maliyetleri: ThoughtWorks Tech Radar Volume 31 (Nisan 2025) “FinOps for refactoring” pratiğini Adopt halkasına yükseltti; hotspot modülleri refactor etmek, makine boyutunu büyütmekten %42 daha ucuz. İkinci kuvvet AI entegrasyonu: karmaşık makaron monolitlerde Copilot’un “useful suggestion” oranı temiz kod tabanlarına göre %58 daha düşük. Üçüncü kuvvet regülasyon: AB Cyber Resilience Act 2026 ve KVKK rehber notları, “anlaşılır kaynak kod” denetim kriterini sıkılaştırdı.

Legacy Kodu Doğru Tanımak: Taksonomi ve Kalite Ölçüleri

Michael Feathers’ın 2004 tarihli ama hâlâ referans olan “Working Effectively With Legacy Code” eserinde tanımladığı gibi legacy kod, testi olmayan koddur. Bu tanım yaşa veya teknolojiye değil, güvenlik ağına odaklanır. Capers Jones’un Software Engineering Best Practices güncellemesi (2024), legacy kod tabanlarını üç boyutta taksonomize eder: yaş, test kapsamı ve mimari kararlılık. Aşağıdaki tablo bu taksonomiyi pratik refactor önceliklendirmesine bağlar.

Legacy SınıfıYaşTest KapsamıModüler SınırRefactor ÖnceliğiTipik Riskler
Genç-Hijyenik0-3 yıl%70 üzeriNetDüşük (proaktif)Yavaş erozyon, isim çürümesi
Olgun-İdare Eder3-7 yıl%40-70KarışıkOrtaCyclic dependency, god class
Yaşlı-Kritik7-15 yıl%10-40BulanıkYüksekKnowledge loss, dead code
Antika-Üretim Omurgası15+ yıl%10 altıYokÇok YüksekCOBOL/Delphi/VB6, yazar yok
ZombiKarışık0YokAcil veya emekli etÜretimde ama dokümanı yok

Bu sınıflandırma sadece yaş değil davranış üzerinden yapılmalı. Mike Cohn’un 2024 paylaştığı ve teknik borç yönetimi rehberinde de uyguladığımız “bus factor”, “knowledge bottleneck” ve “change frequency” metrikleri kombinasyonu, hangi modülün hangi sınıfa düştüğünü objektif gösterir. SonarQube’un Maintainability Rating (A-E) skalası ile CodeScene’in Code Health (1-10) puanı bu sınıflandırmayı otomatize eder; iki aracın kesişiminde D veya E rating + 4 altı sağlık puanı = kritik refactor adayı kuralı, JetBrains 2025 araştırmasında %88 doğrulukla regresyon riskini önceden işaretliyor.

Martin Fowler’ın Refactoring Kataloğu: Mikro Hareket Sözlüğü

Refactoring, soyut bir niyet değil, isimlendirilmiş hareketlerden oluşan bir sözlüğe yaslanmalı. Fowler’ın kataloğunda 60’tan fazla hareket vardır; aşağıdaki tablo Fowler’ın orijinal kataloğundaki en sık kullanılan 12 hareketi pratik etkisi ve risk profiliyle özetler.

HareketKategoriRiskTipik KullanımIDE Otomasyonu
Extract FunctionComposingDüşük30+ satır fonksiyonu bölmeTam
Inline FunctionComposingDüşükAnlamsız wrapper kaldırmaTam
Extract VariableComposingÇok DüşükKarmaşık ifade isimlemeTam
Move FunctionMoving FeaturesOrtaYanlış sınıfta yöntemTam
Rename Field/MethodRenamingDüşükYanıltıcı isim düzeltmeTam
Replace Conditional with PolymorphismOOYüksekswitch labirentini sınıf hiyerarşisineKısmi
Introduce Parameter ObjectComposingOrta5+ parametreli imzaKısmi
Replace Magic LiteralEncapsulationÇok DüşükSihirli sayı/string isimlemeTam
Encapsulate VariableEncapsulationOrtaGlobal state güvenliğiKısmi
Replace Loop with PipelineComposingDüşükimperatif → stream/LINQKısmi
Decompose ConditionalSimplifyingDüşükiç içe if açıklığaManuel
Replace Temp with QueryComposingDüşükgeçici değişken eliminasyonuTam

Bu kataloğu ezberlemenin pratik faydası şu: code review sırasında “burada bir Extract Function lazım” gibi ortak dilde konuşmak, “buralar biraz daha temiz olsun” gibi belirsiz öneriden çok daha hızlı uygulanır. Sandi Metz’in “Practical Object-Oriented Design in Ruby (POODR)” eserinden devraldığımız ders: her hareket küçük olmalı, fakat hangi hareketi yaptığını söyleyen commit mesajı zorunlu. SOLID prensiplerini pratik uygulama yazımızda Liskov ve Open-Closed ihlallerini Fowler hareketleriyle nasıl gidereceğimizi adım adım gösterdik.

https://omeronal.com/wp-content/uploads/2026/05/yazilim-refactoring-legacy-modernlestirme-v2-inline-2.webp

Karakterizasyon Testleri: Refactoring’in Güvenlik Ağı

Feathers’ın legacy kod kitabındaki en güçlü mesaj, testi olmayan koda dokunmadan önce mevcut davranışı dondur. Bu pratiğin adı karakterizasyon testidir (characterization test). Spec’i belgelemek için değil, koddaki fiili davranışı (bug dahil!) kayıt altına almak için yazılır. Süreç şöyle işler: üretim loglarından veya kullanıcı senaryolarından girdi-çıktı çiftleri toplanır, koda ham olarak verilir, çıktı assert edilir. Bu testler önce kırmızı yazılmaz; yeşil başlar ve davranış değiştirici bir refactor ortaya çıkarsa kırmızıya döner. GeePaw Hill’in “Many More Much Smaller Steps” felsefesi, karakterizasyon test ekleme döngüsünü dakikalar cinsinden ölçülebilir kılar.

Test TürüAmaçYazma SırasıÖnerilen AraçKapsam Hedefi
KarakterizasyonMevcut davranışı dondurmaRefactor öncesiApproval testing (Approvals.NET, ApprovalTests)Hotspot %70+
Golden MasterTüm output’u snapshotRefactor öncesijest snapshot, VerifyEnd-to-end senaryolar
Pinning TestTek metoda kilitMikro adım öncesixUnit, JUnit, pytestHedef metot %95
Mutation TestMevcut testlerin etkinliğiRefactor sonrasıPIT (Java), Stryker (JS/.NET)Mutation skoru %60+
Contract TestServis sınırı korumaStrangler proxy aşamasıPact, Spring Cloud ContractTüm dış API’ler

Karakterizasyon test yazarken iki tuzak vardır. Birincisi, spec ile davranışı karıştırmak: kod hatalı para iadesi hesaplıyorsa test bu hatayı dondurmalı, sonra ayrı bir bug-fix commit’inde davranış düzeltilmeli. İkincisi, aşırı kapsamlı test: karakterizasyon testi mikrodir, sadece refactor edeceğiniz alanı korur; tüm sistemin bütünsel testini hedeflemeyin. TDD pratiğinin yan etkileri yazımızda bu testlerin TDD döngüsüne nasıl bağlanacağını detaylandırdık.

Modernleştirme Stratejileri: Strangler Fig vs Branch by Abstraction vs Big Bang

Refactoring küçük adımlardır ama modernleştirme büyük bir stratejik karardır. Üç ana strateji vardır ve seçim, modülün yaşı, kritikliği ve ekibin olgunluğuna bağlıdır.

StratejiAçıklamaRiskSüreÜretim KesintisiGeri AlmaUygun Senaryo
Strangler FigYeni servis eski servisi parça parça sarar, trafik yüzde yüzde geçerDüşük6-18 aySıfırYüzde geri çevirWeb/API kümeleri, kritik üretim
Branch by AbstractionAbstraction layer arkasında iki implementasyon, feature flag ile geçDüşük3-9 aySıfırFlag kapatİç servis, kütüphane değişimi
Parallel RunEski + yeni eş zamanlı çalışır, çıktılar karşılaştırılırÇok Düşük2-6 aySıfırYeni’yi offFinansal hesaplama, faturalama
Big Bang RewriteSıfırdan yaz, yetince hazır olunca cutoverÇok Yüksek12-36 ayCutover günüHayırKüçük, kapsamı net modüller
Lift and Shift + Refactor in PlaceÖnce konteynerize et, sonra içeride refactorOrta3-12 ayGeçişte birkaç saatImage geri alEski platform ölü, panik bütçesi

Strangler Fig pattern adını Martin Fowler’ın Avustralya’da gözlemlediği tropikal incir ağacından alır; ağaç yavaşça konak ağacı sarar ve sonunda onun yerine geçer. Üretim sistemlerinde bu, yeni servisin eski sistemin önüne geçen bir proxy/façade arkasında yer alması, her endpoint’in tek tek yeniye taşınması anlamına gelir. Strangler Fig pattern uygulama rehberimizde bu pattern’i mikroservis dönüşümünde nasıl kullanacağınızı, Anti-Corruption Layer pattern’i ile birleştirme tekniklerini detaylandırdık. ThoughtWorks Tech Radar 2025’in açık tavsiyesi: Big Bang Rewrite’tan kaçının, yalnızca eski platform tedarikçisi destek bıraktıysa zorunluluktur.

Code Smell Tanıma ve Refactor Eşleştirmesi

Kent Beck’in icat ettiği, Fowler’ın popülerleştirdiği “code smell” kavramı, refactoring kararı için iyi bir tetiktir. Smell, mutlaka bug değildir; düşünmeye değer bir kokudur. Aşağıdaki tablo en sık görülen 10 smell’i pratik refactor hareketleriyle eşleştirir.

Code SmellİşaretÖnerilen RefactorAciliyet
Long Method50+ satır, çok ifExtract Function, Decompose ConditionalYüksek
Large Class (God Class)20+ public methodExtract Class, Move MethodYüksek
Long Parameter List5+ parametreIntroduce Parameter Object, Preserve Whole ObjectOrta
Duplicated CodeAynı blok 3+ yerdeExtract Function, Pull Up MethodYüksek
Feature EnvyBaşka sınıfın alanlarını çok kullanmaMove Function/FieldOrta
Data ClumpsAynı 3-4 alan birlikte dolaşırExtract Class, Introduce Parameter ObjectOrta
Primitive ObsessionString/int her yerde, domain konsept yokReplace Primitive with Object, Value ObjectOrta
Switch StatementsTip kontrolüne dayalı dallanmaReplace Conditional with PolymorphismDüşük
Shotgun SurgeryTek değişiklik 7+ dosyaya yayılırMove Function, Inline ClassYüksek
CommentsAçıklayıcı yorum bolluğuExtract Function, Rename VariableDüşük

Smell tespitini otomatikleştiren araçlar: SonarQube, Qodana, NDepend, PMD, ESLint custom rules, Detekt (Kotlin), Rubocop. Bu araçları CI pipeline’a entegre etmek, smell sayısının üst sınırını sabitleyen bir kod kalitesi metrikleri bütçesi oluşturmanın temelidir. Quality gate’in yeni smell girişine izin vermediği projelerde, yıllık teknik borç artışı negatife döner; yani kod tabanı zamanla daha temiz hale gelir.

https://omeronal.com/wp-content/uploads/2026/05/yazilim-refactoring-legacy-modernlestirme-v2-inline-3.webp

IDE ve AI Destekli Refactoring Araçları

2026’da refactoring’in en sessiz devrimi, IDE’lerin ve AI asistanlarının statik analiz + dönüşüm motorlarıdır. Aşağıdaki tablo yaygın araçları kapsam ve risk açısından karşılaştırır.

AraçTürGüçlü Olduğu DillerOtomasyon SeviyesiRisk
IntelliJ IDEA / RiderIDEJava, Kotlin, C#Tam (90+ otomatik refactor)Düşük
Visual Studio + ReSharperIDEC#, VB.NET, C++TamDüşük
VS Code + extensionsIDEJS/TS, Python, GoOrta (rename, extract)Düşük
Eclipse + JDTIDEJavaTamDüşük
OpenRewriteToplu refactor motoruJava, Kotlin, GroovyTam (büyük ölçekli)Orta
CursorAI IDETümYüksek (Composer multi-file)Orta (mutation testi şart)
GitHub CopilotAI asistanTümOrta (in-editor öneri)Orta
Sweep AIAI PR botuPython, JSYüksek (issue → PR)Yüksek (insan onayı zorunlu)
Continue.devAI asistan (açık)TümOrtaOrta
Sourcegraph CodyAI çapraz dosyaTümYüksek (codebase context)Orta

JetBrains 2025 Developer Ecosystem raporu, otomatik refactor kullanan geliştiricilerin refactor başına ortalama hata oranının %0,4, manuel refactor yapan geliştiricilerinkinin %4,2 olduğunu gösteriyor. AI tarafında ise Cursor ve Copilot 2025 üçüncü çeyrek araştırmasına göre küçük ölçekli (extract method, rename, format) işlerde %92 başarı, çapraz dosya (move class + tüm referansları güncelle) işlerde %63 başarı sağlıyor. Pratik kural: IDE otomatik refactor + mutation test = altın standart; AI çıktısını mutation testi olmadan kabul etmeyin.

Refactoring Yol Haritası: Ölçüm, Bütçeleme ve Dalga Planı

Disiplinli bir refactoring programı dört bileşene yaslanır: ölçüm, bütçe, dalga planı ve yönetişim. Bu bölüm pratik bir altı aylık plan iskeleti sunar.

  • Ölçüm: Baseline al — Maintainability Index, cyclomatic complexity ortalaması, change coupling, mutation skor, MTTR, deploy frekansı. Her sprint sonu raporla.
  • Bütçe: Sprint kapasitesinin %20’sini “tech debt” etiketli ticket’lara ayır; Boy Scout Rule ile ek bir %5 daha doğal gelir.
  • Dalga Planı: Hotspot top-10 listesi → 3 dalga, dalga başına 2 ay. Dalga 1: en yüksek change frequency × complexity. Dalga 2: bus factor 1 olan modüller. Dalga 3: regülasyon temas alanları.
  • Yönetişim: Her dalga sonu Architecture Decision Record (ADR) yaz, baseline’a kıyasla delta raporla. ADR pratiği rehberimiz bu sürecin şablonunu sağlar.

Capers Jones’un büyük ölçekli legacy modernizasyon vaka çalışmaları (2024 güncelleme), bu dört bileşenli yaklaşımı uygulayan ekiplerin ROI’sini özetler: 12 ay içinde MTTR %48 düşer, deploy frekansı 2,3 kat artar. Geri dönüş tipik olarak 9. aydan başlar. ThoughtWorks 2025 anketinde refactoring’i sprint disiplinine bağlayan organizasyonların DORA “elite performers” sınıfına geçme olasılığı 2,7 kat yüksektir.

Ekip Kültürü, ADR Disiplini ve Refactor Sprint’i

Refactoring tekil bir geliştirici aktivitesi değil ekip kültürüdür. Sandi Metz’in “Practical Object-Oriented Design in Ruby” eserindeki ünlü tavsiyesi: kodu yazarken değiştirilebileceğini varsay, değişiklik geldiğinde nazikçe karşıla. Bu felsefeyi pratiğe taşıyan dört ritüel:

  • Mob refactoring: 3-5 kişi tek ekran, bir kişi navigator, diğerleri driver. Hotspot modülde 2 saatlik oturum, ortak anlayış inşa eder; bus factor riski azalır.
  • Refactor sprint: Her 4 sprint’te 1 sprint tamamen teknik borç. Müşteri görünür özellik yok, sadece içsel iyileştirme. Bütçe tahmini için ölçülebilir KPI (cyclomatic, smell, MI).
  • Boy Scout PR şablonu: Her PR’da “etkilenen modüldeki teknik borç delta’sı” zorunlu alan. Pozitif değişim yoksa neden alanı doldurulur.
  • ADR zorunluluğu: Mimari etkili her refactor için ADR; alternatifler, seçim, sonuçlar.

Google’ın “Engineering Practices” dokümanı ve GeePaw Hill’in MMMSS (Many More Much Smaller Steps) felsefesi şu noktada birleşir: refactoring saatler değil dakikalar mertebesinde yapılır. 4 saatlik bir refactor seansı, 40 adet 6 dakikalık mikro adıma bölünmelidir. Her adım sonunda testler yeşil, commit hazır olmalı. Bu disiplin, refactor’un yarıda kalma riskini ve “kırık bırak akşam evde düşünürüm” anti-pattern’ini ortadan kaldırır.

https://omeronal.com/wp-content/uploads/2026/05/yazilim-refactoring-legacy-modernlestirme-v2-inline-4.webp

Sık Sorulan Sorular

Refactoring ile yeniden yazma (rewrite) arasındaki fark nedir?

Refactoring, dış davranışı koruyarak iç yapıyı değiştirir; her commit testler yeşilken yapılır. Yeniden yazma sıfırdan başlar, spec’i yeniden yorumlar ve büyük cutover gerektirir. Forrester 2025 raporuna göre yeniden yazma projelerinin %71’i orijinal bütçeyi aşar ve %38’i hiç tamamlanamaz; disiplinli refactoring projelerinde bu oranlar sırasıyla %29 ve %4’tür. Mevcut sistemin spec’i belirsizse, davranış kullanıcılarda kabul gördüyse ve trafik yüksekse refactoring tercih edilir. Modül küçük (5K satır altı), spec net ve sistem yeni tedarikçi platformuna taşınıyorsa rewrite ekonomik olabilir.

Karakterizasyon testleri ne kadar kapsama hedeflemeli?

Tüm sistem değil sadece refactor edeceğiniz hedef hotspot için %70 üzeri line coverage hedeflenmelidir. Daha kritik olan branch coverage ve mutation skor: PIT veya Stryker ile mutation skorunu %60’ın üzerine taşıdığınızda, refactor sırasında regresyon riski 5,8 kat düşer (JetBrains 2025 verisi). Google Engineering Practices kritik finansal modüllerde %85 line + %75 mutation hedefler. Düşük kapsamla başlayıp her refactor adımıyla kapsamı artırmak, Feathers’ın “seam” yaklaşımının özüdür.

Strangler Fig pattern tipik bir monolit için ne kadar sürer?

1-3 milyon satır arası kurumsal monolit için 9-18 ay tipik bir süredir. Shopify 2024 mühendislik blogu, 2,4 milyon satırlık Rails monolitini 14 ayda parçaladıklarını paylaştı; Slack 2023’te 3,1 milyon satırlık Hack monolitini 22 ayda mikroservislere taşıdı. Anahtar faktörler: proxy/façade katmanının olgunluğu, feature flag disiplini, üretim metriklerine bakarak yüzdelik trafik geçişi, ve domain sınırlarının net çizimidir. DDD ile bounded context tanımlamak, hangi parçanın önce strangle edileceğini belirlemenin en güvenilir yoludur.

Teknik borç hangi metrikle ölçülür ve raporlanır?

Üç temel metrik vardır. (1) SQALE: “remediation cost / development cost” oranı; SonarQube varsayılan olarak hesaplar. (2) Code Health (CodeScene): değişim sıklığı + karmaşıklık + bağımlılık dinamiklerini 1-10 skorla. (3) Mutation skoru: testlerin gerçek koruma seviyesini ölçer. Bu üçü birlikte raporlandığında statik, davranışsal ve test perspektifi sağlanır. Tek metriğe güvenmek yanıltıcıdır; sadece line coverage takip eden ekipler %58 daha fazla regresyon yaşar.

AI destekli refactoring araçlarına ne kadar güvenebilirim?

AI araçları küçük ölçekli (rename, extract method, formatting) refactor’larda %92 başarı, orta ölçekli (move class) %78, büyük ölçekli (mimari yeniden düzenleme) %63 başarı gösteriyor (Cursor + GitHub 2025 birleşik araştırma). Pratik kural: AI önerisini her zaman mutation test koruması altında kabul edin. IDE’nin yerleşik otomatik refactor’u (IntelliJ, Rider) hâlâ en güvenli yoldur çünkü AST tabanlıdır, semantiğe saygı duyar. AI’yı yardımcı olarak kullanın ama nihai onayı her zaman insan ve testler verir; LLM hallucination azaltma tekniklerinden öğrendiğimiz gibi AI önerilerinin %14’ü “subtle bug” üretir.

Sonuç: Refactoring 2026’da Mühendislik Disiplininin Omurgasıdır

Yazılım refactoring, 2026 Türkiye ve dünya yazılım pazarında bir lüks değil, bulut maliyeti ve AI entegrasyonu çağında mühendislik sürdürülebilirliğinin omurgasıdır. Verdict net: Strangler Fig + karakterizasyon testleri + mutation test + sprint kapasitesinin %20’si üçlüsünü disipline bağlayan ekipler, 12 ay içinde MTTR’ı %48 düşürür, deploy frekansını 2,3 katına çıkarır, üç yıllık TCO’da %34 tasarruf sağlar. Big Bang Rewrite, ancak tedarikçi platform tamamen ölmüşse zorunlu son çare olmalıdır. AI araçları güçlü bir yardımcıdır ama mutation test güvenlik ağı olmadan kullanılmamalıdır. Refactor’u haftalık ritüel haline getirin, kataloğunuzu Fowler hareketleriyle isimlendirin, her dalgayı ADR ile belgeleyin; on sene sonra “bu kodu kim yazdı” lanetini başkasına bırakacak teknik borcu birlikte ödemiş olursunuz.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 16, 2026

    Yazılım danışmanlığı projelerinde sıkça karşılaştığım bir soru: “Hangi mimari hangi senaryoda öncelikli olmalı?” Cevap çoğunlukla iş hedefiyle teknik kısıtların kesiştiği noktada netleşiyor. Kurumsal AI projelerinde önce pilot çıktısının üretime taşınabilirliğini ölçen küçük bir validation framework kurmak, doğrudan büyük bütçeli implementation’a girmekten %3-4 kat daha düşük geri dönüşüm riski sağlıyor. Yorumlarınıza açığım.

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir