12 Ocak 2017 Perşembe

Karakter Fonksiyonları

Karakter fonksiyonları veri tablolarında, veri türü char, varchar, nvarchar olarak tanımlanan alanlar için kullanılmaktadır.

Harflerden, harf, rakam ve simgelerden oluşan alanlar üzerinde işlem yapılmasını sağlamaktadır.

Örneğin ad, soyad, adres gibi alanlar bu  fonksiyonlarla işlem görebilmektedirler.
Karakter fonksiyonları olan;
LEFT: Metnin solundan n tane harf almak için,
RIGHT: Metnin sağından n tane harf almak için,
UPPER: Metni büyük harfe çevirmek için,
LOWER: Metni küçük harfe çevirmek için,
LTRIM: Metnin başındaki beyaz karakterleri atmak için,
RTRIM: Metnin sonundaki beyaz karakterleri atmak için,
REPLACE: Bir ifadeyi başka bir ifade ile değiştirmek için,
LEN: Bir alandaki karakterlerin uzunluklarını bulmak için,
REVERSE: Bir alandaki bilgileri tersen yazmak için, kullanılmaktadır.

Tüm karakter fonksiyonlarının kullanımlarına örnek aşağıda verilmiştir.
SELECT Adi,
         LEN (Adi) AS "UZUNLUK",
         LEFT (Adi, 3) AS "BAŞTAN",
         RIGHT (Adi, 3) AS "SONDAN",
         UPPER (Adi) AS "BÜYÜK",
         LOWER (Adi) AS "KÜÇÜK",
         LTRIM (Adi) AS "BAŞTAN BEYAZ",
         REPLACE (Adi, ‘rda’, ‘XXX’) AS "DEĞİŞİKLİK",
         REVERSE (Adi) AS "TERSTEN"
    FROM personel

MS SQL 2008

MS SQL 2008 bu veri türlerinin tanımlandığı ekran aşağıdaki gibidir.


Sorgulama İşlemleri



SQL'de sorgulama işlemleri, SELECT deyimi yardımıyla yerine getirilir. SELECT deyimi temel olarak üç farklı işlemi yerine getirmek için kullanılır:

Seçme İşlemi (Select): Bir tablodaki satırları seçme işlemidir. Bunun için çeşitli seçme kriterleri kullanılabilir.

Atma İşlemi (Projection): Bir tablodaki belirli kolonların seçilmesi işlemidir.

Birleştirme İşlemi (Join): Birden fazla tablonun belirlenen sütunları arasındaki ilişkilerin kullanılarak birleştirilmesi işlemidir.




SELECT deyimi en basit biçimde şu şekilde ifade edilmektedir;

SELECT [DISTINCT] * / <sütun>
FROM <Tablo_Adı/Tablolar>

Tanım içinde bazı SQL anahtar kelimelerine yer verilmektedir. Bu anahtar kelimeler, SQL 'in kendi özel kelimeleridir ve aynen bu şekilde ifade edilmelidir.

SELECT     ? SQL'in sorgulama deyimidir.
FROM        ? Hangi tablonun sorgulanacağını ifade eder.
DISTINCT ? Çift kayıtları önleyen anahtar kelimedir.


SELECT ifadesinden sonra sorgu sonucunda ekranda görüntülenmesi istenen sütun isimlerinin arasına virgül konarak yan yana yazılır. Eğer tabloda bulunan bütün alanlar listelenmek istenirse * işareti kullanılır.

Örneğin;
SELECT * FROM students
Bu sorgu çalıştırıldığında, öğrenciler tablosundaki bütün alanları göstermektedir.
SELECT studentName, studentSurname FROM students
Bu sorgu çalıştırıldığında, öğrenciler tablosunda yer alan öğrencilerin sadece Adı ve Soyadı bilgilerini göstermektedir.




FROM ifadesinden sonra listeleme işleminin hangi tablo üzerinde yapılacağı belirtilir. Birden fazla tablo kullanıldığında aralarına virgül işareti konur.

