18 Ocak 2017 Çarşamba

Yazılım Yönetimi İçin Süreç Grubu

1. İlklendirme(Initiating)
2. Planlama(Planning)
3. İcra(Executing)
4. Kontrol(Controlling)
5. Tamamlama(Closing)


Note: Her bir faz için bu 5 adım tekrarlana bilir.
Her bir adımda aşağıdaki konulara dikkat edilmelidir:
Veri girişleri
Araçlar & Teknolojiler
Çıkışlar


 

İlklendirme
Giriş
 Ürün tanımları
 Strateji planı
 Proje seçim kriterleri
 Tarihsel bilgiler
Çıkış
 Proje yapısı çıktıları.
 Proje yönetim tanımları
 Kısıtlar
 Varsayımlar


Planlama
Kapsam Planlama Kapsam tanımı Aktivite Tanımlama Aktivite Sıralama Tahmini Aktivite Süresi Kaynak Planlaması Maliyet Tahmin Maliyet Bütçeleme
Risk Planlama Programı Geliştirme Kalite Planlama iletişim Planlama Organizasyon Planlama Çalışanlar Edinimi Tedarik Planlama Proje Planı Geliştirme

İcra Süreci
Proje planı yürütme Kapsam Doğrulama Kalite Güvence Takım Geliştirme
Bilgi Dağıtımı talep Kaynak Seçimi Sözleşme Yönetimi


Kontrol
Genel Değişiklik Kontrolü Kapsam Değişiklik Kontrolü Zamanlama Kontrolü Maliyet Kontrolü kalite kontrolü
Performans Raporlama Risk Tepki Kontrolü

Kapanış Süreci
İdari Kapanış
Sözleşme Kapanış







 






Süreç Uzmanı (Yazılım Yöneticisi) İşleri


Projeyi tanımla
Yazılım paydaşlarını belirle
İş listesini belirle
Proje ile ilgili zaman çizelgesini belirle (Mile stone)
Yazılım Akış Süreçlerini tanımla ve Kontrol et.
İhtiyaçları ve kaynakları belirle.
Proje gereksinimlerini değerlendir.
Riskleri tanımla ve acil durum planlarını ortaya koy.
Bağlılıkları tanımla.
Önemli noktaları tanımla ve izle.
Proje aşamasını gözetle.
Güvenli gerekli kaynaklarını belirle.
Değişim kontrol sürecini yönet.
Proje durumunu ortaya çıkaran raporlar oluştur.
Süreçlerin ve Bilgi alanlarının detaylarını ortaya çıkar.
Organizasyon yapısını bilerek ona göre süreçleri yönlendir.(Şirkette yeni olmak)

Yazılım Paydaşları Üçlüsü

1.Fonksiyon Temsilcisi Müşteri veya Kobi
2. Sponsor Projenin vizyou için kurulan ekip
3. Proje Yöneticisi

Projeler nasıl başarılı olur?


Üst yönetim destek
Kullanıcı katılımı
Deneyim proje yöneticisi
Açık iş hedefleri
Minimize edilmiş kapsamı
Standart yazılım altyapısı
Firma temel gereksinimleri
Örgün metodoloji
Güvenilir tahminleri belirle
Üst yönetim, yardımcı olabilir.
Güvenli yeterli kaynakları belirle.
Zamanında proje ihtiyaçları için onay alın
Organizasyon boyunca insanların işbirliği alın
Liderlik rehberlik sağlayın

Yazılımcı ve Yazılım İle İlgili Hata ve Sorunlar

İsteksiz yazılım geliştirme. (Moral önemli)
Zayıf yazılımcı (Bilgisiz yada deneyimsiz)
Yazılım yöneticisin ekibi hakkındaki şikayetleri.
Yazılım ekibinin proje yöneticisi ile ilgili şikayeti.
Şirket yaklaşımı(Yeni personel ile ilişki).
Son dakika projelere yazılımcı ilavesi.
Yazılımcıların %60 bir kısmı sessiz ve rahat bir yazılım geliştirme ortamı ister.
Yazılımcı ile müşteri arasındaki farklı bakış açısı(friction)
Zayıf iletişim
Finansman eksikliği
Veri eksikliği

Süreç ile İlgili Hatalar Neler Olabilir?

