23 Kasım 2009 Pazartesi

Exchange Server 2010 ve Genel Avantajları Üzerine

Microsoft Exchange Server 2010 kurularak; izleme, filtreleme, kota koyma vs. gibi bir çok yönetimsel özellik sayesinde, gerek Bilgi Teknolojileri departmanı için gerekse şirket çalışanlarına, daha üretken, etkili, verimli ve güvenli bir iş ortamının sağlanmasını hedeflenir. Genel avantajları aşağıdaki gibidir;
Gelişmiş spam mail koruması
  • Intelligent-Defense  özelliği ile spam e-postaların toplam hacmini azaltılması.  Bu yol ile mail sunucu spam epostaları toplu olarak ortadan kaldırır, eposta için kullanılan kaynağı düşürür, harcanan band genişliğini azaltır ve gereksiz depolanmanın önüne geçer.
Exchange sunucu ile birlikte Outlook üzerinde Sharepoint ile entegrasyon
  • Gelen kutusu, takvim, görev listesi gibi kullanıcı alanlarının istenilen kişilerle paylaşılarak ortak ve etkin bir çalışma alanı yaratılabilmesi
  • Sharepoint üzerinde depolanan bilgilere herhangi bir zamanda her hangi bir yerden ulaşabilme imkânın olması
Uzak kullanıcılar için daha etkin Outlook kullanımı
  • Outlook Anywhere ile VPN’e alternatif olarak RPC over http yöntemi ile şirket dışında bulunan çalışanların mail sunucusuna Outlook ile kolay ve hızlı bağlantı sağlayabilmesi.
  • Outlook Web Application ile Outlook yazılımına ihtiyaç duymadan herhangi bir internet bağlantısına sahip bilgisayardan outlooktaki bir çok fonksiyondan feragat etmeden kullanıcıların mailine erişim ve çalışma ortamına katılma şansı.
  • Active sync desteği ile cep telefonu, PDA gibi mobil cihazlara https sertifikası ile güvenli push mail imkânı. Böylelikle uyumlu mobil cihazlardan şirket mail hesabını kullanabilme imkânı.

Yönetimsel seçenekler ve kolaylıklar
  • Yöneticilerin kullanıcı maillerini üzerinde çeşitli rule tanımlamaları vasıtasıyla maillerin iletilmesini onaylayabilmesi ya da engelleyebilmesi.
  • Sesli mail gönderme/alma ve bunların yazıya çevrilebilmesi.
Güvenlik ve Performans
  • Exchange 2010 ile eski sürümlere nazaran I/O işlemlerinde %30 performans artışı.
  • Exchange sunucusunun daha düşük maliyetli ve etkin biçimde yedeklenebilmesi.
  • Temel sorunları çözmek için kullanıcılara belirli haklar devredebilme.
  • Varolan hosting sistemine kıyasla birçok yeni hizmet, filtreleme ve güvenlik seçenekleri.
Virüs Koruması
  • Exchange sunucu işletim sistemi için Microsoft forefront client security, Exchange yazılımı için Microsoft forefront for Exchange kurulumu gerçekleştirilecektir. Microsoft partnerlik kapsamında elimizde olan ilgili yazılımın lisansları ücretsiz olarak kullanılabilecektir.
Bora ENGİN, Necmettin TÜRER, Deniz KILINÇ

22 Kasım 2009 Pazar

“Response.Redirect”, “Server.Transfer”, “Response.RedirectParmanent” Karşılaştırma

ASP.NET uygulamalarında bir sayfadan diğer sayfaya geçişte kullanılan bu methodların çalışma mantıkları oldukça farklıdır. Detayları bilinmediği zaman birbirleri yerine kullanılabilirler ve beklenmedik/istenmeyen maliyetlere neden olurlar. Dolayısı ile ihtiyaca göre doğru yerde kullanılmaları önemlidir.
1. Response.Redirect(“New.aspx”)
Bir sonraki sayfaya geçiş için sunucu-tarayıcı arasında fazladan bir tur atılır. Toplam tarayıcı-sunucu arasındaki tur sayısı (roundtrip) 2’dir. İlk sayfa tarayıcıdan tamamen kaybolur. Eğer session, cache, querystring veya serialization benzeri yöntemlerle bilgileri taşımadıysanız, ilk sayfadaki hiç bir bilgiye ulaşamazsınız. Tarayıcınızda yeni sayfanın URL bilgisi yazar. Roundtrip artsa da daha “temiz” bir yöntemdir. Response status olarak 302 (Found- “Asked resource is temporarily moved to other location”) bilgisi döner (tarayıcı eski URL’den yeni resource’u sormaya devam eder). Yeni sayfada oluşabilecek F5/page refresh problemlerini önlenir ve daha karmaşık uygulamalardaki AJAX requestlerinde problem yaşanmaz. Bu komut ile web sitenizin dışındaki harici bir URL adresine de yönlendirme yapabilirsiniz. HttpWatch ile izlenen sonuçlar aşağıdaki gibidir;
image

2. Server.Transfer(“New.aspx”)
Sunucu tarayıcı arasında tek request ile akış tamamlanır. Performans daha iyidir. Bu komutta yönlendirme yapılmaz. Talep edilen ikinci sayfa, ilk sayfanın sonuna eklenerek render edilir (birinci sayfa ikinci sayfayı üretir), yani aşağıdaki gibi bir durum söz konusudur;
Server.Execute("New.aspx", Response.Output);
Response status olarak 200 bilgisi döner. Birinci sayfa, tarayıcıda korunduğu için sayfa üzerindeki bilgilere ulaşmak mümkündür. AJAX requestlerinde problem yaşar ve büyük ihtimalle javascript hatası alırsınız. Yalnızca web siteniz içindeki sayfalar arasında yönlendirme yapmak için kullanılır. HttpWatch ile izlenen sonuçlar aşağıdaki gibidir;
image
3. Response. RedirectParmanent (“New.aspx”)
ASP.NET 4.0 ile birlikte gelen yeni methodlardan biridir. Response.Redirect ile aynı mantıkta çalışır. Yine bir sonraki sayfaya geçiş için sunucu-tarayıcı arasında fazladan bir tur atılır. Farklı olarak response.status 301 (Moved Parmanently-Asked resource is temporarily moved to other location”) bilgisi döner (tarayıcı eski URL’den yeni resource’u sormaya bırakır). Response.redirect’e göre daha efektif olduğu söylenebilir. Kod bloğu aşağıdaki gibi simule edilebilir;
Private Sub RedirectParmanent(ByVal response As HttpResponse, ByVal absoulteURI As String)
        response.Clear()
        response.Status = "301 Moved Permanently"
        response.RedirectLocation = "new.aspx"
        response.End()
    End Sub
HttpWatch ile izlenen sonuçlar aşağıdaki gibidir;
image
Özetle; “Hangi komutu kullanmalıyım?” sorusunun cevabını direk vermek mümkün değildir. Klasik “It depends” (ne yaptığınız ve ne yapmak istediğinize bağlı olarak tüm koşullarınızı düşünmelisiniz) ile cevaplamak en doğrusudur.
Referanslar
Kaynak kod indir
Deniz KILINÇ

21 Kasım 2009 Cumartesi

Applocker İle Daha Güvenli Bir Ağ

