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.