29 Ocak 2010 Cuma

Visual Studio 2008 Test Edition Web ve Load Test İncelemesi (Bölüm 1)

Yazılım testi, yazılım geliştirme yaşam döngüsündeki en önemli fazlardan biridir. Çıkan ürünün kalitesi; tasarım, kodlama, test ve sonucunda da sistem ihtiyacının karşılanmasına bağlıdır. Yazılım kalitesi, farklı test araçları kullanılarak elde edilen metrikler ile ölçülebilir.
Daha önceki yazılarımızda yazılım sürecinde meydana gelen hatalara  ve bu hataların nasıl yönetildiğine değinmiştik. Build Automation and Continuous Integration başlıklı yazımızda, yazılım geliştirme sürecinde, sürekli tümleştirmenin önemini vurgulayarak, bir test aracı ile test scriptlerinin sürekli çalıştırılacak olmasının, yapılan geliştirmelere bağlı hataların tekrar ortaya çıkmasını önleyeceğini anlattık.
Böylece hem hataların oluşma olasılığı düşecek hem de test ekibinin tekrar tekrar aynı testleri yapması sorunu çözülmüş olacaktı.
Yeni makale dizimizde, ASP.NET ile geliştirilmiş Web uygulamalarının hem fonksiyonel hem de yük testinde önemli kolaylık sağlayan Visual Studio Test Edition ürününü anlatacağız. Microsoft bu ürünü ile sadece kodlama sürecinde bize bir ortam sağlamakla kalmayıp, kodlama sırasında ve sonrasında kullanabileceğimiz test araçları ile ürün kalitesini yükseltmemizi ve korumamızı sağlamaktadır.
Makalelerimizde sırasıyla;
  • Test Edition ile bize sunulan Web ve Load testleri için gerekli olan servislerin kurulumlarını ve testlerin yapılması için gerekli ayarları,
  • Web Test Kullanımını,
  • Load Test Kullanımını
ele alıyor olacağız.
Ali KALFAOĞLU, Deniz KILINÇ

15 Ocak 2010 Cuma

LINQ ile In-Memory Sorguların Çalıştırılması – Bölüm II

İlk makalemizde LINQ’ya genel bir giriş yapmıştık. Bu makalede, memory’de bulunan collectionlarda nasıl sorgulamalar yapılabilir, ne tür fonksiyonlar kullanılabilir gibi konulara değineceğiz. Kodlama geliştirme yaparken kullandığımız IEnumerable interfacelerinden gelen collection yapısında olan tüm nesnelerde Linq kullanarak sorgulamalar yapabiliriz. Hatta collection içerisinden max, min, avarage vs.. gibi çoğu fonksiyonları kullanabiliriz. Linq’dan önce sorgulama işlemlerimizi döngüler yardımı ile yapabiliyorduk, linq ile beraber tek satırda tüm bu sorgulamaları yapma imkanına sahip olduk. Kısa örnekler ile nasıl kullanılabildiklerine bakalım.
  • Average: Sayısal objectler üzerinde ortalama almak için kullanılır. Decimal değer döndürür.
  • All: Collection içerisindekilerin tümü verilen bir kritere uyup uymadığını kontrol eder ve sonuç olarak true yada false döndürür.
  • Any: Collection içerisindekilerin en az birinin verilen bir kritere uyup uymadığını kontrol eder ve sonuç olarak true yada false döndürür.
  • Concat: İki collection’ı birleştirir ve geriye birleşmiş olacn collection döner.
  • Contains: Collection içerisinde belirtilen object içeriyor mu diye arar, eğer içeriyor ise true içermiyor ise false döndürür.
  • Count: Collection içerisinde bulunan object’lerin toplam sayısını döndürür.
  • Distinct: Collection içerisinde objectler eğer tekrar ediyorsa, onları tek olarak döndürür. Dönen collection içerisinde tekrar eden object bulunmaz.
  • ElementAt: Parametre olarak index alır ve verilen index’e karşılık gelen object’i döndürür.
  • ElementAtOrDefault: Parametre olarak index alır ve verilen index’e karşılık gelen object’i döndürür. Eğer verilen index’te bir object yok ise onun default değerini döndürür. Örneğin sayılardan oluşan collection içerisinde default 0 döner, objectlerde ise nothing döndürür.
  • Except: Parametre olrak verilen ikinci collection’da bulunan objectlerin dışındaki objectleri döndürür.
  • First: Collection’da bulunan ilk object’ti döndürür.
  • FirstOrDefault: Collection’da bulunan ilk object’ti döndürür. Eğer object yok ise default olarak nothing döndürür yada parametre olarak default döndürülmesi gereken değer verilebilir.
  • GroupBy: Collection içerisinde verilen bir değere göre grouplar.
  • Intersect: iki collection içerisinde de bulunan değerleri yani kesişimini döndürür.
  • Join: İki collection’ı bir eşitlik değeri ile aralarında bağlantı kurar.
  • Last: Collection’da bulunan en sonki object’ti döndürür.
  • LastOrDefault: Collection’da bulunan en sonki object’ti döndürür. Eğer object yok ise default olarak nothing döndürür yada parametre olarak default döndürülmesi gereken değer verilebilir.
  • Max: Sayısal collection içerisinde en büyük değere ship olanı döndürür.
  • Min: Sayısal collection içerisinde en küçük değere ship olanı döndürür.
  • OrderByDescending: Verilen kritere göre colelction’ı büyükten küçüğe doğru sıralar
  • OrderBy: Verilen kritere göre colelction’ı küçükten büyüğe doğru sıralar
  • Reverse: Verilen kritere göre colelction’ı tersine döndürür.
  • Skip: Collection içerisinden parametre olarak verilen indexten sonrasını döndürür.
  • Sum: Sayısal collection’ın toplam değerini döndürür.
  • Take: Collection içerisinden parametre olarak verilen indexe kadar olanı döndürür.
  • TakeWhile: Collection içerisinden verilen kritere uyan olan değerleri döndürür. Kritere uymayan il değerde işlem durdurulur.
  • Union: İki collectionı birleştirir.
  • Where: Verilen kritere uygun olan değerleri döndürür.