Bu makalemizde Windows 7 ile birlikte gelen yeniliklerden biri olan applocker uygulamasından bahsedeceğiz. Applocker ağ yöneticilerine kullanıcılarının istemli ya da istemsiz bir şekilde bilgisayara herhangi bir sebepten ötürü kurabileceği yazılımlara kısıt getirilebilmesini sağlar. Bu kısıtlamada amaç sistem bütünlüğüne zarar verebilecek her türlü programın bilgisayara yüklenmesinin önüne geçerek ileride ağ yöneticileri için oluşabilecek sorunları meydana gelmeden ortadan kaldırmaktır. Ek olarak paylaşım programlarıyla şirket internet bant genişliğinin azalmasının yada bilgisayardaki gereksiz yazılımda oluşabilecek performans düşüşünün önüne geçilmiş ve BT masasına gelecek yardım telefonlarının oranında azalma ve daha verimli çalışma ortamı sağlanmış olmaktadır. Bu da demektir ki zararlı diye tabir edebileceğimiz yazılımın kurulması engellenerek hem ağ yöneticisinin sorunu gidermesi esnasında hem de kullanıcının bu sırada bilgisayarını kullanamamasından ötürü oluşan zaman ve iş gücü kaybının önüne geçilmiş olur.



Applocker’da ayrıca kullanıcının, sadece bir programın bütünü değil sadece belirli bileşenlerini yahut sürümlerini kullanabilmesi ya da kullanmasının engellenmesi de sağlanabilir. Örneğin Bora kullanıcısına Microsoft Office paketi içerisinde Access ve Visio programını kullanamamasını sağlayabilirken aynı zamanda adobe readerın yalnızca 9 ile başlayan sürümlerini yükleyebilmesini sağlamakta mümkündür. Yine applocker ile kurulabilecek programları belirli bir klasöre yapılacak path tanımlamasıyla belirtmek de olasıdır. Yazılımcılar için ek bilgi vermek gerekirse applocker sadece executables yani programın uygulama kısmına müdahale edebilir. DLL kısmı bunun dışında kalacaktır. Bu duruma engel olmak için DLL tanımlamaları da desteklenmektedir. Tüm bunlar göz önüne alındığında şirket ağı içerisindeki her kullanıcı bilgisayarı belirlenmiş bir şirket politikası ve standartları üzerinde yazılım çalıştırmış olacaktır.




Applocker Konfigürasyonu



Applocker konfigürasyonunda kural yani “rule” mantığı geçerlidir. Sistem yöneticileri şirket ihtiyaçları doğrultusunda çeşitli kurallar oluşturarak hangi kullanıcı grubunun hangi yazılımları kullanabileceğini belirler. Kuralları oluştururken 4 farklı kombinasyondan yararlanabiliriz. Bunlar birlikte kullanılarak istenilen tüm senaryolar gerçekleştirilebilir. İlk olarak İzin ver “Allow” kuralına bakalım. Allow kuralında bir kullanıcı ya da kullanıcı grubuna bir yazılımı kullanma hakkı vermek istediğimizde seçmemiz gereken seçenektir. Örneğin Muhasebe departmanına muhasebe yazılımları için allow kuralı yazıldığında bu departmanda tanımlı kişiler ilgili programları kullanabilme hakkına sahip olacaktır.



 Bunun tam tersi ise Reddet (Deny) olarak geçer. Bu kuralı da adından anlaşılacağı üzere herhangi bir kullanıcı ya da kullanıcı grubuna bir programı kullanmaktan men etmek için rule tanımlaması yapmakta kullanacağız. Örnek vermek gerekirse bir departmanının müzik dinlemesini engel olmak, winamp ve windows media player programları üzerine deny kuralı tanımlayarak gerçekleştirmek mümkündür.



Şimdi burada dikkatimizi vermemiz gereken asıl nokta, etkili rulelar yazmak için bir özelliğe daha ihtiyacımız olduğudur. Çünkü bir önceki örnekte olduğu gibi müzik dinlenmesine engel olmak için en bilinen iki yazılımı yasaklamak başlı başına bir çözüm içeremez bunun nedeni ise birçok alternatif programın piyasada bulunması bunların tek tek deny ya da allow edilerek listeye eklenmesinin ise büyük zaman ve çaba gerektirdiği gerçeğidir. İşte burada devreye istisnalar yani “exceptions” girmektedir. Bu özellik kullanılarak belirli bir yazılımın bütünü ya da bir parçası kullanımı için bir allow rule yazılabilir ve exceptions kısmında da kalan tümünün yasaklanması sağlanabilir. Aynı durum tersi bir senaryo için de geçerlidir. Örneğin bir kullanıcı ya da kullanıcı grubuna sadece Office içindeki Excel uygulamasına izin vermek isteniyor ise Excel uygulaması için allow rule yazılarak exceptionda kalan tüm uygulamalar deny olarak gösterildiğinde ağ yöneticisi word, access, Project, power point şeklinde tek tek tanımlama yapmayarak olası zaman kaybından kurtulmuş olacaktır.



Konfigürasyon için başlat çalıştıra mmc yazarak mmc konsolu açıyoruz. Burada yukarıda dosya menüsünden Ek bileşen ekle/kaldır menüsünü seçiyoruz. Buradaki listeden grup ilke nesne düzenleyicisini seçerek ekle butonuna basıyoruz. Daha sonra tamam diyerek yeni açılan pencereden de son ve tekrar tamam dedikten sonra karşımıza bilgisayarımızın Yerel bilgisayar ilkesi konsol eklentisi gelmekte. Bu seçenek ağacını resimdeki gibi genişleterek yukarıda bahsettiğim ayarların tümüne ulaşabilirsiniz.
image
Bora ENGİN

20 Kasım 2009 Cuma

Teknoloji ve Yazılımla İlgili Özlü Sözler

İnternette dolaşırken bulduğum bir takım güzel sözleri biraraya getirip sizlerle paylaşmak istedim. Benim çok hoşuma gitti, hepsi farklı şekilde yorumlanabilir, tartışılabilir :)
No code is faster than no code.
Merb Core Tenent
Software: do you write it like a book, grow it like a plant, accrete it like a pearl, or construct it like a building?
Jeff Atwood
I will not break my back or my sanity on Windows troubleshooting any more.
Jamis Buck
Premature parameterization is the square root of all evil.
Sean McGrath
I do believe I have post-traumatic Java syndrome.
Renae Blair
Deleted code is debugged code.
Jeff Sickel
Good software architects are like condoms… bad software architects are like Viagra.
Sidan
Nobody hates software more than software developers.
Jeff Atwood
Longevity is a big part of credibility.

Jason Calacanis

If you can’t sell your product, it’s not a product–it’s a hobby.
Jason Calacanis
Agile is not just about speed.
Jack Milunsky
I can’t choose whether someone is offended by my actions. I can choose whether I care.
Martin Fowler
So, what does it mean for teaching and learning programming when the solution to every beginner problem is available on the Internet?
Cay Horstmann
One of my most productive days was throwing away 1000 lines of code.
Ken Thompson
Not all code needs to be a factory, some of it can just be origami.
_why
If you program and want any longevity to your work, make a game. All else recycles, but people rewrite architectures to keep games alive.
_why
The best way to market yourself is to be remarkable.
Chad Fowler
Chase the vision, not the money.
Tony Hsieh
If you are single and you want to do startups, stay single. Stay single for a while, startups can be all consuming 24/7 suck you dry.
Steve Blank
You can’t build everything and there is no more a killer feature. Everyone has a different killer feature.
Matt Mullenweg
The biggest motivation is not the money but the impact.
Matt Mullenweg
"Doesn't matter how well your software is designed and written, if it runs slow and doesn't get the job done then it is trash."



A Good Developer is;
A) Gets along with the rest of the team and B) Does efficient and effective work
It's not about what methodology they follow or technology they use, it's about whether they "gel" with the environment, being the other people in the team, and are effectively keeping the client happy. (accurate, robust [non-fragile] code.) Anything else is gravy provided it doesn't negatively affect point A or B.
Deniz KILINÇ

