Siber Güvenlik
Yazılımın Temel Taşları: Kalite ve Deneyim
Yazılım dünyasında başarının temel taşlarından biri yazılımın kalitesi, biri de kullanıcı deneyimidir. Hızla gelişen teknolojilerle dolu bir dünyada, bu iki unsurun önemi günümüzde hiç olmadığı kadar büyük.
Yazılımın Temel Taşları: Kalite ve Deneyim
Yazılım dünyasında başarının temel taşlarından biri yazılımın kalitesi, biri de kullanıcı deneyimidir. Hızla gelişen teknolojilerle dolu bir dünyada, bu iki unsurun önemi günümüzde hiç olmadığı kadar büyük.
Kalite
Kalite, yazılımın en temel özelliğidir. Bir yazılımın ne kadar güvenilir olduğu, kullanıcıların ne kadar memnun olduğunu doğrudan etkiler. Kaliteli yazılım sorunsuz çalışır, güvenlidir ve işlevlerini hatasız bir şekilde yerine getirir. Ancak bu seviyeye ulaşmak, yazılım geliştirme sürecinin her aşamasında özveri ve dikkat gerektirir.
Kullanıcı deneyimi
Kullanıcı deneyimi, bir yazılımın başarısının diğer anahtarıdır. Kullanıcılar bir yazılımı kullanırken kolaylıkla gezinebilmeli, hızlı ve etkili bir şekilde istediklerini yapabilmelidir. Kullanıcı deneyimi, bir yazılımın kabulünü ve başarısını belirleyen kritik bir faktördür. İyi tasarlanmış bir kullanıcı deneyimi, kullanıcıların yazılımı sevmesini ve sadık kullanıcılar olmasını sağlar.
Yazılımın temel taşlarını keşfetmek ve detaylı bilgi almak istiyorsanız Geleceği Yazanlar’ın Unibounty Programı’na göz atabilirsiniz. Yazılım dünyasının geleceğini şekillendiren ön lisans, lisans ve yüksek lisans öğrencilerini bir araya getiren Unibounty programı, öğrencilere yazılımın kalitesini ve kullanıcı deneyimini nasıl şekillendirebileceklerini öğretirken aynı zamanda yazılım dünyasının temel kavramlarını da aktarıyor. Geçen yıl zafiyetlerin tespitiyle başlayan bu yolculuk, 2024 döneminde ‘Test ve Kalite’ başlıkları altında yeni bir boyut kazanıyor.
Kalite ve deneyimi geliştirmek için: Sürekli entegrasyon ve test otomasyonu
Uygulamanın mevcut özelliklerinin iyileştirilmesiyle ya da yeni özelliklerin önerilmesiyle ürünün gelişimine katkı sağlamanın “Kalite/Deneyim” olarak adlandırıldığından bahsetmiştik. Kalite ve deneyimi geliştirmenin yollarından biri de testler yapmaktan geçiyor. Sürekli entegrasyon ve test otomasyonu kullanarak hataları hızlıca tespit edip düzeltebilirsiniz.
Test, yazılım sektöründe son zamanlarda daha da yaygınlaşan bir terim halini aldı. Ürünler, kodlama aşamasıyla beraber test sürecinden de geçerek daha kaliteli birer çıktı haline geliyorlar. Gözden kaçan hatalar varsa test esnasında tespit ediliyor ve hızlıca düzeltilmesi sağlanıyor. Elbette ki her hata aynı düzeyde olmuyor. Ara sıra yazım hataları veya çökme gibi sorunlarla karşılaşıyoruz ve bu hatalar, bazen daha karmaşık sorunlara dönüşebiliyor. Bu sorunlar önem derecelerine göre kendi içlerinde sınıflandırılıyor.
Bug ve defect kavramları
Test sürecinin önemli bir parçası ise 'bug' ve 'defect' kavramlarıdır. Test ortamında test ekibi tarafından bulunan, yazılım geliştirmenin beklediği sonuç ile gerçek sonuç arasındaki bulguya bug diyoruz. Grace Hopper, Harvard Üniversitesi’nde çalışırken, Harvard Mark II bilgisayarındaki bir hata nedenini araştırırken bir böceğin(bug) bilgisayarının bir parçasının içerisinde sıkıştığını gördü. Bu olay “bug” kavramının popülerleşmesine katkıda bulundu ve yazılım hatalarını belirtmek için kullanılan bir kavram haline geldi. Defect ise son kullanıcı tarafından canlı(production) ortamda bulunan, yazılım geliştirmede beklenen sonuç ile gerçek sonuç arasındaki bulgu diyebiliriz. Canlı ortamda bulunan hatalar “defect” olarak adlandırılıyor.
Tarih içerisinde yazılım hataları veya bug'lar nedeniyle oluşan bazı önemli olayları aşağıdaki gibi sıralayabiliriz:
- Therac-25 Radyoterapi Cihazı: 1980'lerde kullanılan Therac-25 adlı radyoterapi cihazı, yazılım hataları nedeniyle altı hastanın ölümüne ve birçok kişinin ciddi yanıklarına neden oldu. Bu olay, yazılım güvenliğinin önemini vurguladı.
- Ariane 5 Roketi Faciası: 1996 yılında Avrupa Uzay Ajansı'nda Ariane 5 roketi fırlatıldığında, yazılım hataları nedeniyle roket 40 saniye sonra patladı. Bu olay, 7 milyar dolarlık maddi kayba yol açtı.
- Y2K Krizi: 2000 yılının başında, dünya genelinde birçok bilgisayar sistemindeki yazılım hataları nedeniyle "Y2K krizi" yaşandı. Bu hatalar, tarihlerin yanlış işlenmesine neden olarak finansal sistemlerden enerji şebekelerine kadar birçok alanda potansiyel sorunlara yol açtı.
- Boeing 737 MAX Krizi: Boeing'in 737 MAX uçağındaki yazılım hatası iki ölümcül uçak kazasına yol açtı ve uçağın dünya çapında uçuşa yasaklanmasına neden oldu. Bu olay, yazılım hatalarının havacılık endüstrisi için ne kadar kritik olabileceğini gösterdi.
Priority kavramı
Açılan hata kayıtlarının çözüm sırasına konması işlemine verilen ad “Priority” dir. Yazılımcı tarafından hata kaydının hemen çözülmesi gerektiği ya da bekletilebilir olup olmadığının kontrol edilmesi amacıyla kullanılır. Priority alanına QA ekibi tarafından değerlendirme yapılarak duruma uygun olan bir durum atanır. Açılmış hata kayıtlarında bu kaydı çözümleyecek geliştiricilere hangisinin daha öncelikle çözülmesi gerektiğine ilişkin bilgilendirme bu alanla yapılır. Priority ne kadar yüksek olursa hata kaydı o kadar çabuk çözülmelidir. QA aktivitelerinde test edilen servisi kullanılamaz kılan hatalara daha yüksek, servisin küçük bir işlevselliğinin başarısız olmasına neden olan hatalara daha düşük öncelik verilir.
Priority Değerleri:
- Gating: Sahaya çıkıldığında iş etkisini (business impact), kullanıcı deneyimini veya uygulama itibarını zedeleyecek ve canlı ortamda asla kabul edilemeyecek problemlerdir. Problem çözülmeden sahaya yük verilemez. Gating kriterlerini aşağıda ayrıca detaylandıracağız.
- High: Sahaya çıkıldığında iş etkisini, kullanıcı deneyimini veya uygulama itibarını zedeleme ihtimali bulunan problemlerdir.
- Medium: İş etkisi ve kullanıcı deneyimi açısından olumsuz etkileri bulunan problemlerdir.
- Low: İş etkisi ve kullanıcı deneyimi açısından kayda değer etkisi olmayan, çözüm sırasında en son önceliğe sahip hata kayıtlarıdır.
Gating Kriterleri:
- Öne çıkartılması istenilen özelliklerin ana fonksiyonlarında yaşanan sorunlar gating’dir.
- Fraud riski olan her sorun gating’dir.
- Özelliklerin ana fonksiyonlarında yaşanan sorunlar gating yapılır.
- Kullanılan fonksiyonun frekansı yoğun ise ve UI problemi yaratıyorsa, bu durum kullanıcının ürünü kullanmaktan vazgeçmesine neden olacaksa gating yapılır.
- Sahada kullanılma oranı yüksek bazı high end cihazlarda yaşanan sorunlar gating yapılır.
- “Her zaman” ya da “belli bir senaryo ile belli bir frekansta” yeniden üretilebilen crash’ler gating olarak açılır.
- Kolay ve geçici çözüm bulunan UI problemleri gating olarak açılmamalıdır.
- Çok kullanılmayan özelliklerde çıkan gating konularının çözümü zaman alacaksa ve release çıkmasını engelleyecek ya da yükü riske atacak sorunlar yaratacaksa konu hakkında konsey tarafından alınan karar ile priority, gating üzerinden düşürülebilir.
Peki, yazılım projelerinizde kaliteyi ve kullanıcı deneyimini başka hangi yollarla geliştirebilirsiniz?
İşte bazı öneriler:
- Düzenli Kod İncelemeleri: Yazılımınızın kalitesini artırmak için düzenli kod incelemeleri yapın. Hataları erken aşamalarda tespit edebilir ve düzeltebilirsiniz.
- Kullanıcı Dostu Arayüzler Tasarlayın: Kullanıcılarınızın rahatça kullanabileceği arayüzler tasarlayın. Kullanılabilirlik testleri yaparak kullanıcı deneyimini iyileştirin.
- Kullanıcı Geri Bildirimlerini Değerlendirin: Kullanıcıların geri bildirimlerini dinleyin ve yazılımınızı sürekli olarak güncelleyin. Kullanıcıların isteklerini göz önünde bulundurarak yazılımınızı iyileştirin.
Kalite ve kullanıcı deneyimi, yazılım projelerinizin başarısını belirleyen temel unsurlardır. Bu nedenle, her adımda kalite ve kullanıcı deneyimini gözetmeye özen gösterin. Bu basit adımlar, yazılım projelerinizin başarısını ve kabulünü artırmak için önemli bir anahtar olacaktır.
Turkcell Unibounty Programı
2023 döneminde zafiyet avcılığı ile eğitimlere başlayan Unibounty Programı bu yıl eğitimlerini Test ve Kalite başlıkları altında sürdürüyor. Yukarıda bahsettiğimiz başlıklar hakkında detaylı bir eğitim almak ve program hakkında bilgi edinmek için web sitesini ziyaret edebilirsiniz.
Unibounty Programı öğrenciler için yazılım dünyasında kendisini geliştirme fırsatı ve geleceği şekillendirme imkânı sunuyor. Program kapsamında bug/defect çıktıları için de öğrencilerle interaktif bir süreç yaşanması hedefleniyor. Öğrenciler tarafından tespit edilen bug/defect çıktıları, ilgili ekip tarafından değerlendirildikten sonra ödüllerin sahiplerini bulması planlanıyor. Bunun için belirlenen bazı kurallar bulunuyor:
- Daha yüksek etki göstermek için bu güvenlik açıklarını zincirlemeniz gerekmiyorsa, rapor başına bir güvenlik açığı gönderin.
- Temel bir problemin neden olduğu birden fazla güvenlik açığı bir olarak değerlendirilecektir.
- Temel bir problemin neden olduğu birden fazla bug/defect bir bulgu olarak değerlendirilecektir.
- İlettiğiniz rapor içeriğindeki zafiyetin nasıl düzeltileceği yönünde çözüm önerisi de detaylı bir şekilde paylaşılmalıdır. (Rapor kalitesi bonus puan almanızı sağlayabilir)
- İlettiğiniz rapor içeriğindeki bug ve defect’in nasıl düzeltileceği yönündeki çözüm önerisi de detaylı bir şekilde paylaşılabilir. (Rapor kalitesi bonus puan almanızı sağlayabilir)
- Araştırmacılar TURKCELL’in markasına, kullanıcılarına veya verilerine zarar verebilecek herhangi bir faaliyette bulunamaz. Buna sosyal mühendislik, fiziksel güvenlik ve kullanıcılara, çalışanlara veya TURKCELL’e yönelik hizmet kesintisi saldırıları dâhildir.
- İletilen bir zafiyet/bug/defect için yalnızca ilk ileten kişiye puan verilir. Sonradan iletilen mükerrer bulgular ayrıca jüri komitesinde değerlendirmeye girecektir. Kopya tespit edilmesi durumunda 0 puan verilir.
- Yalnızca bu program kapsamında sizlere belirletilen uygulamalar ve varlıklara karşı sunulan raporlar dikkate alınacaktır.
- Yaptığınız istek limitlerini en aza indirin, sunucularımızın performansını ciddi şekilde etkileyecek işlemler yapılmamalıdır.
- Uygulamaları/sunucuları/sistemleri hizmet dışı bırakacak saldırılar (DoS/DDoS) yapılmamalıdır. Uygulama seviyesindeki hizmet dışı bırakma (DoS) zafiyetlerinin neden ve yönteminin belirtilmesi yeterlidir. Sömürülme gerçekleştirilmemelidir. Erişilebilirlik ile ilgili bir etki gözlemlendiğinde yapılan işlemlerin durdurulması gerekmektedir.
- Otomatik tarama araçları kullanılmamalıdır.
- Testler sadece kapsamda belirtilen hedeflere yapılmalıdır. Kapsamda belirtilmeyen her şey kapsam dışıdır. Özellikle kapsam dışında olduğu vurgulanmak istenenler kapsam dışı olarak yazılmıştır.
- Herhangi bir zafiyet tespit edildiğinde müşterilerin verileri/hesapları üzerinde sömürme işlemi yapılmamalıdır.
- Testler sırasında tespit edilen zafiyetler/açıklıklar/bilgi/bug/defect ifşaları hiçbir sosyal medya platformunda ya da halka açık bir yerde paylaşılmamalıdır. Zafiyet/bug/defect gönderimi sadece size açılan platform üzerinden iletilmelidir.
- Zafiyetin nasıl tespit edildiği ve sömürülme aşamaları/adımları detaylı ve anlaşılır şekilde yazılmalıdır.
- Zafiyetin tespit ve sömürülme aşamalarını gösteren ekran görüntüleri ya da video hazırlanması önerilir. Bu ekran görüntüsü ve videolar etkinlik dışındaki herhangi bir platformda paylaşılmamalıdır.
- Bug/defect bulgularının ekran görüntüleri ya da videolarının hazırlanması önerilir. Bu ekran görüntüsü ve videolar etkinlik dışındaki herhangi bir platformda paylaşılmamalıdır.
- Etkinlik personeline karşı profesyonel olmayan (saldırgan dil, şantaj vb.) iletişim yasaktır.
- Müşterilerin hesaplarına yönelik bozucu/aksatan etki oluşturabilecek işlemler yasaktır.
- Zafiyet/açıklık ile ilgili olmayan her türlü içerik (ırkçı, cinsiyet karşıtı vb.) gönderimi yasaktır.
- Araştırmacılar, Unibounty Platformu üzerinden gönderdikleri isteklerde, kendi kullanıcı hesaplarına ait alacaklarını belirtmek için "x-bounty-key" adlı parametreyi HTTP isteklerinin başlık bilgisi olarak iletmelidirler.
Bulunan Bulgular Nasıl Değerlendirilir?
Tespit edilen sorunlar önem derecelerine yani “Priority” durumları göre Gating, High, Medium ve Low olmak üzere kendi içlerinde sınıflandırılmalı. Gating hataları canlı ortamda kabul edilemez ve çözülmeden sahaya yüklenemezken, high hatalar iş etkisi ve kullanıcı deneyimini olumsuz etkileyebilir. Medium hatalar ise iş ve kullanıcı deneyimi açısından olumsuz etkiler taşırken, low hatalar kayda değer bir etkiye sahip olmayan düşük öncelikli hatalardır.