Örneğin;
SELECT * FROM students, departments
Bu sorgu çalıştırıldığında, öğrenciler ve bölümler tablosundaki bütün alanları göstermektedir.



SELECT * FROM students, departments sorgusunda her iki tablodan da belli alanlar görüntülenmek istenirse, SELECT ve FROM ifadeleri arasına tablo ismi belirtilerek yazılır.

Örneğin;
SELECT students.studentName,  
                     students.studentSurname,
                     departments.departmentName
    FROM students, departments




WHERE Deyimi


WHERE deyimi, tablo içerisinde istenen bir şarta uygun olan kayıtların listelenmesi amacıyla kullanılmaktadır.

İstenen şartlar WHERE ifadesinden sonra yazılmaktadır.

WHERE koşul ifadesine bağlı olarak listelenmesi istenen alanlarda yazılabilir.
Şart ifadesi içerisinde kullanılacak ifade rakam ise tırnak işareti kullanılmaz. Eğer alfabetik bir ifade ise aranacak ifade tek tırnaklar arasına yazılır.





Örnek:
SELECT * FROM Müşteriler WHERE MüşteriNo = 10
Müşteriler tablosunda Müşteri numarası 10 olan kişinin tüm bilgilerini listeler.

SELECT Adı, Soyadı
         FROM Müşteriler
               WHERE MüşteriNo =  10
Müşteriler tablosunda Müşteri numarası 10 olan kişinin sadece Adı ve Soyadı bilgilerini listelenir.


Aslında WHERE ifadesi, tablo içerisinde istenen bir şarta bağlı olarak kayıtların sınırlandırılmasını sağlamaktadır. Yani görüntülenecek kayıtların şarta uygun olan belli bir bölümü görüntülenmektedir.


SQL Operatörleri

Her programlama dilinde olduğu gibi SQL de de bazı operatörler bulunmaktadır. Bu operatörler, listeleme yapılırken istenilen koşulların yerine getirilmesine yardımcı olmaktadırlar. Bu operatörleri 4 ana başlık altında toplamak mümkündür.

Karşılaştırma operatörleri,
Mantıksal operatörler,
Aritmetiksel ifadeler,
Kümeleme operatörleri.





Karşılaştırma Operatörleri

Karşılaştırma operatörleri, verilen iki ifadenin birbirleri ile kıyaslanmasını sağlamaktadır. Bu ifadeleri şöyle sıralayabiliriz.
X > Y , X ifadesi Y ifadesinden büyüktür.
X < Y , X ifadesi Y ifadesinden küçüktür.
X = Y , X ifadesi Y ifadesine eşittir.
X => Y , X ifadesi Y ifadesine eşit ve büyüktür olabilir.
X <= Y , X ifadesi Y ifadesine eşit ve küçüktür olabilir.
X <> Y , X ifadesi Y ifadesine eşit değildir.



Karşılaştırma operatörlerine, «Siparişler» tablosunu kullanarak bir örnek verelim. Nakliye ücreti 20 TL den büyük olan siparişler hangileridir? Bu sorgunun SQL cümlesi aşağıdaki gibi olacaktır:
SELECT *
         FROM Siparişler
               WHERE NakliyeÜcreti > 20


Mantıksal Operatörler

Mantıksal operatörler, bütün dillerde olduğu gibi iki yada daha fazla şartın kıyaslanması amacıyla kullanılmaktadır. Bu operatörler şu ifadelerden oluşmaktadır.
AND (ve)
OR (yada)
NOT (değil)

Önemli Nokta!
SQL’de bu operatörlerin hepsi WHERE deyiminden sonra kullanılmaktadır.





AND operatörüne örnek verecek olursak; siparişler tablosunda, nakliye ücreti 10 TL den küçük ve Ankara’ ya gönderilen siparişler hangileridir?

SELECT  * 
     FROM Siparişler
           WHERE (NakliyeÜcreti <10) AND (Gönderilenİl='Ankara')


