Yazılım kalitesini arttırmanın yolları nelerdir?

soruldu: 11 Haz '12, 18:38

salgul's gravatar image

salgul
45121816
cevap kabul oranı: 0%


OOP olarak bakarsak OOP prensiplerini (S.O.L.I.D) mümkün olduğunca uygulamak

Single Responsibility : Bir sınıfınızın var olmasının sadece bir amacı olmalıdır, yani o sınıfınız sadece tek bir işi yerine getirmelidir, ya da sorumluluğu üstlenmelidir. Yani aynı sınıf hem db'ye birşeyler insert edip hem de bunları verilen bir formatta print etmekle yükümlü olmamalıdır.

Open Closed : Yazılımınızı oluşturan parçalarınız (sınıf, modül v.s.) genişletilmeye müsait (açık) ancak değiştirilmeye kapalı olmalıdır. Burada bahsedilen aslında inheritence ya da interface mekanizmalarını kullanarak farklı davranış biçimlerini implement etmekten bahsedilmekte.

Liskov Substitution : Aslında bu bir anlamda polymorphism'in uygulanması ile ilgili, şöyle ki eğer S tipinde bir sınıfınız var ve bu sınıf T sınıfından türemişse, programdaki T tipindeki nesneler S tipindeki nesneler ile herhangi bir kod değişikliği yapmaya gerek duymadan değiştirilebilir olmalıdır.

Interface Segregation : Client'lar (bunu bir sınıftan türemiş diğer sınıflar olarak düşünelim) kullanmayacakları interface'leri implement etmek zorunda bırakılmamalıdır. Yani base sınıf bir interface implement ederse ondan türeyen sınıflar da bunu implement etmek zorunda kalacaklardır, ancak türeyen sınıfların hepsinin bu interface'e ihtiyaçları olmayabilir, dolayısıyla o interface üzerindeki değişiklikler alakasız olmalarına rağmen diğerlerini de etkileyecektir.

Dependency Inversion : Klasik yaklaşımda düşük seviye modüller yüksek seviyedeki modüller tarafından kullanılabilecek şekilde, o modüllere göre tasarlanırlar, dolayısıyla yüksek seviyedeki modüller düşük seviyedeki modüllere bağımlı hale gelirler.Bu prensipteki amaç yüksek ve alçak seviye modüller arasındaki yüksek bağımlılığı kaldırmak bu sayede yüksek seviyedeki modülleri farklı düşük seviye modül implementasyonları ile sorunsuz kullanabilmektir. Modülleri farklı paketlere ayırmak ve paketler için interface'ler tanımlamak yolu ile bu gerçekleştirilir.

Aslında bu prensiplere bakıldığında da görülen yazılan bir kodu(sınıf) mümkün olduğunca farklı yerde kullanılabilir yapmak, kodun bir parçasında yapılan bir değişikliğin tüm projenin mümkün olduğunca az yerinde değişikliğe neden olabilir olmasını sağlamak şeklinde özetlenebilir, yani low-coupling.

Bunun dışında refactoring altında tanımlı yöntemlerin incelenmesi ve uygulanması da önemlidir. Tabi design pattern'ler de önemli, yaşanmış tecrübelerin birer kural,öneri haline getirilmiş şekilleridir.

permanent link

cevaplandı: 12 Haz '12, 03:56

nht's gravatar image

nht
95651720
cevap kabul oranı: 33%

bu verdiginiz cevabi belki dahada genisleterek bi blogta paylasmalisiniz bence. tesekkurler.

