cucumber etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
cucumber etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Ekim 2013 Salı

RSpec ve TDD

Derslere baslamadan once bazi konular hakkinda simdiye kadar ogrendiklerimi sizinle paylasirsam benim gibi zorluk cekmezsiniz diye dusunuyorum. Yani RSpec nedir bilmeden TDD olayini anlamadan baliklama konuya atlamak bazilarimiza biraz karisik gelebiliyor. 

TDD

Once Test Driven Development kavrami ile baslayalim. RSpec 2005 yilinda Steven Baker tarafindan olusturulmus. Bu kavramla benim gibi yeni karsilasanlariniz icin once tanimi vereyim. Temelde once testleri yazip, sonra bu testlerden basari ile gecek kodlari yazmak diyebiliriz. (size de ters geldi mi ?) 

Once basit bir test yaziyoruz, testi calistiriyoruz ve dogal olarak test basarisiz oluyor. Sonra bu testin sonucunu dogru dondurecek kod parcasini yaziyoruz (ama fazlasini degil) sonra testi tekrarliyoruz ve bu sekilde kod sekilleniyor. Kodlar arttikca tekrarlanan bolumleri sadelestiriyoruz (method'lar yaparak) ve sonucta yazilan kodlar temel test asamasini gecmis olarak doguyor. 

BDD

Behaviour Driven Development ise bir sonraki adim gibi. Yani bu sefer kucuk parcalardan bir buyugune yani modul boyutundaki butun parcalari test ediyoruz. Bu testler bir bakima programci ile is sahibinin arasindaki tercuman gibi calisiyorlar.  Kullanilan dil konusma dili (ama Ingilizce) 
Given
When 
Then 
yapisinda yazilan cumlelerin test'e tabi olmasi ile calisiyor. 
 
BDD'ye daha sonra tekrar donecegim. Simdi basliga sadik kalarak TDD konusuna donelim. 

RSpec 

Asagida bir test blogu ornegi bulacaksiniz. 

describe MovieList do
   context "when first created" do
      it "is empty" do
         movie_list = MovieList.new
         movie_list.should be_empty
      end
   end
end

Test sonucunda yazan yazi su sekilde olacaktir

MovieList when first created is empty
 
Neyin nereden geldigini renkler ile vermeye calistim.

Eger test blogunda pending varsa sistem testi yapmayi pas geciyor. 

Bu yaziya devam edecegim ... 



Ruby Dersleri Basliyor

Ingiltere'de butun egitimler mi boyle yoksa bu kursa ozel mi boyle bir durum var tam cozemedim ama bizdeki egitim anlayisindan cok farkli. Fazlasiyla bocaladigimi soyleyebilirim.

Biz genelde bir konunun anlatilmasi ve o konu ile ilgili alistirmalar yaparak pekistirilmesi uzerine sistemi kurmusuz. Burada birden bire duvara tosladim. cunku derse girdik hic birsey anlatilmadan alistirmalara baslandi. Dogal olarak hic birsey anlatilmadigi icin ne yapacagimi bile anlamam 15 dakika surdu.

Biraz intibak sorunu yasasam da sorunu cabuk atlattim.

Ruby ogrenmek sandigimdan daha kompleks bir konu. Sadece bir programlama dilini ogrenmekle bitmiyor. .NET programcisi olarak uzak kaldigimiz bir cok konunun icine de mevburen soktugu icin ayni anda sunlari da ogrenmek gerekiyor

  •  UBUNTU Linux
  •  GitHub
  •  RSPEC (Unit Test)
  •  Cucumber (test)
  •  Ruby
  •  Ruby On Rails

Yani kisaca ayri bir disiplin diyebiliriz.

Simdi herseye baslamadan once kisaca bir GitHub konusuna girmekte fayda var.

GitHub


Neredeyse bundan sonraki her adimda github ile kolkola gidecegiz. .NET ile tek tabanca program gelistirirken ihtiyacini hic hissetmedigim ama ekip olarak calismaya baslar baslamaz sorunu yasadigim ve cozum olarak cok uzaklara gitmeden microsoft'a basvurdugum bir konu var "Kod Paylasimi" ve "versiyon kontrolu"

Onceleri yalniz basima proje gelistirdigim icin gunluk backup almak versiyon kontrolu acisindan yeterli oluyordu. Hatta bu konuda simdi adini bile hatirlamadigim ama diski istenilen tarih ve saate donduren programlar da kullanmistim. Ekip olarak proje yazarken de r4gl veya ASP gibi projelerde calistigimiz icin sinirlarimizi belirler ve birbirimizin koduna dokunmadan projeyi yazardik. Ancak ilk defa kod baylasimi ve ekip olarak bir proje gelistirmeye giristigimde daha kompleks bir yapiya ihtiyac duyduk. Microsoft Visual Source Safe kurulumu yaptigimizda herseyin cozuldugunu gordum ve daha da fazla arastirmaya girismeden bunun uzerinde yurumeye basladik. Basitce bir sunucuya yaptigimiz isleri gonderiyor ve versiyon kontrolu, cakisma kontrolu ve kod arsivini temin etmis oluyorduk. .NET ile tam uyumlu oldugu icin kullanmasi da cok rahatti.

Server gene sirkette olan bir baska PC idi. yaklasik 3 sene hic sorun yasamadan bu sekilde proje gelistirdik. Ama takim kucuktu ve gene aslinda birbirimizin ayagina basmamayi konusarak hallettigimiz icin butun fonksiyonlari kullanmamistik.

Sonra Ingiltere'ye ilk geldigimde SVN ile tanistim. Ayni isi baska bir program ile yapiyorduk. Yine Visual Studio ile entegre calistigindan sorun olmadi. nispeten hizla adapte oldum.

Daha sonra sirket politikasi geregi SVN yerine GIT ile calismam gerekti. Sirketin geri kalani zaten git uzerinde oldugu icin beni de kolayca aldilar. Ama bu sefer de butun projede tek basima calistigim icin GIT'in butun nimetlerinden faydalanmadim. Sadece kendi kendime isi biten kodlari gonderiyordum o kadar. Sonra bir arkadas geldi yanima ama 2 projeyi birer birer paylasinca yapisal olarak gene birsey degismedi. Ben de islerin yogunlugundan pek uzerine dusmedim GIT'in.

Ve simdi Ruby'de karsima tum fonksiyonlari ile birlikte cikti. Daha once farketmedigim bazi farklari kisaca soyle anlatabilirim.

Bir kere klasor yapilanmasi farkli. Diger yapilarda bir kod gelistirilen ortam ve bir de sunucu varken bunda durum biraz daha farkli. Arada bir katman daha var.

Offline calismaya imkan veriyor herhangi bir zamandaki herhangi birinin yaptigi katkiya hizla bakmak mumkun.

Web tabanli yapisi ile kodlari incelemek, kimin ne yaptigini bulmak mumkun.

O kadar cok fonksiyon var ki, hersey ciddi ciddi dusunulmus. Ne yapmak istiyorsaniz ona uygun bir komut mutlaka var.

Acik kaynak kodlu. Kodlari paylasmak sartiyla ucretsiz. (aylik ucretini odeyip kimsenin goremeyecegi projeler olusturabiliyorsunuz.)

Simdilik oncelikli yapmaniz gereken eger bir github hesabiniz yoksa onu olusturmak. www.github.com adresinden kayit ucretsiz  oluyorsunuz

Ilk calisma ortaminin hazirligi

GitHub'a uye oldunuz. web'de git uzerinde bir repository olusturuyoruz.
olusturulan repository icin sagdaki resimde gordugunuz gibi bir adres olusacak onu kopyalayin ileride yapistiracagiz.

Simdi "code" diye bir klasor olusturup komut satirindan cd ile icine giriyoruz.

touch readme
readme diye bos bir text dosyasi olusturduk

subl readme
readme dosyasini editor ile actik icine birseyler yazip save edip kapatiyoruz.

git init
ile bu klasorun git ile ilk iliskisini baslatiyoruz

git add .
klasordeki herseyin git'e yollanacagini soyluyoruz.  (evet su anda bos)

git commit
git'e gonderilmek uzere isaretliyoruz. bu asamada bu gonderime dair notlari kaydetmek uzere bir metin dosyasi acilir. Aciklamalari yazip kaydediyoruz.

git remote add origin https://github.com/GitUserName/RepositoryName.git
bilgisayardaki klasor ile github.com'daki klasoru iliskilendirdik.

git push -u origin master
klasordeki son commit edilmis olanlari git'e gonderiyoruz. (git kullanici adi ve parolanizi soracaktir)

temel islemler bunlar.. Klasore yeni kodlar ve alt klasorler ekledikce "gid add ."  ile  eklemeyi unutmayin. sonra gene git commit'den itibaren tekrar ederek yuklemeyi yapabilirsiniz.

Ilk Ders


ilk dersin icerigini size aktararak Ruby ile tanismaya ne dersiniz.

oncelikle koans.heroku.com adresine girerek onunuzdeki iki yoldan birini secmeniz gerekiyor. Koans bunca yildir bu iste olmama ragmen kacirmis oldugum konulardan biri.

Size bir dil ile ilgili cesitli konseptleri anlatan kodlar verilerek bosluklara komutlar, islemler, sonuclar yazarak hata veren kodu hatasiz hale getirme yontemi diyebiliriz.

Yukarida verdigim adresteki koanlari bilgisayariniza indirerek kodlar uzerinde calisabilir veya web uzerinden cozerek ilerleyebilirsiniz. (acikca soyleyeyim cok kisa surmuyor tamaminin bitmesi icin 2-3 gun harcayabiliyorsunuz dolayisiyla bilgisayariniza indirmekte fayda var.) indirmek icin link sayfanin en altinda veya bu adreste http://rubykoans.com/

Benim tavsiyem direk koda atlamadan once biraz okumak. O yuzden ruby-doc.org adresine bakabilir veya http://tutorials.jumpstartlab.com/projects/ruby_in_100_minutes.html adresinden 100 dakikada ruby konusunu okuyabilirsiniz. Gercekten 100 dakikada ana hatlari ile bazi konulari anlayabiliyorsunuz.

Biz indirdik o yuzden sizin de indireceginizi farzediyorum.. indirdiginiz zip dosyasini onceden hazirladigimiz klasore aciyoruz.

rake 
komutu ile indirilan koanlar calistirilip adim adim hatalarin ayiklanmasi saglanir.


boylece unit test olayina baliklama atlamis olduk.






Ruby Ogreniyorum

Calistigim is yerinde ana programlama dili olarak Ruby on Rails kullaniliyor. Ben diger kullanilan diller kontenjanindan ASP.NET isleri uzerine calisiyorum. Ruby programcilarinin azligindan dolayi sirket programcilik bilgisi olan herkesin Ruby ogrenmesinin olasi bir zorlukta ise yarayacagini dusunmus olmali ki .NET, perl, javascript programcilarinin tamamini ve yanina yeni mezun hic bir dile bulasmamis yeni programcilari da katarak "Ruby Akademisi" olarak adlandirdiklari bir kursa yazdirdi.

Benim gibi .NET orijininden gelen  birisi icin sadece programlama dili degil yaninda ek olarak bir suru konu daha ogrenilmek zorunda. ben seneler once UNIX programciligi yapmistim ama rahat bir 15 senedir hic bakmadim bu konulara.

Dolayisiyla oncelikle Linux'dan baslamak gerekiyordu. Simdi size bu dili nasil ogrenmeye basladigimi nerelerden gectigimi adim adim yazacagim. Ogrendikten sonra degil ogrenitken yaziyorum o yuzden hatali yollara saparsam dogrusunu ogrendigimde duzeltecegime soz veriyorum.


Kursu ingilterede aldigim icin gosterebilecegim kaynaklarin tamami Ingilizce. Elimden geldigince cevirmeye calisacagim ama ingilizce kitaplar icin kusura bakmayin artik. Bu arada egitim veren arkadasin adi Steve Tooke (@tooky)

Turkiye'de Ruby konusunda pek kaynak olmadigini sadece bir kitap yazilmis oldugunu gordum. O yuzden yazdiklarimdan Turkce kaynak olarak faydalanabilmenizi umuyorum.

Genel olarak bakildiginda cok eski olmayan bir dil oldugu icin cok fazla kullanicisi yok. Yorumlayici ile calisiyor. Yani yazilan kodlar derlenmiyor. "Hersey bir objedir" den yola cikiyor dolayisiyla Nill bile bir obje . Isletim sistemlerinin tumunde calisabiliyor. Komut satirindan calistirilan IRB ile ruby komutlari tek tek calistirilabiliyor. Simdi de detaylara gecelim.

Evet basliyoruz. Oncelikle ortami program yazmaya uygun hale getirelim.

Not : Siz bunu okurken belki de versiyon numaralari degismis olacaktir o yuzden guncel versiyonlari secme isini size biraktim.

1 Ubuntu Linux Kuruyoruz

Bedava olan bu isletim sistemi icin gerekli herseyi www.ubuntu.com adresinde bulabilirsiniz
Eger windows kullaniyorsaniz ve mevcut sisteminizi koruyarak cift acilisli (dual boot) bir isletim sistemi kurmak istiyorsaniz kurulumu en kolay yapabilmeniz icin BU LINK'e tiklayin windows'dan cikmadan basitce sizin icin butun islemleri yapiyor.

Eger farkli bir sekilde yuklemek istiyorsaniz karar sizin.

2 Guncellemeleri yapiyoruz ve yuklemeye devam ediyoruz 

Ubuntu yuklendikten sonra bir terminal penceresi acarak (soldaki resimdeki siyah icon ile)
sirayla su komutlari yaziyoruz.

sudo apt-get update
sudo apt-get upgrade

bu komutlar calistirilirken size linux kurarken olusturdugunuz kullanici parolasi sorulabilir.

Sonra gerekli ortami yuklemek icin asagidaki sirayla satirlari yazip enter'lamaya devam ediyoruz. (Windows kullanicilari icin garip ama bu tarz yukleme isini ben cok sevdim)


sudo apt-get install build-essential
sudo apt-get install vim
sudo apt-get install libxml2-dev libxslt-dev #Needed for nokogiri gem
sudo apt-get install libcurl3-dev #Needed for curb gem
sudo apt-get install git-core
sudo apt-get install curl
sudo apt-get install libpq-dev # for pg gem

Sonra MySQL kuruyoruz
sudo apt-get install mysql-server mysql-client  libmysqld-dev

Sonra RVM (Ruby Version Manager) yi kuruyoruz.
curl -L https://get.rvm.io | bash

rvm install 1.9.3                                    
bu asamada ubuntu 13de sonralari bir sorun yasamaya basladim. Kurmama ragmen sistem bana rvm nin kurulu olmadigini soylemeye basladi. rvm'nin sitesine baktigimda soyle bir alternatif cozum gordum.

\curl -sSL https://get.rvm.io | bash -s stable
\curl -sSL https://get.rvm.io | bash -s stable --ruby
\curl -sSL https://get.rvm.io | bash -s stable --ruby=1.9.3
\curl -sSL https://get.rvm.io | bash -s stable --rails
Ancak bu sekilde ruby'nin istedigim versiyonunu yukleyebildim.
 
eger sadece rvm install derseniz Ruby'nin son versiyonu kuruluyor. Ama kursta ozellikle 1.9.3 versiyorununu kullandik

rvm use 1.9.3 --default
Bu satirla da bilgisayarimizda farkli ruby versiyonlari olsa bile 1.9.3 versiyonunun default olarak kullanilmasini soyledik.

3 Sublime Text 2 (Code Editor)  kuruyoruz

Kod editor secimi aslinda tercihe kalmis ama vi konusunda tecrubeli degilseniz en yaygin editor olarak Sublime Text 2 gosteriliyor. Dolayisiyla bunu kullanmak akillica bir karar olur. Kurmak icin http://www.sublimetext.com/2 adresine bakabilirsiniz. veya benim yaptigim gibi Ubuntu Software Center a girip sublime yazarak oradaki install linkini kullanabilirsiniz. (ubuntu toolbar'da alisveris poseti seklinde olan ikon)


Ruby Test'leri icin su plugin i kurmayin unutmayin
https://github.com/maltize/sublime-text-2-ruby-tests

ERB icin https://github.com/eddorre/SublimeERB

4 RSpec ve Cucumber kuruyoruz


gem install rspec --version 2.0.0
gem install cucumber
cucumber ileride anlatacagim test ortamlarindan birisi. 

5 Son hamleler 

gem install bundler

boylelikle kurulumu tamamladik artik ihtiyacimiz olan hersey bilgisayarimizda yuklu.