Kodlardaki Kt Kokular Tespit Etme Yntemleri ve Algoritma

  • Slides: 44
Download presentation
Kodlardaki Kötü Kokuları Tespit Etme Yöntemleri ve Algoritma Analizi Dokuz Eylül Üniversitesi Bilgisayar Mühendisliği

Kodlardaki Kötü Kokuları Tespit Etme Yöntemleri ve Algoritma Analizi Dokuz Eylül Üniversitesi Bilgisayar Mühendisliği Bölümü Aylin GÜZEL, Özlem AKTAŞ

İÇİNDEKİLER Bilgisayar Bilimi ve Bilgisayarın İşleyişini Anlamak Kodda Kötü Koku Kodda ‘kötü koku’ nedir?

İÇİNDEKİLER Bilgisayar Bilimi ve Bilgisayarın İşleyişini Anlamak Kodda Kötü Koku Kodda ‘kötü koku’ nedir? (ing. Bad Smell in Code) Kodda kötü koku ne zaman meydana gelir ? Kodda kötü koku meydana geldiğinde ne yapmalıyız ? Yeniden Düzenleme (ing. Refactoring) Yeniden Düzenleme ’ den Elde Edilen Faydalar Ne zaman ‘Yeniden Düzenleme’ yapmalıyız ? Yeniden Düzenleme Süreci Koddaki Kokular Bazı Yeniden Düzenleme Yöntemleri Önceki Çalışmalar Koddaki Kötü Kokular ve Algoritma Analizi Sonuç ve Teşekkür

Bilgisayar Bilimi ve Bilgisayarın İşleyişini Anlamak Bilgisayar bilimi bir bilgisayarın nasıl çalıştığını ve nasıl

Bilgisayar Bilimi ve Bilgisayarın İşleyişini Anlamak Bilgisayar bilimi bir bilgisayarın nasıl çalıştığını ve nasıl düşündüğünü anlamaktır. Bilgisayarın işleyişini anlamak da geliştiricilerin nasıl düşünmesi ve bilgisayara nasıl yaklaşması gerektiğini anlamalarına yardımcı olur.

Kodda Kötü Koku Nedir? Tasarımdaki zayıflıklar, Analiz, karar verme ya da uygulamada yapılan yanlışlar.

Kodda Kötü Koku Nedir? Tasarımdaki zayıflıklar, Analiz, karar verme ya da uygulamada yapılan yanlışlar. Performans kaybına neden olur. Kaynak koddaki potansiyel problemlerin göstergesi.

Kodda Kötü Koku Ne Zaman Meydana Gelir ? Yanlış analiz, Sistem hakkında yanlış düşünme,

Kodda Kötü Koku Ne Zaman Meydana Gelir ? Yanlış analiz, Sistem hakkında yanlış düşünme, Yanlış karar verme, Düşünülen doğru şeyi yanlış uygulama, Yazılım Geliştirme Prensiplerini göz ardı etme, Karmaşık kod yazma, Okunabilirliği ve anlaşılabilirliği zayıf kod yazma.

Ø Ø Ø Yazılımcı, süreç içerisinde, “nasıl daha iyi kod yazılabilir”, “yazılımdan nasıl daha

Ø Ø Ø Yazılımcı, süreç içerisinde, “nasıl daha iyi kod yazılabilir”, “yazılımdan nasıl daha iyi bir performans elde edilebilir”, “yazılan kod başka bir sisteme kolayca entegre edilebilecek kadar doğru ve temiz midir”, “bir sonraki yazılımcı kodu adete gazete okur gibi okuyabilecek mi ya da sisteme müdahale edip kod üzerinde kolay bir şekilde değişiklik yapabilecek midir”, “gerçekten bu yazılan en iyi çözüm müdür” gibi kaygılar taşımalıdır.

Aksi taktirde; Ø Kodun ilerleyen zamanlardaki müdahale edilebilirliği azalır ve yapılmak istenen değişiklikler çok

Aksi taktirde; Ø Kodun ilerleyen zamanlardaki müdahale edilebilirliği azalır ve yapılmak istenen değişiklikler çok uzun zaman alabilir. " Ya Sonrası ? " Ø Esnekliği, tanınırlığı, okunurluğu ve anlaşılabilirliği “kötü” olan kodlar mevcut yazılımcıyı kurtarsa bile sonraki yazılımcı için kabus olacaktır.

