9 Ocak 2017 Pazartesi

Yol(Path) Araçları


/* ABS
   This program function returns the absolute value of the integer
   passed to the function as a parameter.
    INPUT: An integer.
    OUTPUT: The absolute value if the input integer.
*/
1                  int ABS(int x)
2                  {
3                  if (x < 0)
4                      x = -x;
5                  return x;
6                  }









Koşul ve Durum testlerinde bulunamayan bir hata örneği
Normalde doğru olarak gözüken bir fonksiyon sınır değerinden daha fazla bir sayı ile test edilince taşma hatası oluştu.
Çünkü girilen değer integer olarak alınmakta idi.

















Sonuçlar

Akış kontrol testi ile [control-flow testing] yazılımlar içerisindeki hataların önemli bir kısmı bulunabilir.
Koşul ve durum testleri beraber kullanılması başarıyı arttıracaktır. Bu nedenle 2 test yöntemi de bir arada kullanılmalıdır.
Test işlemini yaparken tek bir yol üzerine bağlı kalmayıp olabilecek diğer yollarıda test etmek gerkelidir.
Test araçları ve manual test yöntemleri kullanarak diğer yolarında doğruluğunu test etmek önemlidir.
Test öncesinde belirlenen datalar ile test sonuçlarında elde edilen veriler saklanmalı ve karşılaştırılmalıdır.
Bir testtin doğru çalışması o yapı üzerinde hata olmadığını göstermez!








Branch ve Statement Coverage



Soru:  Eğer bir karar [ T (true) yada F (false)] varsa hangi tür test yapılmalıdır?
Cevap:  Koşul testi [Branch coverage.]
Soru:  Eğer her bir durum en az bir kere değer verilip sonuç alınmak isteniyorsa hangi tür aklımıza gelmeli?
Cevap:  Durum testi [statement coverage.]

Bu testlere Nasıl Başlayacağız?

Öncelikli olarak bir yol seç ve her seferinde ufak bir değişiklik yaparak testti geliştir.


Kontrol Akış testinin etkinliği nedir?


Yazılı geliştirimi sırasında ortaya çıkan olarak hataların %65’lik kısmı unit testler ile bulunmaktadır.
Unit testler içerisinde en çok kullanılanı (control-flow testing) akış kontrol testidir.
Araştırmalar göstermiştir ki hataların %50’lik kısmı akış kontrol [control-flow testing] testleri sayesinde bulunmaktadır.
Bu test tekniği; yapısal programlama dillerinde yapısal olmayan dillere göre daha etkilidir.

Akış testinin Limitleri

Ara yüz karışıklıkları ve hataları yakalanamaz!
Initialization hatalarının tamamı yakalanamaz!
Tanımlama ile ilgili hatalar yakalanamaz!

Test Sonuçları

Testten hangi sonuçları istiyoruz?
Test sonuçları oldukça detaylı olmalı !
Testti tasarlarken test sonucunda ortaya çıkacak değerler test dizayn sürecinden önce belirlenmeli!


Test Adımları
Testti çalıştır.
Programın verdiği sonuçları al.
Bunu daha önceden beklenen sonuçlar ile karşılaştır.


Test Süreçleri Sonu ile İlgili Sorular.

Soru: Bizim beklediğimiz sonuçları program bize vermesi durumunda test programının doğru çalıştığını söyleye bilir miyiz?
Cevap:
Soru: Farz edin biz covering test için bir test seti hazırladık ve her bir durum için istenilen sonuçları elde ettik. Bütün koşulları kapsamış olur muyuz?
Cevap:

Akış Kontrol Test Kriterleri



Durum(Statement) Testti ( p1):
%100 Statment(Covarage)
Bütün kodları en az bir kere çalıştır ve test et.
Koşul testi(Branch) (p2)
Bütün koşulları en az bir kere çalıştır ve test et.
Koşul içi sonuç durumu 2 den fazla ise daha fazla test datası ile test et

p1<=p2<=....<Psonsuz

Statement & Branch coverage testti…

Durum (Statement) ve Koşul (branch coverage) testleri 20 yılı aşkın bir süredir kullanılmaktadır. Pek çok yazılım şirketinde yeni bir yazılım geliştirildiğinde temel olarak bu unit testler kullanılmaktadır.
Yazılımlar yüksek oranda koşullara sahip olduğu için koşul kaplama tekniği daha çoğunluk ile tercih edilmektedir.

“The more we learn about testing, the more we realize that  statement and branch coverage are minimum floors below  which we dare not fall, rather that ceilings to which we  should aspire.”

- B. Beizer.

Hangi Yol

Doğru bir Path Testing yapılması için; öncellikle yazılım içerisinde yeterli sayıda yol seçimi yapılması gerekmektedir.
Soru: Yazılım içerisinde kaç adet test oluşturulmalı.
Cevap: Karmaşık olan az test yerine kolay olan fazla test yapılmalıdır.

P1 and P2 Coverage




Yollar

Bir program aracılığıyla bir yol, bir kavşak bir karar noktası başlar veya biter. Farklı değişkenler ile bu kavşakların ve değerlerin değişmesi mümkündür.
Program çalıştırılırken; bir yol üzerinden birkaç kez geçebilir.
Bir yolun uzunluğu o yolun sahip olduğu bağlantı sayısı ile gösterir.


Tamamlama testtini nasıl gerçekleştireceğiz!

Her bir statments en az bir kere çalıştırılmalıdır.
Her bir dal en az bir kere çalıştırılmalıdır.
Bütün yollar üzerinden en az bir kere geçilmelidir.

Akış Kontrol Test Kriterleri


Path Testing (      ):
%100 bütün yollardan
Bütün olası akışları belirle ve belirlediğin o akışlar üzerinden gitmeye çalış.



Bubble Sort Programının Algoritması





1  for (j=1; j<N; j++)  {
        last = N - j + 1;   
2       for (k=1; k<last; k++)  {
3             if (list[k] > list[k+1])  {
                    temp = list[k];
                    list[k] = list[k+1];
                    list[k+1] = temp;
4            }
5      }
6 }
7 print(“Done\n”);



Üst Alma Programının Algoritması

1    scanf(“%d %d”,&x, &y);
2    if (y < 0)
          pow = -y;
      else
          pow = y;
3    z = 1.0;
4    while (pow != 0) {
           z = z * x;
           pow = pow - 1;
5           }
6    if (y < 0)
           z = 1.0 / z;
7    printf (“%f”,z);



White box Testi


Test kodun çalıştırılmasına dayanır.
Bu testin temel amacı, yazılımın cümlelerinin, kodun izleyebileceği bütün yolların, koşul cümlelerinin ve veri akışının doğruluğunun onaylanmasıdır.

Test kodun çalıştırılmasına dayanır.
Bu testin temel amacı, yazılımın cümlelerinin, kodun izleyebileceği bütün yolların, koşul cümlelerinin ve veri akışının doğruluğunun onaylanmasıdır.

Akış Kontrol Testi

Akış Kontrol testi(Control-flow testing): Yapısal bir test stratejisidir. Programın akışı üzerinden yapılmaktadır.
Akış kontrol testleri, veri akışı üzerinde sorun olması düşünülen kısımlarının alınıp test edilmesine dayanmaktadır.
Seçilen yollar üzerinde belirlenen test kümesi ile test işlemi gerçekleştirilir.
Her bir verinin program içerisindeki değerleri gözden geçirilir ve bu verilerin doğru çalışıp çalışmadıklarının belirlenmesi için veri yolları seçilir.

Motivasyon

Yeni yazılımlar için en çok kullanılan unit test yöntemidir.
Yapısal ve Object Oriented diller ile geliştirilmiş programlardaki hataları önemli ölçüde azaltmaktadır.

Akış grafiği üç temel ilkeden oluşmaktadır.


Program içerisinde if yada case gibi(end if, end loop, goto label,vb) program akışını farklılaştıran kod parçaları bulunmaktadır.
Süreç blokarı ise kesintisiz kodlardır. Herhangi bir şekilde akışı değiştirmezler.















Örnek Veritabanı Çalışması


Problem: Bahçe bitkileri satan bir firmaya ait bir veritabanı tasarlanmak istenmektedir. X firması satmakta olduğu ürünleri, farklı birçok firmadan temin etmektedir. Satılan her ürün belli bir kategoride toplanmaktadır. X firması gelen sipariş üzerine çalışmaktadır. Dolayısı ile sistemden alışveriş yapmak isteyen her müşteri, öncelikle sisteme kaydedilmektedir. Her müşterinin, mutlaka bir müşteri numarası olmalıdır. X şirketinin ürünlerinin müşteriye iletilmesini sağlayan çeşitli nakliye firmaları vardır. Bu nakliye firmaları, ürünlerin müşteriye iletilmesini sağlamaktadırlar. X firmasında birçok çalışan personel vardır. Sipariş verildiğinde hangi siparişi hangi personelin aldığı bilinmek istenmektedir. X firmasının satış yapabilmesi için deposunda çeşitli ürünleri stokta tutması gerekmektedir. Bu nedenle firma ürünlere ait bilgileri de saklamak zorundadır. Her ürüne bir ürün kod numarası verilmektedir. Bu ürünlerin tedarik edildiği satıcı firma bilgilerinin de sistemde kayıtlı olması istenmektedir.

Bir önceki slaytta verilen probleme ilişkin kavramsal modeli dikkate alarak;

Varlık – ilişki diyagramını çiziniz.
Normalizasyon işlemini yapınız.
SQL Server üzerinde bu veritabanını oluşturarak, tablolar arasındaki ilişkileri belirtiniz.

Normalisasyon


Veritabanı Tasarım Aşamaları

İlişkisel veritabanının tasarlanması aşamasında, verinin tekrarlanmasını, veri kaybını veya veri yetersizliğini önlemek için normalleştirme işlemi uygulanır. Normalleştirme teorisi normal form kavramına dayanır.


Normalleştirme, bir veritabanında veri kayıplarını engellemek, verinin tekrarını azaltmak, silme, güncelleme ve ekleme işlemlerinde ortaya çıkan zorlukları en aza indirmek için yapılan işlemler topluluğudur.

İlişkisel bir veritabanı oluşturmak için normalleştirmeyi çok iyi bilmek gerekir. Normalleştirmenin amacı, bir veritabanına etkinlik kazandırmaktır.


Özet olarak normalizasyonun amacı, veritabanının performansını en üst düzeye getirmektir.







Normalizasyon işlemi bir veritabanı tasarlanırken başlı başına bir işlemdir.

Normalizasyon gerçekleştirilirken bazı kurallar göz önüne alınarak gerçekleştirilir. Bu kurallar, uyulması kesinlikle zorunlu kurallar değildir.


Bir satırda yalnızca bir tek benzer bilgi bulunur. Örneğin, kişinin okul bilgileri Okul1, Okul2, Okul3 diye tutulmaz. Bunlar ayrı bir tabloda tutulmalıdır.

ÖNEMLİ: Verileri virgül veya bir başka karakter ile ayırıp aynı alana girmek ve daha sonra program içerisinde bu değerleri ayırmak ilişkisel veritabanının doğasına terstir.



Bir tablodaki tüm alanlar, o tablonun Primary Key (PK) alanına bağlı olmak zorundadır. Yani Kişi tablosu için konuşursak, Kişi tablosunun PK’sı yani indekslendiği alan, KisiNo alanıdır.

Örneğin KisiNo’su 1 olan bir kayıtta, KisiNo’su 2 olan birisinin bilgileri bulunamaz. O zaman karışıklık meydana gelir. Ayrıca, Kisi tablosunda Kisi’ye ait olmayan veriler tutulamaz.