19 Kasım 2009 Perşembe

HttpWatch ile Sniffing

Tüm web uygulamaları, Http veya Https protokolleri üzerinden çalışırlar. En basit uygulamada bile HTML sayfasının üzerindeki grafikler ve scriptler için web sunucusuna birden fazla Http Request gönderilir. Dolayısı ile profesyonel uygulamalarda, tarayıcı ile web sunucusu arasındaki Http paketlerinin incelenebilmesi oldukça önemlidir. En çok kullanım alanları;
  • Arıza arama (Trouble shooting)
  • Performans ayarlama (Perfermance tuning) 
  • Web sitesinden akan bilgilerin güvenliği olup olmadığını inceleme
HttpWatch programı, Internet Explorer ve Firefox gibi tarayıcılarla entegre çalışarak, web sayfalarına her erişimde gelen-giden Http paketlerinin izlenmesini sağlar. Eğer https üzerinden güvenli bir siteye bağlanırsanız, kullanıcıların göreceği şekilde paketleri otomatik olarak decrypt eder. Geleneksel network izleme programları sadece düşük seviye network verilerinin (low-level data) izlenmesini sağlarken, HttpWatch programı optimize edilmiş Http verilerinin hızlı ve anlaşılabilir şekilde görülmesine imkan verir.
Program aracılığı ile basitçe neleri görebiliriz;
  • Bir web sitesi yüklenirken oluşnan tüm istekleri
  • isteklerin adreslerini (URL)
  • isteklerin zamanlarını (Time)
  • isteklerin sonuçlarını (404, 304, ...) (Result)
  • isteklerin ne kadar dosya boyutuna sahip olduklarını (Sent/Received)
  • isteklerin türlerini (type)
  • ortalama raporları
HttpWatch programını kurduktan sonra, “Internet Explorer—>Tools” altından veya internet explorer açıkken “Ctrl+F2” kısa yol tuşu ile web sitelerini izlemeye başlayabilirsiniz. Aşağıdaki şekilde, Univera web sitesinden (EnRoutePanorama, EnRoutePlus tanıtım ekranları) bir ekran açılarak, basit bir izleme örneği gösterilmiştir.
image
Şekil 1. Örnek HttpWatch ekranı
Referanslar
Deniz KILINÇ, Ali KALFAOĞLU

OPENXML ile SQL Veritabanında XML Verilerinin İşlenmesi

OPENXML, bir XML belgesi için bize bir rowset görünümü sunarak, Sql Server’da XML verilerinin parse edilebilmesini sağlamaktadır. Parse sonrasında, bu verileri sql sorgularımızda kolaylıkla kullanmamız mümkündür. Özetle; XML içerisindeki verilerin tıpkı veritabanı tablolarındaki satırlar ve sütunlar gibi davranmasını sağlamış oluyoruz.
OPENXML fonksiyonu “sp_xml_preparedocument” sistem stored procedure’ü ile birlikte kullanılmaktadır. Bu prosedür, verilen xml içerisindeki düğümlerin ağaç şeklindeki görünümünü bellek üzerinde oluşturur ve bu çıktı OPENXML fonkiyonu için girdi olarak kullanılır. Bu işlem sırasında  kullanmak isteğimiz XML elementlerine ilişkin derinliği yani XPATH’i belirtmemiz gerekmektedir. OPENXML komutunun avantaj ve dezavantajları aşağıdaki gibidir;
Avantajları:
  • Openxml ile xml’den verileri işlemek hızlıdır.
  • XML belgelerini stored procedurelerde datasource olarak kullanmak içinde oldukça kullanışlıdır.
Dezavantajları:
  • Xml verisini bellek üzerinde işleyebileceği formatla tutarak çalıştığı için boyutu yüksek xml verileri ile çalışırken dikkatli olamak gerekir.
Aşağıdaki örnekte, T.C. Merkez Bankası standart XML’inin (banka/şube bilgileri) parse edilmesi ve veritabanına eklenmesi gösterilmiştir. SSP_CONTROLBANKINFO isimli bir stored procedure yazılmış ve parametre olarak XML string verilmiştir.
CREATE PROC [dbo].[SSP_CONTROLBANKINFO] (@xmlString as ntext,@userKod as int,@islemTarihi as DATETIME)
AS   
BEGIN   
  
DECLARE @idoc as INT
   EXEC sp_xml_preparedocument @idoc OUTPUT,@xmlString   
   DECLARE @BANKASUBETABLE AS TABLE(num VARCHAR(10), BankaKod VARCHAR(10),SubeKod VARCHAR(10),Ad VARCHAR(100),SehirKod INT)   
   -- WITH komutu ile OPENXML'den dönecek row set şemamızı belirtiyoruz.
  INSERT INTO @BANKASUBETABLE   
  SELECT * FROM OPENXML (@idoc, 'csv_data_records/record') WITH (num varchar(10),BKOD varchar(10) 'BKOD',SKOD varchar(10) 'SKOD', NAME varchar(100) 'NAME',CITY INT 'CITY')   
DECLARE @bKod VARCHAR(10)
DECLARE @sKod VARCHAR(10)   
DECLARE @ad VARCHAR(100)   
DECLARE @sehirKod INT   
Declare mycur cursor for SELECT BankaKod,SubeKod,Ad,SehirKod FROM @BANKASUBETABLE   
Open mycur
-- Oluşturduğumuz @BANKASUBETABLE üzerinde dolaşarak
Fetch next from mycur into @bkod,@sKod,@ad,@sehirKod   
While @@fetch_status = 0   
Begin
   Fetch next from mycur into @bkod,@sKod,@ad,@sehirKod    
End     
Close mycur
Deallocate mycur;

-- Bellekten openxml input parametresini işimiz bitince siliyoruz.
EXEC sp_xml_removedocument @idoc     
İşinize yaraması dileğiyle…
Referanslar
Ali Sercan YILMAZ

18 Kasım 2009 Çarşamba

Uzaktan Eğitim ve Avantajları

Uzaktan eğitim, özel öğretim teknikleri kullanılarak, değişik lokasyonlar üzerinden, farklı teknolojilerle iletişim sağlayan, kurumsal yapılanmayı gerektiren, planlanmış öğrenme sürecidir. Günümüzde, teknolojinin gelişmesi ile birlikte, internet üzerinden de eğitim verilmesi mümkün hale gelmiştir. Çeşitli kaynaklarda, Online Eğitim, Web Eğitimi, E-Eğitim, Distance Learning olarak da geçmektedir. Avantajlarını aşağıdaki gibi sıralayabiliriz;
  • Genel olarak maliyetleri düşürür. İlk yatırım maliyetlerinden sonra, alınan araç-gereçlerden, oluşturulan öğretme-öğrenme sistemlerinden ve standart eğitim paketlerinden çok kişi yararlandığından, eğitim veren ve eğitimi alan açısından maliyetler minimize edilmektedir.
  • Uzaktan eğitim, genel eğitim masraflarında önemli yer tutan yol masraflarını ve diğer harcamaları önemli derecede azaltmaktadır.
  • Uzaktan eğitim sayesinde zaman ve mekandan bağımsız hale gelinir. Kullanıcılar istedikleri zaman, istedikleri yerden eğitim alabilmektedirler.
  • Teknolojinin avantajlarından yararlanılır. Yüzyılın getirdiği teknolojik imkanlar sayesinde multimedya öğelerinin tümünün çok kolay ve ücretsiz olarak (video ve görsel, işitsel tasarımlar) kullanılmasını sağlanmaktadır. Öğrenme ortamı görsel ve işitsel bilişim kolaylıkları ile desteklendiğinde eğitilen ile öğrenme arasındaki etkileşim üst düzeylere çekilebilmektedir.
  • Yazılım ürünlerinin tüm seviyedeki kullanıcılar tarafından bilinirliğinde artış sağlanır.
  • Müşterilerin, yazılım ürünlerinden operasyonel ve yönetsel düzeyde daha çok verim almaları sağlanır.
    Ürünün gelişim sürecindeki yeniliklerden haberdar olma sürecini hızlandırır.