OR operatörüne örnek verecek olursak; siparişler tablosunda, nakliye ücreti 10 TL den küçük yada Ankara’ ya gönderilen siparişler hangileridir?

SELECT  * 
     FROM Siparişler
           WHERE (NakliyeÜcreti <10) OR (Gönderilenİl='Ankara')


NOT operatörüne örnek verecek olursak; siparişler tablosunda, nakliye ücreti 10 TL den küçük olmayan siparişler hangileridir?

SELECT  * 
     FROM Siparişler
           WHERE NOT (NakliyeÜcreti <10)




Aritmetiksel İfadeler



Aritmetiksel ifadeler, tablo içerisindeki herhangi bir sütun üzerinde işlem yapmayı sağlamaktadır.

Bu operatörler;
Toplama (+),
Çıkarma (-),
Çarpma (*),
Bölme (/).
işlemlerinden oluşmaktadır.







Aritmetiksel işlevler yapılırken işlem sırası önemlidir. İşlem sırası şu şeklidedir:
*  /  +  -

Örneğin bir hücre ile işlem yapılırken şu şeklide kullanılmaktadır:
NakliyeÜcreti * 12




Örneğin, “Siparişler” tablosunda nakliye ücretlerinin sabit olduğunu düşünelim. Bu satırların her biri için yıllık nakliye ücreti ne olur?
SELECT NakliyeÜcreti * 12
         FROM Siparişler





Aritmetiksel ifadeler kullanılırken parantezlerin kullanımı son derece önemlidir. Parantezlerin, işlem öncelikleri göz önüne alınarak doğru yerde kullanılması gerekmektedir. Aksi durumda yanlış işlem sonuçları ortaya çıkabilmektedir.

Örneğin; ücretin 10 TL olduğunu varsayarsak;
12*(ücret+500) = 12*510=6120
12*ücret+500 = 120+500 = 620

Burada işlem önceliği çarpmanın olduğundan sonuç farklı olacaktır.





Kümeleme Operatörleri


Kümeleme operatörleri, tablo içerisindeki verileri çeşitli kriterlere göre gruplamayı sağlayan operatörlerdir. Bu operatörler;
BETWEEN
IN
LIKE

Bu komutlar yine WHERE komutundan sonra kullanılmaktadır.


BETWEEN komutu belli bir aralıktaki kayıtların sorgulanmasında kullanılmaktadır. Bu komutta alt ve üst sınır tanımlamaları yapılmaktadır. Genel kullanımı şöyledir.

BETWEEN Alt_Sınır AND Üst_Sınır

Örnek: Nakliye ücreti 10 ve 20 TL arasındaki siparişlerin detayları nelerdir?

SELECT *
         FROM Siparişler 
              WHERE  NakliyeÜcreti BETWEEN 10 AND 20



IN komutu, kayıtların tablodaki değerlerle karşılaştırılması söz konusu olduğunda kullanılmaktadır.

Örneğin; Ankara, İzmir ve İstanbul’a gönderilen siparişler hangileridir? sorgusunu yazalım.

SELECT SiparişNo, Gönderilenİl
         FROM Siparişler
              WHERE Gönderilenİl IN ('Ankara', 'İzmir', 'İstanbul')


LIKE komutu, WHERE komutu ile birlikte kullanılan ve sözcüğün tamamı ile değil de sadece belli bir bölümü ile arama yapmayı sağlayan bir komuttur.

Örneğin, siparişlerin gönderildiği kişilerden adları N ile başlayan kişiler kimlerdir? sorgusunu yapalım.

SELECT GönderilenAd 
         FROM Siparişler
               WHERE GönderilenAd LIKE 'N%'

Burada %, N harfinden sonra gelen hiç bir harfin öneminin olmadığını ifade eder.


Örneğin, siparişlerin gönderildiği kişilerden adlarının içinde N harfi  bulunan kişiler kimlerdir? sorgusunu yapalım.