Bu kural doğal olarak ilişkide bulunulacak her tablonun PK alanının bulunması gerekliliğini de beraberinde getirir. Primary Key alanı olmazsa performanslı bir yapıda olmaz.



Tabloları tutarlı bir şekilde mümkün olan en ufak boyutta (alan sayısı olarak) tutmak gereklidir.

Tablodaki diğer alanları başka tablolara ekleyerek tablolar arasında ilişkiler kurulmalıdır.

Bir PK ile PK olmayan alanlar arasında bire çok ilişki olmamalıdır.

Örneğin kişimizin çalıştığı yerlerin tutulduğu bir tablo daha olsun. Aynı zamanda bizim için önemli olan kişilerin çalıştığı işlerin sektörleri olsun. Bu durumda Sektor diye bir tablo yapıp CalistigiIs tablosuyla ilişkilendirmemiz gerekmektedir.




Sonuç olarak bir veritabanı tasarlanırken;
Veri tekrarı yapılmamalıdır.
Boş yer mümkün olduğunca az olmalıdır.
İlişkilerin anlamsal bütünlüğü olmalıdır.
İlişkilerde veri artıklığı (redundancy) önlenmelidir.
Ekleme, silme ve güncelleme problemleri ortadan kaldırılmalıdır.
İlişkilerde NULL değerlerden mümkün oldukça kaçınmalıdır
Sorgularda bilgi tutarsızlığına yol açan tasarımlardan kaçınmalıdır.



Örnek Veritabanı Çalışması


Problem: Bir okulda öğrencilere ait bilgiler, öğrencinin almış olduğu notlar, ders tanımları ve dersi veren öğretmene ait bilgilerin tutulmasını sağlayan bir veritabanı tasarlanmak isteniyor. Bir sonraki slaytta verilen bilgiler doğrultusunda;

Varlık – İlişki diyagramını çiziniz?

Normalizasyon işlemini gerçekleştiriniz?

Aşağıdaki tabloda verilen nitelikleri ve bu niteliklerin açıklamalarını dikkatlice inceleyin.












İlişkisel Cebir



İlişkisel cebir, bir ilişkisel sorgulama dilidir. Bu ifadeler yardımı ile birçok sorgulama işlemi kodlama aşamasına geçmeden önce tanımlanabilmektedir.

Örneğin, belirli kayıtların seçilmesi, belirli sütunların sorgulama sonucunda elde edilmesi gibi daha birçok işlem ilişkisel cebir ifadeleri kullanılarak kolayca ortaya konabilmektedir.

İlişkisel cebir, bir veya iki ilişkiyi girdi olarak alıp, sonuçta yeni bir ilişki üreten  bir dizi işlemden oluşmaktadır. Ayrıca ilişkisel cebir bir veritabanı sorgulama dilidir.

İlişkisel cebir bir sorgulama dilidir fakat bu sorgulamalar sadece biçimsel olarak yapılmaktadır.

Yani sorgulama işleminin yapılması için bir yorumlayıcı yada derleyiciye ihtiyaç yoktur. Bu bakımdan ele alındığında SQL’ den farklıdır.

Burada yazılan cebir ifadeleri daha sonraki aşamada bir sorgu dili ile (örneğin SQL) komutlara dönüştürülmektedir.

Bir ilişkisel veritabanında kullanılan temel ilişkisel cebir ifadeleri şunlardır. 

Seçme (select) işlemi 
Projeksiyon / Atma (project) işlemi 
Kartezyen çarpım (cartesian product) işlemi 
Birleştirme (join) işlemi 
Kesiştirme (intersect) işlemi 
Fark (difference) işlemi 

Seçme İşlemi

Belirli bir ilişkiden bazı kayıtların seçilerek ortaya konulması işlemidir.    işareti ile gösterilmektedir. Seçme işlemi şu şeklide tanımlanmaktadır.







Seçim işleminde karşılaştırma işleçleri olan =, >, <, ?, ?, ? ifadeleri de kullanılmaktadır. Ayrıca mantıksal operatörler olan “ve” için ^, “veya” için v işaretleri de kullanılmaktadır.


Örnek: Müşteri tablosu aşağıda verilmiştir. Bu tabloyu kullanarak ilçesi “Maltepe” olan müşterileri listeleyiniz.


Belirli bir ilişkiden sadece bazı sütunları atmak için yapılan bir işlemdir. Bu işlem      sembolü ile gösterilmektedir. Atma işlemi aşağıdaki şekilde tanımlanmaktadır.


Yine burada da mantıksal operatörler ve karşılaştırma işlemleri kullanılabilmektedir.
Pi sembolü, projeksiyon/atma işlemini ifade eder.







Karşılaştırma işleçleri olan =, >, <, ?, ?, ? ifadeleri de kullanılmaktadır. Ayrıca mantıksal operatörler olan “ve” için ^, “veya” için v işaretleri de kullanılmaktadır.


Kartezyen Çarpım İşlemi

Belirli bir ilişkiden mümkün olabilecek tüm ilişki çiftlerinin elde edilmesi ve tek bir ilişki biçiminde gösterilmesi için kartezyen çarpım kullanılmaktadır. Kartezyen çarpım X sembolü ile gösterilmektedir. Kartezyen çarpımın genel kullanım biçimi şöyledir.




Örnek: Aşağıda verilen Öğrenci ve Dersler tablolarını göz önüne alarak Bilgisayar bölümünde okuyan ve tüm dersleri alan öğrencileri listeleyen ilişkisel cebir ifadesi nedir?








Sonuç olarak elde edilecek olan kartezyen çarpım tablosu aşağıdaki gibi olacaktır.

Birleştirme İşlemi