Vaziyet böyleyken,  “Uzaktan eğitimler düzenlemek için gecikmedik mi?” sorusu aklımıza geliyor, ne demişler “zararın neresinden dönersek kardır”:).
Deniz KILINÇ, Ender AKIN

17 Kasım 2009 Salı

Web Servisleri – Bölüm 2

İlk yazımızda bir web servisi yaratmış ve Sample_Dataset isimli bir fonksiyon eklemiştik. Bu yazımızda, web servisinin istemciler tarafından çağrılması ile ilgili bilgiler vereceğiz.
Web Servisleri için İstemciler
Bir web servisini oluşturulduktan sonra bu servisi kullanarak, servisin sunduğu işlevleri kullanacak istemciler olacaktır. İstemcinin Web servisiyle haberleşerek yaptığı seçenekler veya yolladığı veriler serviste işlenerek istemciye geri yollanmaktadır. Web servisine bağlı istemci sayısı birden fazla da olabilir. Bir istemci oluşturduğumuzda bu bir Windows uygulaması, web sayfası veya başka bir Web servisi olabilir. Bir istemci öncelikle Web servisine nasıl ulaşacağı bilgisine sahip olmalıdır. Daha sonra istemci WSDL ile sayfanın bilgilerine ulaşıp iletişimi sağlayacak "proxy" sınıfını oluşturur ve buradan türettiği nesneler yardımıyla Web servisinin sunduğu hizmetlere erişebilir.

Daha önceden oluşturulmuş bir Web servisini kullanacak uygulama yazdıldığında öncelikli olarak o Web servisinin konumunun belirtilmesi gerekmektedir. Bu şekilde Web servisine bağlanarak uygulamalar çalıştırılabilir. Web servislerine yönlendirme işlemi, sunucu yazılırken proje sayfasından "Add Service Reference -> Advanced-> Add Web Reference" (Referans Ekle) tıklanarak açılan ekranda çıkan adres çubuğuna (URL adres) Web servisinin adresi girilerek başlatılır. Web reference name kısmına response alacağımız instance ın ismi belirlenir. Add Reference butonuna tıklayıp Web Servisimizin windows formumuza hizmet etmesine olanak sağlamış oluruz. (Şekil 1)
image
Şekil 1. Web Referansı Eklenmesi
“Web Reference” klasörü –> onun altında “Web referans” klaösörü  --> bunun altında web servisin wsdl ve disco yapısı oluşur. Ayrıca methodların bulunduğu Referanece.cs dosyası bulunmaktadır. (Şekil 2)
image
Şekil 2. Oluşan Dosyalar
Örnek Uygulama
Windows Form Ortamından Web Service Çağırma
File > New > Project adımlarından sonra projemizin dilini seçelim ve ok butonuna basmadan öncede Solution kısmını Add to Solution şeklinde belirtelim. Açılan yeni windows projesini aşağıdaki şekilde tasarlayalım. Bir “buton” ve bir “datagridview” ekleyip, illeri sunan web servisi fonksiyonunu, buton yardımıyla çağırıp datagridde listeleyebiliriz. (Şekil 3)
image
Şekil 3. İstemci Ekranı
Windows formumuzdaki verileri çağır isimli butonumuzun click olayı aşağıdaki gibi yazalım.
private void btnCagir_Click(object sender, EventArgs e) {
            WebRequest.Service ws = new WebRequest.Service();
           
dtgIller.DataSource = ws.Sample_DataSet().Tables["Iller"];                    
 }
Sarı renkli boyalı kısım ile ws isimli değişkenimize Web Servisimizi ekliyoruz.Bundan sonra ise formumuzdaki datagrid nesnesinin veriyolunu belirtiyoruz. ws isimli değişkenin yani web servisin Sample_DataSet isimli metodunu kullanıyoruz.Hatırlamalısınızki bu metot bize geri dönüş değeri olarak bir dataset fırlatıyor bu dataset içinde Iller tablosunu veri kaynağı olarak bağlıyoruz. Web servis sonucunu alıyoruz (Şekil-4)
image
Şekil 4. İstemci Ekranı
Emin Serkan BAYDAR

16 Kasım 2009 Pazartesi

XML’in Özellikleri ve Yaklaşımlar

İlk yazımızda, XML’in tarihteki varoluş sürecinden bahsetmiştik. Bu yazımızla birlikte yavaş yavaş teknoloji detaylarına girmeye başlıyoruz.
1. XML yapısal bir text formatına sahiptir
Avantajları:
Bu doğal özelliği sayesinde, içerik bilgisinin yanı sıra, içeriğin ne anlam taşıdığını (metadatasını) yapısal bir formatta tutar. Örneğin bir kitabı tanımlayan elemanları; başlığı, yazarı, bölümleri, bölüm yazıları ve kataloğudur. Bir bölüm yazısını tanımlayan elemanlar ise paragrafları, satırları ve dipnotlarıdır. Kitabı bu şekilde yapısal tanımlayan bir döküman yaratmak, hem makine hem de insan tarafından okunabilirlik sağlar. Eğer yazardan, kitabın katalog bölümünde bahsedilirse, yapısallık bozulmuş olur.
Çoğu metin dosyası bu önemli avantaja sahip değildir. Sadece içerik bilgisini ya da en fazla, buna ek olarak, ini uzantılı dosyalardaki gibi, tek seviyeli metadata bilgisini tutarlar. Sadece içerik bilgisi tutan dosyalarda verileri ayırmak için virgül ve benzeri karakterler kullanılır. Yapısallık olmadığından okunabilirlik de ortadan kalkar.

