| Koray'ın Yazılım Günlüğü |
Kodlama Pratikleri Bu yazıda aklımızda bulundurmamız gereken bazı kodlama pratiklerini maddeler halinde sıralayacağım.Kod yazarken sürekli aklımızın bir köşesinde bulundurmamız gerekir sizlerinde tavsiyeleri varsa yorumları bekliyorum.
- Örneğin bir design perceresine (winform olabilir webform da) veritabanından çektiğimiz verileri getiriyoruz.Buradaki yaklaşımımız txtAdi = ds.Tables[0].Rows[0]["kolon_adi"].ToString() olmamalı.Bunun yerine formun arkaplanına sınıf döndüren bir alt DAL katmanı olmalı ve sadece txtAdi = entity.Adi; demeliyiz.Reflection metodu ile dinamik bir şekilde bir datarowdaki kolonları sınıf propertylerine map edebiliriz. UI katmanı içerisinde kesinlikle sql cümleleri yazmayın. - İş katmanında bir metoda parametre olarak Dataset yollamak ve dataseti fonksiyon içinde parse etmek te yanlış bir tercih olacaktır.Bunun yerine datasetin sınıfa dönüştürülmüş halini metoda yollamalıyız.Çünkü İş katmanındaki bir metod veritabanındaki alan adını harfiyen bilmek zorunda değildir.Ayrıca bu tarz bir yaklaşım veritabanındaki kolon ismi değiştiğinde de çok fazla sayıda metodun değişmesi ve değişim maliyetinin artması demektir.
-Uzun metodlarda bazen aralara //açıklama 'lar serpiştiririz.Bunun yerine bu metodu alt metodlara bölüp aciklayıcı birer isim verip çağırmak daha sağlıklı.Çok fazla açıklamalarla kodu kirletmemeliyiz.
Bir metodun uzunluğu 80 satırı geçmemesine özen gösterelim.
- Standart sık olarak kullanılan method ve sınıfları bir class library projesi altında toplanarak yeni bir projeye başlarken aynı kodları tekrar tekrar yazmamış oluruz. Örneği stringi tarihe çevirme , excelden okuma , şifreleme , DataAccessLayer vs.vs. Bu yapılan projeyi iyice test edilirse her bir case için hem kalitemiz artar hem de hızımız.
- Bir sınıf sadece bir görevi yerine getirecek şekilde tasarlanmalı.Örneğin sınıf hem dinamik sql oluşturup hem de veritabanına bağlantı sağlamamlı.Her sınıf sadece bir işi ihtiva etmeli.
- Projeyi her zaman 3 katmanlı olarak geliştirmeye özen gösterilmeli.Veritabanı işlemleri DAL , hesaplama gibi işlemler business ve Presentation katmanı. Örnek proje.Core dlli , proje.DAL dll'i ve projenin UI si.
- Kıyaslama gerektiren yerlerde string veya sayılardan faydalanmak yerine Enumaration kullanmak gerekir.Bunu yapmak kodun okunurluğunu artırır.
- Tekrarlayan kod olduğunu farkettiğiniz an Design Patternlerden faydalanarak refactoring yapın.
- Yazmak istediğiniz bir sınıfı önce netten araştırın daha önce bunu nasıl yapmışlar , bulabilirseniz başkasının kodundan da kendinize birşeyler çıkartabilirsiniz.Bir başkasının kodunu okuyabilmek çok önemlidir.
- Örneğin bir veri tabanı bağlantısını açıyorsak herhangi bir hatada connectionın kapanmasını garanti altına almak için finally blogunda yapmalıyız veya using ifadesi ile işlemi yaptırmalıyız.
- Örneğin bir form üzerinde bazı kontroller yaptırmak istiyorsunuz,Eğer adı text boxı boş ise uyarı versin veya daha önce aynı isim soyisim varsa uyarı versin.Bu tür işlemlerde bir alt ara sınıf kullanarak iş katmanı ile gösterim katmanı ayrılmalıdır. Kontrol uyarılarını iş katmanı vermelidir. Bunu da bir interface IView ve class Presenter ile yapabiliriz.Böylece aynı sınıfı web ortamından windows ortamına taşımak son derece kolaylaşır ve gösterim katmanında gereksiz kod kalabalığı olmaz.KAYNAK : http://www.cihataltuntas.com/?p=204#comments
-Encapsulation : ASP.NET uygulamalarında her sayfada Session a değer atmak veya geri almak için tek tek Session["data"]=12 gibi atama yapmak yerine Sessions diye bir sınıf oluşturup property kullanarak atama yapmak daha sağlıklı. Burada status'un arka planını saklamış olduk.
public static decimal status { get { if (HttpContext.Current.Session["status"] == null) HttpContext.Current.Session["status"] = 0; return Convert.ToDecimal(HttpContext.Current.Session["status"]); } set { HttpContext.Current.Session["status"] = value; } }
- Tell Don’t Ask Principle bu method ile şunu yapıyoruz "sorma söyle". Mantık olarak iki tane sınıfımız olsun birisi Banka diğeri de Müşteri. Müşteriler bankadan bankada para 1000 TL kalana kadar para çekebilirler.Bu karşılaştırmayı kim yapmalı müşteri mi yoksa Banka sınıfları mı. Eğer müşteri yaparsa bu bir hata olur. Çünkü her sınıf kendi görevini yapmakla mükelleftir.Bankada ne kadar para olduğu müşteriyi ilgilendirmez. Her sınıf kendi işini yapmadığı zaman yani bu kuralı çiğnediğimizde bir değişiklik için bir çok sınıf etkilenebilir tabi buda istenmeyen bir durumdur.
- High Coupling'i önlemek. Örneğin iki sınıfımız olsun. sinif1 ve sinif2. sinif2 sinif1 içerisinde ne kadar çok adı geçerse sinif2 ye olan bağımlılığı o kadar artar. NDepend gibi programlar sayesinde iki sınıf arasındaki bağımlılık derecesini öğrenebiliriz. İki sınıfın bağımlılığını önlemek için interface veya abstract sınıflar kullanılır.
- Windows formlarda veya web uygulamarında mutlaka basePage veya baseForm gibi bir yapı kullanın ki bütün formlara uygulamak istediğiniz bir özellik olursa tek tek hepsine uygulamak zorunda kalmayın. Örneğin ASP.NET sessiondan login kontrolü yapmak istiyorsunuz ve bunu her sayfada yapacak diyelim. Bunun için public partial class BasePage : System.Web.UI.Page { // todo } gibi bir türetme yaparak BasePAge in load eventini override ederek kullanabilirsiniz. Örneğin 3 tip kullanıcınız var ve hepsinin ekran şekilleri farklı olacak. Bunun için bir base page ve bundan türeyen alt 3 base page yapıp ekranları standardize edebilirsiniz.
- Kendinizin fırlatacağı exceptionları (throw new Exception("Not implemented"); kod içine exception açıklamasını yazmaktansa Resource.resx dosyalarına erroCode'larını ve karşılıklarını yazarak bu sınıftan exception fırlatmak daha sonra kodun yönetilmesi açısından esneklik sağlar. Örneğin throw new CoreException(100); gibi. Daha sonra bu exceptionın türkçesi istenirse sadece resource dosyasından değiştirilir ve bütün projeye uygulanmış olur.
- UNIT TESTS : Her bir metod için yazılacak birim testler hem metodun her bir case'de çalışmasını garanti eder. Örneğin bir stringi decimal'a çeviren bir metod yazdınız ve üzerinde bazı değişiklikler yaptınız bu metodu normalde bir çok yerde çalıştırıyorsunuz ve yanlış bir değişiklikte sistemin bir çok yeri çalışmaz hale gelecektir. Unit testlerde bu anlamda gelen input ve metodun vermesi gereken outputları tanımlanır.Örneğin 10 farklı input çeşitini metoda vererek bize vermesi gereken sonuçları test ederek olası hataların önüne geçilir.
- Windows veya web uygulaması yaptığımızı düşünelim bir butona tıklayınca bir işlem yaptıracağız diyelim ; işlem yapacak kodları butonun click eventi yerine bir fonksiyonda tanımlayıp butonun click eventinde bu fonksiyonu çağırabiliriz.
- Klasörler oluşturma : Belli amaca hizmet eden class’ları bir klasör altında toplayarak bir hiyerarşi sağlayabiliriz.
- Property'nin Gücünü kullan : Sınıflarda değişkenleri public yapmak işin kolayına kaçmaktır ancak daha sonra o değişken ile ilgili bir kontrol veya herhangi bir işlem yapmak isterseniz işinizi zorlaştıracağınızı unutmayın. Bu gibi durumlarda property kullanın. Örnek bir Fatıra sınıfınız olsun ve Fatura Tarihi sistem tarihinden büyük olursa hata fırlatmasını istiyorsunuz. UI tarafında sınıfın property sine atama yapıldığı anda (SET) property içerisinde kontrolü yapıp exception fırlatabilirsiniz veya Loga yazdırabilirsiniz.
- İlerde lazım olur diye bir sınıf veya fonksiyon eklemeyin. Mantık kodumuz ne kadar sade olursa o kadar iyi.
- Fonsiyon ve sınıf isimlerini anlaşılır isimler verin bırakın uzun olsun : GetUserIdByUsernameAndPassword();
- İleri ve kurumsal düzey konulara eğilin. Ben biliyorum deyip bildiğinizi okumayın. Web services,.NET Remoting,WCF,delegate,test,assembly,culture,Threads,AppDomain,Process vs..
- String birleştirirken StringBuilder ve String.Format kullan. Stringleri karşılaştırırken String.Compare metodlarını kullan. 00:01 - 12/12/2009 - yorum {yok} - yorum yazReferanslar 23:48 - 11/12/2009 - yorum {yok} - yorum yazKodlama Esnasında Dizayn - Code Complete C5PART || - Yüksek Kalitede Kod Yazma CHAPTER 5 KODLAMA ESNASINDA DİZAYN 5.1 Çoğu insan dizaynı kodlama aktivitesi olarak görmemekte , küçük projelerde bir çok aktivite gibi dizayn da bir kodlama aktivitesi olarak görülmekte ancak büyük projelerde dizayn kodlamadan önce yapılabilmekte.Küçük çaplı projelerde programcı klavyenin başındayken sınıflar ve interface ler tasarlar , sınıf diagramlarını çizer başka bir arkadaşına problemle ilgili kullanılablecek tasarım desenini sorar vs. Proje küçük olsa da tasarıma önem verilmelidir. İYİ TASARIM : Tasarım isterlerin toplanmasından kodlama ve hata ayıklamaya kadar süregelir. Üst seviye dizaynı iyi olursa bu alt seviyedeki dizayna da yardımcı olur.İyi bir tasarım yapılmazsa kodun başka bir yerinde de kötü bir tasarıma yol açabilirsiniz ayrıca tasarımınızın ne kadar iyi olduğunu algılamak zordur aynı problem için birden fazla kabul edilebilir iyi dizayn yapılabilir. İdeal olarak bütün sistem stabil olarak çalışabilmelidir , sıfır kaynak tüketmeli , sıfır bandwith tüketmeli , hata içermemeli , geliştirme maliyeti olmamalı Ancak gerçek dünyada tasarımcının görevi bu sayılanlardan optimumu yakalamaktır. Tasarım durağan değildir zaman içinde değişebilir. 5.2 Anahtar Noktalar - Kompleksliği Yönetmek Yazılım geliştirmede iki tip zorluk bulunmakta.Bunlar rastlansal ve temel zorlunluluklar. Örneğin bir arabanın araba olabilmesi için motoru , tekerlekleri ve kapıları olmalıdır , eğer bu şartlar sağlanmazsa araba olamaz. Bu temel zorlunluluklar sınıfına girmektedir.Rastlansal zorlunluluklara da örnek olarak zorunlu olmayan örneğin ABS , 4 silindirli olma gibi özellikleri sayabiliriz, yani opsiyoneldir. İyi dizayn için aşağıdaki kriterler sağlanmalıdır. Minimum Karmaşıklık : Başkalarının da anlayabileceği şekilde bir dizayn yapılmalıdır. Yazılım geliştirirken yapılması gereken adımlar: Seviye 1: Öncelikle sınıf ve metodları tanımlamaya başlamadan önce sistemi bütün olarak ele almakta fayda vardır. Seviye 2: Sistemi alt sistemlere ayrıştırmak. Bu parçalar büyük olabilir örneğin veritabanı , kullanıcı arayüzü , raporlama aracı ve iş kuralları. Bu seviyede sistemi hangi alt sistemlere bölüneceğine ve diğer alt sistemlerle nasıl bir etkileşim içinde olacakları belirlenir. Bu etkileşim çok karmaşık olmamalıdır. Örneğin kullanıcı arayüzünü değiştirecek bir programcı diğer alt sistemleri de anlamak zorunda kalmamalıdır. Seviye 3:Sınıfların ve birbirleri ile olan etkileşimin belirlenmesi. Seviye 4: Sınıfların metodlarının belirlenmesi. Seviye 5: Metodların kodlarının yazılması. 5.3 Kod Bloglarının Dizayn Edilmesi. - Örneğin Personal Time-Billing Sistemi geliştireceğiz. Sınıf diyagramı aşağıdaki gibi olsun.
Her bir nesnenin özellikleri vardır. Örneğin Employee nesnesinin özellikleri name,title,billingRate dir. Görsel kullanıcı arayüzünde butonlar, messageBoxlar, forlar,çizme araçları hepsi birer nesnedir. - Bir nesnenin diğer nesneler üzerinde yapacaklarının belirlenmesi.Hangi nesne hangi nesneleri içinde barındıracak,kim kimden kalıtım alacak, - Bütün metod ve değişkenlerin public mi private mi olacağının belirlenmesi. Bir sınıf tasarlarken anahtar nokta sınıfın hangi özelliklerinin dışa açılacağının belirlenmesidir. Örnek olarak bir herhangi bir yere log tutan bir sınıfınız var ve kullanıcıya bu logları gösteriyorsunuz. Bu sınıfın dosyayı nereye yazdığı veya dosya uzantısının private olması gerekir çünkü veriyi geriye liste halinde alıyoruz. İyi bir sınıf tasarımı dışarıya mininmum karmaşıklık yansıtanıdır. Bunu bir buz dağının suyun altında kalan kısmına benzetebiliriz. Örnek : Bir A sınıfının integer tipinde id isminde bir değişkeni var ve tekil olması gerekiyor. Bir de global düzeyde maksimum id yi tutan g_maxId değişkeni olsun. Her yeni nesne yaratılırken id = ++g_maxId; ile yeni bir id olması garanti ediliyor. Şimdi bir düşünelim burada ne tür sorular bizi bekleyebilir. - Belli bir Id aralığı olacak mı , Güvenlik için Id ‘yi birer birer değil de çoklu artırmak istersek ne olacak , Silinen id leri kullanmak istersek ne olacak. Şimdi yukardaki gibi id’yi id = ++g_maxId; şeklinde verdiğimizde bir değişiklik yapmamız gerektiğinde yeni nesne oluşturduğumuz her yerde kodu değiştirmek zorunda kalırız. Bu bizim istediğimiz bir şey değil. Veya uygulamamız multi thread ise yukarda bahsedilen yapı çalışmaz. Id = NewId(); daha sağlıklı ve yönetimi kolay bir yapıyı bize sunar. NewID() rutini arka planda istenilen işleri yapar ve onları gizler. İyi bir tasarım yapmak için yazılım içerisinde sık değişebilecek yerleri tespit etmek gerekir. Değişmesi muhtemel parçaları birbirinden ayır ve diğerlerinden izole et. Çok değişen parçalar genelde iş kurallarıdır. -Kullanıcı input ve outputundan sistemi soyutlamak : Örneğin bir dosya çıktısı veriyorsanız bunun uzantısını soyutlamalısınız. .xls , .xlsx , csv gibi -Bir durum değişkenini direk kontrol etmek yerine bir alt rutinde kontrol etmekte fayda var. Loose Coupling : Sınıfların birbirleri arasındaki bağımlılıkları yok etmek. 5.4 Tasarım Pratikleri. Bir program yazdığınızda aynı programı tekrar yazmak istediğiniz olmuştur. Bir kez yazdıktan sonra artık o programı daha iyi kavradığımızdan dolayı tasarımı konusunda daha iyi çözümler sunabilir. Tasarım iteratif bir olgudur. A noktasından B noktasına vardığınızda tekrardan A noktasına dönmek zorunda kalabilirsiniz. Olaya üst seviyeden bakmak olayın alt seviye detaylarını persfektif olarak anlamamıza yardımcı olur. Bir dizayn iyi dörünüyorsa yeni teknikler uygulamamazlık yapmayın çünkü bir sonraki yapacağınız her zaman bir öncekinden iyi olacaktır. 13:38 - 1/12/2009 - yorum {yok} - yorum yazYazılımda Mükemmel OlmakMerhaba arkadaşlar bu yazımda bir çok yazılımcının kafasını kurcaladığına emin olduğum bir konu ; mükemmeliyetcilik konusunda bir kaç satır karalamak istiyorum.
En iyi çözüm , en iyi tasarım da projeye , ortam şartlarına göre değişir zaten bu da sezgisel olarak ortaya çıkar. İlerde minimum refactoring yapmak ideal olanıdır.
11:45 - 25/11/2009 - yorum {1} - yorum yazORACLE SQL Tunning’e Bir Çırpıda Bakış Bu makalemizde Oracle ile ilgili bazı temel bilgilere ve özellikle de performans konusunu inceleyeceğiz. Oracle ile performans konusuna girmeden önce konuyla ilgili Oracle veri blokları ve bellek yapısını az da olsa anlamakta fayda var diye düşünüyorum. Temel kavramları anladıktan sonra üzerine inşa etmek daha kolay olacaktır. Bellek Yönetimi Yukardaki şekilde de görülen yapıları bizim için önemli olanları kısaca tanımlayalım. Redo Buffer,Java Pool ve Stream Pool PGA ise kullanıcı bazlıdır. Oracle’a açılan her bir User process için server tarafında bir server process tahsis edilir. Yani her bir kullanıcı için serverda bellekten yer ayrılır.
*** : Oracle 8i de bellek yönetimi tamamen admine bırakılmıştı.Her bir cache e teker teker boyutlarını vermek gerekiyordu.Library Cache’e ayrı Data Dictionary Cache’e ayrı. 10g ile birlikte sadece PGA ve SGA ya bellek alanları vermek durumundaydık , alt cache’lere teker teker verme zahmetinden kurtulmuş olduk. 11g ile birlikte bu yönetimi Oracle tamamen kendisi yapabilmektedir. Performansınızı Uçurun 1- Tablo istatistiklerinin yanlış olması : Oracle execution plan oluştururken istatistiklere bakar. İstatistiklerde bir tabloda kaç kayıt var vs gibi bilgiler mevcuttur. Eğer sık insert alan bir tablo ise istatistikler sorgu çalışacağı anda yanlış olabilir. Bunu bir örnekle modelleyelim. Stok adında bir tablomuz olsun başlangıçta 10 kaydımız var diyelim daha sonra toplu birşekilde tabloya import yaptık ve 9000000 kaydımız oldu diyelm. Oracle normal şartlarda sadece belli zamanlarda tabloların istatistiklerini tekrardan düzenler bu yüzden import işlemini yaptıktan sonra istatistiklerde kayıt sayısı hala 10 görülecektir. SELECT * FROM Stok WHERE Kategori=’Bilgisayar’ sorgusunu çalıştırdık diyelim. Stok tablomuzda Katagori kolonunda indeksimiz olmasına rağmen kayıt sayısı az olduğunu sanan Oracle bu indeksi kullanmayıp Full Table arama yapabilir. Bu da sistemi bir hayli yorar. Halbuki istatistikler tam olsa index range scan yaparak çok daha az maliyet ile kayıtları getirebilir. 2- Sorgularda eşitliğin sol tarafında fonksiyon kullanmak index kullanımına engel olur. Örnek 3-Sub queryleri FROM’a yazmak en hızlısıdır. 4- Eğer kesişen kayıt almadığından eminseniz UNION kullanmak yerine UNION ALL kullanmak daha hızlı olacaktır. Çünkü UNION ALL kesişen kayıtlarla uğraşarak vakit kaybetmez. 5- WHERE TO_CHAR(Fiyat) = :fiy yerine WHERE Fiyat = TO_NUMBER(:fiy) 6- ORDER BY,NOT IN,IN,UNION,DISTINCT gibi ifadeler kullanılırken dikkatli olmak lazım çünkü maliyeti çok yüksek. 12- Index kullanırken de ne tip index tipini doğru seçmek gerekir. İki tip indeksimiz var. B-tree ve Bitmap Index. Hangisini kullanacağımıza doğru karar vermek çok önemli. Veri tekrarı az ise B-Tree : Örnek kolon stok kodu , Tekrar eden kayıt çok ise Bitmap : Örnek Cinsiyet. Primary Key ve Unique Key kolonlar B-TREE indekse örnektir. 13- Partition Yapalım. Range,Hash,List ...vs Partitions. 14- Birden fazla CPU varsa paralel indexlerden faydalanalım. 15- Cluster kullanımı: Örneğin bir adı,soyadı,tel gibi bilgi çok fazla yerde kullanılıyorsa buları cluster haline getirebiliriz. CREATE CLUSTER .... 16- INDEX ORGANIZE TABLE : Bir tablo çok fazla değişmiyorsa tabloyu yaratırken indeksli yaratırız ve sıralı bir şekilde kaydeder.Çok hızlı select yavaş insert. Primary Key şart 17- Data dağılımları düzgün tablolar için bind variable kullanmak hız kazandırır.Çünkü ilk seferde sorgunun execution planı oluşturulur ve bir sonraki değeri farklı dahi olsa bir önceki plandan işlem görür. Örnek bölge kolonu için her bölgede aşağı yukarı 99 ile 101 kayıt varsa kullanmak mantıklı. HINTS : Execution Planlara Hint ile baskıda bulunup değiştirtebiliriz ancak 11g ile artık buna çok fazla da ihtiyacımız kalmadı. Zaten en iyi maliyetli planı Oracle buluyor. Ancak spesific durumlarda ve test amaçlı kullanılabilir. SELECT /*+ INDEX(t name_idx)*/ FROM tablo t where name=’koray’
2- SQL Access Advisor : Index ve Partition tavsiyesinde bulunur. Daha detaylı tavsiyeler içerir. Sonuç olarak yazımızda Oracle yapısına kısa bir göz attıktan sonra veritabanımızı nasıl dah etkili hale getip performansını iyileştirebileceğimizi gördük. Umarım yararlı olmuştur. Herkese İyi çalışmalar. 13:12 - 21/11/2009 - yorum {yok} - yorum yazDiğer Sitelerdeki Makalelerimhttp://www.csharpnedir.com/articles/read/?id=1008&filter=unedited&title=Yazılım%20Geliştiriyorum%20Öyleyse%20Varım!!!
http://www.yazilimgunlugu.com/bilgisayar-muhendisligi-hakkinda-merak-edilenler-makalesi/798.aspx
http://www.yazilimgunlugu.com/isletmeler-neden-yazilima-ihtiyac-duyar-makalesi/801.aspx
17:18 - 16/11/2009 - yorum {0} - yorum yazKodlamaya Başlamadan Önce Hazırlık - Code Complete C3-C4CHAPTER 3 Kodlamaya Başlamadan Once Hazırlık – İki kere hesap et bir kere yaz Kodlama öncesi hazırlık ne kadar iyi olursa alınabilecek hasarlar minimum iner.Kodlamaya başlamadan önce iyice ölçüp biçim olası istisnaları belirlememiz proje akşında meydana gelebilecek problemleri önceden tahmin edebilmemiz lazım.Bunun için iyi bir analiz ve dökümantasyon şart. Yazılım kaliteli olması demek sadece testleri yazmakla sağlanmaz. Yazılım Geliştirmeyi üçe ayırırsak . Analiz – Kodlama ve Test bu üç biriminde kaliteli olması pronin kalitesini belirler hiçbiri tek başına kaliteyi garanti etmez. Günümüzde çok teknik olmayan bir çok yönetici ve patronlar kodlama öncesi hazırlığa gerektiği önemi vermiyor. Yazılımcının diğer bir görevi de bu konuda teknik olmayan insanları yazılım geliştirme processleri konusunda eğitmektir. Büyük projeler daha çok planlama gerektirir. İyi planlamadan kodlamaya geçilen bir yazılımın çok sorun vermesi kaçınılmazdır. Araştırmalara göre iyi planlanmış bir yazılımın maliyeti 10 ila 100 kat arasında azaltmaktadır. Patronunuzun kodlama öncesi planlamaya verdiği önemi test etmek için aşağıdakileri söyleyin - Daha iyi kodlama yapmalıyız çünkü hata ayıklamakla daha sonra çok uğraşıyoruz. - İyi planlama yaparsak teste ayıracağımız vakit azalır. - İsterleri ve tasarıma yeteri kadar önem verirsek kodlamaya geçtiğimizde ve hata ayıklarken önemli bir sorun yaşayacağımızı zannetmiyorum. CHAPTER 4 PROGRAMLAMA DİLİ SEÇİMİ Her programlama dilinin birbirine göre üstün olduğu ve zayıf olduğu yerler vardır. Projenin kapsamına ve içinde bulunulan duruma göre iyi bir seçim yapılmalıdır. Aksi halde kodları bir dilden diğerine geçirmek çok zahmetli olabilir. Önemli Kodlama Pratikleri - Kod yazarken ne kadar ön taraf dizayn edildi . ne kadar klavyeden yazıldı - Koddaki yorum satırları ve isimler düzenlendi mi - Bir kod tekniği kullanıldı mı . Örneğin hatalar nasıl yakalanacak , güvenlik nasıl sağlanacak ,tekrar kullanılabilen kodlar , performans vs.. - Mevcut kullandığınız teknoloji sizin için yeterli mi - Takım çalışmasında programcılar adım adım ne yapacaklarını biliyorlar mı, - Programcılar tek mi yoksa pair olarak mı çalışıyor - Programcılar kod yazmadan önce test case lerini yazıyorlar mı - Programcılar başta veya sonda her ne olursa olsun birim testlerini yazıyorlar mı - Programcılar hata ayıklaması yapıyorlar mı - Programcılar entegrasyon testi yapıyorlar mı - Programcılar birbirlerinin kodlarını inceliyorlar mı - Versiyon kontrol aracı kullanılıyor mu - Bir dil veya compiler seçimi yapıldı mı - J2EE veya .NET gibi bir framework seçimi yapıldı mı - Bir dilin standart olmayan özellikleri kullanılıyor mu - Editör , test aracı , debugger ,refactoring aracı gibi araçlar kullanılıyor mu
11:08 - 9/11/2009 - yorum {1} - yorum yazYazılım Metoforları - Code Complete C2CHAPTER 2 Yazılım Metoforları - Yazılım Geliştirmeyi Daha İyi Anlamak Yazılım geliştirirken 2 yöntem kullanırırız. Birincisi sezgisel o an ihtiyacımız ne ise onu yaparız ve sezgilerimiz bizi götürür. Diğeri ise algoritma yöntemi ; bu yöntem ile daha once yapılmış bir çözüm var ise onu uygulayarak programlamayı daha kolay ve tahmin edilebilir yapabiliriz. Fakat programlama da hiçbir zaman tek çözüm yoktur bir problem farklı yollarla çözmek mümkündür.Bugüne kadar yazılımla alakalı metoforlar geliştiriciler tarafından ortaya atıldı. Bunlara kısaca değinelim.Metoforların türkçe anlamlı birer isim bulmakta oldukça zorlandım bulamadım da zaten. Yazılım Hattatlığı – Kod Yazma : Çok genel olan bu yaklaşımda yazılım geliştirmede olağan harfler yazmayı öneriyor.Kalemi elinize alırsınız ve kağıda baştan sona yaarsınız. Planlamaya ihtiyaç yoktur ve ne isterseniz onu yazarsınız. Yazılım Tarımı : Sistemi Büyütmek : Bazı geliştiriciler yazılımı bir bitkyi büyütmeye benzetir.Kodun bir parçası dizayn edilir , kodlanır ve test edilir ve siteme ilave edilir.Küçük parçalara bölündüğü için olası sorular büyümeden önlenir. |