Kodda Kötü Koku Meydana Geldiğinde Ne Yapmalıyız ? Daha kaliteli, Düşük maliyetli, Yüksek performanslı

Kodda Kötü Koku Meydana Geldiğinde Ne Yapmalıyız ? Daha kaliteli, Düşük maliyetli, Yüksek performanslı yazılımlar için, Koddaki Kötü Kokular ‘Yeniden Düzenleme’ ile yok edilmelidir.

Yeniden Düzenleme Kodun iç yapısı geliştirilir, Kodun dış yapısında değişiklik olmaz. Hedefi yeni bir

Yeniden Düzenleme Kodun iç yapısı geliştirilir, Kodun dış yapısında değişiklik olmaz. Hedefi yeni bir fonksiyon eklemek değildir. Yeni hiyerarşiler kurar.

Yeniden Düzenleme Basit, Anlaşılabilir, Değiştirilmesi kolay, Okunabilirliği yüksek, Başka projelerde kullanılabilir, Geliştirilebilir yazılımlar sağlar.

Yeniden Düzenleme Basit, Anlaşılabilir, Değiştirilmesi kolay, Okunabilirliği yüksek, Başka projelerde kullanılabilir, Geliştirilebilir yazılımlar sağlar.

Yeniden Düzenleme ’ den Elde Edilen Faydalar Kod miktarı azalır. Karmaşık kodlar basitleştirilir. Kodun

Yeniden Düzenleme ’ den Elde Edilen Faydalar Kod miktarı azalır. Karmaşık kodlar basitleştirilir. Kodun bakımı kolaylaştırılır.

Ne Zaman Yeniden Düzenleme Yapmalıyız ? Yeni bir fonksiyon eklendiğinde, Mevcut tasarım ve kod

Ne Zaman Yeniden Düzenleme Yapmalıyız ? Yeni bir fonksiyon eklendiğinde, Mevcut tasarım ve kod ‘kötü’ ise, Hataları düzeltmek için, Kodları gözden geçirirken.

Yeniden Düzenleme Süreci Küçük bir değişiklik yap. Sistem hala çalışıyor mu test et. o

Yeniden Düzenleme Süreci Küçük bir değişiklik yap. Sistem hala çalışıyor mu test et. o Evet ise; § yeni bir Yeniden Düzenleme yöntemine geç. o Hayır ise; § problemi çöz ya da § değişikliği geri al. (sistem hala çalışıyor ) Ó Hedef temiz kod.

Koddaki Kokular Çoklanmış Kod (ing. Dublicated Code) Uzun Metotlar Geniş Sınıflar Uzun Parametre Listesi

Koddaki Kokular Çoklanmış Kod (ing. Dublicated Code) Uzun Metotlar Geniş Sınıflar Uzun Parametre Listesi ‘Bir Gün Lazım Olur’ Düşüncesi Yorum Satırları Boş Sınıflar

Bazı Yeniden Düzenleme Yöntemleri Tekrar eden kodları ayrı fonksiyonlara ayırmak, İlgili rutinleri bir sınıf

Bazı Yeniden Düzenleme Yöntemleri Tekrar eden kodları ayrı fonksiyonlara ayırmak, İlgili rutinleri bir sınıf altında toplamak, Değişken isimlerini işlevine uygun şekilde değiştirmek, Algoritmaları hızlandırmak,

Bazı Yeniden Düzenleme Yöntemleri Metotların isimlerini; yaptıkları işe paralel şekilde değiştirmek, Kodu programda tek

Bazı Yeniden Düzenleme Yöntemleri Metotların isimlerini; yaptıkları işe paralel şekilde değiştirmek, Kodu programda tek hale getirmek, Uzun metotları kısaltmak, Çok uzun döngülerde döngünün iç kısmındaki kod bloğunu kısa tutmak, § Değişkenleri döngü dışında tanımlamak. İç içe döngülerden kaçınmak,

Bazı Yeniden Düzenleme Yöntemleri Aşırı parametre alan metotların yaptıkları işleri azaltmak için bölmek, Basit