Kurulan iki ilişkiden birinde veya her ikisinde birden bulunan kayıtların seçilmesi için yapılan bir işlem türüdür. Bu işlem U simgesi ile gösterilmektedir.


Örnek: Aşağıda verilen Kredi ve Mevduat tablolarını göz önüne alarak, bankanın Maltepe şubesinde mevduat ve/veya kredi hesabı bulunan müşterilerin isimlerini listeleyiniz?







Bu sorgu neticesinde elde edilen sonuç aşağıdaki gibi olacaktır.



Kesişme İşlemi




Belirlenen iki ilişkiden birinde bulanan kayıtların belirlenmesi için kullanılan bir işlemdir. Bu işlem ? simgesi ile gösterilmektedir. Genel gösterimi aşağıdaki gibidir.


Örnek: Aşağıda verilen Kredi ve Mevduat tablolarını göz önüne alarak, bankanın Maltepe şubesinde hem mevduat hem de kredi hesabı bulunan müşterilerin isimlerini listeleyiniz?










Bu sorgu neticesinde elde edilen sonuç aşağıdaki gibi olacaktır.

Fark İşlemi

Verilen iki ilişkide birinde bulunup diğerinde bulunmayan kayıtların gösterilmesi için kullanılan bir işlemdir. ( - ) işareti ile gösterilmektedir.










Örnek: Aşağıda verilen Kredi ve Mevduat tablolarını göz önüne alarak, bankanın Konak şubesinde mevduat hesabı olup kredi hesabı olmayan müşterilerin isimlerini listeleyiniz?



Bu sorgu neticesinde elde edilen sonuç aşağıdaki gibi olacaktır.












İlişkisel Model Örneği


Örnek olarak basit bir market veritabanı tasarlayalım. Bir markette olabilecek tablolar aşağıda gösterilmiştir.







Bu veritabanı örneği basit düzeyde bir örnektir.
Tablolar arasında çeşitli ilişkiler bulunmaktadır.

Örneğin, Personel tablosunda yer alan Reyon No, Reyonlar tablosundaki Reyon No ile ilişkilidir. Burada Reyon No = 23 olan personel “Fatih Yücalar” ın Manav reyonunda çalıştığı bu ilişkiye bakılarak söylenebilmektedir.

Reyonlar tablosunda yer alan her ürün grubuna bir numara verilerek birbirlerine karışmaları engellenmiştir. Ayrıca Ürünler tablosundaki Reyon No alanı Reyonlar tablosundaki Reyon No ile ilişkilidir.

Burada her ürün grubuna bir numara verilerek sistematik bir şekilde düzenlenmesi sağlanmıştır.

Daha sonra Reyonlar ve Ürünler arasındaki ilişki kullanılarak ürün bilgilerine erişim sağlanmıştır.

Burada ayrıca ürün adına bakılarak, ürünün hangi reyonda yer aldığı hemen tespit edilmektedir.

Örneğin; “Elma” ürünü “23” numaralı reyonda yer almaktadır.

23 numaralı reyonda çalışan personelin ise “Murat Demir” olduğu aradaki ilişkilere bakılarak tespit edilebilmektedir.

SQL Server’ da bu tablolar arasındaki ilişki aşağıdaki gibi olacaktır.








Veritabanı Şeması

Veritabanının mantıksal tasarımına veritabanı şeması adı verilir. Tablolar ve onların nitelikleri; veritabanı şemasını oluşturur.

Veritabanı şemalarını iki ana grup altında ortaya koymak mümkündür.


İki tablo birbirleriyle dış anahtar kullanılarak ilişkilendirildikten sonra, bu sınırlamalara dayanarak, iki tablo arasında silme ve güncelleştirme işlemleri otomatik olarak yerine getirilebilir.


Örneğin; PERSONEL ve BÖLÜM isimli iki tabloyu göz önüne alalım.

PERSONEL tablosunun Bölüm No isimli sütunu, BÖLÜM tablosuna ilişkin bir dış anahtar olarak tanımlanmıştır. Bu tür bir tanım beraberinde ilişkisel bütünlük özelliklerini getirecektir.

BÖLÜM isimli tablodan bir satırı, örneğin 10 numaralı bölümü silmek istiyoruz. Bu satır silindiğinde, PERSONEL tablosunda da aynı satır ile ilgili tüm kayıtlar otomatik olarak yok olacaktır.


Veri Değeri Sınırlaması

Tablonun herhangi bir sütununda yer alacak verilerin hangi değerlere sahip olabileceği konusunda sınırlamalar getirilebilir.
Örneğin, bir değerin NULL olamayacağı belirtilerek bir sınırlama yapılabilir.
Örneğin, PERSONEL’in şehir içi telefon numarasının 7 haneden fazla olmasını önlemek için böyle bir sınırlama konulabilir.

Benzer biçimde, bir öğrencinin doğduğu ilin trafik kodunun 2 haneden fazla olamayacağı ve 1 ile 81 rakamları arasında olabileceği biçiminde sınırlamalar getirilebilir.


Örneğin, PERSONEL tablosu için şöyle bir sınırlama tanımlandığını varsayalım;
Bölüm numaraları 1-99 arasında, yani iki haneli olacaktır. Bu sınırlamaya uymayan bir giriş yapılmaya çalışıldığında, örneğin bölüm numarası 400 olan bir kayıt girilmeye çalışıldığında, sınırlama nedeniyle kayıt ekleme işlemi yerine getirilmeyecektir.


İşletme Kuralları Sınırlaması

Tablolar üzerinde işletme kurallarına dayalı sınırlamalar yapılabilir. Bu sayede, işletme kurallarına uygun olarak veri bütünlüğü söz konusu olabilir.

Örneğin, işletmenin muhasebe bölümünde programcı kadrosuna sahip eleman çalıştırmak anlamlı değildir. Bunu denetlemek gerekecektir.

