Ugulamalardaki Temel Güvenlik Açıkları ve Alınması Gereken Önlemler

Şifre Güvenliği

Uygulamalarda şifre karmaşıklığı ile ilgili temel konulara dikkat edilmelidir. Aksi takdirde sistemler kolayca tahmin edilebilir şifrelere izin veriyorsa saldırganlara kolay hedef olabilir.

Önlem:
-Şifreler en az 6–8 karakterden oluşmalıdır
-İçerisinde en az 1 adet alfanumerik bir karakter olmalıdır.
-Mümkünse 1 adet noktalama işareti içermelidir.
-Parola değişikliğinde en azından önceki 2 parola ile aynı olmamalıdır.

Login Güvenliği

Sisteme login olma sırasında maksimum hatalı şifre girme sınırı konulmalıdır. Aksi takdirde herhangi bir otomatize client ile deneme yöntemini kullanarak kullanıcı adı ve şifre tahminlemesi yapılabilir.

Önlem:
-Maksimum 3 hatalı şifre girişi yapıldığında kullanıcı kilitlenmelidir.

Cookie Güvenliği

Cookie’ler sistemlerimizde genellikle kullanıcının kimliğine dair bilgileri browserler üzerinde saklamak için kullanılmaktadır. Örneğin kullanıcı uygulamaya login olduğunda serverde uygulama bir session oluşturur ve bunun id bilgisini cookie ile browsere gönderir. Browserlerde bu bilgiyi kolaylıkla görebilirsiniz. Bu bilgi eğer erişilebilir durumdaysa farklı yöntemlerle saldırganlar bu bilgileri elde edebilir.

Önlem:
-Cookilerin javascript ile erişilmesini engellemek “httpOnly” flaginin olması gerekmektedir. Bu sayede browserde çalıştırılan bir javascript kodu ile cookie bilgisine erişilemez, browser bunu engelleyecektir.
-https protokolü kullanlıyor ise “secure” flaginin olması gerekmektedir. Bu sayede browser requestleri gönderirken yalnızca https protokolü kullanıldığında cookie bilgilerini requeste ekleyecektir.
-Cookielere bir yaşam süresi verilmelidir.

URL Güvenliği/Form Güvenliği

Hassas bilgilerin url/Form üzerinde taşınması riskler oluşturmaktadır. Aşağıdaki linkte yapılan işlemde saldırgan “user” bilgisini değiştirerek farklı bir kullanıcının şifresini değiştirebilir.

http://www.abc.com/sifredegistir?user=demo&pwd1=123&pwd2=123

Önlem:
-Bu tarz bilgilerin url/Form üzerinde değil session gibi server side’de kullanıcıların doğrudan erişemediği alanlarda taşınmalıdır.
-jsf deki ViewScope bu konuda ciddi bir kolaylık sağlamaktadır, jsf projelerinde ViewScope kullanılarak hassas bilgiler ManagedBean’lar üzerinde tutulmalıdır.

Dış Sistemlerle Yapılan Entegrasyonların Güvenliği

Uygulamalar dışarıdan uygulamamıza ya da uygulamamızda dış sistemlere entegrasyonlar yapıyoruz. Bunun için webservisler yaratıyoruz ya da çeşitli teknolojiler ile entegrasyon kanalları oluşturuyoruz. Dışarıya açtığımız herhangi bir adres saldırganların hedefinde olabilir.

Önlem:
-Dışarıya açtığımız web servis ya da adreslerin bir kullanıcı doğrulaması ile erişilebilir olması gerekli
-Gönderilen verilerin erişen kullanıcının yetkisine göre sağlandığından emin olunmalı
-Dışarıdan aldığımız verilerin diğer maddelerde bahsettiğim filtre/kontrollerden geçmesi gerekli

ssl Bağlantı

Uygulamalarımızda sistem ve veri güvenliği açısından https protokolü kullanılmalıdır. Aksi durumda networkü dinleyen bir saldırgan kullnıcılara/şirkete dair bilgileri ele geçirebilir. Kullanıcının Session ID bilgisi ele geçirildiğinde o kullanıcı gibi sisteme erişilebilir.

Önlem:
-Sunuculara https protokolü için ssl sertifikaları kurulmalıdır.

csrf Koruma(Cross Site Reference Forgery)