Bazı Yeniden Düzenleme Yöntemleri Aşırı parametre alan metotların yaptıkları işleri azaltmak için bölmek, Basit veri tiplerinin aşırı yüklenmesini önlemek, § değişkene uygun olmayan, § programı yoracak, § gereğinden fazla bellek ayrılmasına neden olacak veri tipini kullanmamak,

Bazı Yeniden Düzenleme Yöntemleri Mevcut kodda işe yaramayan ya da içerisinde çok az işi

Bazı Yeniden Düzenleme Yöntemleri Mevcut kodda işe yaramayan ya da içerisinde çok az işi barındıran sınıfları silmek, İleride lazım olur düşüncesiyle kullanılmayan kodları yorum olarak programda tutmamak, Açık ve temiz kod yerine, yapılan işi yorum satırıyla anlatmak, Ucu açık sınıf tanımlamamak,

Bazı Yeniden Düzenleme Yöntemleri Başka bir sınıftan özellik kullanan metotları ilgili sınıfa taşıyarak mevcut

Bazı Yeniden Düzenleme Yöntemleri Başka bir sınıftan özellik kullanan metotları ilgili sınıfa taşıyarak mevcut sınıf içerisinden çağırmak, Birbirine benzer işler yapan iki metodu tek metotta birleştirmek, Aldığı parametreye göre birbirinden farklı iki iş yapan metodu ikiye bölmek, Karmaşık mantıksal koşullardan kaçınmak.

Önceki Çalışmalar Mens ve Tourwe´ ‘A Survey of Software Refactoring’ Yanlış tasarlanmış Doküman sınıf

Önceki Çalışmalar Mens ve Tourwe´ ‘A Survey of Software Refactoring’ Yanlış tasarlanmış Doküman sınıf hiyerarşisi Yeniden Düzenleme metotları kullanılarak tasarım optimum hale getirilmiştir.

Önceki Çalışmalar Şekil 1. Doküman sınıf hiyerarşisi ve yardımcı sınıflar.

Önceki Çalışmalar Şekil 1. Doküman sınıf hiyerarşisi ve yardımcı sınıflar.

Önceki Çalışmalar Şekil 2. Yeni doküman sınıf hiyerarşisi.

Önceki Çalışmalar Şekil 2. Yeni doküman sınıf hiyerarşisi.

Önceki Çalışmalar Liu ve arkadaşları ‘Schedule of Bad Smell Detection and Resolution: A New

Önceki Çalışmalar Liu ve arkadaşları ‘Schedule of Bad Smell Detection and Resolution: A New Way to Save Effort’ Yazılım ‘ne zaman’ ve ‘hangi durumlarda’ yapılandırılmalı. Kötü Kokuların Tespiti >> Araç (ing. Tool) § Otomatik (tekrar manuel kontrolü gerektirir. ) § Yarı Otomatik

Önceki Çalışmalar Yeniden Düzenleme kuralları için; araç desteği sınırlı, araçlar tarafından desteklenen kurallara göre

Önceki Çalışmalar Yeniden Düzenleme kuralları için; araç desteği sınırlı, araçlar tarafından desteklenen kurallara göre çok hızlı artışa sahip, kötü koku tespiti araç desteğiyle bile zaman harcayıcıdır. Eclipse (versiyon 3. 6) -> 23 kuralı destekler. Yeniden düzenleme kuralı artışı -> 93²

Önceki Çalışmalar Şekil 3. Kötü kokuları tespit etme ve çözümleme.

Önceki Çalışmalar Şekil 3. Kötü kokuları tespit etme ve çözümleme.

Önceki Çalışmalar Chatzigeorgiou ve Manakos ‘Investigating The Evolution of Code Smells in Object-Oriented Systems’

Önceki Çalışmalar Chatzigeorgiou ve Manakos ‘Investigating The Evolution of Code Smells in Object-Oriented Systems’ Yetersiz analiz ve tasarım yapma Kötü Kokuların Tespiti Jdeodarant Tool § Java kodu §

