SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Behat ve mink İle Davraniş odaklı
Gelİştİrme
Mustafa İLERİ
Mayıs'14 PHP - IST
Mustafa İlerİ
@mustafaileri
http://tr.linkedin.com/in/mustafaileri
mi@mustafaileri.com
www.mustafaileri.com
https://github.com/mustafaileri
http://www.slideshare.net/mustafaileri
Behavior Driven
Development
Davranıs odaklı gelistirme, test odaklı gelistirmeye
dayanarak ortaya çıkmıs bir yaılım gelistime sürecidir.
Dan North tarafından ortaya atıldı.
Amaç : Senaryoların önceden belirlenerek bunlara göre
gelistirme yapmak.
NASIL ORTAYA
ÇIKTI ?
TDD gibi çevik yöntemler kullanan Dan North, hep aynı sorunlar ve yanlıs
anlamalarla karsılasıyor.
Gelistiriciler tarafında problem olan ve cevap bekleyen sorular:
1. Nereden başlamalıyım?
2. Neyi test etmeli veya neyi test etmemeliyim?
3. Testleri nasıl adlandırmalıyım?
...
public class CustomerLookupTest extends TestCase {
testFindsCustomerById() {
...
}
testFailsForDuplicateCustomers() {
...
}
...
}
CustomerLookup
- finds customer by id
- fails for duplicate customers
- ...
TDD Testİ BDD Testİ
Kurgulanan İlk BDD TESTİ
Herşey Chris Stevenson'ın yadığı,
yanıltıcı derecede basit jUnit testini
daha anlasılır
daha kısa
hale getirmek ile basladı.
Test Odaklı Gelİştİrme
Birim Testler:
Her bir birim için yapması gereken isi doğrulayan testler olmalı.
Entegrasyon Testleri:
Parçalar birbirleri ile düzgün çalısabiliyor mu?
...
Genelde gelistirici tarafından gelistirme asamasında
koda yönelik testler yaılır.
BDD VS TDD
BDD VS TDDDavranış Odaklı GELİŞTİRME
Fonksiyonel Testler:
Uyulama üzerinde yer alan bilesenler doğru isi yapıyor mu?
Kullanıcı KabulTestleri:
Uygulama ve bilesenler belirlenen kriterlere göre uygun ve
düzgün çalısıyor mu?
...
Genelde is sahibi ve analistler tarafından anali sırasında
davranısa yönelik testler yaılır.
BDD VS TDD
BDDtestlerİyazılıMürünlerİnİzİn
sonkullanıcıvekullanıcıkabul
testlerİİçİnHARCANANzamanıönemlİ
ölçüde azaltır.
BDDtestlerİyazılıMürünlerİnİzİn
sonkullanıcıvekullanıcıkabul
testlerİİçİnHARCANANzamanıönemlİ
ölçüde azaltır.
BDDTESTLERİYenİÖzellİKlerİN
analİZlerİNİNveYazılımın
sorumluluklarınındahanetBİRşekİLDE
GELİŞTİRİCİYE BİldİrİlmesİNİ SAĞLAR
BDDTESTLERİYenİÖzellİKlerİN
analİZlerİNİNveYazılımın
sorumluluklarınındahanetBİRşekİLDE
GELİŞTİRİCİYE BİldİrİlmesİNİ SAĞLAR.
ÇALIŞAN UYGULAMALAR GELİŞTİRİRSİNİZ VE
GELİŞTİRDİĞİNİZUYGULAMALARIN
SÜRDÜRÜLEBİLİRLİĞİNDEN
EMİN OLURSUNUZ.
ÇALIŞAN UYGULAMALAR GELİŞTİRİRSİNİZ VE
GELİŞTİRDİĞİNİZUYGULAMALARIN
SÜRDÜRÜLEBİLİRLİĞİNDEN
EMİN OLURSUNUZ.
DÖKÜMANTASYON
GELİŞTİRİLEN UYGULAMANIN DÖKÜMANTASYONUNUN SÜREKLİ GÜNCEL TUTULMASINI SAĞLAR.
Testler normal İnsanların okuyabileceğİ şekİldedİr.
BDD TERMİNOLOJİLERİ
Story: Olusan veya olusması muhtemel durumu bildirir.
Scenario: Olusan veya olusması muhtemel durumlar için senaryoları bildirir.
Role: Verilen senaryoyu hangi rolle gerçeklestireceğimii belirtir.
Scrum
Hızlı Bakış
Yaılım Mühendisliği'nde bir uygulama gelistirme yöntemidir. Bu gelistirme yönteminin temel
özelliği gözlemci, gelistirmeci ve tekrara dayalı olmasıdır.
Scrum Ken Schwaber ve Jef Sutherland tarafından 1990'ların başında gelistirildi ve temel
fkirleri Schwaber (Schwaber 2004) tarafından ortaya konmustur.
SCRUM' A HIZLI BAKIŞ
Scrum Master
Ürün Sahibi
Takım
* Kullanıcı
* Yönetici
ROLLER toplantilar
Sprint Planlama Toplantıları
Günlük Scrum
Sprint Değerlendirmesi
Retropektif
Hikayeler belirlenir, davranıssal
testler ile yaılım ekibine iletilir.
Davranıssal testler çalıstırılarak,
Yayına alınmaya haır hikayeler belirlenir
As a <role>,
I want <something>
So that <benefit>
„
Product
Owner
Development
Team
Product
Backlog
Sprint
Backlog
Product
Hikayelerivedavranıssaltestleriolusturur
Takım tarafından belirleniyor.
Gelistirmeyiyapar
Testleri çalıstırarak ürünün uygulnluğunu test eder
1
2
3
4
GHERKINGHERKIN
Herkes tarafından anlasılabilen ve yaılabilen test ayırıstırıcısı.
Feature: Some terse yet descriptive text of what is desired
Textual description of the business value of this feature
Business rules that govern the scope of the feature
Any additional information that will make the feature easier to understand
Scenario: Some determinable business situation
Given some precondition
And some other precondition
When some action by the actor
And some other action
And yet another action
Then some testable outcome is achieved
And something else we can check happens too
Scenario: A different situation
...
Cucumber
(Ruby)
jbehave
(java)
nbehave
(c#)
specflow
(c#)
freshen
(python)
lettuce
(python)
BEHAT
(PHP)
İs gelistirmenin beklentilerini test etmeye yarayan bir PHP çatısıdır.
Konstantin Kudryashov tarafından gelistirildi.
En güncel sürümü 3.0
BEHAT Nedİr?
{
"require": {
"behat/behat": "2.4.*@stable"
},
"config": {
"bin-dir": "bin/"
}
}
KURULUM kullanım
bin/behat –init
vim features/your_first.feature
-------------------------------------------
Feature: Your first feature
In order to start using Behat
As a manager or developer
I need to try
Scenario: Successfully describing scenario
Given there is something
When I do something
Then I should see something
-------------------------------------------
bin/behat
Test Projesi Olusturmak
Behat'ı yükledikten sonra test diini olusturulup test projesi için gerekli kod alt
yapısı olusturulur.
cd ls_project
app/behat –-init
+d features - place your *.feature files here
+d features/bootstrap - place your context classes here
+f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here
Özellik Tanımlama(Feature)
Behat'ta istenilen özellik önce tanımlanır ve belirtilir sonrasında bu tanımlamaya
göre implemente edilir.
# features/ls.feature
Feature: ls
In order to see the directory structure
As a UNIX user
I need to be able to list the current directory's contents
Senaryo Tanımlama(Scenario)
Bir sonraki adım, belirtilen özelliklerin senaryoları belirlenir.
Scenario: List 2 files in a directory
Given I am in a directory "test"
And I have a file named "foo"
And I have a file named "bar"
When I run "ls"
Then I should get:
"""
bar
foo
"""
Step Defnitions
Diyelim ki
Eğer ki
O zaman
Adım Tanımları(Step Defnitons)
Senaryoda bulunan beklentileri anlatan anlamli cümleler ve bunların yapacağı
isin tanımı.
1 scenario (1 undefined)
5 steps (5 undefined)
0m0.02s (9.55Mb)
--- FeatureContext has missing steps. Define them with these snippets:
/**
* @Given I am in a directory :arg1
*/
public function iAmInADirectory($arg1)
{
throw new PendingException();
}
/**
* @Given I have a file named :arg1
*/
public function iHaveAFileNamed($arg1)
{
throw new PendingException();
}
/**
* @When I run :arg1
*/
public function iRun($arg1)
{
throw new PendingException();
}
/**
* @Then I should get:
*/
public function iShouldGet(PyStringNode $string)
{
throw new PendingException();
}
<?php
use BehatBehatContextBehatContext;
use BehatGherkinNodePyStringNode;
class FeatureContext extends BehatContext
{
private $output;
/** @Given /^I am in a directory "([^"]*)"$/ */
public function iAmInADirectory($dir)
{
if (!file_exists($dir)) {
mkdir($dir);
}
chdir($dir);
}
/** @Given /^I have a file named "([^"]*)"$/ */
public function iHaveAFileNamed($file)
{
touch($file);
}
/** @When /^I run "([^"]*)"$/ */
public function iRun($command)
{
exec($command, $output);
$this->output = trim(implode("n", $output));
}
/** @Then /^I should get:$/ */
public function iShouldGet(PyStringNode $string)
{
if ((string) $string !== $this->output) {
throw new Exception(
"Actual output is:n" . $this->output
);
}
}
}
MINKMINK
PHP 5.3+ üzerinde çalısan web
uygulamalrı için kullanıcı
kabul test çatısıdır.
Kurulum ve Hizli Konfİgürasyon
{
"require": {
"behat/behat": "2.4.*@stable",
"behat/mink": "1.4.*@stable",
"behat/mink-extension": "*",
"behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*"
},
"minimum-stability": "dev",
"config": {
"bin-dir": "bin/"
}
}
use BehatMinkExtensionContextMinkContext;
class FeatureContext extends MinkContext
{
......
Mink Hazır Adım tanımlamaları
Given /^(?:|I )am on (?:|the )homepage$/
When /^(?:|I )go to (?:|the )homepage$/
Given /^(?:|I )am on "(?P<page>[^"]+)"$/
When /^(?:|I )go to "(?P<page>[^"]+)"$/
When /^(?:|I )reload the page$/
When /^(?:|I )move backward one page$/
When /^(?:|I )move forward one page$/
When /^(?:|I )press "(?P<button>(?:[^"]|")*)"$/
When /^(?:|I )follow "(?P<link>(?:[^"]|")*)"$/
When /^(?:|I )fill in "(?P<field>(?:[^"]|")*)" with "(?P<value>(?:[^"]|")*)"$/
When /^(?:|I )fill in "(?P<field>(?:[^"]|")*)" with:$/
When /^(?:|I )fill in "(?P<value>(?:[^"]|")*)" for "(?P<field>(?:[^"]|")*)"$/
When /^(?:|I )fill in the following:$/
When /^(?:|I )select "(?P<option>(?:[^"]|")*)" from "(?P<select>(?:[^"]|")*)"$/
When /^(?:|I )additionally select "(?P<option>(?:[^"]|")*)" from "(?P<select>(?:[^"]|")*)"$/
When /^(?:|I )check "(?P<option>(?:[^"]|")*)"$/
When /^(?:|I )uncheck "(?P<option>(?:[^"]|")*)"$/
When /^(?:|I )attach the file "(?P[^"]*)" to "(?P<field>(?:[^"]|")*)"$/
Then /^(?:|I )should be on "(?P<page>[^"]+)"$/
Then /^(?:|I )should be on (?:|the )homepage$/
Then /^the (?i)url(?-i) should match (?P<pattern>"([^"]|")*")$/
Then /^the response status code should be (?P<code>d+)$/
Then /^the response status code should not be (?P<code>d+)$/
Then /^(?:|I )should see "(?P<text>(?:[^"]|")*)"$/
Then /^(?:|I )should not see "(?P<text>(?:[^"]|")*)"$/
Then /^(?:|I )should see text matching (?P<pattern>"(?:[^"]|")*")$/
Mink Hazır Adım tanımlamaları
Then /^(?:|I )should not see text matching (?P<pattern>"(?:[^"]|")*")$/
Then /^the response should contain "(?P<text>(?:[^"]|")*)"$/
Then /^the response should not contain "(?P<text>(?:[^"]|")*)"$/
Then /^(?:|I )should see "(?P<text>(?:[^"]|")*)" in the "(?P<element>[^"]*)" element$/
Then /^(?:|I )should not see "(?P<text>(?:[^"]|")*)" in the "(?P<element>[^"]*)" element$/
Then /^the "(?P<element>[^"]*)" element should contain "(?P<value>(?:[^"]|")*)"$/
Then /^the "(?P<element>[^"]*)" element should not contain "(?P<value>(?:[^"]|")*)"$/
Then /^(?:|I )should see an? "(?P<element>[^"]*)" element$/
Then /^(?:|I )should not see an? "(?P<element>[^"]*)" element$/
Then /^the "(?P<field>(?:[^"]|")*)" field should contain "(?P<value>(?:[^"]|")*)"$/
Then /^the "(?P<field>(?:[^"]|")*)" field should not contain "(?P<value>(?:[^"]|")*)"$/
Then /^the "(?P<checkbox>(?:[^"]|")*)" checkbox should be checked$/
Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" (?:is|should be) checked$/
Then /^the "(?P<checkbox>(?:[^"]|")*)" checkbox should not be checked$/
Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" should (?:be unchecked|not be checked)$/
Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" is (?:unchecked|not checked)$/
Then /^(?:|I )should see (?P<num>d+) "(?P<element>[^"]*)" elements?$/
Then /^print current URL$/
Then /^print last response$/
Then /^show last response$/
Örnek Uygulama
Feature: php-ist 2014 etkinlik bilgilerini kontrol eder
Bu test etkinligin tarih yer ve konusmaci bilgilerini kontrol eder.
Background:
Given I am on homepage
Scenario: Etkinligin "3rd May 2014" tarihinde olup olmadigini kontrol edelim.
Then I should see "3rd May 2014"
Scenario: Konusmacilari test edelim.
Then I follow "Speakers"
Then I should see "Mehmet Karcı"
Then I should see "Osman Üngür"
Then I should see "Hugo Hamon"
Then I should see "Mustafa İleri"
Then I should see "Lemi Orhan Ergin"
Then I should see "Ramazan Korkmaz"
Then I should see "Hugo Hamon"
Then I should see "Alvaro Videla"
Then I should see "Suat İmamoğlu"
Then I should not see "Fatih Gürsoy"
@javascript
Scenario: Google sayfa testi
Then I search on google with "php ist"
Then I should see "php-ist PHP Conference 2014"
@javascript
Scenario: Mekan kisminda google maps haritasini kontrol edelim
Then check maps on venue
Örnek Uygulama
<?php
use BehatMinkExtensionContextMinkContext;
class FeatureContext extends MinkContext
{
/**
* @Then /^I search on google with "([^"]*)"$/
*/
public function iSearchOnGoogleWith($arg1)
{
$this->getSession()->visit('http://www.google.com.tr');
$page = $this->getSession()->getPage();
$page->find('css', 'input[type=text]')->setValue($arg1);
$page->find('css', 'button')->click();
$this->getSession()->wait(500);
}
/**
* @Then /^check maps on venue$/
*/
public function checkMapsOnVenue()
{
$page = $this->getSession()->getPage();
$page->findLink('Venue')->click();
$this->assertElementOnPage(
'html body div div#schedule.section section#venue.section div.inner
div.content div#map_canvas div.gm-style');
}
}
Örnek Uygulamalar
https://github.com/phpistorg/behat-testleri
https://github.com/phpistorg/behat-mink-testleri
Jıra EklentİSİ
Jira eklentisi, BDD testlerinin uygun formatta yaılarak bu testlerin gelistiriciye is
olarak gelmesini sağlar.
Eğer testler basarılı olursa is cozulerek kapatılır.
Aksi durumda basarısız olma nedeni isin içine yaılır.
http://etensions.behat.org/jira-etension/
Kaynakça
http://dannorth.net/introducing-bdd/
http://en.wikipedia.org/wiki/Behavior-driven_development
http://behat.org/
http://www.slideshare.net/mhelmich/t3con13?qid=bf6b3e7d-560d-4a03-8f60-20683c7cc2cb&v=qf1&b=&from_search=3
http://www.slideshare.net/davidcontavalli1/zf2-bdd?qid=bf6b3e7d-560d-4a03-8f60-20683c7cc2cb&v=qf1&b=&from_search=1
http://www.slideshare.net/nyccamp/behat-by-seth-cohn
http://www.slideshare.net/headrevision/web-acceptance-testing-with-behat?qid=6021a166-eac0-435d-bf66-ee08d4c7bdef&v=qf1&b=&from_search=7
http://selimober.com/blog/2013/07/19/bdd-ye-giris/
http://www.mountaingoatsofware.com/blog/the-forgotten-layer-of-the-test-automation-pyramid
http://watirmelon.com/2011/06/10/yet-another-sofware-testing-pyramid/
http://martinfowler.com/bliki/TestPyramid.html
http://mink.behat.org/
http://www.mustafaileri.com/pot/60579550214/behat-ve-mink-ile-bdd-testleri-eski-ya

Mais conteúdo relacionado

Semelhante a Davranis Odakli Gelistirmeye Giris, Behat ve Mink

Analist Eğitimi - Tüm Bölümler - [535 Slides]
Analist Eğitimi - Tüm Bölümler -  [535 Slides]Analist Eğitimi - Tüm Bölümler -  [535 Slides]
Analist Eğitimi - Tüm Bölümler - [535 Slides]Erol Bozkurt
 
Wpgunleri 2014 fatihtoprak.com
Wpgunleri 2014 fatihtoprak.comWpgunleri 2014 fatihtoprak.com
Wpgunleri 2014 fatihtoprak.comFatih Toprak
 
PHPUnit ve Laravel
PHPUnit ve LaravelPHPUnit ve Laravel
PHPUnit ve LaravelOsman Yuksel
 
Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Erol Dizdar
 
E-ticarette Yazılım ve Altyapı
E-ticarette Yazılım ve AltyapıE-ticarette Yazılım ve Altyapı
E-ticarette Yazılım ve AltyapıMurat Kader
 
JİRA'ya Giriş / Atlassian
JİRA'ya Giriş / AtlassianJİRA'ya Giriş / Atlassian
JİRA'ya Giriş / AtlassianCansu Kaya
 
İş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test Teknikleriİş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test TeknikleriOnur Baskirt
 
Php testleri
Php testleriPhp testleri
Php testlerisersld89
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysisAttaporn Ninsuwan
 
Nesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflarNesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflarErol Dizdar
 
Web İçin Teknoloji Geliştirmek
Web İçin Teknoloji GeliştirmekWeb İçin Teknoloji Geliştirmek
Web İçin Teknoloji GeliştirmekVolkan Özçelik
 
CBAP Uluslararası İş Analisti Sertifikasyonu
CBAP Uluslararası İş Analisti SertifikasyonuCBAP Uluslararası İş Analisti Sertifikasyonu
CBAP Uluslararası İş Analisti SertifikasyonuMuhammed Özdemir
 
Php egitim-seti
Php egitim-setiPhp egitim-seti
Php egitim-setisersld89
 
005 Alternatif Yazilim Surecleri [99 Slides]
005 Alternatif Yazilim Surecleri [99 Slides]005 Alternatif Yazilim Surecleri [99 Slides]
005 Alternatif Yazilim Surecleri [99 Slides]Erol Bozkurt
 

Semelhante a Davranis Odakli Gelistirmeye Giris, Behat ve Mink (20)

Analist Eğitimi - Tüm Bölümler - [535 Slides]
Analist Eğitimi - Tüm Bölümler -  [535 Slides]Analist Eğitimi - Tüm Bölümler -  [535 Slides]
Analist Eğitimi - Tüm Bölümler - [535 Slides]
 
Wpgunleri 2014 fatihtoprak.com
Wpgunleri 2014 fatihtoprak.comWpgunleri 2014 fatihtoprak.com
Wpgunleri 2014 fatihtoprak.com
 
PHPUnit ve Laravel
PHPUnit ve LaravelPHPUnit ve Laravel
PHPUnit ve Laravel
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Sunucu işletim sistemi 6
Sunucu işletim sistemi 6
 
E-ticarette Yazılım ve Altyapı
E-ticarette Yazılım ve AltyapıE-ticarette Yazılım ve Altyapı
E-ticarette Yazılım ve Altyapı
 
Çevik Yaklaşım ve Scrum
Çevik Yaklaşım ve ScrumÇevik Yaklaşım ve Scrum
Çevik Yaklaşım ve Scrum
 
Çevik Yaklaşım, Scrum ve XP
Çevik Yaklaşım, Scrum ve XPÇevik Yaklaşım, Scrum ve XP
Çevik Yaklaşım, Scrum ve XP
 
Selenium
SeleniumSelenium
Selenium
 
Komut satırı JAVA
Komut satırı JAVAKomut satırı JAVA
Komut satırı JAVA
 
JİRA'ya Giriş / Atlassian
JİRA'ya Giriş / AtlassianJİRA'ya Giriş / Atlassian
JİRA'ya Giriş / Atlassian
 
İş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test Teknikleriİş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test Teknikleri
 
Php testleri
Php testleriPhp testleri
Php testleri
 
Php testi
Php testiPhp testi
Php testi
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysis
 
Nesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflarNesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflar
 
Web İçin Teknoloji Geliştirmek
Web İçin Teknoloji GeliştirmekWeb İçin Teknoloji Geliştirmek
Web İçin Teknoloji Geliştirmek
 
CBAP Uluslararası İş Analisti Sertifikasyonu
CBAP Uluslararası İş Analisti SertifikasyonuCBAP Uluslararası İş Analisti Sertifikasyonu
CBAP Uluslararası İş Analisti Sertifikasyonu
 
Php egitim-seti
Php egitim-setiPhp egitim-seti
Php egitim-seti
 
005 Alternatif Yazilim Surecleri [99 Slides]
005 Alternatif Yazilim Surecleri [99 Slides]005 Alternatif Yazilim Surecleri [99 Slides]
005 Alternatif Yazilim Surecleri [99 Slides]
 

Mais de Mustafa Ileri

PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)
PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)
PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)Mustafa Ileri
 