Veritabanına bilgi girişleri esnasında, muhasebe bölümüne yeni PERSONEL kaydı eklemek gerektiğinde, söz konusu işletme kuralı, uygunsuz veri girişlerini engelleyecektir.
Bu tür sınırlamalar çoğunlukla uygulama programları aracılığıyla denetlenir.


Nitelikler Arası Bağımlılıklar
Nitelikler arasındaki fonsiyonel bağımlılıklar belirlenerek, şema üzerinde düzenlemeler yapılır.
Veri bütünlüğünün ve tutarlılığının sağlanmasında, nitelikler arasındaki bağımlılıkların kullanılması yararlı olabilir. Niteliklerin birbirleriyle olan bağımlılığı göz önüne alınmadan veritabanı tasarımının yapılması sorunlara neden olacaktır.

Anahtar Sınırlamaları


Bütünlük sınırlamalarının sağlanmasında anahtarlar önemli rol oynar. Anahtar türü belirlenerek, bu sınırlamaların veritabanı yönetim sistemi tarafından otomatik olarak yapılması sağlanır. Söz konusu anahtarlar:

Birincil anahtar (primary key)
Dış anahtar (foreign key)


Birincil Anahtar Sınırlamaları
İlişkisel veritabanlarında bir tablonun benzer değerler içermeyen (unique) bir sütunu ya da birkaç sütunu birlikte birincil anahtar olarak tanımlanabilir.

Birincil anahtar, bir aday anahtardır ve söz konusu varlığın kayıtlarını en iyi biçimde karakterize eder.
Birincil anahtar tanımlandığında, birincil anahtar NULL değerleri veya birbirinin aynı değerleri içeremez biçiminde bir sınırlama konulabilir. Boş olan değerlere NULL adını veriyoruz. Bu sınırlamanın kontrolünü ise veritabanı yönetim sistemi yapacaktır.


Birincil anahtar tek bir sütundan oluşabileceği gibi, birden fazla sütunun birleşiminden de oluşabilir.
Bu durumda bileşik birinci anahtar’dan söz edilir.
Bileşik birincil anahtarın içerdiği değer tek olmalıdır. Ancak bileşik anahtarı oluşturan sütunların her biri çift değerler içerebilir.

Bununla birlikte birincil anahtarı oluşturan sütunların hiçbiri NULL değer içeremez.

Dış Anahtar Sınırlamaları

Bir dış anahtar, bir sütun veya çok sayıdaki sütunların birleşiminden oluşur.

Dış anahtar, başka bir tabloda yer alan bir birincil anahtarla eşleştirilir.
Dış anahtarın değeri bir birincil anahtar değeriyle eşleşmeli veya NULL olmalıdır. Eğer dış anahtar birincil anahtarın bir kısmını oluşturuyorsa, doğal olarak NULL değer içeremez.



Fiziksel Şema


Fiziksel şema, veritabanının fiziksel çevresi ile ilgili tanımları içerir. Örneğin, veritabanı bilgisayarda bir disk dosyası biçiminde yer alacaktır. Bu dosyanın disk üzerindeki adresi ve özellikleri ile ilgili tanımlar fiziksel şemayı oluştur.
Kavramsal şema ise tüm veritabanının mantıksal tasarımıdır. Veritabanına konulmasına karar verilen veriler arasındaki mantıksal ilişkilerin yapısının saptanması için veritabanı şeması oluşturulur. Bu şemada, veritabanında veri alanları, kayıtlar, dosyalar vb… gibi ne tür veri elemanlarının bulunacağı, veri elemanları arasındaki ilişkiler ve veritabanının yapısı hakkında bilgiler  yer alır.

Veritabanı şeması veya bir başka deyişle kavramsal şema tasarlandıktan sonra, her bir uygulama için alt-şemalar hazırlanır. Örneğin, muhasebe uygulaması bir alt şemadır. Çünkü bu uygulama veritabanının tümü ile ilgilenmez.








Veritabanının doğru ve tutarlı biçimde çalışması ve işlemleri yerine getirmesi gerekir. Verinin doğru ve tutarlı olmasına "veri bütünlüğü" denir.

Veri bütünlüğünün sağlanması sonucunda, veritabanının eksik, yanlış, tutarsız ve çelişkili olmaması sağlanır.


Veritabanında, veri bütünlüğünü sağlamak için birçok yol bulunmaktadır. Bunlardan en önemlisi, bütünlük sınırlamaları (integrity constraints) adını almaktadır.

Bütünlük sınırlamaları, veritabanı yönetim sistemi veya uygulama programları tarafından tanımlanır.

Sözü edilen sınırlamalar; kullanıcı tarafından yapılması gereken ekleme, silme ve güncelleştirme işlemlerinden önce bir denetim yapılmasına neden olur.
Bu denetim sonucunda, sadece sınırlamalara uyan işlemlerin yapılmasına izin verilir. Diğerleri reddedilir.

İlişkisel Model

İlişkisel model (relational model), günümüzde en yaygın biçimde kullanılan bir veritabanı modelidir. Ticari veritabanı yönetim sistemlerinin hemen hemen tümünde bu model kullanılmaktadır.

İlişkisel model, varlıklar arasındaki bağlantının, içerdiği değerlere göre sağlanması esasına dayanır. İlişkisel model, varlıklar arasında oluşan karmaşık ilişkileri basite indirgemek amacıyla geliştirilmiştir.

Bu yaklaşımda, veri tabanındaki tüm ilişkiler tablolar biçiminde tanımlanmaktadır.

İlişkisel Veritabanı
İlişkisel veritabanı, her biri özel isimlere sahip tablolardan oluşur. İlişkisel veri tabanında her bir tablo bir varlığa veya bir ilişkiye karşılık gelmektedir.







Tablonun sütunları nitelikleri; satırlar ise bu niteliklerin değerlerini ifade eder. Her bir satır bir “kayıt” olarak da düşünülebilir. Anahtar alan, tablonun tanımlayıcısıdır.