Süreç başında boşa zaman kaybı.
Kısa süreli değişiklikler ile süreç bozulması.
Yetersiz tasarım.
Yetersiz kalite güvencesi.
Yetersiz yönetim kontrolleri.
Gerekli olan işleri aksatma(Küçümsemek).
Yapılacak işleri sonraya bırakma.

Ürün ve Teknoloji ile İlişkili Hatalar Neler Olabilir?

İsterlerin %25 bir kısmı kırmızı ister olarak tanımlanır.   
İteleme çekme uzlaşması.
Silver-bullet syndrome kaçınılmalı.       
Projeyi kurtaracak araçlardan ve teknolojileri küçümsemek.       


Neden Rapid Development?

Hızlı ürün geliştirme,Riskleri azaltma,Müşterinin yazılımı görmesini sağlama,Temel Seviye Kalite



Ya Rapid Kullanmıyorsak?

Proje Safhaları

Tüm projeler aşamaya ayrılır, birlikte tüm evreler Proje Yaşam Döngüsü olarak bilinir, Her faz çıktılara tamamlanması ile işaretlenir,Birincil yazılım proje safhasını tanımlama. 



Proje Uyuglama Yönetimi,Teknik Bakış,Zaman,Maliyet,Kalite,İnsan Kaynağı,İletişim,Risk,Prosedürler bu aşamalar içerisinde bakılır.

Yazılım Uygulamasının 4 Boyutu

1. İnsan
“It’s always a people problem” Gerald Weinberg, “The Secrets of Consulting”
  • Yazılım Uygulamasını İyileştirmek İçin
  • Yazılım Ekip Seçimi (Doğru kişi doğru iş)
  • Takım Organizasyonu
  • Motivasyon
2.Süreç
  • Süreç doğru tanımlanmış mı?
  •  Süreç için Tanımlanan Yöntem ve Teknik doğru mu?
  • Başlangıç nasıl belirlenecek(temelleri)?
  • Hangi kalite güvencesi standartları uygulanacak?
  • Risk yönetimi olacak mı?
  • Yaşam Döngüsü planlaması yapıldı mı?
  • Müşteri odaklı olarak mı geliştirildi?
  • Süreç  gelişme sırasında süreç olgunluğuna bakıldı mı(bütün işleri yerine getirip getirmediği sınandı mı?)

  • Takip(Tracking)
  • Maliyet, çaba, program
  • Planlanana karşılık Gerçekleşen
  • Planının dışına çıktığınızda neler yapılacak?

Ölçüm
Yazılım Nasıl Ölçülür ve Neleri Ölçmek gerekir?
Tarih ve öngörülen     maliyet     program     çaba     ürün özellikleri
Alternatifler     kazanılan değer analizi     kusur oranları
            verimlilik (örn: SLOC)
        karmaşıklık (örn: function noktaları)

Teknik ve Temeller
Gereksinimleri,Analiz,Dizayn,Kodlama,Kalite Güvence,Dağıtım

3.Ürün
  • Gözle görülür ilerleme sağlandı mı?
  • Yazılım büyüklüğünün belirlendi mi? Ve ne kadarı gerçekleşti?
  • Ürün özellikleri ve gereksinimleri neler?
  • Özellikler farklı şartlarda sınandı mı?
4.Teknoloji

  • Genellikle en önemli bir boyutu
  • Dil ve araç seçimi belirlendi mi?
  • Yazılımın değeri ve oluşturma maliyeti nasıl hesaplandı?


Yazılım başarısı için Zamanında, İsterleri karşılayan ve planlanan bütçeyi aşmayan yazılımlar üretin.

Proje Yönetimi Tarihi

Yazılım Uygulamalarının doğuşu Manhattan Project
1970’lerde askeri, savunma işlerinde software uygulamaları kullanıldı.
1990’larda: Büyük yazılım projeleri geliştirildi.
1985: TQM
1990-93: Yeniden üretim.
1996-99: Risk yönetimi, Yazılım evleri
2000: Global projelerin oluşumu.



Yazılım Uygulaması nedir?

Yıllar sürebilir mi?
Sonuçlar kesin midir?
Yazılım ekibi kalıcımıdır?
Ölçüleri nelerdir? (Büyüklük)

Yazılım Proje Yöneticisinde Arananlar

Liderlik,İletişim Yeteneği, Problem Çözme Yeteneği
Uzlaşı, Organizasyonun Süreçlerine Hakimiyet
Yönetim becerisi (Süreç tecrübesi ve teknoloji bilgisi)
Proje Yöneticisi. Proje Yöneticisi yardımcısı (asistan)
Program Yöneticisi.

Yazılım Yöneticisinin İlgilenecekleri
Finansal Destek Veren (Sponsor)
Yazılım Ekibi
Müşteri
Süreç Yöneticisi

Yazılım Yöneticisi
Yazılım İçin Gerekli Olan Kaynakları Temin Et.
Proje ihtiyaçları için onay al.
Liderlik ve Rehberlik sağla.





17 Ocak 2017 Salı

Koddan Döküman Oluşturan Araçlar

Doxygen
  Doxygen Programının İnternet Sitesi http://www.stack.nl/~dimitri/doxygen/
  Doxygen Programı çizim aracı Grphviz Programının İnternet Sitesi http://www.graphviz.org/

Doxygen ve Grphviz Programının Eğitim Videosu



Sharpdox
C# için Koddan döküman oluştruma araçı Programının İnternet Sitesi http://sharpdox.de/en/


Diğer Dokuman Oluştruma Programları

Javadoc
ROBODoc
POD
TwinText

Dökümantasyon nasıl test edilir?

Dokuman testi kara kutu testinin bir parçasıdır!
Buradaki bir hata yazılımın içerisindeki hata gibidir!
Hazırlanan doküman çok temel yada çok karmaşık olmamalıdır.
Dökümanın Terminoloji incelenmelidir!
Okuyucular için yeteri kadar uygun mu?
Bilgiler düzenli bir sırada mı?
Kısaltmalar bir dizin içerisinde verilmiş mi?
Teknolojik bilgilere yer verildi mi?
Web sayfası,telefon num ve bilgilerin yer aldığı bir index var mı?
Yazılımın özellikleri tam olarak anlatılmış mı?
Verilen örnekler doğru olarak çalışıyor mu?


Dokümanı yazan kişi ile test eden kişi neden farklı kişiler olmalıdır?

Yazılım Dokümanı Test Soruları

Hangi şartlar altında çalışıyor?
Mac yada düşük özellikli bilgisayarlarda çalışıyor mu?
Hatalara ilişkin yardım bilgilerini içermelidir

Yazılım Dokümanında neler bulunur?

Text ve grafikler içermeli.
Uyarılar ve kayıt bilgileri içermeli
End User License Agreement (EULA)
Kurulum ve kurulmun ne şekilde yapılacağı
User’s manual
Online help
Örnekler uygulamalar
Hata mesajları

Yazılım Dokümanı


Günümüzde yazılımların yapılarının ve içeriklerinin artması ile birlikte yazılım dokümanları bir readme.txt olmaktan çıkmıştır.
Yazılım içeriğinin doğru anlatılması oldukça önemlidir.
Yazılım test uzmanı tarafından yazılım dokümanın test edilmesi gerekmektedir.

Önce Test


Test güdümlü yazılım geliştirme.
Önce yapılacak test yada testler belirlenir.
Kod testlerden geçilecek şekilde geliştirilir.
1. ve 2. adımlar tekrarlanır.
Kod bol miktarda refactor edilir.


Önce Test-Avantajları

Kod yazılmadan önce test programı yazılır. Bu sayede mevcut sorunların daha erkenden ortaya çıkması sağlanarak, daha güvenli bir yazılım gerçekleştirilmeye çalışılır.
Bu yöntemde testler yazılmaya başlandığı esnada aslında ne şekilde bir kod yazılacağı da belli bir ölçüde belirlenmiş olur.
Test işleminin önemli bir kısmı bu süreç içerisinde tamamlanır.



Formal Kod incelenmesi


Kodu yazan kişi sonuç testleri ile sorumlu değildir!
Yönetici kodların birleşim noktalarında meydana gelebilecek aksiliklere ve hatalara karşı dikkatli olmalıdır.
İnceleme sonrasında rapor hazırlanmalı ve hatalar bulunmuş ise bulunun hatalar yeniden gözden geçirilerek düzeltilmelidir.
Bu yöntem sıklıkla kullanılan ve hata bulmak için oldukça faydalı bir yöntemdir.