Dezavantajları:
XML dökümanları, içerik bilgisini ve metadatayı yapısal tutarak büyük bir avantaja sahip olmalarına rağmen, bazı projelerde XML’e ihtiyaç duyulmadan basit metin dosyaları kullanılarak daha verimli sonuçlar elde edilebilir. Birkaç parametreyi ve değerlerini, tek seviyeli tutmak için, yaratılacak konfigürasyon dosyasını, XML dökümanı yapmak gereksiz olabilir.
2. XML okunabilir bir yapıya sahiptir
Avantajları:
XML teknolojisinin, sık sık kendinden söz ettiren avantajı, hiçbir ön bilgiye gerek duyulmadan, dökümanın, insan ve makine tarafından okunabilir olmasıdır. Okunabilirlik,  yazılabilirlik avantajını da getirir. XML dökümanlarını yazmak için maliyeti yüksek editörlere gerek yoktur.
Dezavantajları:
XML genelde farklı sistemler arası iletişimi sağladığından dolayı, insan için okunabilir olması aslında çok fazla birşey değiştirmez. Asıl hedef, sistemlerin entegrasyonudur. Mekanizma işlemeye bir kere başladıktan sonra, insanlar belki de uzunca bir süre sisteme dokunmayacaklardır. Fakat formatlı ve okunabilir olması uğruna, dosya ebatları büyültülmüş, ağ trafiği yoğunluğu arttırılmış olur.
İnsanlar isterlerse okunabilir olmayan XML dökümanları yaratabilirler. Birçok uygulama geliştirici kendisi açısından anlamlı olan, başkalarınca hiç birşey ifade etmeyen eleman isimleri kullanabilirler. Örneğin <denopas981> etiketi herkez için anlamlı olmayabilir. Bunun yanında Çince ya da Fransızca dilleri kullanılarak yazılan etiket isimleri de olabilir. Bu dilleri bilmeyen birisi için XML dökümanı okunabilir değildir.
3. XML dökümanlarının işlenmesi kolay ve maliyeti azdır
Avantajları:
Diğer dosya formatları ve veritabanlarının en büyük dezavantajlarından birisi, üzerlerinde işlem yapmak için gereken araçların çok pahalı olmasıdır. Bu dezavantaj, XML dökümanları için geçerli değildir. Çünkü XML işleme araçları dünya çapında çok yaygındır ve ucuzdur. Düzenli bir yapıya sahip olan XML dökümanlarını işlemek amacıyla birçok ayrıştırıcı tasarlanmıştır. Ayrıştırıcıların çoğu tarayıcılar tarafından otomatik olarak desteklenir. W3C, xml dökümanlarını işleyebilmek ve ayrıştırabilmek amacıyla ulusal bir method yaratmıştır. DOM (Document Object Model) adı verilen method, ayrıştırma işlemi için en çok kullanılan tekniklerden biridir. Ağaç-tabanlı işlem modeli olarak da adlandırılır. Geliştirilen ayrıştırıcıların çoğu bu metoda göre tasarlanmıştır.
Dezavantajları:
XML dökümanlarının işlenmesi sadece ayrıştırma demek değildir. Ayrıştırılan döküman verileri üzerinde ilave olarak başka işlemler de yapmak gerekebilir.  Aslında çoğu uygulamalarda, ayrıştırma, birçok adım içerisinden ilkidir. Bazı organizasyonlar, ulusal ayrıştırma metodu olan DOM’un gerçek iş yaşamı uygulamalarında, çok da pratik olmadığını ve kaynakları kötü kullandığını savunmuştur. Çünkü DOM metodunda, büyük ebatlı dökümanlar da dahil olmak üzere, tüm dökümanlar, bellekte ağaç tabanlı bir modele oturtulur.
4. XML teknolojisi, varolan güvenlik çözümlerini destekler
Avantajları:
XML teknolojisi, mevcut internet ve ağ altyapısını desteklediğinden dolayı, bu altyapılar için belirlenen güvenlik kavramlarına, getirilen çözümler, XML için de geçerlidir. Geçerli olan güvenlik kavramları;
  • Authentication, kullanıcının gerçekten doğru kullanıcı olup olmadığının belirlenmesi; XML belgelerinin iletilmesi sırasında dijital imza ve sertifikaların kullanılması
  • Encryption, verilerin şifrelenmesi; XML’in HTTPS üzerinden SSL protokolü kullanılarak iletilmesi. (XMLHTTP objesi)
  • Authorization, bulunduğunuz yerdeki veriye ulaşım hakları (görüntüleme, okuma, yazma, okuma-yazma); Döküman ve protokoller üzerinde uygulanan mevcut tekniklerin XML dökümanlarında da uygulanması
Dezavantajları:
XML varolan yöntemleri ve protokolleri destekler, fakat teknolojinin çalışma mantığından dolayı, yeni tehditlere açıktır. Mesela, XML dökümanları içerisinden, URI (Uniform Resource Identifier) kullanılarak, harici DTD dosyalarına referans edilmesi, bu risklerden bir tanesidir. XML dökümanını kullanan kullanıcılar, referans edilen URI kaynağının güvenli olup olmadığını bilmeden işlemlerine devam ederler. Kaynağa erişen bir saldırgan, DTD üzerinde çeşitli oynamalar yapabilir;
  • OPTIONAL tipte bir özelliğin tipini REQUIRED yapabilir
  • Özelliklerin varsayılan değerlerini değiştirebilir
  • DTD içerisinde geçen varlıkların (entity), içerik metinleri veya referans ettikleri notasyonlar değiştirilerek, çeşitli virüslerin aktive edilmesi sağlanabilir
Ya da, URI kaynaklarının saldırıya uğrayarak ulaşılamaz hale getirilmesi, XML’in geçerlilik işleminin iptal olmasına yol açar.
XML Teknolojisi Programlama Dili Değildir
XML veriyi ve verinin anlamsallığını, belirli geçerlilik kuralları çerçevesinde, belirli bir formatta saklayan bir dökümandır. XML, onu işleyecek ayrıştırıcılara ve uygulamalara ihtiyaç duyar. XML tek başına basit olabilir, fakat XML’in resmi tasarım hedefleri arasında yer alan, ayrıştırma, işleme, entegrasyon, mesajlaşma ve transformasyon gibi işlemler o kadar da kolay değildir. XML’in bir sistem tarafından anlaşılabilir olması için, sistemde bir yerlerde bir kod parçasının, döküman etiketlerinin ne anlama geldiğini bilmesi gerekir. XML standart bir döküman formatı yaratmamızı ve onu kolayca ayrıştırabilmemizi sağlar, fakat her şirket ya da kurum, ortak bir standart yerine, kendi standardını belirlediği için, farklı kurumlar arası haberleşme olabilmesi için, bir ayrıştırıcının yapabileceğinden çok daha fazlasına ihtiyaç vardır. Gerçek hayatta işletmeler, oturup hangi standartlarda veriyi göndereceklerinin anlaşmasına varmalıdır.
Bilgi sistemlerinde geçen dil kavramında genelde bir programlama dilinden bahsedilmesine karşın, XML, C++ ya da Delphi gibi bir programla dili değildir, bir işaretleme dilidir. Aslında XML kullanılarak programlama dilleri yazılmaya çalışılmıştır. Fakat kullanımaları zor olduğu için, uygulama geliştiricileri tarafından edilme tercih edilmemiştir.
Function MerhabaDunya : Boolean;
Begin
  Write(‘Merhaba Dünya’);
  Result := True;
End;
<Function Name=”MerhabaDunya” Type=”Boolean”>
<call function=”Write”>
   <param type=”String”>Merhaba Dünya</param>
</call>
</Function>
Deniz KILINÇ

14 Kasım 2009 Cumartesi

XML Teknolojisi Tarihçe

1967 yılında Kanada Hükümeti Baskı Ofisinde düzenlenen bir toplantıda, William Tunnicliffe, dökümanlarda, iç içe geçmiş içerik ve format bilgilerinin, birbirinden ayrılması gerektiğini anlatan bir konuşma yaptı. 1968’de New York’lu bir kitap yayımcısı, Stanley Rice, kitap yazarları için, döküman formatlarını standart haline getirmek amacıyla bir etiket seti hazırladı. Bu çalışmaya, Grafik Haberleşme Derneği (GCA , Graphic Communications Association), sponsor oldu ve etiket seti kavramının geliştirilmesini sağladı. GCA GenCode komitesi, etiketleme ile işaretleme mantığını birleştirerek, dökümanların, hiyerarşik yapıya sahip olacağını gösterdi.
İlk resmi işaretleme dili olarak gösterilen GML (Generalized Markup Language), 1969 yılında, yasal belgelerin kolay bir şekilde paylaşılabilmesi ve taşınabilmesi amacıyla, IBM’den Goldfarb, Mosher ve Lorie üçlüsünün yaptığı araştırma geliştirme çalışmaları sonucunda ortaya çıkmıştır. GML’in temeli, GCA GenCode komitesinin yaptığı çalışmalara dayanmaktadır. Diğer işaretleme dillerinin atası GML, 1978 yılında ANSI (American National Standard Institute) kurumunca oluşturulan bir grup tarafından geliştirilmeye başlandı. Dil, 1986 yılında SGML (Standard Generalized Markup Language) adını alarak, ISO (International Organization for Standardization) kurumu tarafından uluslararası standart (ISO 8879) haline getirildi.
SGML bir metin veya belge kümesinde kullanılan dilin yapısını belirtmek için kullanılan bir dildir. Tüm meta dillerde olduğu gibi, temel bir sözdizimi tanımlar ve bunu kullanarak kendi elemanlarınızı tanımlamanıza izin verir. Havacılık ve otomobil gibi büyük endüstri kuruluşları ve basın alanında bir belgeleme standardı olarak kullanılmıştır ve kullanılmaya devam edilmektedir.

