12 Ocak 2017 Perşembe

STDDEV ( ) Fonksiyonu


Standart sapma, sayısal verilerin aritmetik ortalamalardan farklarının kareli ortalaması olarak bilinir. Bu kavram istatistiksel veri analizlerinde sıkça kullanılır. Söz konusu hesaplamayı yapan SQL fonksiyonu ise; STDDEV ( ) 'dir.

Örnek-1: Personel maaşlarının standart sapmasını bulmak istiyoruz. Bunun için SELECT deyimi aşağıda gösterildiği biçimde kullanılır;

SELECT STDDEV (maasi) AS "Standart_Sapma"
    FROM personel

SUM ( ) Fonksiyonu



Sütunların içerdiği sayısal değerleri toplamak amacıyla SUM ( ) fonksiyonundan yararlanılır.

Örnek-1: Tüm personel maaşlarının toplamını hesaplayan SELECT deyimi aşağıda gösterildiği biçimde oluşturulabilir;

SELECT SUM (maasi) AS "Toplam"
    FROM personel

Örnek-2: Sadece erkek personele ödenen aylık toplam maaş ne kadardır?

SELECT SUM (maasi) AS "Toplam Ödenen"      FROM personel            WHERE cinsiyet = 1

AVG ( ) Fonksiyonu




Herhangi bir sütunun içerdiği sayısal değerlerin aritmetik ortalamasını hesaplamak amacıyla; AVG ( ) fonksiyonu kullanılır. Bu fonksiyonun uygulandığı sütunun veri türü sayısal olmalıdır.

Örnek-1: Personel maaşlarını göz önüne alalım. Maaşların ortalamasını bulmak için şöyle bir yol izlenir;

SELECT AVG (maasi) AS "Ortalama"
    FROM personel

Örnek-2: Personel arasında, bolumID’si 5 olanların ortalama maaşı aşağıda gösterildiği biçimde hesaplanabilir;

SELECT AVG (maasi) AS "Ortalama"      FROM personel            WHERE bolumID = 5

Sayısal Fonksiyonlar


Sayısal fonksiyonlar dört işlemin yanı sıra AVG, SUM, STDDEV, VARIANCE, MAX, MIN, COUNT, ABS, SQR, RAND, POWER, CEILING, FLOOR, ROUND, EXP, LOG ve trigonometrik fonksiyonlar olan SIN, COS, TAN ve COT fonksiyonlarını kapsamaktadır.

Bu fonksiyonları örnekler üzerinde anlatarak devam edeceğiz. Bunun için bir personel tablosu oluşturup ve içerisine yeterli miktarda kayıt girelim.

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: