You are on page 1of 22

Ders İşleyişi

• Ders teori ve uygulama kısımlarından oluşmaktadır.


• Teorik altyapı oluşturmaya yönelik bir ders işleyeceğim.
• Ders sayfasından ve discord üzerinden duyuruları takip ediniz.
• Vize: Klasik, boşluk doldurmalı ve çoktan seçmeli soruların birleşimi şeklinde
olabilir. Sorular vizeye kadar işlenen sunumlardan gelecektir.
• Final: Klasik, boşluk doldurmalı ve çoktan seçmeli soruların birleşimi olabilir.
Sorular vizeden sonra işlenen konulardan gelecektir.
• Bütünleme: Dönem boyunca işlenen tüm konuları kapsayacak ve çok zor olacak.
• Sınavlar açıklandıktan sonra 1 hafta itiraz süreniz var. İtirazlarınızı discord
üzerinden özel mesaj olarak iletiniz.
• Seçimlik bir projemiz olacak. Kanaat notu olarak kullanacağım.
• Proje toplamda 30 puan olacak. 15 puanı vizeye, kalan 15 puanı ise finale
eklenecek. Bütünleme için geçerli değil.
• Projelerden puan alabilmeniz için tüm bölümleri yapmış olmanız gerekiyor.
Herhangi bir eksiklikte (herhangi bir grup üyesinin üzerine düşen bölümü
yapmaması da dahil) puan alamayacaksınız.
Proje
• Grup halinde yapılacak olup minimum 1 maksimum 5 kişiden oluşabilir. Grup
üyeleri 1. ve 2. öğretim karışık olabilir.
• Grup üye sayısı 1,2,3 olanlar minimum 15, diğerleri kişi sayısı x 5 adet gereksinim
yapacak.
• Front End, REST API ve Backend kısımlarından oluşacaktır. REST API’yi Docker
içinde yapanlara ek 5 puan verilecektir.
• API’leriniz PUT, GET, POST, DELETE metotlarının hepsini kullanmalı ve Postman
ile test edilmeli.
• Proje Teslim Tarihi: Final sınavı gününde saat 17:00’a kadar.
• İstediğiniz teknolojiyi kullanabilir, mobil ya da web uygulamaları geliştirebilirsiniz.
• Projeler Bitbucket üzerinden yürütülecektir. Bitbucket reponuzu kendiniz
oluşturacak ve beni (a.sinanyuksel@gmail.com) de admin olarak gruba
ekleyeceksiniz. Projelerinizle ilgili açıklamaları, aşama aşama ne yapacağınızı daha
sonra web sitem üzerinden yapacağım. Projenizi önce discord üzerinden özel
mesaj olarak onaylatın. Seçtiğiniz grup lideri özelden proje detayını paylaşsın.
Projeniz onaylandıktan sonra Bu form aracılığı ile grubunuza dair bilgileri bana
göndermeniz gerekiyor.
Proje
• Projelerden puan alabilmeniz için tüm bölümleri eksiksiz yapmanız gerekiyor. Proje
bittiğinde tüm gereksinimler çalışıyor olmalı.
• Vizeye kadar Analiz ve Tasarım kısımlarının hepsi bitmiş olmalı. Görev paylaşımları
net bir şekilde belirtilmeli.
• Aşağıdaki işlemlerin hepsinin vize tarihinde saat 20:00’a kadar tamamlanması
gerekiyor.
1. Proje gruplarının, kullanılacak teknolojinin, uygulama türünün (mobil, web) ve grup
bilgilerinin sitede yer alan form aracılığı ile iletilmesi. Not: beni grubunuza admin
olarak ekliyorsunuz.
2. Proje planı isimli bir sayfa oluşturun ve bu linkteki uygulama aracılığı ile projenizi
planlayın. Planı resim olarak ekleyin.
3. Gereksinim analizi: Bitbucket’te Gereksinim Analizi sayfası oluşturulması ve her grup
üyesine 5 gereksinim düşecek şekilde tüm gereksinimlerin belirlenmesi ve her
gereksinimlerin açıklamalarının yapılması.
4. Use Case Diyagramı başlığı altında bir sayfa oluşturarak use case diyagramınızı resim
formatında bu sayfaya ekliyorsunuz.
5. Use Case Senaryoları başlığı altında bir sayfa oluşturun ve tüm senaryoları tek bir pdf
dosyasına ekleyerek dosyaya link verin. Senaryoları yaparken bu şablonu kullanın.
Proje
• Aşağıdaki işlemlerin hepsinin final tarihinde saat 20:00’a kadar tamamlanması
gerekiyor.
1. Kodların bitbucket deposuna gönderilmesi
2. Uygulama Videosu isimli bir sayfa oluşturarak tüm gereksinimlerin çalıştığını
kanıtladığınız videoyu bu sayfaya link olarak ekliyorsunuz.
3. API Testi isimli bir sayfa ekleyerek bu sayfada API’nizin çalıştığını kanıtladığınız videoyu
bu sayfaya link olarak ekliyorsunuz. GET, PUT, POST, DELETE metotları ayrı ayrı test
edilmeli ve veritabanındaki değişimler açıkça gösterilmeli.
4. REST API kullanmadan işlem yapanlar puan alamayacaklar. Düz veritabanına yazma
işlemlerini kabul etmiyorum.
• Bu linkte örnek bir bitbucket şablonu verilmiştir. Bu şablona uygun olarak
ilerlemelisiniz.
Konular
• Yazılım Mühendisliği Kavramı
• Yazılım Yaşam Döngüsü
• Şelale (Waterfall) Yazılım Geliştirme Modeli
• Çevik (Agile) Yazılım Geliştirme Modeli
• Uç Programlama: Extreme Programming (XP)
• Scrum, Kanban
• Restful Web Servisler, GraphQL, Mikroservisler
• Docker, Kubernates
• Sürekli Entegrasyon ve Sürekli Dağıtım: CI/CD: Continuous
Integration/Continuous Delivery
• Devops Kavramı
• Redis, Memcached
• RabbitMQ, Kafka
• Nginx, ElasticSearch, Terraform, Kibana, Prometheus
• Web Uygulaması ve Mobil Uygulama Geliştirme Trendleri, Öneriler
Yazılım Mühendisliği (Software Engineering)
• Kullanıcıların ihtiyaçları doğrultusunda bu ihtiyaçlara cevap verecek
– yazılımın gereksinimlerinin belirlenmesi,
– tasarımının yapılması
– programlama dillerini kullanarak kodlanması gibi görevler üstlenir.
• Son kullanıcı odaklı çalışır. Sürekli kendini güncellemesi gerekir.
• Bilgisayar sistemlerinin kullanıldığı her sektörde çalışabilirler.
• Üstelenebileceği Görevler:
– Müşteri ilişkilerinin kurulması
– Müşteriden aldığı bilgiler doğrultusunda analiz yapma
– Tasarım
– Kodlama
– Test
– Kullanıcı ve geliştirici dokümanları hazırlamak ve kullanıcıların eğitilmesini sağlamak
Yazılım Mühendisliği (Software Engineering)
• Aranan Genel Özellikler:
– Analitik düşünme yeteneğine sahip, yenilikçi, sonuç ve çözüm odaklı
– Problem çözme yeteneği
– Bildiklerini başkalarına aktarabilen
– İkna yeteneği yüksek
– Sabırlı, dikkatli
– Yeni fikirlere açık
– Yeni teknoloji ve yöntemleri yakından takip eden ve uygulayan
– İyi derecede İngilizce bilen
– Zamanını planlayabilen ve etkin kullanabilen
– Takım çalışmasında başarılı
– İletişim ve koordinasyon yeteneği kuvvetli
Yazılım Mühendisliği (Software Engineering)
• Aşağıda yer alan rol ve sorumluluklar Linkedin iş ilanlarında Yazılım Mühendisliği iş
ilanlarında geçen rol ve sorumluluklardan elde edilmiştir. Bu linkten arama
yaparak detaylı inceleme yapabilirsiniz.
• Rol, Sorumluluklar, İş Tanımları:
– İş talepleri doğrultusunda teknik tasarım yapmak,
– Geliştirme platformlarında kodlama yapmak ve birim testlerini gerçekleştirmek
– Teknolojik gelişmeleri takip ederek yeni yazılım geliştirme teknolojileri, araçları ve
yöntemleri hakkında kendini ve çalışma şeklinin yenileyebilmesi,
– Uygulama mimarisi ve veri tabanı tasarımı yapmak,
– Kod iyileştirme ve sorun çözme süreçlerinde aktif rol almak,
– Kodlama standartlarına uygun kod geliştirmek ve geliştirilen diğer kodları inceleyebilmek
– Entegrasyon testlerinde aktif rol almak ve son kullanıcı/canlı saha testlerine destek
olmak,
– Scrum süreçlerini uygulamak,
– Proje dokümantasyonunun geliştirilmesine katkı sağlamak,
– Tüm yazılım ve geliştirme yaşam döngüsünden sorumlu,
– Müşteri iş ihtiyaçları doğrultusunda ürün ve çözümleri geliştirmek
Yazılım Mühendisliği (Software Engineering)
• Rol, Sorumluluklar, İş Tanımları (Devam):
– Yazılımların istenen kalitede üretilmesini sağlamak, kalite stratejilerini belirlemek,
– Olası soru ve sorunlar konusunda hızlı bir şekilde aksiyon alınmasını sağlar,
– Uygulama yol haritalarının ve uygulama planının gerektirdiği kararlarının alınmasını
sağlar ve takibini yapar,
– Veri modelleme (varlık – ilişki diyagramları) çalışmaları yapmak,
– Front-end geliştiriciler ile sürekli temas halinde olarak gerekli REST API’lerin
hazırlanmasında ve dokümantasyonun oluşturulmasında görev almak,
• Maaşlar
– Devlet: Kadrolu:5000-7500TL arası, Sözleşmeli (2x, 3x): 9000-15000TL
– Özel Sektör:
• Yeni Mezun: 3500-5500TL
• 3 Yıl Tecrübeli: 6000-9500TL
• 5 Yıl ve Üzeri: 10000-30000TL
• Yurtdışı (Yıllık): 87.500$ - 162.000$ 
Yazılım Geliştirme Süreci/Yaşam Döngüsü
(Software Development Cycle)
Planlama
• Yazılım geliştirme sürecinin ilk adımıdır.
• Temel ihtiyaçlar belirlenir. Ekip oluşturulur.
• Proje kaynakları belirlenir.
– İnsan kaynakları (hangi eleman, hangi süre, hangi aşama)
– Donanım kaynakları (sunucular, istemciler, ağ yapısı, yazılımın geliştirileceği ortam)
– Yazılım kaynakları (iş planlama araçları, proje yönetim araçları, analiz ve tasarım
araçları, programlama araçları, test ve simülasyon araçları, bakım ve destek araçları)
• Fizibilite (yapılabilirlik, olabilirlik) çalışması yapılır.
• Maliyet ne olacak? (Projenin toplam süresi, toplam maliyet, eleman sayısı, niteliği
ve çalışma süresi, toplam satır sayısı, işlevin maliyeti vb.)
• Teknik karmaşıklığının incelenmesi ( yedekleme ve kurtarma, veri iletişimi,
dağıtıklık, performans, kurulum,)
• Sistemin sağladığı faydalar neler olacak?
• Proje planı çıkarılır. Sürekli güncellenen ve gözden geçirilen bir belgedir.
Örnek Proje Planı