SELECT GönderilenAd 
         FROM Siparişler
               WHERE GönderilenAd LIKE ‘%N%'



LIKE deyimi ile birlikte kullanılan karakterlerden bir diğeri  _ işaretidir. Bu işaret bir harf veya rakamın yerini tutar.

Örneğin, siparişlerin gönderildiği kişilerden adlarının içinde sondan ikinci harfi N olan kişiler kimlerdir? sorgusunu yapalım.

SELECT GönderilenAd 
         FROM Siparişler
               WHERE GönderilenAd LIKE ‘%N_'


ORDER BY İfadesi

ORDER BY komutu, önceden belirlenmiş olan sütuna göre sıralama işlemlerini gerçekleştirmektedir.

Sıralama işleminde sıralama yapılacak olan sütun, rakamsal ifadelerden oluşuyorsa sıralama küçük rakamdan büyüğe yada büyük rakamdan küçüğe doğru sıralanabilmektedir.

Eğer sütun alfabetik değerlerden oluşuyorsa sıralama işlemi A’dan Z’ ye doğru yada Z’ den A’ ya doğru yapılabilmektedir.

ORDER BY komutu ile istenilen sıralama biçiminin yapılabilmesi için ardından bir komut almaktadır. Bu komutlar;

ASC: Sütundaki verileri küçükten büyüğe yada A’ dan Z’ ye doğru sıralama işlemini gerçekleştirir.

DESC: Sütundaki verileri büyükten küçüğe yada Z’ den A’ ya doğru sıralama işlemini gerçekleştirmektedir.

Eğer ORDER BY komutundan sonra herhangi bir ifade seçilmez ise, varsayılan ifade olarak küçükten büyüğe doğru sıralama işlemi yapılmaktadır. Yani varsayılan arama tipi ASC’ dir.


Örnek: Bahçe İşleri veritabanında siparişler tablosunda, nakliye ücreti 10 TL ile 25 TL arasında olan siparişlerin siparişno, nakliyeci ve gönderilen kişi bilgilerini büyükten küçüğe doğru sıralayan SQL sorgusu şöyle olacaktır.

SELECT SiparişNo, Nakliyeci, GönderilenAd, NakliyeÜcreti
         FROM Siparişler
                WHERE NakliyeÜcreti BETWEEN 10 AND 25
                        ORDER BY NakliyeÜcreti DESC



Sorgu çalıştırıldıktan sonra yandaki ekran karşınıza çıkacaktır.









Şimdi aynı sorguyu küçükten büyüğe doğru yapalım.
SELECT SiparişNo, Nakliyeci, GönderilenAd, NakliyeÜcreti
         FROM Siparişler
                WHERE NakliyeÜcreti BETWEEN 10 AND 25
                        ORDER BY NakliyeÜcreti

veya

SELECT SiparişNo, Nakliyeci, GönderilenAd, NakliyeÜcreti
         FROM Siparişler
                WHERE NakliyeÜcreti BETWEEN 10 AND 25
                        ORDER BY NakliyeÜcreti ASC




ORDER BY içerisinde birden fazla ifade ile sıralama yaptırmak  mümkündür.
Bahçe İşleri veritabanında siparişler tablosunda, nakliye ücreti 10 TL ile 25 TL arasında olan siparişlerin siparişno, nakliyeci, gönderilen kişi ve sipariş tarihi bilgilerini göstererek, önce nakliye ücretini büyükten küçüğe sonra da sipariş tarihini küçükten büyüğe doğru sıralayan SQL sorgusu şöyle olacaktır.

SELECT SiparişNo, Nakliyeci, GönderilenAd, NakliyeÜcreti, SiparişTarihi
          FROM Siparişler
                WHERE NakliyeÜcreti BETWEEN 10 AND 25
                        ORDER BY NakliyeÜcreti DESC, SiparişTarihi ASC



Sorgu çalıştırıldıktan sonra yandaki ekran karşınıza çıkacaktır.



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);