Önceki Çalışmalar Ó Çalışılan kötü kokular: Uzun Metot ve Dev Sınıf Uzun metot (ing.

Önceki Çalışmalar Ó Çalışılan kötü kokular: Uzun Metot ve Dev Sınıf Uzun metot (ing. Long Method) Çözüm: § § v Otomatik araç desteği ya da Büyük boyut -> Küçük boyutlu kod parçaları. Durum Kontrolü (ing. State Checking) yani Şart ya da Eğer (ing. Switch or if/else) ifadeleri programda varsa; Ø Ø Büyük boyutlu kod parçası Karmaşık Anlaşılabilirliği, hata ayıklanması test ve bakımı zor Durum/Strateji (ing. State/Strategy) Tasarım Deseni eksikliği. Tespiti : JDeodarant Tool

Önceki Çalışmalar Dev Sınıf ( ing. ‘God’ Class) Büyük boyutlu Karmaşık Çözüm: Otomatik araç

Önceki Çalışmalar Dev Sınıf ( ing. ‘God’ Class) Büyük boyutlu Karmaşık Çözüm: Otomatik araç desteği (Jdeodarant) § ‘Kümeleme Algoritması’ §

Önceki Çalışmalar Khomh ve arkadaşları ‘A Bayesian Approach for The Detection of Code and

Önceki Çalışmalar Khomh ve arkadaşları ‘A Bayesian Approach for The Detection of Code and Design Smells’ Kötü Kokuların Tespiti (bbns) “Blob Anti. Pattern” üzerinde çalışıldı. § İki test programı. § Başarılı. §

Önceki Çalışmalar Moha ‘Detection and Correction of Design Defects in Object-Oriented Designs’ Tasarım kusurlarının

Önceki Çalışmalar Moha ‘Detection and Correction of Design Defects in Object-Oriented Designs’ Tasarım kusurlarının nedeni : Ø ‘Yanlış Tasarım Kararları’ (Nesneye Tasarımlarda) DECOR (Defect d. Etection for CORrection) Tasarım Kusurlarını; Tespit etme (ing. Detection) § Doğrulama (ing. Correction and Verification) § Dayalı

Önceki Çalışmalar Malhotra ve Pritam ‘Assessment of Code Smells for Predicting Class Change Proneness’

Önceki Çalışmalar Malhotra ve Pritam ‘Assessment of Code Smells for Predicting Class Change Proneness’ Amaç: Nesneye dayalı bir sistemdeki mevcut kötü kokuların bir sınıf için tespit edilme eğilimini deneysel olarak onaylamak. Quartz (açık kaynak zamanlayıcı) 79 sınıf alarak veri seti olarak kullanıldı. Eğilimi sınıflandırma : düşük § yüksek §

Önceki Çalışmalar yüksek değişim eğilimindeki sınıfların gerçek sayısı 65 iken, çalışmadaki tahmin edilme durumu

Önceki Çalışmalar yüksek değişim eğilimindeki sınıfların gerçek sayısı 65 iken, çalışmadaki tahmin edilme durumu 53 tür. düşük değişim eğilimindeki sınıfların gerçek sayısı 14 iken çalışmada 26 olarak tahmin edilmiştir. Java sınıflarındaki 13 farklı kötü kokuyu tespit etmek için eşik değerleri kullanılarak bir araç geliştirilmiştir.

Önceki Çalışmalar Schumacher ve arkadaşları ‘Building Empirical Support for Automated Code Smell Detection’ Amaç:

Önceki Çalışmalar Schumacher ve arkadaşları ‘Building Empirical Support for Automated Code Smell Detection’ Amaç: kötü kokuya neden olan geniş çaplı sınıfların profesyoneller tarafından nasıl tanındığını ve bu sınıflara nasıl çözüm getirdiklerini araştırmak. Çözüm: devasa sınıflar çoklu sınıflara bölmek Ø alt sınıflar bu devasa sınıftan çıkartmak. Ø

Önceki Çalışmalar Code. Vizard yazılım aracı o metrik tabanlı yaklaşım kullanıldı. o devasa sınıfları

Önceki Çalışmalar Code. Vizard yazılım aracı o metrik tabanlı yaklaşım kullanıldı. o devasa sınıfları tanır. o Amacı : C# programlarını ayrıştırmak o kod metriklerini hesaplamak o Sonuç: Çok büyük sınıfları; İnsanlar ve o araçlar tespit edebilir. o

Önceki Çalışmalar Kessentini ve arkadaşları ‘What you like in design use to correct bad-smells’

Önceki Çalışmalar Kessentini ve arkadaşları ‘What you like in design use to correct bad-smells’ • Amaç : Koddaki kötü kokuları iyileştirmek. • Çözüm : Referans kod ile kötü kokuları düzeltmek. Ø Genetik Algoritma Yaklaşımı (Darvin’in evrim teorisinden esinlenildi. ) Ø • Sonuç : Açık kaynak sistemlerde test edildi. Ø Başarılı. Ø

Önceki Çalışmalar Şekil 4. Yaklaşımın genel mimarisi.

Önceki Çalışmalar Şekil 4. Yaklaşımın genel mimarisi.

Önceki Çalışmalar Rech ve Schäfer ‘Visual Support of Software Engineers During Development and Maintenance’

Önceki Çalışmalar Rech ve Schäfer ‘Visual Support of Software Engineers During Development and Maintenance’ • Amaç: Ø Yazılım sistemlerinin kalitesini iyileştirmek. Ø Nesneye dayalı sistemlerde koddaki kusurları otomatik olarak tanımak ve göstermek.

Önceki Çalışmalar • Çözüm : v Code. Sonar aracı geliştirildi. o o o •

Önceki Çalışmalar • Çözüm : v Code. Sonar aracı geliştirildi. o o o • yazılım kontrolü, yazılım testi, yazılım ürün metrikleri, yazılım görselleştirme Yeniden Düzenleme teknikleri kullanıldı. Sonuç : o Eclipse yazılım geliştirme ortamı için geliştirilen sistem sınıfları, bu sınıfların metotları arasındaki ilişkileri ve başka sınıfları görselleştirir o Yazılım sistemindeki potansiyel kusurlar için geliştiriciyi uyarır.

Koddaki Kötü Kokular ve Algoritma Analizi Algoritma : Ø Bir problemi çözmek için kullanılan

Koddaki Kötü Kokular ve Algoritma Analizi Algoritma : Ø Bir problemi çözmek için kullanılan ardışık adımlar dizisi. Ø İyi bir algoritma; o Hızlı çalışmalı o Bellekte az yer kaplamalı o Hedefi en iyi performans

Koddaki Kötü Kokular ve Algoritma Analizi v Algoritmaların performansını ölçmek, v Farklı algoritmalarla karşılaştırmak,

Koddaki Kötü Kokular ve Algoritma Analizi v Algoritmaların performansını ölçmek, v Farklı algoritmalarla karşılaştırmak, v “daha iyisi mümkün mü”, “mevcut çözüm en iyi olan mi” sorularına yanıt bulmak için kullanılır.

Koddaki Kötü Kokular ve Algoritma Analizi Algoritmanın Performansı Ø İç Faktörler v çalıştırmak için

Koddaki Kötü Kokular ve Algoritma Analizi Algoritmanın Performansı Ø İç Faktörler v çalıştırmak için gereken zaman v çalıştırmak için gereken yer Ø Dış Faktörler v girdi verisinin büyüklüğü, v bilgisayarın hızı, sss v derleyicinin kalitesi • Algoritmanın iç detaylarına bakılarak algoritmanın performansını tanımlamak için matematiksel bir yaklaşım olan Büyük–O Notasyonu (bir algoritmanın büyüme hızını) kullanılır. v Büyüme hızı = algoritmanın performansı

Koddaki Kötü Kokular ve Algoritma Analizi Kötü Koku Tespiti : Araç ile. Ø Yazılım

Koddaki Kötü Kokular ve Algoritma Analizi Kötü Koku Tespiti : Araç ile. Ø Yazılım mühendisi bakış açısı ile. Ø Kötü Koku Çözümleme : El ile. Ø Araç ile. Ø Kötü koku tespitinde yanılmalar gözlenmiştir. Kötü koku tespitini doğrulamak için yeni bir yaklaşım : ‘Algoritma Analizi’

Koddaki Kötü Kokular ve Algoritma Analizi; Çok uzun döngülerin, iç içe çok fazla kullanılan

Koddaki Kötü Kokular ve Algoritma Analizi; Çok uzun döngülerin, iç içe çok fazla kullanılan döngü yapılarının, aşırı parametre alan metotların, devasa sınıfların programı yorduğunun kanıtlanmasında kullanılabilir.

Beni dinlediğiniz için teşekkür ederim

Beni dinlediğiniz için teşekkür ederim