1- Yazılım nedir?
Yazılım bir ihtiyacı karşılayan programlar+veriler+yapılandırma+dokümantasyonun bütünüdür.
2- Yazılım mühendisliği nedir?
Yazılımı sistematik, ölçülebilir biçimde geliştirme, işletme ve bakım disiplinidir.
3- Yazılım mühendisliğinin bilgisayar biliminden ne farkı vardır?
Bilgisayar bilimi kuram ve genel tekniklerle ilgilenir. Yazılım mühendisliği bu bilgiyi ürünleştirir.
4- Yazılım mühendisliği ile sistem mühendisliği arasında ne fark vardır?
Sistem mühendisliği, insan, donanım, yazılım ve sürecin yaşam çevrimi ile ilgilidir. Yazılım mühendisliği yazılımın derinliği ile ilgilenir.
5- Yazılım süreci nedir?
Gereksinim → analiz/tasarım → geliştirme → test → dağıtım/işletme → bakım döngüsüne yazılım süreci denir.
6- Yazılım süreç modeli nedir?
Yazılım süreç modeli, yazılım geliştirme, bakım ve yönetimi için gerekli tüm görevleri, adımları ve aşamaları tanımlayan çerçevedir. Bu model, bir yazılım projesini baştan sona yönetmek için yol haritası sunar. Başlıca örnekleri Şelale, Çevik (Agile) ve V-Model'dir.
7- Requirement nedir?
sistemin yapması gereken doğrulanabilir ifade.
8-V&V nedir?
V&V doğrulama ve geçerlemedir:
doğrulama: doğru yaptık mı?
geçerleme: doğru şeyi yaptık mı?
9- Mimari tasarım denir?
MİMARİ TASARIM. Mimari tasarım, bir yazılım sisteminin genel yapısını ve ana bileşenlerini belirleme sürecini ifade eder.
10- Mimari tasarımın amaçları nelerdir?
sistemin yapısını tanımlamak
kalite niteliklerini sağlamak
iletişimi kolaylaştırmak
geliştirme sürecini yönlendirmek
11- Teknik borç nedir?
Teknik borç hız için alınan kalite borcudur, faizi bakım maliyeti ve hata oranı olarak geri döner.
12- Yazılım mühendisliğinde ana test yüzeyleri nelerdir?
13- Agilenin popüler olmasının sebepleri nelerdir?
değişen gereksinime uyum
erken değer
geri bildirim döngüsünün kısalığı
14- Temel üçlü nedir?
Temel üçlü UML'in en sık kullanılan ve en temel diyagramlarını ifade eder: use-case, class, sequence
15- SOLID nedir?
16- Yüksek bağlaşıklık nedir?
Bir modül içindeki elemanlar (fonksiyonlar, sınıflar) güçlü bir şekilde birbiriyle ilişkili ise yüksek bağlaşıklık vardır.
17- Düşük bağlayıcılık nedir?
Modüller ve sınıflar arasındaki bağımlılıkların minimumda tutulmasına düşük bağlayıcılılık denir.
18- DRY nedir?
19- KISS nedir?
20- YAGNI nedir?
21. En yaygın kullanılan yazılım modelleme dili hangisidir?
UML
22. Bilgi sisteminin bileşenleri nelerdir?
donanım
yazılım
veri
insan
süreç
23. En çok maliyet gerektiren sistem bileşeni hangisidir?
yazılım
24) ... bilgi sisteminin soyut ve işlevsel bileşenidir
yazılım
25) Sistem yaşam çevrimi nedir?
Sistem yaşam çevrimi, bir yazılımın ya da bilgi sisteminin fikir aşamasından başlayıp kullanımdan kalkana kadar geçen tüm süreçleri kapsayan modeldir. Ana evreleri şunlardır:
Planlama
Analiz
Tasarım
Kodlama
Test
Kurulum ve bakım
Bir e-ticaret sitesi için ana evreler:
PLANLAMA. Hangi ürünlerin satılacağı, hedef kitlenin kim olduğu belirlenir.
ANALİZ. Müşterilerin ürünleri nasıl arayacağı, sepetine nasıl ekleyeceği gibi gereksinimler toplanır.
TASARIM. Sitenin ana sayfası, ürün sayfaları ve ödeme sayfasının taslakları oluşturulur.
KODLAMA. Front-end ve back-end kodları yazılarak site işlevsel hale getirilir.
TEST. Sitedeki tüm bağlantıların çalıştığı, ödeme sisteminde hata olmadığı kontrol edilir.
KURULUM VE BAKIM. Site yayına alınır ve sonrasında kullanıcı geri bildirimlerine göre hatalar düzeltilir veya yeni özellikler eklenir.
(1) Mühendislik nedir?
-Mühendislik, doğadaki maddenin ve enerji kaynaklarının insanların kullanımı için yararlı hale getirilmesi için bilimsel ve matematiksel prensiplerin uygulanmasıdır.
(2) Yazılım mühendisliği nedir?
-Yazılım geliştirmek, çalıştırma ve devam ettirmek için sistematik disiplinli ölçülebilir yaklaşımın uygulanmasına yazılım mühendisliği denir.
(3) Yazılım projelerindeki başarısızlıklar daha çok neden kaynaklanmaktadır?
-Yazılım projelerindeki başarısızlıklar daha çok başarısız proje yönetiminden kaynaklanmaktadır.
Bir müşteri için geliştirilen profesyonel yazılımın niçin sadece geliştirilen ve teslim edilen programlar olmadığını açıklayınız.
Profesyonel yazılım, sadece çalıştırılabilir koddan (programlardan) ibaret değildir. Müşteri için geliştirilen yazılım, bir bütün olarak bir yazılım sistemini temsil eder ve bu sistem aşağıdaki bileşenleri de içerir:
Gereksinimler: Yazılımın ne yapacağını belirten dokümanlar (kullanıcı ve sistem gereksinimleri).
Tasarım Modelleri: Yazılımın mimarisi, yapısı ve bileşenlerinin nasıl çalıştığını açıklayan tasarımlar.
Test Planları ve Raporları: Yazılımın doğruluğunu ve kalitesini gösteren test dokümanları.
Kullanım Kılavuzları: Kullanıcıların ve sistem operatörlerinin yazılımı nasıl kullanacağını açıklayan materyaller.
Kurulum/Yapılandırma Dosyaları: Yazılımın farklı ortamlara kurulması ve yapılandırılması için gerekli dosyalar.
Sürüm Kontrol Bilgileri: Yazılımın geliştirilmesi sırasında yapılan değişikliklerin kaydı ve yönetimi.
Bu ek bileşenler olmadan yazılımın doğru bir şekilde anlaşılması, kullanılması, sürdürülmesi ve geliştirilmesi mümkün olmaz. Müşteri, sadece programı değil, bu programın nasıl çalıştığını, ne yaptığını ve nasıl destekleneceğini de bilmek ister.
Genel özellikli yazılım ürünü geliştirme ile ısmarlama yazılım geliştirme arasındaki en önemli fark nedir? Genel amaçlı yazılım kullanıcıları için pratikte bu ne demektir?
En Önemli Fark:
Genel Özellikli Ürün Yazılımı: Özellikleri, yazılım geliştiricisi tarafından belirlenir ve geniş bir pazara hitap eder.
Ismarlama (Müşteriye Özel) Yazılım: Özellikleri, müşteri tarafından belirlenir ve belirli bir organizasyonun veya kullanıcının özel ihtiyaçlarını karşılar.
Genel Amaçlı Yazılım Kullanıcıları İçin Pratik Sonuçları:
Kontrol Eksikliği: Kullanıcılar, yazılımın spesifikasyonları üzerinde doğrudan bir kontrole sahip değillerdir. İstekleri, ancak geliştiricinin gelecekteki sürümlere eklemeyi kabul etmesi durumunda yerine getirilebilir.
Uzlaşma İhtiyacı: Kullanıcılar, yazılımın sağladığı özelliklerle kendi iş süreçlerini veya ihtiyaçlarını uzlaştırmak (adaptasyon sağlamak) zorundadırlar. Yazılım, onların iş akışına tam olarak uymayabilir.
Tüm
profesyonel yazılımların özellikle sahip olması gereken dört önemli özellik
nedir? Bazen önemli olabilecek dört diğer özellik öneriniz.
Tüm Profesyonel Yazılımların Sahip Olması Gereken Dört Önemli Özellik (4 Temel Öznitelik):
1. Sürdürülebilirlik (Maintainability): Yazılımın hataları düzeltecek, yeni gereksinimlere uyum sağlayacak ve gelecekteki çevresel değişikliklere adapte olacak şekilde kolayca değiştirilebilir olması.
2. Güvenilirlik ve Güvenlik (Dependability and Security):
o Güvenilirlik (Reliability): Yazılımın kullanıcı beklentilerine uygun olarak hizmet sunması ve makul bir hata oranıyla çalışması.
o Güvenlik (Security): Yazılımın kötü niyetli veya kazara yapılan saldırılara ve yetkisiz erişime karşı dayanıklı olması.
3. Verimlilik (Efficiency): Yazılımın bellek, işlem gücü ve enerji gibi sistem kaynaklarını israf etmeden, kabul edilebilir bir performansla çalışması.
4. Kullanılabilirlik (Usability): Yazılımın hedef kullanıcıları tarafından kolayca öğrenilebilmesi, anlaşılabilmesi ve kullanılabilmesi.
Bazen Önemli Olabilecek Dört Diğer Özellik:
1. Taşınabilirlik (Portability): Yazılımın, minimum değişiklikle farklı işletim sistemlerine veya donanım platformlarına taşınabilme yeteneği.
2. Yeniden Kullanılabilirlik (Reusability): Yazılım bileşenlerinin veya kodlarının, gelecekteki farklı sistemlerin geliştirilmesinde tekrar kullanılabilme yeteneği.
3. Uyumluluk (Compatibility): Yazılımın diğer sistemlerle veya eski sürümlerle sorunsuz bir şekilde etkileşim kurabilme yeteneği.
4. Esneklik/Ölçeklenebilirlik (Scalability): Artan kullanıcı sayısına, veri hacmine veya iş yüküne cevap verebilmek için sistemin performansının kolayca artırılabilme yeteneği.
Heterojenlik, işteki sosyal hayattaki değişiklikler ve güven ve güvenlik problemlerinden başka, yazılım mühendisliğinin 21. yüzyılda karşılaşması beklenen diğer problemler ve güçlükler neler olabilir?
Sommerville, 21. yüzyıl yazılım mühendisliğinin temel zorlukları olarak Heterojenlik (farklı teknolojilerin entegrasyonu), Sosyal ve İş Değişiklikleri (hızlı adaptasyon ihtiyacı) ve Güven/Güvenlik sorunlarını belirtir. Bunlar dışında öne çıkan zorluklar şunlar olabilir:
1. Büyük Veri (Big Data) ve Analitik: Büyük hacimli veriyi işleyebilen, analiz edebilen ve anlamlı çıkarımlar sunabilen yazılımların geliştirilmesi.
2. Akıllı Sistemler ve Yapay Zeka (AI/ML): Öğrenen, tahmin eden ve otonom kararlar veren karmaşık sistemlerin gereksinimlerinin belirlenmesi, test edilmesi ve güvenilirliklerinin sağlanması.
3. Sistemlerin Sürekli Evrimi: Yazılım sistemlerinin sürekli "hizmet olarak" sunulması (SaaS) ve kesintisiz, hızlı güncellemelerle evrim geçirmesi gerekliliği (DevOps kültürü).
4. Kritik Sistemlerin Karmaşıklığı ve Güvenirliği: Hayati risk taşıyan sistemlerin (tıbbi cihazlar, otonom araçlar, endüstriyel kontrol) hatasız ve yüksek güvenilirlikle tasarlanması.
5. Enerji Verimliliği ve Sürdürülebilirlik: Yazılım sistemlerinin artan enerji tüketimini azaltacak, çevre dostu (yeşil bilişim) çözümlerin geliştirilmesi.
6. Uç Bilişim (Edge Computing) ve IoT: Milyarlarca küçük, dağıtık ve kısıtlı kaynaklara sahip cihazdan oluşan sistemlerin yönetimi ve güvenliği.
- Süreç (Process): Bir geliştirme sürecinin (şelale, çevik, vb.) tanımlanması, geliştirmenin organize, disiplinli ve öngörülebilir bir şekilde ilerlemesini sağlar. Rastgele bir yaklaşım yerine sistematik bir yaklaşım benimsenir, bu da hataları azaltır.
- Güvenilirlik (Dependability/Reliability): Bir yazılımın hatasız çalışması ve kullanıcılarına güvenilir hizmet sunması, türü ne olursa olsun her sistem için temel bir beklentidir. Bir eğlence uygulamasının çökmesi sadece can sıkıcıyken, bir kontrol sisteminin çökmesi felaketle sonuçlanabilir. Bu ilke, tüm sistemlerde riski yönetmeye yarar.
- Gereksinim Yönetimi (Requirements Management): Ne geliştirildiğini ve müşteri/kullanıcı beklentilerini tanımlar. Gereksinimlerin doğru anlaşılması, izlenmesi ve yönetilmesi, hatalı veya kullanışsız bir ürün geliştirme riskini ortadan kaldırır. Bu, herhangi bir projenin başarısının anahtarıdır.
- Yeniden Kullanım (Reuse): Yeni yazılımların sıfırdan oluşturulması yerine, mevcut kanıtlanmış bileşenlerin veya kodların kullanılması anlamına gelir. Bu, geliştirme süresini azaltır, maliyeti düşürür ve zaten test edilmiş bileşenler kullanıldığı için güvenilirliği artırır.
Web'in evrensel kullanımının yazılım sistemlerini ve yazılım sistem mühendisliğini nasıl değiştirdiğini açıklayınız.
Web'in evrensel kullanımı (genellikle Web 2.0 ve sonrası), yazılım sistemlerinin ve mühendisliğinin doğasını kökten değiştirmiştir:
1. Dağıtık Hesaplama (Distributed Computing) Standart Hale Geldi: Yazılımlar tek bir bilgisayarda çalışmak yerine, internet üzerinden birbirine bağlı birçok sunucu ve istemci (tarayıcı, mobil cihaz) üzerinde çalışır hale geldi. Bu, ağ ve güvenlik mühendisliğinin önemini artırdı.
2. Hizmet Odaklı Mimari (SOA) ve Mikrohizmetler: Web, yazılımların hizmetler (API'lar) aracılığıyla iletişim kurmasına olanak sağladı. Bu, daha büyük sistemlerin küçük, bağımsız ve farklı teknolojilerle geliştirilmiş parçalardan (mikrohizmetler) oluşmasına yol açtı.
3. Hızlı Yayın Döngüleri (Çevik/DevOps): Geleneksel uzun yayın döngüleri yerine, Web uygulamaları haftalarca, hatta günde birden fazla kez güncellenebilir hale geldi. Bu, Çevik (Agile) ve DevOps metodolojilerini standart hale getirdi.
4. Kullanıcı Deneyimi (UX) Önceliği: Web uygulamalarında arayüz, işlevsellik kadar kritik hale geldi. Yazılım sistem mühendisliği, teknik gereksinimlerin yanı sıra kullanıcı etkileşimi ve arayüz tasarımına büyük önem vermeye başladı.
5. Ölçeklenebilirlik Zorunluluğu: Milyonlarca kullanıcıya hizmet verebilme gerekliliği, yazılım tasarımında yatay ölçeklenebilirlik ve yük dengeleme gibi mimari yaklaşımları zorunlu kıldı.
Profesyonel mühendisliğin doktorlar ve avukatlar gibi lisanslanıp lisanslanmaması konusunu tartışınız.
Bu, yazılım mühendisliği alanında uzun süredir devam eden önemli bir etik tartışmadır.
Lisanslanmayı Destekleyen Argümanlar (Gereklilik):
1. Halkın Güvenliği: Birçok yazılım sistemi (tıbbi cihazlar, uçak kontrol sistemleri, enerji santralleri) hayati risk taşır. Lisanslama, yazılım mühendislerinin minimum yeterlilik ve etik standartlarına sahip olmasını sağlayarak halkın güvenliğini korur.
2. Profesyonel Standart: Lisanslama, yazılım mühendisliğini "yazılımcı" gibi daha geniş terimlerden ayırarak bir meslek olarak itibarını artırır ve sektörde bir minimum kalite standardı oluşturur.
3. Hesap Verebilirlik: Lisanslı bir mühendis, mesleki hataları ve etik ihlalleri nedeniyle lisansını kaybetme riskiyle karşı karşıya kalır. Bu, daha fazla dikkat ve hesap verebilirlik sağlar.
Lisanslamaya Karşı Argümanlar (Zorluklar ve Gereksizlik):
1. Alan Çok Hızlı Değişiyor: Yazılım teknolojileri ve araçları o kadar hızlı değişiyor ki, sabit bir sınav ve lisanslama sistemi, hızla güncelliğini yitirecek ve inovasyonu kısıtlayacaktır.
2. Yazılımın Geniş Kapsamı: Birçok yazılım (eğlence uygulamaları, basit web siteleri) halkın güvenliği için risk taşımaz. Tek bir lisans, bu kadar geniş bir alanı kapsayacak şekilde nasıl tasarlanabilir?
3. Kim Lisanslayacak?: Lisanslama otoritesini kimin oluşturacağı ve sürdüreceği (devlet, endüstri kuruluşu, vb.) büyük bir zorluktur.
4. Yeterlilik Kanıtı: Doktorlar ve avukatlar gibi bir "ustalık" anı belirlemek zordur; deneyim ve sürekli öğrenme yazılımda daha önemlidir.
Terörizme karşı koymaya yardımcı olmak için birçok ülkede çok sayıda vatandaşın hareketlerini izleyen bilgisayar sistemleri geliştirdiği veya geliştirmeyi planlandığı tartışılıyor. Tabii ki bunun mahremiyete etkileri var. Bu tür bir sistemin geliştirilmesinde çalışmanın mahremiyete etkilerini tartışınız.
Bir terörle mücadele izleme sistemi üzerinde çalışmak, yazılım mühendisleri için etik bir ikilem yaratır: Ulusal güvenlik ve kamu yararı ile bireysel mahremiyet hakları arasındaki gerilimi yönetmek.
Mahremiyete Etkileri ve Mühendisin Sorumlulukları:
1. Gözetim Altında Yaşam Korkusu: Sistemin varlığı bile, vatandaşların sürekli izlendiği hissini yaratarak ifade özgürlüğünü kısıtlayabilir ve toplumsal güveni zedeleyebilir.
2. Yanlış Pozitifler ve Damgalama: Hatalı (yanlış pozitif) sonuçlar nedeniyle masum insanların terörist olarak yanlış etiketlenmesi ve haksız soruşturmalara maruz kalması riski.
3. Verinin Kötüye Kullanımı: Sistemin, terörle mücadele dışındaki siyasi veya kişisel amaçlarla kötüye kullanılması riski. (Örn: Siyasi muhalifleri izlemek).
4. Veri Güvenliği: Toplanan devasa hassas kişisel veri havuzunun siber saldırılar veya içeriden tehditlerle ihlal edilme riski.
Mühendisin Etik Sorumlulukları:
· Veri Minimallendirme: Mühendis, sistemi tasarlarken sadece kesinlikle gerekli olan verinin toplanmasını (ve anonimleştirilmesini/kullanılmamasını) sağlamalıdır.
· Şeffaflık ve Hesap Verebilirlik: Sistemin karar alma süreçlerinin şeffaf olması (kısmen) ve hata yapıldığında sorumluluk mekanizmalarının tanımlanmış olması için çalışmalıdır.
· Sınırlı Amaç: Mühendis, yazılımın sadece belirtilen amaç (terörle mücadele) için kullanılmasını sağlayan teknik kısıtlamaların (erişim kontrolü, denetim kaydı) uygulanmasını savunmalıdır.
· Bağımsızlık ve İtiraz: Mühendis, tasarımdaki bir özelliğin mahremiyeti gereksiz yere ihlal ettiğini veya etik olmadığını düşünüyorsa, bunu açıkça (ve uygun kanallardan) dile getirme ve hatta projeden çekilme hakkını kullanma sorumluluğuna sahiptir (1.9'daki "Yargı" maddesi).
Hiç yorum yok:
Yorum Gönder