csrf, Özellikle get request’leri ile oturum açmış kullanıcının yetkilerini kullanarak oturum açtıkları sistemde çeşitli işlemler yapmalarını sağlayarak saldırı yapma çeşididir. Örneğin sistemde şifre değiştirme sayfası olsun ve bu sayfa get requestlerini de dinlesin. Bu durumda otrurum açmış olan kullanıcıya bir e-mail içerisinde aşağıdaki html content gönderildiğini varsayalım.

<“img src = “http://www.abc.com/sifredegistir?user=demo&pwd1=123&pwd2=123″/>

Bu durumda oturum açmış kullanıcı e-maili aynı browserde açtığında kullanıcı www.abc.com sisteminde session oluşturduğu için sisteme yukarıdaki request gider, saldırgan kullanıcının parolasını belirlediği şekilde değiştirmiş olur ve sistemde istediği şeyi yapabilir.

Bu konuyu sadece böyle kısıtlı düşünmemek gerekir, örneğin bir get requesti ile onay mekanizmasının çalıştığı bir ekranda da bir şeyin onaylanması bu yöntemle sağlanabilir.

Önlem:

-Captcha ya da csrf_token gibi her requestte değişen bilgi doğrulama mantığı kullanılabilir.
-Transactional işlemlerde get yöntemi kullanmamak gereklidir.

HTML formlara “csrf_token” adında bir hidden alan eklenir. Bu alan form her render edildiğinde farklı değer alır bu bilgi server side’da saklanır. Kullanıcı bu formu post ettiğinde form datasi ile gelen “csrf_token” ile serverde tutulan token bilgisi aynı ise istek işleme alınır. Aksi takdirde işlem yarıda kesilir.

Bu önlemler özellikle public sayfalarda kolayca sisteme attack yapmayı önlemeye yardımcı olur.

xss (Cross Side Scripting) Koruma

Cross site scripting (xss), html kodlarının arasına istemci tabanlı kod gömülmesi yoluyla kullanıcının tarayıcısında istenen istemci tabanlı kodun çalıştırılabilmesi olarak tanımlanır.

Uygulamada bir form içeren sayfa olduğunu düşünelim; bu formda kullanıcıdan çeşitli bilgiler alınıyor ve veritabanına kaydedilip sonrasında yine başka bir sayfada listeleniyor. Eğer saldırgan bu form bilgileri içerisinde kullanıcının cookie bilgilerini okuyan ve başka bir url‘e get metodu ile gönderecek bir javascript eklerse oturum açan kullanıcının Session ID bilgisini ele geçirip sisteme o kullanıcının yetkileri ile erişebilir. Browser üzerinde client side’da yapılabilecek herşeyi yapabilir.

Önlem:
-Kullanıcılardan alınan verilerdeki javascript, html içeren veriler filtrelenmelidir.

sql Injection Koruması

Uygulamalarımız temelde crud işlemleri yapmaktadır. Bu işlemleri gerçekleştirirken sql scriptleri kullanıyoruz. Ve veritabanına gönderdiğimiz bilgiler kullanıcıların girdiği veriler olmaktadır.

Örneğin delete http://www.abc.com/tipsil?id=123 url‘i ile 123 id’li kaydı silecek bir işlem tetikleyelim. Ve bunun sonucunda aşağıdaki kodun çalıştığını düşünelim;

stmt.executeUpdate(“delete from tipler where id = “+tipId);

Saldırgan url‘i aşağıdaki gibi değiştirirse tablodaki tüm kayıtları silebilir;

http://www.abc.com/tipsil?id=123 OR 1=1

Bu işlem sql injetion olarak tanımlanmaktadır. Bu yöntemle uygulamalara çok ciddi zararlar verilebilir.

Önlem:
-Her türlü çalıştırılan sql scriptini “PreparedStatement” kullanarak çalıştırılmalıdır.
-jpa,Hibernate vb. gibi orm araçları kullanılmalıdır
-DB prosedürleri kullanılabilir
-Kullanıcılardan alınan verilerdeki tırnak,çift tırnak, ampersand, büyük, küçük vb. gibi sql scriptlerini bozacak veriler filtrelenmelidir.

Uygulamalardaki Güvenlik Açıklarının Tespiti