SGML çok güçlü bir dil olmasına rağmen, yaratıcıları ve W3C (Word Wide Consortium) üyeleri tarafından, karmaşık yapısı ve yüksek uygulama geliştirme maliyetinden dolayı, Internet tabanlı, hızlı ve kolay web uygulamaları için tercih edilmemiştir.
1989 yılında Tim Berners-Lee ve Anders Berlung internet ortamında daha kolay belge paylaşabilmek için HTML (Hypertext Markup Language) dilini bir SGML uygulaması olarak geliştirdi. HTML dilinin yapısal tüm elemanları, SGML dilinde tanımlandı. HTML dili bir belgenin içerdiği başlık, font, resim ve tablo gibi bilgileri bilgisayar ortamında, standart bir şekilde görüntülemek ve biçimlendirmek için geliştirilmiş bir dildir. Öğrenilmesi ve uygulanması kolay olduğu için HTML yeni gelişmekte olan web’in süratle temelini oluşturmaya başlamıştı. Yalnızca sunum amaçlıdır ve daha önceden tanımlanmış sabit bir etiket kümesi içermektedir. Standart etiket kümesini kendimizin ekleyeceği yeni etiketler ile genişletemeyiz.
HTML’in içerik yönetiminden çok içeriği görüntüleme amaçlı olması, genişleyebilir bir dil olmaması, meta bir dil olmaması ve diğer zayıflıklarından dolayı, Internet ortamında yeni bir dilin ihtiyacı hissedildi. Bu yeni dil ne SGML kadar karmaşık, ne de HTML kadar basit olmalıydı.
“SGML’in güç ve esnekliğini içerecek basitleştirilmiş, genişletilebilir bir işaretleme dili”
clip_image001 
Bu ihtiyacı gidermek için, 1996 yılında XML dilini tasarlamak amacıyla W3C toplandı. XML’in basit dizayn yapısının çalışmaları, 1996 Ağustosunun son günlerinde başladı ve  yoğun çalışmalar sonucunda, 11 hafta gibi kısa bir sürede, SGML’96 konferansında,  XML’in ilk taslak versiyonu(draft) yayınlandı. Fakat, diğer ayrıntıların tamamlanması bir yıl daha sürdü ve Şubat 1998’de  XML 1.0 bir standart olarak W3C tarafından yayınlandı.
clip_image003

Şekil 1.1 İşaretleme dillerine genel bakış
XML (eXtensible Markup Language), SGML’in güç ve esnekliğini içeren basitleştirilmiş, genişletilebilir bir işaretleme dilidir. SGML’in alt kümesi olarak gösterilir ve HTML gibi  işaretleme etiketlerini kullanır. Aralarındaki fark, XML işaretleme etiketlerinin, içeriğin ne anlama geldiğini(metadata) tanımlamak için kullanılmasıdır. XML meta bir dildir. Yani, yeni işaretleme dillerini yaratabilme becerisine sahiptir. HTML de SGML’den türetilmiş bir dil olmasına rağmen bu özelliği taşımaz.
Diğer XML Tanımları
  • Fonksiyonsuz LISP
  • Acrobatsız PDF
  • Ticari anlamsallığı(semantic) olmayan EDI
  • Kelime işleme anlamsallığı olmayan RTF
  • Sıkıştırma olmayan ZIP
  • Multimedyasız FLASH
  • Daha fazla karakter içeren Mors Alfabesi
  • Daha fazla kontrol karakteri içeren Unicode
  • Mao’nun binlerce kilometrelik gezisinin ilk adımı
  • Microsoft’un Sun’a karşı gizli silahı
  • Sun’ın Microsoft’a karşı açık silahı
Deniz KILINÇ

Build Automation and Continuous Integration

Başta XP (eXtreme Programming) olmak üzere, çevik yazılım geliştirme süreçlerinde; set otomasyonu ve sürekli tümleştirme (Build Automation and Continuous Integration) işlemleri önemli bir yer tutmaktadır. Bu işlemlerin temel amacı, set yapımı ve kod entegrasyonu maliyetlerini düşürmektir. Ek olarak, ileride yapılacak geliştirmelere bağlı olarak değişim maliyetlerini düşürmek hedeflenmektedir.
Büyük ve kapsamlı projelerin set yapım süreçleri de aynı derecede karmaşıktır. Farklı birçok kişi ya da grupların çalışmış olduğu projelerin ve dosyaların bir araya getirilmesi, entegre edilmesi ve uygulamaların test edilmesi yüksek maliyetler oluşturmaktadır. Bu işlemlerin süreklileştirilmesi ve otomatikleştirilmesi, ayrıca yazılım geliştirme süreçlerinin bir parçası haline getirilmesi, önemli kazanımlar getirecektir. İşte tam da bu noktada FinalBuilder gibi çeşitli uygulamalar kullanılmaktadır. FinalBuilder, Vsoft Technologies firmasının geliştirmiş olduğu görsel olarak oluşturulabilen scriptleri ile kullanımı oldukça kolay ve güçlü bir “Automated Build & Release Management” aracıdır.

Bu süreçleri özetlemek gerekirse, yazılım ekipleri tamamlamış oldukları geliştirmeler sonucunda, proje ve  dosyalardaki değişikliklerin kaynak kod kontrol sistemine gönderilmesi ile başlayacaktır. Sonrasında;
  1. Set yapımının gerçekleştiği serverda sürecin tetiklenmesi. Bu işlem bir değişiklik algılandığında yada belirli zaman aralıklarında başlayacak şekilde oluşturulabilir. Her gün akşam saatleri çalışacak şekilde yönetilebilir. Optimum yöntemi kendi süreçlerinize göre belirliyebilirsiniz.
  2. Kaynak kodun ve dosyaların son halinin kaynak kontrol sisteminden alınması (TFS yada SourceSafe gibi uygulamadan kodun son halinin yerel klasörlere alınması.)
  3. Set yapımı sırasında değişiklik yapılacak dosyaların check-out’lanması ve tüm projelerin versiyonlanması.
  4. Önceki setlerin sistemden kaldırılması ve derleme öncesi gerekli dosyaların silinmesi.
  5. Tüm kaynak kodların derlenmesi ve farklı projelerde oluşturulan dosyaların kullanılması durumlarında, derleme sırasında gerekli yerlere kopyalanması. Ve derleme işlemlerinin tamamlanması
  6. Set yapımına başlamadan önce sürece olumlu katkıları olacak çeşitli analizlerin ve birim testlerinin yapılması ve raporlanması sürecinin işletilmesi
    • Statik kod analizlerinin çalıştırılması ile kod karmaşıklıklarının tespit edilmesi, kod standartlarının kontrolü işlemleri yapılması ve raporlanması
    • Dinamik kod analizlerinin çalıştırılması ve olası performans sorunlarının tespit edilmesi ve raporlanması
    • Çeşitli tasarım metriklerinin oluşturulması ve raporlanması
    • Birim testlerinin çalıştırılması ve yapılan değişikliklerin, birimlerin kendi başına hatasız görevlerini yerine getirip getirmediğinin tespiti ve sonuçların raporlanması
    • Kod kapsam analizlerinin yapılması ve raporlanması
  7. Set uygulamalarının çalıştırılması ve yeni setlerin oluşturulması
  8. Yeni setlerin sisteme kurulması ve testlerin başlaması için uygun ortamın hazırlanması
  9. TestComplete gibi bir test aracı ile testlerin çalıştırılması
    • Entegrasyon testlerinin çalıştırılması ve raporlanması
    • Fonksiyonel testlerin çalıştırılması ve raporlanması
    • Kabul testlerinin çalıştırılması ve raporlanması
  10. Set ve Test sürecinde kod ve dosyalar üzerindeki değişikliklerin kaynak kontrol uygulamasına gönderşlmesi (Check-in işleminin yapılması)
  11. Yayınlanacak sete ait kaynak kod ve dosyaların “Etiketlenmesi” ve gerektiğinde ilgili kodlara ulaşılabilmesinin sağlanması (TFS Apply Label işleminin yapılması)
  12. Set’in yayınlanması ve ilgili değişikliklerin raporlanması
  13. Sonuç raporların ilgili kişilere mail ile iletilmesi