Örnek uygulama aşağıdaki gibidir;
Public Class frmLINQ2
   Dim objMemoryObject As Decimal() = New Decimal() 
             {1.34, 3.98, 2.98, 3.78
  
Dim objObjComp As clsComputer() = New clsComputer() 
             {New clsComputer("Toshiba", 23, 3), New clsComputer("HP", 23, 1)}
    Private Sub Islem_Click
      (ByVal sender As System.Object, ByVal e As System.EventArgs)
                                               Handles Islem.Click
        Try
            Dim objAvarage = objMemoryObject.Average()
            Dim objAll = objMemoryObject.All(Function(sayi) sayi > 2)
            Dim objAny = objMemoryObject.Any(Function(sayi) sayi > 2)
            Dim objConcat = objMemoryObject.Concat(New Decimal() {4.0, 5.67})
            Dim objContains = objMemoryObject.Contains(3.98)
            Dim objCount = objMemoryObject.Count()
            Dim objDistinct = objMemoryObject.Distinct()
            Dim objElementAt = objMemoryObject.ElementAt(2)
            Dim objElementAtOrDefault = objMemoryObject.ElementAtOrDefault(5)
            Dim objObjectElementAtOrDefault = objObjComp.ElementAtOrDefault(1)
            objObjectElementAtOrDefault = objObjComp.ElementAtOrDefault(4)
            Dim objExcept = objMemoryObject.Except(New Decimal() {3.98})
            Dim objFirst = objMemoryObject.First()
            Dim objGroupBy = objObjComp.GroupBy
                                         (Function(c) c.CPUSpeed)

            Dim objLast = objMemoryObject.Last()
            Dim objMax = objMemoryObject.Max()
            Dim objMin = objMemoryObject.Min()
            Dim objOrederByDescending = objMemoryObject.OrderByDescending
                                        
(Function(v) v).ToList() 

            Dim objOrederBy = objMemoryObject.OrderBy(Function(v) v).ToList()
            Dim objReverse = objMemoryObject.Reverse().ToList()
            Dim objSkip = objMemoryObject.Skip(2).ToList()
            Dim objSkipWhile = objMemoryObject.SkipWhile
                                         (Function(d) d < 2).ToList()
            Dim objSum = objMemoryObject.Sum()
            Dim objTake = objMemoryObject.Take(3).ToList()
            Dim objTakeWhile = objMemoryObject.TakeWhile
                                         (Function(d) d < 2).ToList()
            Dim objUnion = objMemoryObject.Union
                                         (New Decimal() {5.66, 3.77}).ToList()
            Dim objWhere = objMemoryObject.Where(Function(d) d > 2).ToList()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub 
 
End Class
Örnek 1. LINQ fonksiyon örnekleri
Kaynak kod indir
Armağan DÖKER

11 Ocak 2010 Pazartesi

SOAP UI ile Web Servisi Testi

SOAP UI, genelde web servislerini kontrol etmek, herhangi bir web servisini çağırmak, web servisi simule etmek veya fonksiyonel test yapmak için kullanılır. Özellikle web servis entegrasyonlarında fazlasıyla iş görmektedir. SOAP UI programının işlevini anlamak için aşağıda belirtilen olan teknolojileri bilmekte fayda vardır:
  • WSDL – temel kavramlar (services, ports, bindings, port types), xml yapı ile ilişkisi
  • SOAP –temel kavramlar, WSDL ile ilişkisi (bindings, etc), farklı encoding tipleri (soap-encoded/literal) ve doküman stili (document/rpc)
  • XML ve bağlı teknolojiler - XPath, XML Schema, namespaces, etc
WSDL İçerik Görüntüleme
Arayüz görüntüleme ile çağrılan WSDL’ in iç yapısının (WSDL ve XSD dosyalar, bu dosyaların tipleri ve yapıları) görüntülenmesi mümkün olacaktır. SOAP UI programının çalışma alanı, iki bölümden oluşur. Bir bölüm, sol tarafta yer alıp, çağrılan web servis yapısını bir bütün halinde ağaç yapısında gezgin olarak gösterir. Diğer bölüm gezgin ağacında seçilen elemanın içeriğini, yapısını gösterir, bu da sağ tarafta yer alır.
image
Şekil 1. SOAP UI arayüzü
SOAP UI’ de Yeni Proje (Web Servis Fonksiyonel Testi)
Çalışma alanındaki gezgin (navigation) bölümünde, projeler(projects) üzerinde sağ tıklanarak, menuden “New soapUI Project” seçilir. Proje ismi verilir. Inital WSDL / WADL bölümünde ya bilgisayarımıza kayıtlı ilgili web servisin WSDL dosyasının yeri ya da url de bulunan WSDL in adresi girilir ve gezgin(navigasyon) bölümünde Web Servisimizin SOAP yapısındaki ara yüzler görüntülenir. İlgili ara yüzün üzerine tıklanarak açılır. Bir request yaratılır. Her bir ara yüzde birden fazla request yaratılabilir. Bunlar da otomatik olarak indeks oluşur (Request1 , Request2 …).
image
Şekil 2. Yeni soapUI Projesi Açılması
Request açıldığı zaman editör karşımıza çıkar. Bu editör üç parçaya ayrılır.
  1. Üst tarafta Araç çubuğu (toolbar)
  2. Sol tarafta istek(Request) alanı
  3. Sağ tarafta cevap(Response) alanı
Request alanından ara yüzümüzün yapısı (input parametreleri) XML yapısında görüntülenir. Request göndereceğimiz web servisinin adresi araç çubuğundaki adres barında yer almaktadır. Buraya request gönderilir. SOAP UI tarafından üretilen request’in değer nodlarında varsayılan olarak ilk “?” karakteri gelir. İhtiyaç dahilinde yerine bu node lara “?” karakteri yerine değer yazılır veya ilgili node requestden çıkarılır. Bu request araç çubuğunda yer alan yeşil ok’a tıklanarak araç çubuğundaki adrese gönderilir. Bu adresten dönen cevap SOAP yapısında response olarak döner ve editörde sağ tarafta yer alır. Böylece web servisi simule edilmiş olur.
image
Şekil 3. Soap Requets ve Response
Toolbarda dahil ettiğimiz WSDL yapısıyla aynı yapıya sahip başka web servis adresini, web servisimizin kopyasının olduğu adresi adres barda yer alan add new pointe tıklayarak yazabilir, ayrıca buraya requestimizi gönderebiliriz.
Programı http://sourceforge.net/projects/soapui/files/soapui/3.0.1 adresinden temin ederek, SAOP UI hakkında ayrıntılı bilgiyi http://www.soapui.org/ adresinen bulabilirsiniz.
Emin Serkan BAYDAR

5 Ocak 2010 Salı

ASP.NET Web Ortamında Active Directory İşlemleri

Bu makalemizde ASP.NET projelerinde, active directory’ye ulaşılırak yapılan bazı işlemler üzerinde duracağız;
  • Web projesinin client’ının açıldığı bilgisayarda açık olan account sahibinin kullanıcı adı ve bağlı olduğu domain alınabilir.
  • Bir active directory’den kullanıcı adı ile kullanıcının grupları ve bazı bilgileri alınabilir.
  • Kullanıcı adı, şifresi ve domain biliniyorsa bu bilgilerin doğruluğu active directory’ye login olmaya çalışılarak kontrol edilebilir.
Bu işlemler için bazı referansları projeye eklememiz ve dll’leri kullanmamız gerekmektedir. İlk olarak account’tan kullanıcı ismi ve domain adı alma ve sonrasında bu kullanıcının active directory gruplarını alma işlemine göz atacağız:
İlk olarak proje referanslarına System.DirectoryServices eklenir:

image
Şekil 1. Referans eklenmesi
Daha sonra “System.DirectoryServices” active directory’ye erişilecek sınıf içerisinden import edilir:
Imports System.Security.Principal
Imports System.Security.Permissions
Imports System.Runtime.InteropServices
Imports System.DirectoryServices
Domain’e bağlı olan kullanıcı ismi ve domain adı aşağıdaki şekilde alınabilir:

strDomainAndUser = My.User.CurrentPrincipal.Identity.Name.ToString
My.User.CurrentPrincipal.Identity.Name


içerisinden dönen string “domain/username” şeklinde olur, mesela; “univera/nimet.sozeri”.

Web projemizin virtual directory özellikleri ve Web.Config içeriği kullanıcı ismini alabilmek için ayarlanmalıdır; Virtual directory özelliklerinden “Directory Security” tabı altındaki “Anonymous access and authentication control” kısmındaki “Edit” butonu ile açılan “Authentication Methods” penceresinde anonymous access seçeneği işaretlenmemiş olmalıdır. Bu şekilde domain’e bağlanmış olan kullanıcı adı ve bağlı olduğu domain adı alınabilir.
image
Şekil 2. Authentication mode ayarlanması
Ayrıca Web.Config içerisinde “authentication” elemanının mode özelliği “Forms” olmamalıdır. Bu özellik de “Windows” olarak değiştirilmelidir.
<authentication mode="Windows"/>      
Kullanıcı adı alındıktan sonra da active directory’de kullanıcının dahil olduğu gruplar “DirectoryServices”a ait olan “DirectoryEntry”, “DirectroySearcher” sınıfları kullanılarak alınabilir:
Dim objRsl As SearchResult
Dim objDE As New DirectoryEntry(LDAP://DC=Univera,DC=NET)
Dim objSrc As New DirectorySearcher(objDE)
objSrc.Filter = String.Format("(SAMAccountName={0})", userName)objSrc.PropertiesToLoad.Add("memberOf")
objRsl = objSrc.FindOne()
If Not objRsl Is Nothing Then
      For i = 0 To objRsl.Properties("memberOf").Count – 1
                   ‘memberOf özelliğinden gruplar alınıp amaca uygun işleme katılır
      Next
End If
SearchResult nesnesinin içerisinden memberOf değerleri alınabilir ve kullanıcının grupları bu şekilde belirlenebilir. Kullanıcının active directory gruplarını alabilmek için de Web.Config’te bir özellik uyarlanmalıdır; identity elemanının impersonate özelliği “True” olarak belirlenmelidir:
<identity impersonate="true"  />

Son olarak kullanıcı adı, domain adı ve şifre elimizde varsa bu değerlerin active directory’den kontrol edilmesi işlemini inceleyelim. Bu işlem için de “C:\WINDOWS\system32” altından “advapi32.dll” alınıp projeye eklenir.
image
Şekil 3. Advapi32.dll’in projeye eklenmesi
Kod içerisinden bu dll daha sonra import edilerek kullanılacak fonksiyonlar belirtilir.
<DllImport("advapi32.dll")> _
         Private Shared Function LogonUser(ByVal _
         lpszUsername As String, ByVal lpszDomain _
            As String, ByVal lpszPassword As String, _
            ByVal dwLogonType As Integer, _
            ByVal dwLogonProvider As Integer, _
            ByRef phToken As Integer) As Boolean
End Function
Biz burada “LogonUser” fonksiyonunu kullanacağız. Bu fonksiyon ile bir kullanıcı adı, domain adı ve şifrenin active directory’ye login olup olmadığı kontrol edilir, sonuçta login işlemi başarılı ise “True” olarak boolean değer döner.
Dim objAd As New AD
If objAd.LogOnToActiveDirectory("nimet.sozeri", "Univera", "Sifre") Then
         Label1.Text = "Kullanıcı 'nimet.sozeri' ile 'Univera' domain'ine log in olunabildi!"
End If
Nimet SÖZERİ

3 Ocak 2010 Pazar

UML ve Modelleme – Bölüm 6 (State Diyagramları)

Önceki makalemizde Object diyagramlarını incelemiştik. Bu makalemizde sistem davranışlarını modellemede kullanılan State (Durum) diyagramını inceleyeceğiz. State diyagramları genel olarak sistemlerin davranışlarını gösterir. Her diyagram tek bir sınıfın nesnelerini ve sistem içerisinde nesnelerin durumlarını (state), geçişlerini (transition), olaylarını (Events) içermektedir.
Sistemdeki nesnenin davranışı, kendisine gönderilen iletilerin yanı sıra x anı içerisinde değişiklik gösteriyor ise state diyagram kullanılır. Durum değiştirmeyen nesneler için state diyagram modellemesinin kullanılması uygun değildir.
State Diyagramlarda kullanılan temel kavramlar:
Initial State (İlk Durum): Yaşam döngüsünün ilk eylemi ya da başlama noktasını ifade eden elemandır. İçi dolu yuvarlak ile gösterilir. Sözde durum (pseudo state) olarak da adlandırılır. Sözde durum denilmesinin sebebi değişkeni veya herhangi bir eyleminin olmayışıdır.
image
Şekil 1. Initial State (İlk Durum)
State (Durum): Nesnenin ya da sistemin x anındaki durumunu ifade etmek için kullanılır. Köşeleri yuvarlatılmış dikdörtgenler ile gösterilir.
image image
Şekil 2. State gösterimi
Şekil 3. State elemanının yapısal gösterimi
Transition (Geçiş): Nesnenin bir durumdan diğer bir duruma geçişini ifade eder. Ok sembolu ile gösterilir.
Bir transiton(geçiş)'da 4 yapı vardır. Bu yapılardan ikisi doğal olarak "hedef(target)" ve "kaynak(source)" durumudur. Geçişler kaynak durumdan hedef duruma doğru yapılır. Üçüncü yapı Kaynak durumdan hedef duruma geçişi sağlayan "event trigger(olay tetikleyicisi)" dır. Son yapı ise nesnenin durum geçişi sonrasında ne şekilde davranacağını belirleyen "action" dır.
Bir eylemin (Action) bitimiyle beraber o transition a "triggerless" transition denir. Eğer bir olay, bazı olay veya eylem tamamlanmasından sonra meydana gelirse, eylem veya olay “guard condition (Nöbet Durumu)” olarak adlandırılır. Çoğu zaman iki durum arasında geçiş sağlayabilmek için, bir event (olay) gerçekleştirilmiş olmasının ötesinde, tanımlı bir koşulun sağlanmış olması da gerekir. Guard condition (Nöbet Durumu) tamamlandıktan sonra geçiş(Transition) oluşur. Bu nöbet durum (Guard Condition) / olay(Event) / eylem (Action) köşeli parantez ile gösterilir. Diyagramlarda koşullar baklava sembolü ile gösterilirler.
History States (Geçmiş Durumlar): Bir akışta, bir nesne, transa ya da bekleme durumuna geçebilir. Belirli bir olayın gerçekleşme süresinde bekleme durumuna girdiği zaman son aktif durumuna geri dönmek istenebilir. Daire içerisinde H harfiyle gösterilir.
Event and Action (Olay ve Eylem): Durumlar arası geçişi tetikleyiciler olay (event) olarak adlandırılır. Eylem (action) ise yaşanan durum değişimi sonrasında yaptığı işlerdir.
Signal (Sinyal): Duruma bir mesaj yada tetikleyici gönderimi olduğunda geçiş oluşur ve mesaj event (olay) ile gönderildiğinde sinyal olarak adlandırılır. << Sinyal>> şeklinde gösterilir.
image
Şekil 4. Sinyal Gösterimi
Final State (Son Durum): Sistemin yaşam döngüsü içerisindeki son durumunu ifade eder.
image
Şekil 5. Final State (Final State)
State Machine (Durum Makinesi): Bir nesne yada sisteme ait bütün durumları şema halinde gösteren yapıdır.
image
Şekil 6. Basit bir state machine modeli
Bir sonraki makalemizde UML diyagramlarından Sequence Diyagramlarını ayrıntılı inceleyeceğiz.
Neslihan ÇALIŞKANEL

UML ve Modelleme – Bölüm 5 (Object Diyagramları)

Önceki makalelerimizde, Use case ve Class diyagramlarını detaylı incelemiştik. Bu makalemizde UML modellemede kullanılan class diyagramlarına benzer bir diyagram türü olan object (nesne) diyagramlarına göz atacağız.
Her nekadar tasarım ve sınıflar tanımlansa da canlı uygulamalarda sınıflar doğrudan kullanılmaz, bu sınıfların örnek veya nesnelerini çalıştırmak için kullanılır. Örnek sınıflar arasındaki ilişkilerin modellenmesinde bu diyagramlar “Object(nesne) diyagramları” olarak adlandırılır. Class diyagramlarına benzerler ve ilişkilerini gösterirken benzer notasyonlar kullanılır. Farkları aşağıdaki tabloda belirtilmiştir;
Class diyagram
Object Diyagram
1. Sınıf kullanılır.
2. Sistem yapısını anlatırken sınıf özellikleri ve birbirleriyle ilişkilerini modellemede kullanılır(Design time).
3. Sınıf adı, öznitelik ve methodları gösterir.
1. Sınıfın örneği nesne kullanılır (Instance Class)
2. Modellenen sistem yapısının belirli bir andaki bütün yada kısmi görünüşünü anlatır(Run time).
3. Nesne adı, sınıf adı, öznitelik ve sınıfın method parametrelerinin alacağı değerleri gösterir.
Object Diyagram Elemanları
Sınıf diyagramlarını incelediğimiz makalenin son bölümünde verdiğimiz öğrenci-okul çokluk ilişkisi örneğini hatırlayalım.

image
Şekil 1. Okul-öğrenci sınıf diyagramı
Şekil 1’deki class diyagramında birden fazla öğrencinin okul ile olan ilişkisi olarak açıklayabiliriz. Okul(College) ve Öğrenci(Student) sınıflarına öznitelik eklenmiş hali şekil 2’deki gibidir.
image
Şekil 2. Öznitelikleri belirtilen class diyagram örneği
Class diyagramı uygulamada şekil2de gösterildiği gibi çalışır. Object diyagramında okul(College) ve öğrenci(student) sınıflarının örnekleri özniteliklere başlangıç değeri atanarak yaratılır. Şekil 3’te object diyagram senaryosu gösterilmiştir.
image
Şekil 3. Okul-öğrenci class diyaramının object diyagramı olarak gösterimi
Şekil 3’de görüldüğü gibi, object diyagramı okul-öğrenci class diyagramının sistem çalışırken örneklerinin nasıl oluşturulduğunu göstermektedir. Object diyagram örnek sınıfın ismini gösterir.Gösterimde sınıf adı “:” ile ayrılır ve altı çizilir.
Örn : Graduate School of Business: College
Diyagramda değişkenlere değer atanır ve “değişken adı = değişken değeri” ile gösterilir. Bir sonraki makalemizde UML diyagramlarından State (Durum) Diyagramlarını ayrıntılı inceleyeceğiz.
Referanslar
Neslihan ÇALIŞKANEL