Formal olmayan kod incelemesi.



Bu incelemede; yazılım ekibinin bir araya gelerek, program ile ilgili daha önceden belirlenen özelliklerin, geliştirilen yazılımda var olup olmadığını incelenmesine dayanır.
Walkthroughs: Test uzmanı yada programı geliştiren ekipten kodu yazan kişi dışında bir kişi, satır satır kodu inceler. Kod inceleme aşamasında her bir satır kod göz ile kontrol edilir.

Biçimsel Kod incelemesi için gerekli olanlar


Adım 1 (Sorunu tanımla): Yazılım içerisindeki sorunu tanımla. Örnek:Kayıp isterler varmı,eksik girişler varmı,vb.
Adım 2 (Kuralları belirle): Ne kadar kod ne kadar süre içerisinde gerçekleştirilecek, konuları ve sınırları belirle.
Adım 3 (Hazırlık): Ekibin her bir üyesi için yapılacakların listesini hazırla.
Adım 4 (Rapor): Yapılan çalışmaları özetle, yazılım ekibinin kullanacağı gerekli bilgileri içeren raporları yaz.

Kod İncelemesi


Statik Beyaz Kutu Testi
Bu test yazılım çalıştırılmadan yapılır. Sadece kodlara, yazılımın mimarisine ve kodlar ile  ekran tasarımları arasındaki ilişkilere bakılmasına dayanır.
Yazılım projelerinde çok az uygulanan bir yöntemdir.
Biçimsel Kod incelemesi
İsterlerin kod içerisinde bire bir karşılanıp karşılanmadığına bakılarak yapılır. Organize bir şekilde yazılım ekibi tarafından yada yazılım ekibi içerisindeki bir test uzmanı tarafından yapılmalıdır.

Web Sitesi Bug Tipleri

Permission denied
Yetkisiz girişlerin sınırlanması
Hata mı?
No such file or directory
Client denied by server configuration
File does not exist
Yanlış dosya erişim yeri veya kodu.
Invalid method in reguest
Invalid request in request connection
Request failed

Hataların dağılımı

Yapılan bir  akademik çalışmada web sitelerindeki hataların dağılımı aşağıdaki şekilde verilmiştir.



Web Site Testti Adımları


Dinamik içeriklerin testleri. (Kara kutu testleri.)
Beyaz kutu testleri.
Server performansı ve güvenlik testleri.
“Denial of service” saldırıları.
“Buffer Owerflows” saldırıları.


Jacob’un web sitesi hataları (Tasarım ile ilgili)
Uzun scroll sayfalar kullanma.
Standart olmayan link renklerinden sakın.
Zamanı geçmiş verinin gösterilmesi ile ilgili arşiv oluştur.
Karmaşık URL isimlerinden sakın.
Uzun yükleme sürelerinden sakın.
Menülerden yoksun sayfalardan sakın.

Web site testi(Yüksek maliyetli ve fazla eleman sayısı isteyen bir iştir)

Browser uyumsuzluğunu kontrol et.
Basit Html hataları varmı kontrol et.
Yazım hataları varmı kontrol et.


Web Sitesini Testti


Web sitesini test etmek için kullanılan en temel yöntem; web sitesini bir kara kutu olarak düşünmektir.
Test adımları
Bilgilerin doğruluğunu kontrol et.
Copyright notlarını ve tarihleri kontrol et.
Mouseover textleri kontrolleri.
Linkleri kontrolleri
Sistemin hazırladığı mail mesajlarını kontrol et.
Bütün resim dosyalarının yüklenip yüklenmediğini kontrol et.
Resim isimlerinin doğruluğunu kontrol et.
Resimlerin makul süreler içerisin de yüklenip yüklenmediği kontrol et.
Farklı noktalardan web sitesi çalıştırıp, sitenin çalışma zamanı kontrol et.

Web Site Formlarının Testti.

Formun içerisinde bulunan objelerin doğruluğuna bak.
Objelerin yerlerinin ve buyutların doğruluğuna bak.
Doğru dataları barındırmasını kontrol et.
Yanlış dataların sisteme girişine izin verilip verilmediğini kontrol et.
Veri girişlerinin rahat kullanıma sahip olup olmadığını kontrol et.

Trigger Oluşturmak

Genel olarak bir trigger oluşturma ifadesi şu şekildedir.
CREATE TRIGGER trigger_adı
ON tablo_adı
     {FOR AFTER/INSTEAT OF}    
     {INSERT/UPDATE/DELETE}
AS
      Çalışacak olan SQL ifadeleri


Örnek: Bir satış yapıldığı zaman stokta eğer ürün varsa otomatik olarak stoktan düşen, yoksa uyarı mesajı veren bir trigger yazalım.
Bu işlem için  öncelikle aşağıdaki tabloları oluşturmamız gerekir.
Müşteriler
Kitaplar
Satışlar
Bu tablolara ait nitelikler ve SQL ifadeleri şöyledir.

Müşteriler tablosu ve nitelikleri aşağıdaki SQL kodu ile birlikte verilmektedir. Bu kodları SQL Server’da bir Query oluşturarak yazıp derleriz.



Ürünler tablosu ve nitelikleri aşağıdaki SQL kodu ile birlikte verilmektedir. Bu kodları SQL Server’da bir Query oluşturarak yazıp derleriz.


Son olarak satışlar tablosu ve nitelikleri aşağıdaki SQL kodu ile birlikte verilmektedir. Bu kodları SQL Server’da bir Query oluşturarak yazıp derleriz.

Oluşturduğumuz bu tablolara aşağıdaki gibi kayıtlar ekleyelim.

Tüm gerekli işlemlerin ardından herhangi bir satış yapıldığında stok miktarına bağlı olarak gerekli işlemleri yapacak olan trigger’ımız şöyle olacaktır.
Birinci kısımda bir trigger oluşturmak için CREATER TRIGGER komutunu ve bu trigger’ın hangi tablo üzerinde işlem yapacağını, ardından FOR INSERT ile bu trigger’ın bir ekleme işleminin ardından çalışacağını belirttik.

Burada müşteri numarası 1 olan kişi, 2 numaralı üründen 1 adet sipariş vermektedir.

Benzer şekilde satışlar tablosunda bir kayıt silindiğinde (iptal edildiğinde) çalışacak olan bir DELETE trigger’ı yazalım. DELETE trigger’ı için SQL ifademiz şöyle olacaktır.


Bu trigger ise satış sonrası fatura kesildikten sonra teslim edilen ürünleri silmek için kullanılabilir. Silinen kayıtlar daha önceden bahsettiğimiz gibi DELETED tablosunda tutulmaktadır.
Ayrıca bu trigger iptal edilen (yani ürünler tablosundan silinen) ürün adedini tekrar ürünler tablosuna eklemektedir.





Bu trigger’ıda çalıştırmak için SQL ifademiz şöyle olacaktır.


Benzer şekilde UPDATE trigger’ı ise aşağıdaki gibi olacaktır.
Burada DELETED olarak adlandırılan tablo, kayıt değiştirilmeden önce Satışlar tablosunda değiştirilmekte olan kayıttan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. INSERTED ise ayni satırın kayıt değiştirildikten sonra elde edilen satırdan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. Bunun nedeni aslında UPDATE bir DELETE ve INSERT işleminin ard arda uygulanması gibi düşünülmelidir.





Bir INSERT, UPDATE veya DELETE işlemi bir tabloya uygulandığında bu tablo üzerinde sırasıyla bir Instead Of INSERT, Instead Of UPDATE veya Instead Of DELETE Trigger’ı varsa bu işlem tablo üzerinde gerçekleşmez.
Onun yerine tetikleyici içinde yazılı kodlar yapılır. Bu işlemleri gösterebilmek için bir tablo oluşturalım. Bu tabloya ait nitelikler aşağıda verilmektedir.





Instead Of DELETE örneğine ait trigger aşağıda verilmektedir. Herhangi bir silme işlemi denendiğinde bu silme işleminin ne zaman denendiğini belirten bir trigger oluşturalım.





Bu denemeye ilişkin SQL ifadeleri ve sonuçları aşağıda verilmektedir.





Bütün INSTEAD OF trigger’ ları benzer şekilde;
Ekleme için Instead Of INSERT,
Güncelleme için Instead Of UPDATE,
Silme işlemi için ise Instead Of DELETE
    olarak oluşturulmaktadır.






Trigger’lar Nasıl Çalışır?





Trigger’ı tetikleyen bir olayla karşılaşıldığında işlem ile trigger ikisi birlikte bir transaction bloğu olarak ele alınır.
Trigger’lar çalıştığı zaman INSERTED ve DELETED tablolarını kullanırlar. Bu tabloların her ikisi de ana tabloyla yani trigger’ın tetiklediği tabloyla eşdeğer alanlara sahiptir.
Bu tablolar mantıksal tablo şeklinde RAM’de bulunurlar. Gerçek tabloya bir kayıt eklendiği zaman trigger çalışırsa bu kayıt aynı zamanda Inserted tablosuna da eklenir. İstenildiğinde bu tablodaki kayıtlara erişilebilmektedir.

Yani trigger, kendisini çağıran işlemi onaylamak anlamında hiçbir işlem yapmayabilir yada ROLLBACK ile geçersiz kılınabilmektedir.


Tablodan bir kayıt silindiğinde, silinen kayıt DELETED tablosunda saklanır.
UPDATE işlemi ise, DELETE ve hemen ardından yapılmış olan bir INSERT işlemi olarak ele alınır.
Bir kayıt UPDATE edildiğinde orijinal kayıt DELETED tablosuna eklenir.
Değişen kayıtta INSERTED tablosuna eklenir.

Klasik Trigger’ların Özellikleri

Bir trigger, birden fazla olayı gerçekleştirebilmektedir.
Örneğin bir tabloya kayıt eklendiğinde devreye giren bir trigger bu kayıtları başka bir yere de ekledikten sonra başka bir tablo üzerinde de güncellemeler yapabilmektedir.
Trigger, geçici tablo yada sistem tablosu oluşturamaz ama bu türden tablolara erişebilmektedir.

Diğer yandan bir trigger, birden fazla olay tarafından tetiklenebilmektedir. Yani hem ekleme hem de güncelleme işlemi için veya her ikisi için devreye girmek üzere programlanabilmektedir.

Temel olarak iki farklı trigger çeşidi vardır.
AFTER Trigger
AFTER trigger’ı sadece tablolar üzerinde tanımlanabilmektedir.
INSTEAD OF Trigger
INSTEAD OF trigger’ı hem tablolar hem de view’lar üstünde tanımlanmaktadır.

İkisi arasındaki en önemli fark, AFTER trigger’ını devreye sokan olay olmuş kabul edilerek akışı trigger’a bırakırken, INSTEAD OF trigger’ı istenilen işlemi gerçekleştirmez. Sadece sözde tablolara kaydetmekle yetinir. Ayrıca basamaklı güncelleme ve silme işlemine destek vermez.

Bu iki trigger’ ın karşılaştırılması tabloda verilmektedir.


Trigger’lar Ne Zaman Kullanılmalıdır?



Trigger’lar aşağıdaki amaçlara yönelik kullanılırlar.
Değişiklikleri takip etmek için: Kritik kayıtlar üzerinde değişiklik yapan kişiler ve değişiklik miktarlarını ya da kayıtlarının takibini tutmak için kullanılırlar.
Birincil anahtar üretmek için: IDENTITY( ) fonksiyonu birincil anahtar olarak sadece sayı üretebilmektedir. Bazı durumlarda birincil anahtarın belli harf ve rakamlardan oluşması gerekebilir. Böyle durumlarda yine trigger’lara başvurulabilmektedir.

Trigger’lar aşağıdaki amaçlara yönelik kullanılırlar.
Karmaşık iş kurallarını gerçeklemek için: Bazen uygulama veritabanının dışında bir veritabanına karşı, yabancı anahtar geçerliliğini denetlemek gerekebilmektedir. Bu durumda sadece veritabanı içindeki işler denetlenebilmektedir. Fakat trigger’ lar ile diğer veritabanları da denetlenebilmektedir.
Mail atmak gibi işleri otomatikleştirmek için: Örneğin herhangi bir sipariş verildiğinde müşteriye bilgilendirme mail göndermek için kullanılabilmektedir.

Bunların dışında;
Standart hata mesajlarının dışında hata mesajı vermek için
Veritabanı erişimlerini takibe almak için
Yeni nesne oluşturma işlemlerini, sunucu veritabanlarının tutarlılıklarını sağlamak için
Nesne değişikliklerini takip etmek ve engellemek için
    kullanılabilmektedirler.