Bu linkteki araçla benzer bir plan üretebilirsiniz. Sizin


oluşturduğunuz daha detaylı olmalı.
Analiz/Gereksinim Analizi
• Sürecin en önemli aşamasıdır.
• Bir yazılım çok iyi tasarlanmış, geliştirilmiş olabilir. Ancak müşteri ihtiyaçlarını
karşılamıyorsa başarılı sayılmaz.
• Gereksinimleri yanlış belirlediğinizde kullanıcının problemini çözmemiş olacaksınız.
• Diğer aşamalardaki hatalar da elbette ölümcüldür. (kötü kod yazma, eksik test,
yanlış eğitim)
• Gereksinimler:
– Uygulamanızın sunması/desteklemesi gereken özelliklerdir.
– Müşterilerle konuşarak belirlenir.
– Uygulamanın büyüklüğüne göre onlarca ya da yüzlerce olabilir.
– Açık, anlaşılır, kesin, tutarlı olmalıdır.
– Gerçekleştirilmesi mümkün olmalı.
– Karmaşa yaratacak jargonlardan, teknik detaylardan kaçınılmalıdır.
– Gereksinim işlevleri nasıl yerine getirdiğiyle (hangi veri tabanı, hangi tablo, hangi dil)
ilgilenmez. Ne olduğu ile ilgilenir.
– Müşterinin aşina olduğu kısaltmalar, temel teknik terimler kullanılabilir.
– Gereksinimlerin çözümleme aşaması deneyimli kişiler tarafından yapılmalıdır.
Analiz/Gereksinim Analizi
• Kötü Gereksinim Örneği: Bisikletçiler için harita üzerinde güzergah belirleyen bir
uygulama geliştiriyorsunuz ve şöyle bir gereksiniminiz var: «Başlangıç noktasından
hedef noktaya gitmek için en iyi yolu bul»
– Böyle bir gereksinimdeki problem nedir?
• Bilinen bir yazılım mühendisliği sözü: «Hızlı, iyi, ucuz. İkisini seç.»
• Burada söylenmek istenen şey üç hedeften hepsini karşılayamazsınız. Hızdan,
kaliteden ya da maliyetten birinden mutlaka ödün vermeniz gerekir.
• Sadece 3 başarılı kombinasyon mevcuttur.
– Hızlı bir şekilde yüksek kalitede ve yüksek maliyette yazılım üretmek
– Hızlı bir şekilde düşük kalitede ve düşük maliyette yazılım üretmek
– Uzun sürede düşük maliyetli yüksek kalitede yazılım üretmek
• Gerektiğinde eski gereksinimler yenileriyle değiştirilebilir.
• Eğer zamanınız ya da bütçeniz yeterli değilse gereksinimleri önceliklendirin.
• Tüm gereksinimleri belirlediğinizde mutlaka geriye dönün ve bir kez daha tüm
gereksinimleri inceleyin, tutarsızlıkları giderin.
• Müşteriye 5N1K sorularını sorun: Ne, Nerede, Ne Zaman, Nasıl, Neden, Kim
Analiz/Gereksinim Analizi
• Gereksinimleri önceliklendirmek için MOSCOW yöntemini kullanabilirsiniz.
• M: Must: Mutlaka gerçekleştirilmesi gereken, projenin başarısı için gerekli
gereksinimler nelerdir? Gerçekleştirilmemesi durumunda yazılım kullanışsız olacak.
• S: Should: Mümkünse gerçekleştirilmesi gereken önemli gereksinimlerdir. İlk
sürümde olmasa 2. sürümde mutlaka yer almalı.
• C: Could: Takvime uymayan ama arzu edilen özelliklerdir. 2. sürümde yer
verilebilir ancak S kadar önemli değildir. 2. sürümde de yer almayabilir.
• W: Won’t: Opsiyonel, ek özellikleri içeren gereksinimlerdir. Müşteriyle 1. sürümde
olmayacağına dair anlaşma sağlanmıştır. Zaman elverirse gelecek sürümlerde
gerçekleştirilebilir.
• Gereksinimler hazırlanırken kaçınılması gereken kelimeler:
– Karşılaştırma içeren ifadeler: hızlı, daha iyi, daha fazla vb.
– Kesin olmayan sıfatlar: kullanıcı dostu, etkili, verimli, esnek, muhteşem
– Belirsiz ifadeler: Minimize etmek, maksimum hale getirmek, geliştirmek, iyileştirmek,
optimize etmek
Gereksinim Analizinin Önemi