Tabloların Özellikleri
İlişkisel veritabanı içinde yer alan her bir tablo;
Sütunlardan oluşur ve her bir sütunun ayrı bir adı vardır.
Her bir sütun, aynı niteliğin tanımlandığı aynı etki alanının (domain) belirlediği değerleri içerir.
Her bir satır birbirinden farklıdır.
Satırların ve sütunların sırası önemsizdir.

Ad-lib testleri


Ad-lib test ler doğaçlama olarak yapılan rast gele sayılar ile programın test edilmesini sağlar.
Ad-lib testleri tam olarak sistem ile ilgili bir şey ispat edemesede. Genel anlamda kullanılabilrilike ile ilgili yapılan testlerdir.


Özet
Veri girişleri sistem için çok önemli noktalardır.
Güvenlik ve sistemin doğru çalışması açısından.
Dış dünyadaki veriler ,belli bir formata göre sistem içerisine alınmalıdırlar.
Çöp olarak belirlenen verilerin sistem içerisine alınmaması için anlık kontroller yapılmalıdır.
Hata kontlerleri sistemin en alt noktasından başlatılmalı ve her seferinde tek bir hata oluşturularak kontrol edilmesi gerekmektedir. Sonrasında ise hata sayıları arttırırlarak test işlermleri gerçekleştirilmelidir.
Onaylama testleri söz dizimini kapsayıcı şekilde olamlıdır.
Uç değerler ve sınır değerler test edilmesine öncelik verilmelidir.(Sınırlayıcıları düşünün.)
Otomatik test programları çalıştırılarak testler yapılmalıdır.
Anlık yapılan Ad-lib testleri ile sistemin durumu incelenebilir.
Değer üreteçleri ile programa değerler verilerek programın düzün olarak çalışıp çalışmadığına bakılmalıdır.


Söz dizimi Test Tasarım Tehlikeleri


Program dizannının nasıl olacağını bilmek sizin gereksiz “case” ler ile ilgilenmenizi ortadan kaldıracaktır.
Yapısal testti göz ardı etmeyin. Sözdizimi testtini yapı içerisinde gerçekleştirin.
Yapısal test ile söz dizim testtini birbirine karıştırmak kolaydır dikkat etmek gerekir.

Sözdizimi Test Sürücüleri

Test caseler genellikte bir data olarak saklanır. Bunun için bir program kullanılabilir.
Gereksiz verilerin olduğu “çöp” datalardan oluşan bilgileri bu hazırladığınız test caseleri içerisine almayın.

Tasarım Otomasyonu: İlkel Yöntem

Doğru  bir giriş dizeleri kümesi kapsayan belirtmek ,
için bir kelime işlemci kullanın.
Arama değiştirme alt string değerlerini kullanın.

Tasarım Otomasyonu: Rastgele StringÜreteçleri
Rasgele string içeren diziler ile programa değer vererek programın çalışma durumu değerlendirin.
( Kaba güç ile programı zorlama)


Verimlilik, Eğitim, Etkililik
Söz dizimi testi programları kullanan kişiler için büyük bir güven kaynağı verir.
Yazılım ekibi içersinde yeni başlayan  stajyerlere verilen kolayca bir eğitimi sonrası gerçekleştirile bilir.
Busayede stajer saatte 20-30 test durumları üretebilir.
Sözdizimi test acemi bir tester için inandırıcı mükemmel bir yoldur:
Bu sayede testtin sonsuz bir süreç olduğunu.
Hangi testlerin önce yapılması gerektiğini bilir.

Test Strateji

(Azdan çoğa yaklaşımı)
Girdi dizesinin tüm diğer bileşenleri doğru tutarak, her seferinde bir hata oluşturun.
Testleri komple bir set olarak belirleyin bu işlemin ardından. İkili üçlü hata setleri ile 1. adımdaki aşamayı tekrarlayın...
Her seferinde bir düzeye odaklanın bu odak seviyesini başlangıçta düşük tutarak adım adım yükseltin.


Örnek1 Telefon numarası
phone_number ::= exchange_part number_part
Boş değer atama
İlk kısmını değiştirme.
İkinci kısmı değiştirme.
İki kısmı birden değiştirme.
Önce birinci kısmı değiştirme ardımdan ikinci kısmı değiştirme.
Önce ikinci kısmı değiştirme ardından birinci kısmı değiştirme.
Yetersiz karakter girilmesi
Çok fazla karakter girilmesi.
Sayısal olmayan karakter girilmesi.
Kontrol karakterlerinin girilmesi.
Özel karakterler girilmesi.
other_digit ::= 2 | 3 | 4 | 5  6 | 7 | 8 | 9
special_digit  ::= 0| 1 | 2 | 5

Sınırlayıcı Hatalar
Sınırlayıcı karakterler bir karakter bittikten sonra diğer karakter arasında kullanılan karakterdir.
Eksik. örnek., (x+y
Yanlış. örnek., (x+y]
Fazla. örnek., (x+y))



Söz dizilimi kaynağı

Tasarımcı Test İşbirliği
Kılavuzlar
Ekranlar
Tasarım Belgeler
Prototip
Programcı Röportajlar
Hacking

Test Case Üretimi Hakkında


Yanlış eylemlerin olası üç türü vardır:
Tanımlama iyi bir dizilimde yapılmamış.
Tanıma kötü bir dizilimde olsa da program tarafından kabul edilmiş.
Tanıma sırasında dizi tanımaları oluşturulmamış.
Gerektiği yerde gerektiği kadar test case üretilmelidir.
Tüm veriler için kullanmaya zaman ve kaynak yoktur.

Syntax Testtinin Adımları

