Kodlardaki Kt Kokular Tespit Etme Yntemleri ve Algoritma
- Slides: 44
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? (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 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. 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, 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 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 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ı 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 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 ’ 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 ‘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 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 ‘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 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 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 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 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 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 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 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 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 ç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 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. 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ç desteği (Jdeodarant) § ‘Kümeleme Algoritması’ §
Ö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 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’ 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 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ç: 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ı 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’ • 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 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 • 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 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, 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 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 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 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
- Diz kapağı kırığı tespiti
- Hassas görev tespit formu örnekleri
- Düşüncenin belli işaretlerle tespit edilmesi yazma işi
- Tespit fiksasyon
- Temel duygular
- Ayırt etme gücünü ortadan kaldıran haller
- Akran baskısıyla baş etme yolları
- Duyduğu ince ve kalın sesleri ayırt eder
- Anted nedir
- Pazara nüfuz etme stratejisi
- Siyah zemin hangi renkleri yansıtır
- Akran baskısıyla baş etme yolları
- Eylem evresi
- Elakin harf grupları
- Jenerasyonları takip etme
- Bileşik kesir nedir
- Pazara nüfuz etme fiyatlandırması
- Hedeften haberdar etme ve gözden geçirme
- Yoğun büyüme stratejileri
- Su ürünleri kontrol formu
- Algoritma dapat disajikan dalam 2 macam cara yaitu
- Efisiensi algoritma
- Teori graf teknik informatika
- Penulisan pseudoceode dalam algoritma menggunakan
- Algoritma dan bilangan bulat
- Repetition algoritma adalah
- Algoritma diagnosis dm
- Kompleksitas waktu asimptotik
- Contoh sinkronisasi sistem operasi
- Definisi algoritma sains komputer
- Definisi algoritma adalah
- Algoritma adalah alur pemikiran dalam menyelesaikan
- Jelaskan yang dimaksud dengan logika dan algoritma
- Algoritma metode euler
- Algoritma simpleks
- Algoritma
- Atribut objek primitif
- Rekursif adalah
- Definisi perulangan adalah
- Motivasi untuk membuat algoritma adalah.
- Membangkitkan bilangan acak
- Algoritma graph
- Arti dari flowchart
- Flowchart modular
- Algoritma greedy