Http Multipart Batch Request
Http Multipart Batch RequestHttp Multipart Batch Request
Http Multipart Batch RequestMustafa Ileri
 
Continuous Integration Bamboo ve Php Uygulaması
Continuous Integration Bamboo ve Php UygulamasıContinuous Integration Bamboo ve Php Uygulaması
Continuous Integration Bamboo ve Php UygulamasıMustafa Ileri
 
Denetmen Bundle (Manage your routes like a boss!)
Denetmen Bundle (Manage your routes like a boss!)Denetmen Bundle (Manage your routes like a boss!)
Denetmen Bundle (Manage your routes like a boss!)Mustafa Ileri
 
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve OnerilerGelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve OnerilerMustafa Ileri
 
Scalability performance on_php
Scalability performance on_phpScalability performance on_php
Scalability performance on_phpMustafa Ileri
 

Mais de Mustafa Ileri (6)

PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)
PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)
PHP Projelerinde CI ve CD Süreçleri (PHPKonf- 2018)
 
Http Multipart Batch Request
Http Multipart Batch RequestHttp Multipart Batch Request
Http Multipart Batch Request
 
Continuous Integration Bamboo ve Php Uygulaması
Continuous Integration Bamboo ve Php UygulamasıContinuous Integration Bamboo ve Php Uygulaması
Continuous Integration Bamboo ve Php Uygulaması
 
Denetmen Bundle (Manage your routes like a boss!)
Denetmen Bundle (Manage your routes like a boss!)Denetmen Bundle (Manage your routes like a boss!)
Denetmen Bundle (Manage your routes like a boss!)
 
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve OnerilerGelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
 
Scalability performance on_php
Scalability performance on_phpScalability performance on_php
Scalability performance on_php
 

Davranis Odakli Gelistirmeye Giris, Behat ve Mink