(12 Haz '12, 16:09) omerolmez omerolmez's gravatar image

Yazilim kalitesini artirmak icin kod yazmamak gerekiyor, yani gereksiz yere kod yazmamak gerekiyor. Örnegin ayni programi LISP ve Java'da yazdiginizda, Java progragraminin 3-4 kati büyüklükte oldugunu görüyorsunuz. Programcinin tecrübesizligine göre bu 8-10 katina kadar bile cikabiliyor. Durum böyle iken kodun bakimi cok zorlasiyor. Anlamadiginiz kodu degistirmeniz cok zor bir hal aliyor. Degistirilemeyen kodun kalitesi de o oranda düsüyor. Tasarim prensipleri, sablonlari vs. bunlar güzel ve hos, ama bence ayni islem icin daha az kod yazmak zorunda oldugumuz programlama dillerini kullanmaliyiz. Daha az kod yazmak, kod kalitesini artirir anlamina gelmiyor tabi. Ama ne kadar az kod yazarsak, o oranda kodun tümünü kafamiza sigdirmamiz ve gerekli degisiklikleri yapmamiz kolaylasiyor.

EOF (End Of Fun)

Özcan Acar

permanent link

cevaplandı: 12 Haz '12, 04:24

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183
cevap kabul oranı: 52%

Yazılan bir kod her zaman değiştirilmeye açık olmak zorundadır,bu her zaman bu sektörde çalışan herkesin başına gelen bir durumdur,önce bir prototip ile başlanır bu esnada herşey hızlıdır,her istek sisteme kolayca ve hızla entegre edilir,bir süre sonra artık sistem büyümeye başlar,yeni istekler,değişiklik talepleri gelmeye devam eder ancak bunların sisteme entegre edilmesi başlarda bir kaç gün sürerken şimdi artık haftalarca sürebilmektedir,bu kontrollü ve organize bir kodlama yapılmamasından kaynaklanır,bu prensipler sistemin kod büyürken nasıl kontrol edilebilir kalabileceğini tanımlar.

(12 Haz '12, 04:47) nht nht's gravatar image

Istediginiz kadar kontrol etmeye calisin, bir zaman sonra orta ve büyük capli projelerin hepsi kontrol edilemez hale gelir. O yüzden projelerin cogu batiyor. Isin sirri az ve öz kod yazmaktir.

(12 Haz '12, 04:53) özcanacar ♦♦ %C3%B6zcanacar's gravatar image

@özcanacar hocam ayni islem icin daha az ve kaliteli kod yazabilme acaba java'da mumkun mu? Static tip zorunlulugu olan dillerde bu biraz zor diye dusunuyorum. Ornegin ayni isi cok daha az kod yazarak python ve ruby'de yazabiliyoruz.

(12 Haz '12, 04:58) CemIkta ♦ CemIkta's gravatar image

@CemIkta ne yazik ki hocam Java sizi her zaman bol bol kod yazmaya zorluyor. Programci olarak Java dilini, örnegin macrolar yazarak genisletemediginiz sürece her zaman cok kod yazmak zorundasiniz. Bunun en güzel örnegi Java'ya eklenen foreach operatörü. Neden ben kendim uygun buldugum operatörleri Java'ya ekleyemeyeyim de bunu hep Java mücitleri yapsin? Durum böyle olunca yazdigim kodu sadece Java'nin bana izin verdigi sekilde yapilandirabiliyorum. Cogu zaman da ufacik bir islem icin sayfalar dolusu kod ortaya cikiyor. Ayrica yazdigim kod zengin bir semantige sahip olamiyor.

(12 Haz '12, 05:11) özcanacar ♦♦ %C3%B6zcanacar's gravatar image

Zengin bir semantige sahip olmayan kodun bakimi da cok zorlasiyor. Koda baktiginizda ne yaptiginiz anlamiyorsunuz. Örnegin Java'ya bir dizindeki dosyalari baska bir dizine kopyalamak icin copy isminde yeni bir operatör ekleyebilseydim, asagidaki gibi bir sey olurdu:

copy("../new/dir") { fileset("src_dir"); }

Ama bu islemi yapmak icin en az 100 satir kod yazmam lazim, asagidaki örnekte görüldügü gibi

http://www.mkyong.com/java/how-to-copy-directory-in-java/

Hangisini hemen kavramak daha kolay? Iste bu yüzden cogu proje batiyor, cünkü gereksiz kod yaziliyor ve fakir semantik kullaniliyor

(12 Haz '12, 05:16) özcanacar ♦♦ %C3%B6zcanacar's gravatar image

Bir proje böyle temel işlemlerdeki karmaşadan dolayı batmaz,yüksek seviyedeki organizasyon tasarım iyi yapılamazsa batar ki bunu da yapabilmek buna uygun bir yapıyı baştan tasarlamak gerçekten zordur,herşeyi öngörebilmeniz olanaksızdır,yoksa bu tarz copy vs. tarzı şeyleri bir utility olarak projenize eklersiniz,koda bakan kimsenin de aklı karışmaz,o kodun ne iş yaptığını bilir,dediğim gibi karmaşa yüksek seviyedeki organizasyondan kaynaklanır,yani akış yalın değilse yada yeterince dökümante edilmemişse o projede sıkıntı yaşanır,sıkıntıyı dile yüklemek sorumluluğu atmak olur sanki.

(12 Haz '12, 06:45) nht nht's gravatar image

Benim yasadigim dünyada projeler programcilarin beceriksizliklerinden, oopy gibi ayni seyleri tekrar tekrar icat ettiklerinden, yazdiklari kodun okunamamasindan, unit test nedir bilmediklerinden, birkac tasarim prensibini bilmekle, yazilim yapmayi derinlemesine anladiklarini düsündüklerinden batiyor.Sizin dünyanizda sanirim durum farkli; programcilarin hepsi bomba,proje yöneticilerinin dünyadan haberi yok; tasarimin nasil olacagi önceden belli vs...copynin bir Java operatörü olmasiyla bunun bir utulity sinifi olmasi arasindaki farki ben dogru aciklayamadim sanirim.Yazilimsirlarindanbirisidebu

(12 Haz '12, 06:55) özcanacar ♦♦ %C3%B6zcanacar's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster

Yazılım geliştirirken uygulayacağınız prensipler, kodun kalitesinin yüksek olmasındaki tartışmasız bir numaralı etkendir.

Daha küçük parçalardaki kaliteyi artırmak için ise, statik kod analizi yapan araçlar kullanılabilir. Statik kod analizi araçları vasıtasıyla, kodunuzun içerisindeki belli şablonlar tespit edilerek, daha iyisi nasıl olabilir şeklinde öneriler sunulmaktadır.

Eğer .NET platformunda kod geliştiriyorsanız, Microsoft'un kendi içerisinde kod standartlarını sağlamak ve analiz etmek amacı ile geliştirdiği FxCop aracını kullanabilirsiniz. FxCop, bir komut satırı uygulamasıdır, istediğiniz uygulamaya entegre edebilirsiniz. Visual Stuio içerisinde de kod metrikleri ve statik kod analizi araçları, arka planda FxCop'u kullanmaktadır.

permanent link

cevaplandı: 14 Haz '12, 01:43

tilikoglu's gravatar image

tilikoglu
8602816
cevap kabul oranı: 18%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1

Soruldu: 11 Haz '12, 18:38

Görüntüleme: 1,066 kez

Son güncelleme: 14 Haz '12, 01:43

Benzer sorular

powered by BitNami OSQA