Hedef dilini ve formatını tanımla.
Test ve Debug işlemini gerçekleştir.
Normal koşullarda mimimum gereksinimler ile. Temel testleri gerçekleştir.
Geçersiz verilere karşı sistemi test ed. "çöp" koşullar. (yüksek sonuç)

Bu için bir yazılımda kullanılabilir

Syntax testinin otomatik olarak yapılması gerekmektedir.
Syntax (Söz dizimi) nasıl bulunur?
Her bir veri girişi kendine özgü bir söz dizimine sahiptir.
Yapı içerisinde
Resmen belirlenmiş
Belgesiz
Sadece anladım
Şartnameye test etmek için yaralı çöp değerlerine ihtiyaç duyulabilir.(Farklı değerlerle düzgün bir söz dizilimi yapılıyor mu sorusunu cevaplamak için)


Söz dizilim yapıları ve BNF


| = “or”.
* = “zero or more occurrences”.
+ = “one or more occurrences”.
      
        means “n repetitions of A”.

special_digit       ::= 0 | 1 | 2 | 5
other_digit         ::= 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
ordinary_digit    ::= special_digit | other_digit
exchange_part   ::= ordinary_digit
phone_number   ::= exchange_part number_part

Doğru bir telefon numarası:
4566654, 9904567, 3300000
Yanlış bir telefon numarası:
0551212, 123, 8, ABCDEFG

Neden BNF

BNF şartname kullanma biçimi için doğru bir yapı sağlar. Tasarım testi için kolay bir  yoldur.
Tasarımcıların işlerini kolaylaştır ır.
Bu aşamada doğru veriler ile yanlış verilerin ayrımı yapılana kadar tasarım başlatılmamalıdır.

Milyon Maymun Fenomeni

“A million monkeys sit at a million typewriters for a million years and eventually one of them will type Hamlet!”


“Giriş onaylama düşmanca bir dünyaya karşı ilk savunma hattıdır.”
Iyi bir kullanıcı arayüzü tasarımı çöp verileri sisteme kabul etmez.
İyi bir test farklı çöp değerleri ile yapılan testtir.
Giriş-tolerans testi genellikle sistem testlerin bir parçasıdır .

Varlık-İlişki Modelinin Tablolaştırılması



Örnek-2: Bir müşteri birden fazla otomobile sahip ve her otomobil modeline birden fazla müşteri sahip olabilir. Bu durumda otomobiller ile müşteriler arasındaki ilişki çoktan-çoğa biçimindedir.
Varlık-İlişki Modelinin Tablolaştırılması


ER şemasına uygun olarak aşağıdaki ifadeler yazılabilir:
Müşteri ={Müşteri No, Adı}
    Otomobil ={Oto Model, Renk}
    Sahip ={Müşteri No, Oto Model, Tarih}

Sahip isimli ilişkiye dayanılarak aşağıdaki tablo oluşturulabilir.


Varlık-İlişki Modelinin Tablolaştırılması

Örnek-3: Bir müşteri birden fazla otomobile sahip olabilir. Ancak tersi doğru değildir. Yani bir otomobil modeli iki farklı müşteriye ait olamaz. Bu durumda ER şeması aşağıdaki şekilde çizilebilir.





Varlık-İlişki Modelinin Tablolaştırılması

“Sahip” tablosu ile “Otomobil” tablosu aynı tablo içine birleştirilir.

Müşteri = {Müşteri No, Adı}

Otomobil = {Oto Model, Renk, Müşteri No, Tarih}

Bu durumda “Otomobil” tablosunun görünümü şu şekilde olacaktır:


Varlık-İlişki Modelinin Tablolaştırılması

Örnek-4: Bir müşteri sadece bir otomobil modeli satın alabilmektedir. Aynı biçimde, bir model otomobil sadece bir müşteriye satılabilmektedir. Böyle bir durumda varlık-ilişki modeli aşağıdaki şekilde olabilir:



Varlık-İlişki Modelinin Tablolaştırılması

Yöntem-1: Müşteri varlığı ile otomobil ve sahip ilişki şu şekilde ifade edilebilir:

Müşteri = {Müşteri No, Adı}

Otomobil = {Oto Model, Renk}

Sahip = {Müşteri No, Oto Model, Tarih}

Burada Sahip ilişkisine Müşteri No niteliği anahtar olarak düşünülmüştür.


Varlık-İlişki Modelinin Tablolaştırılması

Bunun yerine Oto Model varlığı da bir anahtar olarak tasarlanabilir:

Sahip = {Müşteri No, Oto Model, Tarih}

Oto Model niteliği anahtar kabul edilerek Sahip isimli ilişki şu şekilde tabloya dönüştürülebilir.



Varlık-İlişki Modelinin Tablolaştırılması

Yöntem-2: Sahip ile Otomobil varlıkları birleştirilerek Otomobil ya da Müşteri tablosu elde edilir.

Sahip ile Otomobil varlıkları birleştirilerek Otomobil tablosu elde edilir.

Müşteri = {Müşteri No, Adı}

Otomobil = {Oto Model, Renk,  Müşteri No,  Tarih}

Sahip ile Müşteri varlıkları birleştirilerek Müşteri tablosu elde edilir.

Müşteri = {Müşteri No, Adı, Oto Model, Tarih}

Otomobil = {Oto Model, Renk}



Varlık-İlişki Modelinin Tablolaştırılması

Yöntem-3: Sahip ile Otomobil ve Müşteri varlıkları bir tablo üzerinde birleştiriliyor. Bu tablonun adı Satış olsun. Bu tablo,

Müşteri = {Müşteri No, Adı, Oto Model, Renk, Tarih} veya

Müşteri = {Müşteri No, Adı, Oto Model, Renk, Tarih} biçiminde olabilir.

Müşteri No niteliğinin anahtar olarak kabul edildiği birinci durum için tablo şu şekilde düzenlenebilir:



Varlık-İlişki Şemaları