Bu işlemlerin süreklileştirilmesi kodun her an denetiminin yapılması ve geri bildirim verilmesi anlamına gelecektir. Bu işlemlerin ardından ilgili raporların değerlendirilip gerekli düzelmelerin hemen koda eklenmesi, süreç içersinde mutlaka işletilmelidir. Böylelikle refactoring ve reengineering işlemleri süreklileştirilmiş olacak ve kodun her an yayınlanabilir durumda bulundurulması sağlanabilecektir. Hata oluşma riski azalacak ve hataların yayınlanmadan hatta test edilmeden ortaya çıkması sağlanabilecektir.
Uzun zaman önce yapılan geliştirmelere ait test scriptlerinin sürekli çalıştırılacak olması, yapılan geliştirmelere bağlı hataların tekrar ortaya çıkmasını önleyecektir. Test ekibinin tekrar tekrar aynı testleri yapması sorununu çözecektir. Bu nedenle kod büyüdükçe hem yeni fonksiyonel testlerin hem de hatalara istinaden oluşacak yeni birim testlerinin sürece tekrar dahil edilmesi gerekmektedir.
Set otomasyonu, set yapılması kolaylaşacak ve buradaki zaman kaybını önleyecektir. Test ekibine büyük iş hacmi oluşturan ve sürekli tekrar edilmesi gereken standart testler otomatikleşecek, test ekibinin, gerçek anlamda testlere odaklanabilmesine olanak sağlayacaktır.
Projenin dağıtımı öncesinde testlerde ortaya çıkabilecek büyük değişiklikleri gerektiren geliştirmeler projenin gecikmesinde önemli bir risk oluşturmaktadır. Sürekli tümleştirme yaklaşımları ile bu tip gecikmeler en aza inecektir. Planlanan set dağıtım tarihleri aşılmayacaktır. Sıklıkla teslimatlar yapılabilecektir. Daha hatasız setler ile kolay ve sorunsuz kurulumlar yapılabilecektir.
Ayrıca TFS gibi bir araç yardımı ile kodun minor ve major değişiklikler için sahadaki farklı versiyonlarının farklı branchlerde tutulması sağlanmalıdır. İlgili kod branchlerinde oluşturulan test ve set scriptlerinin de bulundurulması önem kazanacaktır. Her versiyon için bu test sürecinin otomasyonu, eski versiyonlarda da yapılacak değişikliklerin maliyetini düşürecektir.
Uygar MANDUZ

UML ve Modelleme – Bölüm 3 (Use Case Diyagramlar)

Önceki iki makalemizde (1, 2) UML’e genel olarak değinip ve modellemede kullanacağımız dokuz diyagram hakkında bilgiler vermiştik. Bu makalemizde Use Case diyagramından detaylı bahsedeceğiz. Öncelikle, genel Use case diyagramının tanımını hatırlayalım.
“Bir kullanıcı ve bir sistem arasındaki etkileşimi anlatan senaryo topluluğudur.”
Ivar Jacobson Senaryo tanımı için der ki:
“Aktörle sistem arasında gerçekleştirilen, sonucunda aktöre farkedilir getirisi/ faydası oluşan etkileşimli diyalogdur. ”
UML Use Case Diyagramları  sistemin işlevselliğini açıklamak amacıyla kullanılır. Sistemin birbirinden ayrı özelliklerinin detaylarını göstermekten ziyade, Use Case Diyagramlar, tüm mevcut işlevselliği göstermek için kullanılabilir. Buradaki en önemli noktalardan biri,   Use Case Diyagramlar temelde sequence diyagram ve akış diyagramlarından farklıdır.
Use Case diyagramlar dört ana elemandan oluşmaktadır. Aktörler, Sistem (Proje kapsamını belirtir), Use Caseler ve bunlar arasındaki ilişkiler. Şekil1’de use case diyagramlarını oluşturan dört ana elemanının gösterim şekli bulunmaktadır.
image
Şekil 1. Use Case Diyagram
Use case diyagramlarda senaryolar aktör tarafından tetiklenmektedir. Aşağıdaki senaryoda aktör senaryoyu başlatır, use case sonucunda elde edilen değer diğer aktöre verilir.
image
Şekil 2. Use Case Diyagram Örneği
Use case’ler tekrar kullanılabilen birimlerdir. Tekrar kullanımı sağlayan yöntemler inclusion (içerme) ve extension (genişletme) dır. Tekrar kullanım yöntemleri dışında use caseler arasındaki ilişkiyi gösteren yöntemler ise Generalization (Genellleme) ve Grouping (gruplama) dır. Bunlar Use Case’ler arasındaki ilişkiyi gösteren kavramlardır. Bu kavramları detayları ile inceleyelim.