Uygulamalarda güvenlik açıklarını çeşitli araçlar ile yukarıdaki başlıklar kapsamında tespit edebiliriz. Aşağıda bazı opensource araçları bulabilirsiniz;

  • OWASP Zed Attack Proxy (https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)
  • SqlMap (http://sqlmap.org)
  • Wapiti (http://wapiti.sourceforge.net)

Bizim tercih ettiğimiz uygulama owasp Zed Attack Proxy dir. Bu uygulamanın kullanımı temel olarak şöyledir;

-Uygulama açıldıktan sonra “Quick Start” ekranındaki “url to attack” bölümüne test etmek istediğiniz adresi yazın.

-Sonra “Launch Browser” butonu ile bir browser açılacaktır. Bu browser Zend Attack üzerindeki proxy ile çalışır, bu sayede belirtilen adreste yapılan tüm requestler kaydedilir. Browser açıldıktan sonra test etmek istediğiniz senaryoda uygulamada gezinin ve gezintiyi tamamlayın.

-Sonra Sol tarafta “Sites” bölümünde gezindiğiniz adres klasörlenmiş olarak görüntülenecektir. Bu klasöre sağ tıklayıp “Attack > Active Scan” adımlarını izleyerek testi başlatın.

-Sonuçları alt bölümde bulunan “Alerts” kısmında görülecektir.

MySQL Table Recovery

MySQL’de sunucuyu bir şekilde ayağa kaldıramıyorsunuz ve hiç bir işlem yapamıyorsunuz. Elinizde sadece .frm ve .ibd dosyaları var. Bu durumda DB’nizi kurtarmak için aşağıdaki yolu deneyebilirsiniz.

  • Bilgisayarınıza MySQL Utilities uygulamasını kurun ve aşağıdaki adımları takip edin.
  • Utilities içerisindeki mysqlfrm komutu ile  tablonun DDL scriptini oluşturun

                 mysqlfrm –diagnostic C:\db\table_name.frm

  • Sonra bu scripti yeni DB’nizde çalıştırın ve tablonuzu create edin.
  • Sonra aşağdaki komut ile default oluşan ibd file silin

                alter table table_name discard tablespace

  • Sonra elinizdeki table_name.ibd dosyasını yeni databasinizin dizinine kopyalayın
  • Sonra aşağıdaki komut ile table_name.ibd dosyasındaki dataları mevcut tablespace’a aktarın

               alter table table_name import tablespace

  • Sonra select * from table_name komutu ile datalarınızı kontrol edin.

 

Hash/Encryption/Decryption

Önemli bilgilerimizi saklamak isteriz. Birileri bu bilgilere kolayca erişemesin, erişse bile kolayca anlaymasın isteriz. Ya da birisine bir bilgi gönderirken gönderdiğim bilginin gizli ve doğru bir şekilde karşı tarafa ulaşmasını isteriz.

Bunu yapmak için sistemler bizlere çeşitli önlemler sağlar; örneğin bir e-posta servisini kullanıyor olun, bu servis size bir kullanıcı kodu ve parola sağlayacaktır. Servisin sizi tanıyabilmesi için tabiki belirlediğiniz parolayı bir veritabanında saklaması gerekmekte. Bu e-posta servisinin size özel olan parolayı kimsenin anlayamayacağı şekilde saklaması gerekmekte. İşte bu noktada da şifreleme karşımıza çıkıyor. Parolanızın veritabanında şifreli olması gerekli ki bir şekilde e-posta servisinin veritabanı kötü niyetli kişiler tarafından ele geçirilse bile parolanız kolaylıkla anlaşılıp ele geçirilemesin.

Farkında olmasak bile internette sörf yaparken bazı siteler bizlere kendilerine erişimde güvenliği sağlıyorlar. Bunu browserların adres çubuğundaki yeşil ikonlar ile anyabiliyoruz. Bu demek oluyor ki o siteye girdiğinizde yaptığınız her işlem sadece sizin ve o sitenin anlayabileceği şekilde gerçekleşiyor. Networkünüzü gizlice dinleyen kötü niyetli yazılımlar/kişiler sizin o site ile aranızdaki bilgileri ele geçirse bile anlayamıyor çünkü bilgiler şifreli şekilde transfer ediliyor.

Cep telefonlarımızda bile “cihazı şifrele”, “SD kartı şifrele” gibi özellikler mevcut. Bu işlem de telefonunuzu kaybetseniz bile içerisindeki verileri kimsenin anlayamamasını sağlıyor.

Hayatımızda birçok yerde biz farkında olmasak bile sistemler hem kendilerini hemde kullanıcılarının güvenliğini sağlamak için şifrelemeyi kullanıyorlar.

Öncelikle şifreleme algoritmalarının kullanıldığı bir alan olan, yukarıda da değindiğim hashing konusundan bahsetmek istiyorum.

Hashing

Hash; bir metinden üretilen başka bir metin veya sayıdır. Ortaya çıkan metin veya sayı sabit uzunlukta ve girdideki içeriğe göre çok geniş çapta değişen yapıdadır. En iyi hash algoritmaları hash kodunu orjinal haline geri dönüştürülemeyecek şekilde üretmek için tasarlanmışlardır.

En popüler hashing algoritmaları; MD5, SHA, SHA-2’dir.

Bir web sitesinden bir program indirirken indirme linklerinin yanında birde “download check sum” linkleri görürsünüz; bu link ile karmaşık bir kod indirirsiniz ve bu kod ile indirdiğiniz dosyayı doğrularsınız. İndirdiğiniz bu kod dosyanızın tamamından bir şifreleme algoritması ile elde edilmiştir. Dosyayı indirdikten sonra sizde çeşitli programlar kullanarak indirdiğiniz, bilgisayarınızda olan dosyanın kodunu üretebilirsiniz. Ürettiğiniz bu kod ile sağlayıcının size verdiği kodu karşılaştırarak dosyanın değişmemiş olduğunu anlarsınız. Dosya bir şekilde değişmiş olabilir, bunu ancak bu şekilde anlayabilirsiniz. Bu işleme hashing denilmektedir.

Bunun yanında yukarıda bahsettiğim gibi sistemler parolaları veritabanlarında saklarlar ve bunları şifreli olarak saklarlar. Hashing işlemi parola saklama sürecine çok uygun bir yapıdadır. Çünkü saklanan hash verisinin geri dönüştürülmesi imkansızdır.

Bu tarz verileri saklarken oluşan hashi tahmin etmesi zor hale de getirmek gerekebilir. Yani brute force yönemler ile saklanan hash verisini tahmin edebilirler. Bunu önlemek için hash işlemi yapmadan önce veriye salt(tuz) diye adlandırılan farklı bir veri daha eklenir. Bu sayede brute force yöntemi ile tahmin etmeyi daha da zorlaştırmış oluruz.

Algoritma(Şifrelenecek metin + salt) = hash kodu

Yukarıda hashing işlemi ile bir veriyi geri dönüştürülemeyecek şekilde saklamadan bahsettim. Peki şifrelenmiş olarak saklanan ve geri dönüştürülmesi gereken durumları nasıl yönetebileceğimizden bahsedelim.

Encryption / Decryption

Bir uygulamada kullanıcıya gönderdiğimiz parola e-postasını saklamak istiyoruz, çünkü ne zaman kaç adet parola e-postasının gönderildiğini raporlamak istiyorum ya da e-postanın gönderilme esnasında bir hatadan dolayı gönderilememesi durumunda tekrar gönderecek bir yapı oluşturacağım. Fakat parola e-postası içerisinde sadece kullanıcının bilmesi gereken parola bilgisi var. E-postanın gönderim esnasında hataya düştüğünü varsayıyorum ve tekrar göndereceğim, bu durumda veritabanına şifreli kaydettiğim e-posta içeriğini çözümleyip tekrar e-posta sunucusuna göndermeliyim.

Ya da iki sistem arasında veri haberleşmesi yapmak istiyoruz fakat veriler güvenli bir şekilde transfer edilmeli. Yani elimde bir metin var bunu şifreleyeceğim, herhangi bir yöntemle(tcp, http…) karşı sisteme transfer edeceğim ve sonrasında karşı sistem bu şifrelenmiş veriyi çözüp anlaşılır hale getirecek ve kullanacak.

Bu tarz durumlarda kullanılmak üzere iki çeşit yöntem vardır;

Simetrik Anahtarlı Şifreleme / Asimetrik Anahtarlı Şifreleme

Simetrik Anahtarlı Şifreleme; Bir arabanız olduğunu düşünün arabayı açıp kapatırken anahtar kullanırsınız. Şifrelemede de durum aynıdır. Veriyi şifrelerken ve çözerken elinizde aynı anahtar olmalıdır.

Simetrik anahtarlı şifrelemede elinizde tek çeşit key (anahtar) bulunur ve bunu sadece belirlenen taraflar bilir. Yukarda bahsettiğim parola e-postası şifreleme işlemi için simetrik anahtarlı şifreleme uygundur.

Asimetrik Anahtarlı Şifreleme; Bu yöntemde iki adet key(anahtar) olması gerekir. Bunlara public key ve private key adı verilir. Bu anahtarların çalışma şekli şöyledir; Private key ile şifrelenmiş veri sadece public key ile çözülebilir ya da public key ile şifrelenmiş veri sadece private key ile çözülebilir.

Bu yöntem yukarıda da bahsettiğim HTTPS (SSL/TLS) ile web sitelerinin güvenli veri transferi yapmalarında kullanılır. HTTPS protokolünde private key web sitesi serverinde bulunur, public key ise herkesin erişebileceği şekildedir. Browserler HTTPS ile erişim yapılmaya başlandığında öncelikle public key’i indirir ve sucuya verileri transfer ederken public key ile verileri servere şifreleyerek transfer eder. Gelen verileri sunucu private key ile çözümleyip kullanır.

Asimetrik anahtarlı şifreleme için kullanılan popüler algoritma RSA tercih edilebilir.

Evet hayatımızın birçok yerinde şifreleme var fakat yaptığımız şifreleme işlemi ne kadar güvenli ne kadar güçlü? Yaptığımız şifreleme işleminin güçlü olması önemlidir. Bir şekilde verilerimiz şifrelenmiş olarak dahi birilerinin eline geçse çeşitli yöntemler ile şifrelenmiş veri çözülebilir.

Temel amaç bir bilginin güvenli bir şekilde başka bir tarafa gönderilmesi ya da saklanıp tekrar geri alınmasıdır. Burada şifrelemenin iki önemli özelliği ortaya çıkmaktadır gizlilik ve doğruluk/güvenilirlik.

Herhangi bir şifreleme işlemini güçlü hale getirmek için aşağıdaki parametrelerin doğru şekilde yapılandırılması gerekmektedir;

  • Algoritma(Algorithm) 

İki tür şifreleme yönteminden bahsetmiştik, her şifreleme türünde farklı algoritmalar kullanılmaktadır. Son dönemde türlere göre önerilen algoritmalar; simetrik şifreleme için AES, asimetrik şifreleme için RSA’dır. Bu türlere göre şifreleme işlemi yapılırken farklı operasyon modları kullanılır. Bu operasyon tipleri şifreleme algoritmalarının nasıl uygulanacağını belirler. Bu konuyu biraz daha detaylı olarak operasyon modları bölümünde inceleyeceğiz.

  • Başlangıç Vektörü(Initialization Vector – IV)

Bir metni sabit bir key ile şifrelediğinizde sonuç olarak oluşan şifrelenmiş metin her zaman aynı olacaktır. Bu durum şifrelenmiş metnin üzerinden çeşitli paternler çıkartarak açık metni tahmin etmeyi kolaylaştırır. Bu sebepten GCM gibi operasyon modları ile şifreleme işlemi esnasında açık metnin başına random IV ekleyerek her seferinde şifrelenmiş metnin farklılaşmasını sağlar ve tahmine bağlı çözümleme saldırılarını engellemiş oluruz.

  • Doğrulama Etiketi (Authentication Tag)

Yukarıda bahsettiğim şifrelemenin iki önemli özelliği olan gizliliği ve doğruluk/güvenilirliği sağlamak için diğer bir yöntem bulunmaktadır. IV ile verinin gizliliğini arttırabiliyoruz. Verinin doğruluğunu/güvenilirliğini arttırmak için ise Authenticated Encryption(AE) yöntemleri kullanılabiliyor. Bu yöntemlerin çalışma şekli kısaca şöyledir;

Blok şifreleme işleminde algoritmanın özelliklerine göre metin bloklara ayrılır. Yukarıda görüldüğü gibi açık metin bloklara ayrılarak şifreleme anahtarı ile şifreleniyor. Sonrasında bu metinlerden MAC(Message Authentication Code) üretmek için hash işlemi gerçekleştiriliyor. Oluşan bu MAC’lerden sonuç olarak bir TAG oluşturuluyor. Tag bilgisi şifrelenmiş metin ile birleştirilerek karşı sisteme gönderiliyor. Karşı sistem şifrelenmiş metni elindeki key ile çözümlüyor. Gönderilen mesajın güvenilir olduğunu anlamak için ise tag bilgisini kullanıyor. Şifreleme işlemi sonrası oluşan şifrelenmiş data şöyle olur; (şifrelenmiş data + tag).  Karşı sistem elindeki key ile metni çözümler, tag bilgisini tekrar oluşturur ve kendi oluşturduğu tag ile karşı sistemden gelen tag bilgisini karşılaştırır. Bu şekilde gelen veririn doğrulamasını yapmış olur.

  • Ek Veri (Additional Data – AD)

Doğruluğu arttırmak için kullanılan diğer bir parametre olan ek veri kullanılır. AD bir header bilgisi gibi düşünülebilir. Verinin kaynağına dair(IP, Domain name vb.) bilgiler içerir. Karşı sistem AD ile verinin kaynağını doğrulayabilir.

  • İşlem Modu (Mode Of Operation)

Belirlenen algoritmanın veri bloklarını nasıl şifreleyeceğini belirleyen parametredir.

ECB – Elektronik Kod Defteri( Electronik Code Book) : Bu yöntem mesajı bloklara ayırır ve her birini ayrı ayrı şifreler. Bu yöntem kullanılarak uygulanan algoritmaların sonucunda oluşan şifrelenmiş metin hep aynı olur.

CBC – Şifre Bloğu Zincirleme (Cipher Block Chain) : Bu yöntemde her blok şifrelenmeden önce kendinden önce şifrelenen blok ile XOR işlemine tabii tutulur. Bu sayede her şifreli metin bloğu kendisinden önce gelen tüm açık metinlere bağımlı olmuş olur. Ayrıca bu yöntem IV’yi deteklemektedir. IV kullanarak aynı key ile her seferinde farklı şifrelenmiş metinler oluşturulur.

GCM – Galois/Sayaç Modu(Galois/Counter Mode) : Bu yöntemde her blok numaralandırılır sonra her bir blok belirlenen algoritma ile şifrelenir. Şifreleme sonrası oluşan metin açık metin ile XOR işlemine tabii tutulur. Paralel olarak işlenebilir, bu sebepten çok hızlıdır.

Bunlar gibi farklı operasyon modları bulunmaktadır. Yapacağınız işin detayına göre farklı modlar tercih edilebilir.

  • Dolgulama (Padding)

Blok şifrelemede metinler şifrelenirken belirli bloklara ayrılırlar. Bu bloklar algoritmaya göre değişebilir. Örneğin AES algoritması 128 bitlik bloklar kullanır. 364 bitlik bir metni AES ile şifrelemeye çalışırken metin 3 bloğa ayrılır. Fakat son blokta 20 bitlik bir boşluk bulunmaktadır. Bu boşluğu doldurmak için padding yöntemleri kullanılır.

 

Özetleyecek olursak; bilgilerimizin güvenliğini sağlamak için sadece şifrelemek yetmiyor. Doğru şekilde doğru parametreler ile şifrelemek gerekiyor. Olabildiğince şifreleme işleminde nelere dikkat etmemiz gerektiğini paylaşmaya çalıştım.

Bu blog girdisine dair şuradaki linkten kodlara erişebilirsiniz.

Kaynak;

https://www.veracode.com/blog/research/encryption-and-decryption-java-cryptography

http://searchsecurity.techtarget.com/Understanding-encryption-and-cryptography-basics

https://en.wikipedia.org/wiki/Authenticated_encryption

https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html#Cipher

https://www.securityinnovationeurope.com/blog/page/whats-the-difference-between-hashing-and-encrypting

Software / Yazılım Testi Nedir?

Yazılım geliştirme yaşam döngüsü içerisinde testin önemi yazılımdaki kalitenin seviyesi ile doğru orantılıdır. Test bir bakış açısı ile yazılımın kalitesini arttırmak için önemli bir konudur. Yazılım geliştirme sürecinde bu konu önemsenmeli ve ciddi politikalar belirlenip benimsenmelidir.

Yazılım geliştirme yaşam döngüsü içerisinde bulunan test konusunun ne ve nasıl olması gerektiğine dair konuları aşağıdaki slaytlarda bulabilirsiniz.

SDLC – Software Development Life Cycle Nedir?

Yazılım geliştirmede, sadece çeşitli teknik ve tenkolojileri bilerek kod geliştirmek yeterli değildir. Başta bunun bir süreç olduğunu bilmek gerekmektedir. Yapılan iş bir problemi çözmeye yönelik çalışmalar yapmayı içeriyor ve bu işin nihayetinde bir hedef vardır. Bu hedefe nasıl gidilebileceğine dair çeşitli yöntemler ve pratikler vardır. Aşağıda bu sürecin nasıl olması gerektiğine dair çeşitli yaklaşımları bulabilirsiniz.