Kaliteli Yazılım Nasıl Geliştirilir? Kod Düzenleme Teknikleri ¦ Tasarım Şablonları (Design Patterns) Yazılım Test Yöntemleri  Zeynep Nur Aktaş  - Kitap

Kaliteli Yazılım Nasıl Geliştirilir?

Kod Düzenleme Teknikleri ¦ Tasarım Şablonları (Design Patterns) Yazılım Test Yöntemleri

2. Baskı, 
Temmuz 2022
Kitabın Detayları
Dili:
Türkçe
Ebat:
16x24
Sayfa:
304
Barkod:
9789750278471
Kapak Türü:
Karton Kapaklı
Fiyatı:
340,00
24 saat içerisinde temin edilir.
Kitabın Açıklaması
Gördüğü yoğun ilgi sonucunda, üst üste ek baskılar yapan kitabın, güncellenmiş 2. Baskısı yapılmıştır.
Programlama öğrenirken hep yeni bir projeye başlayacakmışız gibi düşünsek de gerçek hayat senaryoları bundan biraz farklıdır. Yazılım projeleri genellikle uzun zaman önce başlanmış ve geliştirilmiştir. Farklı programcılar tarafından devralınarak geliştirilmeye devam eder. Bu durumda kodların anlaşılır ve yönetilebilir olması önemlidir. Bu kitap ile uzun soluklu yazılım projelerinin nasıl temiz ve anlaşılır tutulabileceği, devralınan eski kodların nasıl düzenlenip geliştirilebilir hale getirileceği ile ilgili teknikler anlatılmıştır.
Ayrıca, kod düzenleme teknikleri kadar önemli olan kodu düzenleyebilmek için sahip olunması gereken temel konular makaleler ile açıklanmış, gerçek hayat senaryolarından örnekler verilmiştir.
Kitapta 22 kirli kod belirteci ve 70 kod düzenleme tekniğine yer verilmiş, konuların daha iyi anlaşılması için her biri kod örnekleriyle açıklanmıştır.
Kitap, yeni başlayan yazılımcılardan, alanında uzman geliştiricilere ve yöneticilere kadar geniş bir kitleye hitap etmektedir.
Kitabın Konu Başlıkları
.
Kod Düzenleme Teknikleri
.
Kirli Kod Belirteçleri
.
Nesne Yönelimli Programlama
.
Tasarım Şablonları (Design Patterns)
.
Yazılım Mimarileri
.
Yazılım Geliştirme Süreçleri
.
Yazılım Test Yöntemleri
.
Güvenli Yazılım Geliştirme
Yorumlar
Kitabın İçindekileri
Ön Söz 
5
Teşekkür 
7
Bu Kitap Kimin İçin Yazıldı? 
15
Kitabın Amacı 
17
2. Baskıda Yapılan Değişiklikler 
19
Birinci Bölüm
KALİTELİ YAZILIMIN TEMELLERİ
1. NESNE YÖNELİMLİ PROGRAMLAMANIN 4 PRENSİBİ 
22
Sosyal Bir Aktivite Olarak Yazılım Geliştirme 
29
2. TASARIM ŞABLONLARI (DESIGN PATTERNS) 
31
2.1. En Çok Kullanılan 9 Tasarım Kalıbı 
32
2.1.1. Yapıcı (Creational) 
32
2.1.1.1. Singleton (Tek Nesne) 
32
2.1.1.2. Builder (İnşa Eden) 
33
2.1.1.3. Factory (Fabrika) 
34
2.1.2. Yapısal (Structural) 
34
2.1.2.1. Adapter (Adaptör) 
34
2.1.2.2. Decorator (Dekoratör) 
35
2.1.2.3. Facade (Cephe) 
35
2.1.3. Davranışsal (Behavioral) 
36
2.1.3.1. Observer (Gözlemci) 
36
2.1.3.2. Strategy (Strateji) 
37
2.1.3.3. State (Durum) 
38
Versiyon Kontrol Sistemleri Nasıl Kullanılmalı? 
40
3. SOLID PRENSİPLERİ 
43
Güzel Ortalamadır 
46
4. YAZILIM MİMARİLERİ 
48
4.1. En Çok Kullanılan 10 Yazılım Mimarisi Kalıbı 
49
4.1.1. Katmanlı Mimari 
49
4.1.2. MVC 
50
4.1.3. SOA (Servis Tabanlı Mimari) 
51
4.1.4. Mikroservis Mimarisi 
52
4.1.5. Mikrokernel (Plug–In) 
53
4.1.6. Pipeline (Boru Hattı Mimarisi) 
54
4.1.7. CQRS (Command and Query Responsibility Segregation– Komut ve Sorgu Sorumluluklarının Ayrılması) 
55
4.1.8. Event Sourcing (Olay Kaynaklı Mimari) 
56
4.1.9. Broker Pattern (Aracı Mimari Kalıbı) 
57
4.1.10. Event Driven Architecture (Olaya Dayalı Mimari) 
59
Yazılımcının Sırt Çantasında Neler Olmalı? 
61
5. YAZILIMIN 10 KALİTE ÖZELLİĞİ 
64
Yazılım Geliştirmede Kırık Camlar Teorisi 
67
6. YAZILIM TEST YÖNTEMLERİ 
68
6.1. Fonksiyonel Testler 
69
6.1.2. Birim Testler 
69
6.1.3. Entegrasyon Testleri 
69
6.1.4. Sistem Testi 
69
6.1.5. Kabul Testi 
69
6.2. Fonksiyonel Olmayan Testler 
70
6.2.1. Performans Testi 
70
6.2.2. Güvenlik Testi 
70
6.2.3. Kullanılabilirlik Testi 
70
6.2.4. Uyumluluk Testi 
70
Yazılımda Ölçüm Yöntemleri 
71
7. YAZILIM GELİŞTİRME SÜREÇLERİ 
74
7.1. Waterfall (Şelale) Modeli 
74
7.2. V Modeli 
75
7.3. Çevik Yöntemler 
76
Teknik Borç Nedir? 
80
8. GÜVENLİ YAZILIM GELİŞTİRME 
83
İkinci Bölüm
KOD DÜZENLEME TEKNİKLERİ
1. KOD DÜZENLEMEYE GİRİŞ 
87
1.1. Refactoring Nedir? 
91
1.2. Refactoring Ne Değildir? 
94
1.3. Neden Refactor Etmeliyim? 
95
1.4. Neden Refactor Etmemeliyim? 
97
Bir Restorasyon Hikayesi 
97
1.5. Refactoring Yazılım Geliştirme Süreçlerinin Neresinde? 
98
1.6. Refactoring Nasıl ve Ne Zaman Uygulanır? 
99
1.7. Refactoring Otomatik Olarak Yapılamıyor Mu? 
101
1.8. Doğru Refactor Edebilmek İçin Sahip Olunması Gereken Temeller 
102
1.9. Yöneticime Kod Düzenlemeyi Nasıl Anlatırım? 
106
1.10. Refactoring Başarı Ölçütleri Nelerdir? 
107
1.11. Hangi Araçları Kullanabilirim? 
108
2. PROBLEMİN TESPİTİ 
109
2.1. Kirli Kod Belirteçleri 
110
2.1.1. Tekrarlayan Kod (Duplicated Code) 
112
2.2.2. Uzun Metod (Long Method) 
114
2.2.3. Büyük Sınıf (Large Class) 
117
2.2.4. Uzun Parametre Listesi (Long Parameter List) 
119
2.2.5. Alakasız Değişiklikler (Divergent Change) 
121
2.2.6. Av Tüfeği Ameliyatı (Shotgun Surgery) 
123
2.2.7. Özellik Kıskançlığı (Feature Envy) 
125
2.2.8. Veri Grupları (Data Clumps) 
127
2.2.9. İlkellik Takıntısı (Primitive Obsession) 
128
2.2.10. Anahtar İfadeleri (Switch Statements) 
129
2.2.11. Paralel Kalıtım Hiyerarşileri (Parallel Inheritance Hierarchies) 
132
2.2.12. Tembel Sınıf (Lazy Class) 
134
2.2.13. Spekülatif/Kurgusal Genellik (Speculative Generality) 
135
2.2.14. Geçici Alanlar (Temporary Field) 
137
2.2.15. Mesaj Zincirleri (Message Chains) 
140
2.2.16. Ortadaki Adam (Middle Man) 
142
2.2.17. Uygunsuz Samimiyet (Inappropriate Intimacy) 
144
2.2.18. Farklı Arayüzlerden Alternatif Sınıflar (Alternative Classes with Different Interfaces) 
146
2.2.19. Eksik Kütüphane Sınıfı (Incomplete Library Class) 
148
2.2.20. Veri Sınıfı (Data Class) 
150
2.2.21. Reddedilen Miras (Refused Bequest) 
152
2.2.22. Yorumlar (Comments) 
153
2.3. Bazen Kodu Okumak Yetmez 
156
2.3.1. Kuş Bakışı Bakın – Code City Aracı 
156
2.3.2. VKS Geçmişine Bir De Bu Gözle Bakın 
157
2.3.3. Kod Karmaşıklığı 
159
2.3.4. İsimlendirme 
160
2.3.5. Dolaylı Bağımlı Kodları Tespit Etmek 
160
2.3.6. Commit Mesajları Çok Şey Anlatabilir – Kelime Bulutları (Word Cloud) 
161
3. KOD DÜZENLEME TEKNİKLERİ 
161
3.1. Yazılımda Kon–Mari Tekniği 
162
3.2. Refactoring Teknikleri Kataloğu 
164
3.3. Şekilsel Değişiklikler 
170
3.3.1. Ayırma 
170
3.3.1.1. Metotları Bölme (Extract Method) 
171
3.3.1.2. Sınıfları Bölme (Extract Class) 
172
3.3.1.3. Üst Sınıf Oluşturma (Extract Superclass) 
174
3.3.1.4. Alt Sınıf Oluşturma (Extract Subclass) 
176
3.3.1.5. Arayüz Oluşturma (Extract Interface) 
177
3.3.1.6. Geçici Değişkenleri Ayırma (Split Temporary Variable) 
180
3.3.1.7. Koşul İfadelerini Metotlara Ayırma (Decompose Conditional) 
182
3.3.1.8. Sorgu ve Kayıt İşlemlerini Ayırmak (Separate Query from Modifier) 
183
3.3.1.9. Geçici Değişkenleri Metotlara Ayırma ( Temp With Query) 
185
3.3.1.10. Parametreleri Metoda Çevirme ( Parameter with Explicit Methods) 
187
3.3.2. Birleştirme 
189
3.3.2.1. Sınıfları Birleştirme (Inline Class) 
189
3.3.2.2. Metotları Parametre ile Birleştirme (Parameterize Method) 
191
3.3.2.3. Alanları Üst Sınıfta Birleştirme (Pull Up Field) 
192
3.3.2.4. Metotları Üst Sınıfta Birleştirme (Pull Up Method) 
194
3.3.2.5. Yapıcı Metotları Üst Sınıfta Birleştirme (Pull Up Constructor Body) 
196
3.3.2.6. Koşul İfadelerini Birleştirme (Consolidate Conditional Expression) 
198
3.3.2.7. Tekrarlı Koşul Bloklarını Birleştirmek (Consolidate Duplicate Conditional Fragments) 
200
3.3.2.8. Hiyerarşileri Birleştirme (Collapse Hierarchy) 
201
3.3.2.9. Alt Sınıfları Üst Sınıfta Alan Halinde Birleştirme ( Subclass with Fields) 
203
3.3.3. Taşıma 
204
3.3.3.1. Alanı Taşıma (Move Field) 
205
3.3.3.2. Metodu Taşıma (Move Method) 
206
3.3.3.3. Alanı Alt Sınıfa Taşıma (Push Down Field) 
207
3.3.3.4. Metodu Alt Sınıfa Taşıma (Push Down Method) 
208
3.3.4. Ekleme 
209
3.3.4.1. Parametre Ekleme (Add Parameter) 
210
3.3.4.2. Parametrelere Yapılan Atamalar için Değişken Oluşturma (Remove Assignments to Parameters) 
211
3.3.5. Temizleme 
214
3.3.5.1. Metodu Kaldırma (Inline Method) 
214
3.3.5.2. Değişkeni Kaldırma (Inline Temp) 
216
3.3.5.3. Yorumları Silme (Remove Comments) 
217
3.3.5.4. Parametreyi Kaldırma (Remove Parameter) 
218
3.3.5.5. Kontrol Bayraklarını Kaldırma (Remove Control Flag) 
219
3.3.6. İsimlendirme 
220
3.3.6.1. Metotları İsimlendirme (Rename Method) 
220
3.3.6.2. Sayıları Sabitlerle İsimlendirme ( Magic Number with Symbolic Constant) 
222
3.3.6.3. Karmaşık İfadeleri için Değişken Oluşturma (Introduce Explaning Variable) 
223
3.4. Mantıksal Değişiklikler 
224
3.4.1. Algoritmayı Güncelleme (Substitute Algorithm) 
224
3.4.2. Koşul İfadeleri 
226
3.4.2.1. İç İçe Koşul Bloklarını Sıralı Bloklara Çevir ( Nested Conditional with Guard Clauses) 
226
3.4.2.2. Koşulları Poymorphism ile Değiştir ( Conditional with Polymorphism) 
227
3.4.3. Veri Yapıları 
229
3.4.3.1. Alanları Kapsülleme (Encapsulate Field) 
230
3.4.3.2. Kendi Alanlarını Kapsülleme (Self Encapsulate Field) 
231
3.4.3.3. Koleksiyonları Kapsülleme (Encapsulate Collection) 
232
3.4.3.4.Paylaşılan Veri Yapısını Çoklamak (Duplicate Observed Data) 
234
3.4.3.5. Referansı Değere Çevirme (Change Reference to Value) 
236
3.4.3.6. Değeri Referansa Çevirme (Change Value to Reference) 
238
3.4.3.7. Tek Taraflı İlişkileri Çift Taraflıya Çevirme (Change Unidirectional Association to Bidirectional) 
239
3.4.3.8. İki taraflı İlişkiyi Tek Taraflıya Çevirme (Change Bidirectional Association to Unidirectional) 
240
3.4.4. Nesneleştirme 
241
3.4.4.1. Diziyi Objeye Çevirme ( Array with Object) 
242
3.4.4.2. Veri Alanlarını Objeye Çevirme ( Data Value with Object) 
243
3.4.4.3. Veritabanı Kayıtlarını Veri Sınıflarına Çevirme ( Record with Data Class) 
244
3.4.4.4. Parametreleri Objeye Çevirme (Introduce Parameter Object) 
245
3.4.4.5. Tip Kodlarını Sınıfa Çevirme ( Type Code with Class) 
247
3.4.4.6. Null Obje Oluşturma (Introduce Null Object) 
248
3.4.4.7. Obje Alanlarını Bir Araya Toplama (Preserve Whole Object) 
250
3.4.4.8. Metodu Metot Objesine Çevirme ( Method with Method Object) 
251
3.4.4.9. Yapıcı Metotları Fabrika Metoda Çevir ( Constructor with Factory Method) 
253
3.4.5. Hiyerarşiler 
255
3.4.5.1. Metotları Form Taslağı Olarak Uygula (Form Template Method) 
255
3.4.5.2. Kalıtım Yerine Delegasyon Kullan ( Inheritance with Delegation) 
258
3.4.5.3. Delegasyon Yerine Kalıtım Kullan ( Delegation with Inheritance) 
259
3.4.5.4. Tip Kodları Yerine Alt Sınıf Kullan ( Type Code with Subclasses) 
261
3.4.5.6. Tip Kodlarını State/Strategy Şablonuna Çevir ( Type Code with State/Strategy) 
264
3.4.6. Sınıflar Arası Erişimler 
266
3.4.6.1. Delegasyonu Gizle (Hide Delegate) 
266
3.4.6.2. Ortadaki Adamı Kaldır (Remove Middle Man) 
268
3.4.6.3. Metotları Gizle (Hide Method) 
270
3.4.6.4. Gerekli Olmayan Atama Metotlarını Kaldır (Remove Setting Method) 
271
3.4.6.5. Alt Sınıfa Dönüşümleri Kapsülle (Encapsulate Downcast) 
272
3.4.6.6. Davranışı Sınıfa Taşı (Moving Behavior into the Class) 
274
3.4.6.7. Parametreyi Metoda Çevir ( Parameter with Method) 
275
3.4.6.8. Yerel Eklenti Sınıfı Oluştur (Introduce Local Extension) 
277
3.4.6.9. Yabancı Metot Oluştur (Introduce Foreign Method) 
278
3.4.7. Hata Ayıklama ve Kontroller 
280
3.4.7.1. Hata Kodlarını Exception ile Değiştir ( Error Code with Exception) 
280
3.4.7.2. Exceptionları Testler ile Değiştir ( Exception with Test) 
282
3.4.7.3. Assertion Kullan (Introduce Assertion) 
284
4. DİĞER DÜZENLEME ALANLARI 
285
4.1. Veritabanı Düzenleme (Database refactoring) 
285
4.2. UML Düzenleme (UML refactoring) 
287
4.3. Mikroservisleri Düzenleme (Refactoring microservices) 
289
4.4. Mimari Düzenleme (Architectural refactoring) 
290
Son Söz 
293
Kaynakça 
295
Kavram Dizini 
297