Ağaç Salıncak Karikatürü


Tree Swing Cartoon
Gereksinim Analizi Türleri
• Gereksinimleri 4 kategoride gruplayabiliriz:
– Kullanıcı odaklı gereksinimler
– FURPS
– FURPS+
– Genel gereksimler
• Kullanıcı odaklı gereksinimler:
– İş gereksinimleri (Business requirements)
– Kullanıcı gereksinimleri (User requirements)
– Fonksiyonel gereksinimler (Functional requirements)
– Fonksiyonel olmayan gereksinimler (Non functional requirements)
– Uygulama gereksinimleri (Implementation requirements): Yeni bir sisteme geçiş
sürecindeki geçici özelliklerini içeren gereksimimlerdir. Programlama içermesi gerekmez.
• FURPS: Functionality (İşlevsellik), Usability (Kullanılabilirlik), Reliability
(Güvenirlik), Performance (Performans), Supportability (Desteklenebilirlik)
• FURPS+: Kısıtlar, uygulama ve arayüz gereksinimleri, fiziksel gereksinimler
• Genel Gereksinimler: Ekranlar, menüler, akışlar, giriş, kullanıcı türleri, loglama,
arşivleme
İş Gereksinimleri
• Projenin üst düzey hedeflerini içerir.
• Müşteri bu proje ile neyi başarmayı ümit ediyor?
• Ümitten kastımız nedir? Müşteri tüm hayalleriyle size gelecektir. Yerçekimsiz
ortamda muz yiyip çilek tadı vermesini isteyebilir.
• Karımız %25 artsın, 10.000 yeni müşteri kazanalım gibi hayaller kurabilir.
• Bu tarz hayaller gereksinim değil pazarlama hedefleridir.
• Bunlar için pazarlama dokümanı stilinde bir belge oluşturabilir ve iş gereksinimi
kategorisinde değerlendirilebilir.
• Bu istekler öngörülen maliyetleri, arz ve talebi, satış rakamlarını ya da diğer
verileri içeren grafikler halinde sunulabilir.
Kullanıcı Gereksinimleri
• Son kullanıcının (paydaşların) sistemi nasıl kullanacağı ile ilgili gereksinimleri içerir.
• Arayüz karalamaları, kullanıcıların bazı görevleri yerine getirmelerini sağlayan
skriptleri, kullanıcı senaryolarını, prototipleri içerir.
• Sistem nerede kullanılacak?
• Sistem görevini nasıl tamamlayacak?
• Görevi tamamlamak için kritik sistem parametreleri nelerdir?
• Görevi gerçekleştirirken sistem nasıl etkin ve etken olacak?
• Sistem kullanıcı tarafından nasıl kullanılacak?
• Etkin bir biçimde çalışabilmek için hangi ortamlar sistem tarafından beklenir?
• Bu gereksinimler doğal dille yazılabilen, diyagramlarla gösterilebilen ve müşteriler
için hazırlanan gereksinimlerdir.
• Kullanıcı senaryoları için temel oluşturur.
Fonksiyonel ve Fonksiyonel Olmayan Gereksinimler
• Fonksiyonel Gereksinimler:
– Sistemin sunacağı hizmetler ile sistemin işlevsel altyapısını tanımlarlar. 
– Sistemin ne yapacağı yapısal ve işlevsel olarak ortaya koyulur.
– Sistemin herhangi bir durum karşısında nasıl davranacağını belirler.
– İlerleyen aşamalarda kodunu yazabileceğiniz metotlara, modüllere dönüşecek.
– Örnek: Giriş Yap, Kayıt Ol, Sepete Ekle, Ödeme Al, Sipariş Ver, Not Gir, Not Listele,
Ürün Ara, Kategoriye Göre Ürün Listele vb.
• Fonksiyonel Olmayan Gereksinimler: Kullanıcıdan bağımsız bir şekilde çözülmesi
gereken sorunları içerir.
– Fiziksel ortam, Arayüzler
– Kullanıcı odaklı olma
– Güvenlik, Güvenilirlik,Kalite güvencesi
– Performans
– Destek, Paketleme
– Yasal konular, standartlar
– Taşınabilirlik
– Teknik belgeleme
FURPS ve FURPS+
• FURPS:
– Functionality (İşlevsellik): Uygulama hangi işi yerine getirecek? Diğer sistemlerle
nasıl entegre çalışacak? Güvenlik nasıl sağlanacak?
– Usability (Kullanılabilirlik): Arayüzler nasıl olacak? Uygulama neye benzeyecek?
– Reliability (Güvenirlik): Sistem hangi zaman aralıklarında çalışmalı? Hataya ne kadar
izin verilmeli? Ne kadar sürede cevap vermeli?
– Performance (Performans): Uygulamanın hızı, kullandığı RAM miktarı, kullandığı disk
miktarı, veri tabanı kapasitesi
– Supportability (Desteklenebilirlik): Uygulama ne kadar esnek, genişleyebilir? Kodu
test etmesi ne kadar zor?
• FURPS+: Ek özellikleri içerir.
– Tasarım sınırları: Yazılım, donanım, ağ ve veri tabanı kaynaklı sınırları belirtir.
– Uygulama gereksinimleri: ISO vb. standartları destekleyip desteklemeyeceği ile ilgili
standartları belirtir.
– Arayüz gereksinimleri: Diğer sistemlerin geliştirilen sistemle ilişkisini, nasıl veri
alışverişi yapacağını belirler.
– Fiziksel gereksinimler: İşlemci gücü, ne kadar elektrik çekeceği, taşınabilirlik,
dokunmatik ekran, çevreci olup olmaması

You might also like