İçerme (Include, uses):  Birçok senaryo grubunda kullanılan başka bir senaryo grubudur. İçerme ilişkisi senaryo(lar) içerisinde iki veya daha fazla tekrarlanan adım var ise tekrar edilen kısımlar ayrı Use  case olarak bölüp içerme  ilişkisi kullanılmalıdır. Bir senaryonun içinden bir alt programa dallanıp geri dönmek gibidir.
image
Şekil 3. İçerme (Include, uses)
Genişletme (Extend): Senaryo grupları doğal akışa göre hazırlanır. Çeşitli koşullar altında bu doğal akıştan sapmalar olabilir. Genişletme ilişkisi ana senaryodan ayrılma noktasından sonra yapılanları belirtir. Genelleme ilişkisine benzemekle birlikte farkı genişleme noktalarının dışında genişleme yapma imkanının bulunmayışıdır. Dolayısıyla kullanıcıya daha sınırlı ve kontrollü genişleme noktaları sunar.
image
Şekil 4. Genişletme (Extend)
Genelleme (Generalization): Sınıflar arasındaki türeme ilişkisine benzer. Genel bir senaryo grubundan özel bir senaryo grubu türetilir.
Gruplama(Groupping): Use Case’leri bir arada toplamak için kullanılan tekniktir. Gruplama tekniği genellikle birkaç alt sistemden oluşan büyük sistemlerde kullanılır.
UML diyagramlarında bir şeklin anlamını açıklayan özel sözcükler (sterotype) <<...>> simgeleri arasına yazılır. Aktörler çizgi adam şeklinde gösterildiği gibi bir dikdörtgen ile de ifade edilebilir. Bu durumda dikdörtgenin anlamını belirtmek için “streotype” kullanılır.
Örnek Diyagram ve Dökümantasyon
Otel rezervasyon sisteminde, sistemle etkileşimde olan 4 ana aktör ya da rol bulunmaktadır. Muhasebe aktörü genel bir kullanıcı olmayıp, otel rezervasyon sisteminden etkilenen dış sisteme ait bir yazılımı temsil etmektedir. Bunu aktörlerin Use Case’leri kullanırken çizilen bağlantıların ok yönünden kestirebiliriz. Use Case’lerden etkilenen aktörlerde ok yönü Use Case’den aktöre doğru iken normal kullanıcılarda, aktörden Use Case’lere doğru bir geçiş olduğunu siz de farketmişsinizdir. Diyagramdan da görüldüğü gibi otel rezervasyon sistemi Otel Giriş/Çıkış, Yeni Rezervasyon, Rezervasyon Değişilik gibi üç ana Use Case’den oluşmakta, diğer Use Case’ler ise ana Use Case’ler ile ilişkide bulunan alt Use Case’ler olarak adlandırılabilir.
image
Şekil 5. Otel Rezervasyon Use Case Diyagramı
Use Case Dökümantasyonu
Yaptığımız analizin Use Case diyagramını oluşturmak ne kadar önemli ise bu senaryonun dökümante edilmesi de o denli önemlidir. Use case dökümantasyonunun standart bir formatı yoktur. Her firma kendisine uygun format belirleyebilir. Temel dökümantasyon formatı aşağıdaki gibidir. İhtiyaçlar doğrultusunda eklemeler yapılabilir.
  • Adı: Senaryo adı
  • Aktörler: Senaryoda etkileşimde olan aktörler
  • Ön Koşullar: Senaryonun başlayabilmesi için gerekli ön koşullar
  • Sonuç Koşullar: Senaryo sonunda ne olduğu tanımlanır
  • Genişleme Noktası: Sadece genişleme özelliğinin kullanılacağı durumlarda bu alan kullanılır. Genişleme noktaları başarılı senaryo içersinde bulunan bir adıma referans verir.
  • Başarılı Senaryo: Aktörlerin başarıyla Use Case hedefini gerçekleştirdiği adımlar dizisidir. Senaryo büyük bir işlemi ifade eder, bu kullanıcının 3-4 dakika ile yarım saat arasında tamamladığı ve sonunda tarafların orta hedefe ve faydaya ulaştıkları durumdur. Bu tanımdan da anlaşılacağı üzere Use Case ler kapsamlı operasyonları içermektedir.
  • Alternatif Yollar: başarılı senaryo üzerinde bazı adımlarda aktör alternatif adımlar ile yoluna devam edebilir. Alternatif referansları başarılı senaryo adımları üzerinde gösterilir. (Ör: A1, A2)
Şekil 5’de  otel rezervasyon işleminin diyagramını incelemiştik.  Şimdi de use case dökümantasyonunu inceleyelim.
  • Adı: Yeni Rezervasyon
  • Aktörler: Resepsiyon Görevlisi, Rezervasyon Görevlisi, Muhasebe
  • Ön Koşullar: Sisteme login olunmalıdır Son Durum: Muhasebe sistemi ve rezervasyon kayıt sistemi güncellenir.
  • Genişleme Noktası: Rezervasyon Tipi, müşteri bilgi kaydı
  • Başarılı Senaryo:
    1. Müşteriye oda tipleri sunulur
    2. Müşteri oda tipini seçer
    3. Müşteri konaklama başlangıç tarihini ve konaklama süresini girer
    4. Müşteri mevcut odalar üzerinde arama yapar
    5. Eğer oda bulunamamışsa (A1)
    6. Oda bulunmuştur, fiyat görüntülenir
    7. Müşteri teklifi reddederse (A2)
    8. Müşteri bilgilerini girer
    9. Rezervasyon Yapılır
    10. Rezervasyonda anlaşılan fiyat kayıt edilir ve rezervasyon numarası verilir
    11. Muhasebe sistemi haberdar edilir
  • Alternatif Yollar:
    • A1. farklı bir oda tipi yada tarih deneyin mesajı ile 2. adıma geri döner
    • A2. Use case iptal edilir ve herhangi bir değişiklik yapılmaz
Use Case Senaryolarının Avantajları
  • Sistemin erişimini, sınırlarını belirler. Böylelikle geliştirilecek sistemin boyutunu ve karmaşıklığını kafamızda daha rahat canlandırabiliriz.
  • Kullanım senaryoları isteklerin çözümlenmesine çok benzemektedir: daha nettir ve tamdır.
  • Basit oluşu müşteri ile geliştirme ekibi arasında iletişime olanak tanır. Geliştirme aşaması için temel oluşturur.
  • Sistem testi için temel oluşturur.
  • Kullanıcı klavuzu hazırlamaya yardımcı olur.
Use Case senaryolarının oluşturulması
  1. Aktörlerin belirlenmesi
    • Sistemin temel işlevlerini kim kullanacak?
    • Sistemin bakımını ve işletimini kim yapacak?
    • Sistem hangi cihazları kullanacak?
    • Diğer hangi sistemlerle etkileşimde bulunacak?
    • Sistemin çıkışlarını kimleri ilgilendirir?
  2. Aktörlerden yararlanarak sistem davranışının belirlenmesi
    • Aktörlerin temel işlevi nedir?
    • Aktör sistem bilgilerine erişmeli mi?
    • Durum değişiklikleri aktöre bildirilecek mi?
    • Aktör hangi işlevlere ihtiyaç duyar?
  3. Bazı davranışlar aktörlerden yola çıkarak belirlenemeyebilir. Bu durumda aşağıdaki soruları da sormak uygun olur:
    • Sistemin gerek duyduğu giriş ve çıkış nedir?
    • Sistem dış olaylardan etkilenir?
    • Şu andaki sistemin eksiklikleri ve problemleri nelerdir?
    • Periyodik olarak gerçekleştirilen işlemler var mı?
  4. Use Case Senaryolarının Saptanmasındaki adımlar
    • Olası sistem kullanıcıları ile görüşme yapılmalı
    • Olası tüm aktörlerin saptanması
    • Olası tüm senaryolar saptanır
    • Her senaryo için Kullanım Senaryo Anlatımı kağıda aktarılır ve doğrulanır
    • Senaryo bilgisayarda oluşturulur
Use Case Diyagram Oluşturulurken Nelere Dikkat Edilmeli?
  • Aktörler tespit edilirken sistemde çok sık adı geçen özneler kullanılmalı Özneler çıkarılırken rollere göre gruplandırılmalıdır. Aktör sayısının en aza indirilmesine özen gösterilmelidir.
  • Use Case diyagramları oluştururken cümleler arasında geçen kilit fiiller önemlidir. fiillerin çok sık geçmesi ve bunların projenin ana hedeflerine uygun, sisteme değer katan iş süreçlerini içermesine dikkat edilmelidir.
  • Use Case diyagramlardaki en önemli ilişkinin içerme ilişkisi olduğunda hem fikir olduğumuzu düşünerek içerme ilişkisini kullanmaya özen gösterin. Zorunlu olmadıkça diğer ilişkileri kullanmaktan kaçınılmalıdır.
  • Use Case diyagramlarının kullanım amacını unutmamak gerekir. Çok fazla Use Case diyagramı çizmekten ziyade kolaylıkla anlaşılabilir, kullanıcılar için değer taşıyabilen çekirdek iş süreçlerini anlatan diyagramlar olmalıdır.
Bir sonraki makalemizde Class(Sınıf) diyagramlarını ayrıntılı inceleyeceğiz.
Referanslar
Neslihan ÇALIŞKANEL, Deniz KILINÇ