Varlık-ilişki modelinde varlıklar ve ilişkileri tanımlamak için aşağıda belirtilen şema öğeleri kullanılır.

İlişki Türlerinin Gösterilmesi

İlişki türleri;

Birden-bire
Birden-çoğa
Çoktan-bire
Çoktan-çoğa

biçiminde tanımlanmıştı. Bu ilişkiler, varlık-ilişki yani ER şemaları ile yandaki şekilde gösterilebilir.


Varlık-İlişki Modelinin Tablolaştırılması

Bir veritabanı, tablolardan oluşur.

Varlık-ilişki şemaları biçiminde çizilen bir veritabanı tablolar halinde gösterilebilir.

Veritabanının her varlık kümesi ve her ilişki kümesi için, bu isimlerle simgelenen birer tablo düzenlenir.


Varlık-İlişki Modelinin Tablolaştırılması

Örnek-1: Aşağıdaki varlık-ilişki şemasını göz önüne alalım. SSK No ve Hesap No alanları anahtar alanlardır.


Bu varlık-ilişki diyagramı aynı zamanda dış model (external model) olarakta adlandırılır.

Varlık-İlişki Modelinin Tablolaştırılması


Zayıf ve Kuvvetli Varlıklar


Bazı durumlarda varlık kümesi içinde bir anahtar bulmak mümkün olmayabilir. Hatta niteliklerinin tümü bir araya getirildiğinde yine bir anahtar elde edilemeyebilir. Böyle varlık kümelerine zayıf varlık kümesi adı verilir.

Buna karşılık, varlık kümesinin içerdiği niteliklerden en az biri bir anahtar oluşturabiliyorsa bu varlık kümesine kuvvetli varlık kümesi adı verilir.


Zayıf ve Kuvvetli Varlıklar

Örnek: Bir “PERSONEL” varlığının aşağıda belirtilen niteliklere sahip olduğunu varsayalım.

“Adı ve Soyadı”
“Doğduğu İl”
“Eğitim Düzeyi”

Bu üç nitelikten oluşan varlık kümesi, bir zayıf varlık kümesi olarak değerlendirilir.
Çünkü, bu küme içinde aynı isim ve soyadına sahip çok sayıda PERSONEL olabilir. O halde bir anahtar olarak kabul edilemez. Benzer biçimde “doğduğu il” ve “eğitim düzeyi” nitelikleri de aynı nedenlerden ötürü birer anahtar olamaz. Bu niteliklerin tümünün birleşimi bile bir anahtar olamaz.

Anahtar



Varlık kümesi içindeki varlıkları birbirinden ayırt etmek için kullanılan niteliklere varlık kümesinin anahtarı denir.

"Süper Anahtar" ve "Aday Anahtar" olmak üzere iki tür anahtar vardır.

Varlıkları ve ilişkileri tanımlamış bulunuyoruz. Ancak, bir varlık kümesi veya bir ilişki kümesi içinde yer alan varlıkları birbirinden nasıl ayırt edebileceğiz sorunu karşımıza çıkmaktadır.
Örneğin öğrenci? varlık kümesi içinde her bir öğrenciyi diğerinden ayırt eden nitelikler neler olabilir?
Öğrencileri birbirinden ayırt etmek için, öğrenci numarasını kullanabileceğimizi söyleyebiliriz.


Süper Anahtar

Varlık kümesi içinde yer alan bir varlığı kesin olarak tanımlamaya yarayan anahtara süper anahtar denir.

Bu anahtar sadece bir nitelikten oluşabileceği gibi, birden fazla niteliğin birleşiminden de oluşabilir.

Süper anahtarlar süper küme oluşturur. Bir süper anahtarın herhangi bir süper kümesi daima bir süper anahtar olarak kabul edilir.


Örnek: SSK numarası bir PERSONEL’i diğerinden ayırt etmek için yeterlidir. Çünkü bir ülkedeki tüm çalışanların sadece bir SSK numarası vardır.

İki farklı kişinin aynı SSK numarasına sahip olması olanaksızdır.

PERSONEL’in “adı” süper anahtar olarak tanımlanamaz. Çünkü aynı isme sahip birçok PERSONEL var olabilir. Ancak, “SSK numarası” bir süper anahtar olması nedeniyle, "SSK numarası" ve "PERSONEL’in adı" birlikte süper anahtar olarak değerlendirilebilir. Hatta “SSK Numarası, Adı, Bölümü” nitelikleri birlikte bir süper anahtar olarak kabul edilebilir.








Aday Anahtar




Varlık kümesi içinde yer alan bir varlığı kesin olarak tanımlamaya yarayan bir başka anahtar da aday anahtar olarak bilinmektedir.

Bir varlık kümesinin süper anahtarı bir veya daha fazla niteliğin birleşiminden oluşabiliyordu. Bu tür bir süper anahtarın herhangi bir alt kümesi aynı zamanda bir süper anahtar değil ise, bu anahtara aday anahtar ya da kısaca anahtar adı verilir.

Bazı durumlarda; varlıklara ilişkin birkaç nitelik, birlikte bir anahtar olarak tanımlanabilir.


Örnek: Aşağıda görüldüğü üzere, “SSK No” niteliği süper anahtarın bir parçası olmasına karşılık, tek başına varlıkları birbirinden kesin olarak ayırt etmekte kullanılabilir. O halde “SSK No” niteliği bir anahtardır.

Personel için; “SSK No, Adı, Bölümü” nitelikleri, birlikte "PERSONEL" varlığı içindeki her bir varlığı diğerinden ayırt etmek için kullanılabilir. Süper anahtar, varlıkları kesin olarak birbirinden ayırt etme özelliğine sahip olmasına karşılık, bu özelliği kazanmak için gerekenden fazla niteliği içerebilir. Anahtar ise, aynı tanıma uygundur. Ancak gerekenden fazla nitelik içermeme özelliğine sahiptir.