Yazılım Mühendisliği Nedir? PDF
Document Details
Uploaded by Deleted User
Tags
Summary
Bu belge, yazılım mühendisliği, yazılım, programlama dilleri ve yazılım geliştirme yaşam döngüsü (SDLC) hakkında temel bilgileri içerir. Yazılım geliştirme aşamaları ve farklı programlama dilleri hakkında genel bilgiler sunulmaktadır.
Full Transcript
**[Yazılım Mühendisliği Nedir?]** Yazılım mühendisliği, yazılımların tasarımı, geliştirilmesi, yönetimi ve bakımı ile ilgilenen bir mühendislik dalı olarak tanımlanır. Bu alanda, karmaşık yazılımların sistematik ve verimli bir şekilde geliştirilmesi amaçlanır. Yazılım mühendisleri, yazılım projeler...
**[Yazılım Mühendisliği Nedir?]** Yazılım mühendisliği, yazılımların tasarımı, geliştirilmesi, yönetimi ve bakımı ile ilgilenen bir mühendislik dalı olarak tanımlanır. Bu alanda, karmaşık yazılımların sistematik ve verimli bir şekilde geliştirilmesi amaçlanır. Yazılım mühendisleri, yazılım projelerinin yaşam döngüsünü planlayarak ve yöneterek kalite, maliyet ve süreyi optimize eder. Yazılımın güvenilir ve sürdürülebilir olabilmesi için mühendislik prensipleri uygulanır. Ayrıca, yazılımların işlevselliğini ve kullanıcı gereksinimlerini karşılayacak şekilde tasarlanmasına da odaklanılır. metin, ekran görüntüsü, yazı tipi, sayı, numara içeren bir resim **[Yazılım Nedir?]** Yazılım, elektronik aygıtların belirli bir işi yapmasını sağlayan programların tümüne verilen isimdir. Ayrıca, yazılım geliştirme süreci, kullanıcı ihtiyaçlarına göre özelleştirilmiş çözümler sunmayı amaçlamaktadır. Bir başka deyişle, var olan bir problemi çözmek amacıyla bilgisayar (programlama) dili kullanılarak oluşturulmuş anlamlı anlatımlar bütünüdür. İşte bazı önemli programlama dilleri ve tarihsel gelişimleri: Assembly (1940\'lar): İlk nesil programlama dili olarak bilinir. Bilgisayarın donanımına en yakın dil olup, makine diline çok yakın çalışır. Fortran (1957): İlk yüksek seviyeli programlama dillerinden biridir ve bilimsel hesaplamalar için geliştirilmiştir. COBOL (1959): İş dünyasında yaygın olarak kullanılan bu dil, iş ve finansal uygulamalar için geliştirilmiştir. C (1972): Dennis Ritchie tarafından geliştirilen C, sistem programlama ve işletim sistemleri için yaygın olarak kullanılmıştır. C++ (1985): C dilinin bir türevidir, nesne yönelimli programlamaya (OOP) giriş sağlamıştır. Java (1995): Sun Microsystems tarafından geliştirilen Java, platform bağımsız olarak çalışan uygulamalar için geliştirilmiştir ve hala yaygın olarak kullanılmaktadır. Python (1991): Guido van Rossum tarafından geliştirilmiş, basit ve okunabilir sözdizimi ile popülerlik kazanmıştır. Günümüzde bilimsel araştırmalar, yapay zeka ve veri bilimi gibi alanlarda yaygın kullanılır. JavaScript (1995): Web geliştirme için kullanılan bu dil, internetin yaygınlaşmasıyla büyük bir öneme kavuşmuştur. C\# (2000): Microsoft tarafından geliştirilmiş, özellikle.NET platformunda yazılım geliştirme için kullanılan nesne yönelimli bir dildir. Web, masaüstü ve mobil uygulamalar için yaygınca tercih edilir. Programlama dili, yazılımcının bir algoritmayı ifade etmek amacıyla, bir bilgisayara ne yapmasını istediğini anlatmasının tektipleştirilmiş yoludur. Bu diller, farklı seviyelerde soyutlama sunarak, yazılımcının karmaşık işlemleri daha kolay bir şekilde gerçekleştirmesine olanak tanır. Algoritma, belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan yoldur. Ayrıca, algoritmalar, sistematik bir yaklaşım sunarak karmaşık problemlerin çözümünde adım adım ilerlemeyi sağlar. Matematikte ve bilgisayar biliminde bir işi yapmak için tanımlanan, bir başlangıç durumundan başladığında, açıkça belirlenmiş bir son durumunda sonlanan, sonlu işlemler kümesidir. Bilgisayar yazılımları genel olarak iki ana grupta incelenebilir: Sistem Yazılımları: Bilgisayarın temel işlevlerini yönetmek ve donanımı işletmek için kullanılan yazılımlardır. İşletim sistemleri, bilgisayarın donanım ve yazılım kaynaklarını kontrol eder, uygulama yazılımlarının çalışmasını sağlar ve genel sistem performansını yönetir. Ayrıca, derleyiciler (yazılan programları makine diline çeviren araçlar) ve çeşitli yardımcı yazılımlar (örneğin, sistem bakım araçları) bu gruba dahildir. Sistem yazılımları, bilgisayarın verimli bir şekilde çalışmasını ve yazılımın donanımla uyumlu bir şekilde entegre edilmesini sağlar. Uygulama Yazılımları: Kullanıcıların belirli ihtiyaçlarını karşılamak için tasarlanmış yazılımlardır. Bu yazılımlar, çeşitli iş süreçlerini ve görevleri otomatikleştirir. Örneğin, kelime işlemciler, hesap tabloları, grafik tasarım programları, müşteri ilişkileri yönetimi (CRM) sistemleri ve e-ticaret platformları bu kategoriye girer. Uygulama yazılımları, spesifik kullanıcı ihtiyaçlarını karşılamak amacıyla geliştirilmiş olup, çeşitli sektörlerde ve iş alanlarında etkin bir şekilde kullanılır. **[Yazılım Yaşam Döngüsü(SDLC)]** Yazılım Geliştirme Yaşam Döngüsü (SDLC), bir yazılım projesinin başlangıcından sonuna kadar geçen süreci kapsayan bir modeldir. 1\. Planlama: Bu aşamada projenin hedefleri, kapsamı ve gereksinimleri belirlenir. Zaman, maliyet ve kaynak planlaması yapılır. 2\. Analiz: İhtiyaçların derinlemesine analiz edildiği bu aşamada, yazılımın hangi işlevleri yerine getireceği ve kullanıcı gereksinimlerine nasıl cevap vereceği belirlenir. 3\. Tasarım: Yazılımın genel mimarisi ve kullanıcı arayüzü gibi detaylar bu aşamada tasarlanır. Veri tabanı, altyapı ve teknik gereksinimler oluşturulur. 4\. Uygulama (Gerçekleştirme): Tasarlanan yazılımın kodlama işlemi bu aşamada yapılır. Geliştiriciler belirlenen gereksinimlere uygun şekilde yazılımı geliştirirler. 5\. Test ve Entegrasyon: Yazılımın düzgün çalışıp çalışmadığı test edilir. Hatalar bulunup düzeltilir ve sistem diğer sistemlerle entegre edilir. 6\. Bakım: Yazılımın yayına alınmasından sonra karşılaşılan hatalar giderilir, iyileştirmeler yapılır ve yazılım güncel tutulur. **[Yazılım Geliştirme Süreçlerinin Maliyet Oranları]** 1\. Planlama (5-10%): Planlama aşaması genellikle toplam bütçenin küçük bir kısmını oluşturur. Bu aşamada maliyetler, iş analizleri, gereksinimlerin belirlenmesi ve proje yönetimi ile ilgili faaliyetlere harcanır. 2\. Analiz (10-15%): Bu aşamada, yazılımın ihtiyaçları ve gereksinimleri analiz edilir. Gelişmiş iş analizi, veri modelleme ve yazılım mimarisi gibi işlemler daha derinlemesine yapılır, bu da maliyetlerin artmasına neden olabilir. 3\. Tasarım (15-20%): Yazılımın tasarımı ve mimarisinin oluşturulduğu bu aşama, daha teknik bir aşama olup maliyet açısından önemli bir pay alır. Kullanıcı arayüzü tasarımı, veritabanı yapısı ve sistem mimarisinin belirlenmesi bu maliyetin ana kaynaklarıdır. 4\. Uygulama (30-40%): En büyük maliyet genellikle uygulama aşamasında ortaya çıkar. Kodlama, yazılımın geliştirilmesi ve işlevlerin hayata geçirilmesi, yazılımın boyutuna ve karmaşıklığına bağlı olarak büyük maliyetler gerektirir. Geliştirici ücretleri, kullanılan teknolojiler ve yazılım araçları da bu aşamada maliyetin ana faktörleridir. 5\. Test ve Entegrasyon (15-25%): Yazılımın hata testlerinin ve sistem entegrasyonunun yapıldığı bu aşamada önemli bir maliyet oluşur. Kalite güvence, manuel ve otomatik test süreçleri, kullanıcı testleri ve sistemin diğer yazılımlar ile entegrasyonu, maliyetlerin yükselmesine sebep olur. 6\. Bakım (10-15%): Yazılım yayına alındıktan sonra bakım aşamasında da maliyetler devam eder. Hataların düzeltilmesi, güvenlik güncellemeleri, yazılımın yeni özelliklerle geliştirilmesi gibi işlemler bu maliyetin kaynağıdır. Süreç Modelleri : Gelişigüzel Model Barok Modeli Şelale Modeli V-Süreç Modeli Helezoik Model Artırımsal Geliştirme Modeli Agile (Çevik Model) Gelişigüzel Model: Yazılım geliştirme süreçlerinde herhangi bir planlama, düzen veya belirli bir metodoloji olmadan rastgele ilerleyen bir yaklaşımdır. Bu modelde, yazılım geliştirme süreçleri spontane şekilde yürütülür ve aşamalar arasında belirgin bir yapı veya sıra bulunmaz. Adeta hasbelkader yapılan işler gibi, hangi adımın ne zaman yapılacağına dair bir öngörü ya da strateji yoktur. Bu durum, projelerde düzensizliği, belirsizliği ve kontrolsüz ilerlemeyi beraberinde getirir. Geliştiriciler ihtiyaç duydukları fonksiyonları, özellikleri veya aşamaları herhangi bir sıraya bağlı kalmadan geliştirir. Bu sebeple işler genellikle karmaşık hale gelir ve hatalar artar. Günümüzde yazılım geliştirme süreçlerinde tercih edilmez, çünkü kalite kontrol, sürdürülebilirlik ve verimlilik açısından ciddi sorunlar yaratır. Barok Modeli: Yazılım geliştirme yaşam döngüsünde çok eski ve ilkel bir yaklaşımdır. Bu model, geliştiricilerin belirli bir süreç ya da metodoloji olmaksızın, projeyi planlamadan ya da belirgin aşamalar oluşturmadan ilerledikleri bir yapıyı temsil eder. Barok modelinde, gelişigüzel modelden farklı olarak bazı sistematik yaklaşımlar bulunsa da, süreçler yeterince organize ve düzenli değildir. Özellikle dosyalama, belge yönetimi, kalite kontrol ve proje yönetimi gibi alanlarda ciddi eksiklikler vardır. Planlama ve düzen yerine geliştiricilerin özgürce hareket ettiği, bazen plansız iş akışları oluşturduğu bu model, esnekliği artırsa da karmaşıklığı ve hataları da beraberinde getirir. Şelale Modeli (Waterfall Model), yazılım geliştirme yaşam döngüsünde kullanılan klasik ve sıralı bir yaklaşımdır. Bu modelde, yazılım geliştirme süreci bir dizi aşamadan oluşur ve her aşama tamamlanmadan bir sonraki aşamaya geçilmez. Aşamalar bir şelalenin suyu gibi yukarıdan aşağıya doğru akarak ilerlediği için bu isim verilmiştir. Şelale modelinin aşamaları genellikle şu şekildedir: 1.Gereksinim Analizi: Proje için tüm gereksinimlerin toplanıp belgelendiği aşamadır. 2.Tasarım (Design): Yazılımın mimarisi ve nasıl çalışacağı bu aşamada planlanır. 3.Gerçekleştirme (Implementation): Yazılımın kodlandığı ve uygulandığı aşamadır. 4.Doğrulama (Verification): Yazılımın test edilip hataların düzeltildiği aşamadır. 5.Bakım (Maintenance): Yazılımın tesliminden sonra yapılan güncelleme, iyileştirme ve hataların giderilmesini içerir. ![](media/image2.PNG) V Süreç Modeli (V-Model), yazılım geliştirme yaşam döngüsünde Şelale Modeli'nin bir türevi olarak kabul edilen, ancak test ve doğrulama süreçlerine daha fazla vurgu yapan bir yaklaşımdır. V modeli, geliştirme sürecinin her aşamasının karşısında bir test aşaması olması prensibine dayanır. \"V\" şekli, modelin iki tarafını temsil eder: Sol taraf geliştirme aşamalarını, sağ taraf ise test ve doğrulama aşamalarını içerir. V Süreç Modeli Aşamaları: Sol Taraf (Geliştirme): Gereksinim Analizi: Projenin gereksinimlerinin toplandığı aşamadır. Sistem Tasarımı: Sistemin genel mimarisinin tasarlandığı aşamadır. Detaylı Tasarım: Sistemin her bir bileşeninin detaylı şekilde tasarlandığı aşamadır. Kodlama: Tasarımların yazılım haline getirildiği, kodlama sürecidir. Sağ Taraf (Test ve Doğrulama): Birleştirme Testi: Sistem bileşenlerinin entegrasyon testleri yapılır. Sistem Testi: Sistem genelinde fonksiyonel ve fonksiyon dışı testler uygulanır. Kabul Testi: Müşterinin gereksinimlerine uygunluk test edilir. metin, ekran görüntüsü, yazı tipi, sayı, numara içeren bir resim Helezonik model, yazılım geliştirme sürecinde riskleri yönetmek ve projeyi aşamalı olarak geliştirmek için kullanılan bir yaklaşımdır. Bu modelde, proje döngüler (spiraller) halinde ilerler. Her döngüde belirli aşamalar tekrarlanır ve her seferinde yazılımın kalitesi artırılır. Aşamaları: Planlama: Proje hedefleri belirlenir ve gereksinimler toplanır. Risk Analizi: Projede karşılaşılabilecek riskler değerlendirilir. Geliştirme ve Test: Yazılımın bir versiyonu (prototip) oluşturulur ve test edilir. Değerlendirme: Elde edilen sonuçlar gözden geçirilir ve geri bildirim alınır. Bu bilgiler, bir sonraki döngü için kullanılır. Artırımsal Geliştirme Modeli (Incremental Development Model), yazılım geliştirme sürecini parçalara bölerek kademeli olarak ilerleyen bir yaklaşımdır. Bu modelde, yazılımın tamamı bir seferde değil, küçük parçalara (artırımlara) bölünerek geliştirilir ve her parça bir önceki parçaya eklenir. Her artırımla birlikte yazılım daha fazla özellik kazanır ve işlevselliği artar. Artırımsal Geliştirme Modeli\'nin Aşamaları: Gereksinim Analizi: Projenin tüm gereksinimleri belirlenir, ancak bu gereksinimler öncelik sırasına göre küçük parçalara bölünür. Tasarım ve Geliştirme: Öncelikli parçalar tasarlanır ve geliştirilir. Yazılımın ilk basit versiyonu oluşturulur. Test ve Değerlendirme: Her artırımdan sonra yazılım test edilir ve müşteri geri bildirimleri alınır. Yeniden Geliştirme: Bir sonraki artırımda yeni özellikler eklenir ve yazılım güncellenir. Agile (Çevik) Model, yazılım geliştirme süreçlerinde esneklik ve hız odaklı bir yaklaşımdır. Geleneksel modellerde olduğu gibi uzun ve katı aşamalar yerine, Agile\'da yazılım küçük parçalara bölünerek kısa döngüler (genellikle 1-4 hafta arası süren \"sprintler\") halinde geliştirilir. Her döngünün sonunda çalışan bir ürün parçası teslim edilir ve sürekli geri bildirimlerle iyileştirilir. Agile Modelinin Aşamaları: Agile modeli, kesin bir aşama sıralaması içermez; bunun yerine tekrarlayan döngüler içinde ilerler. Ancak genel olarak şu süreçleri kapsar: 1.Gereksinim Analizi: Müşteriden gelen geri bildirimlere dayalı olarak, bir sonraki döngüde hangi özelliklerin geliştirileceği belirlenir. 2.Planlama: Sprint boyunca yapılacak işler planlanır. 3.Geliştirme: Geliştirici ekip, planlanan özellikleri kısa süreli döngüler içinde hayata geçirir. 4.Test: Her sprint sonunda yapılan geliştirmeler test edilir ve hatalar giderilir. 5.Geri Bildirim ve İyileştirme: Müşteriden geri bildirim alınarak yazılımın sonraki aşamaları şekillendirilir. **Hedefler**:Proje Kaynaklarının Belirlenmesi, İnsan Kaynağı Donanım Kaynağı Yazılım Kaynağı **[Planlama]** Proje planı, projedeki değişikliklere, risklere ve beklenmedik gelişmelere göre sürekli güncellenmelidir. Bu güncellemelerle kaynak kullanımının (zaman, insan kaynağı, bütçe vb.) planlandığı gibi ilerleyip ilerlemediği gözlemlenir ve gerekirse düzeltici adımlar atılır. Proje planlama aşamasında yapılan işlemler; Kaynakların Belirlenmesi Maliyetlerin Kestirilmesi Proje Ekip Yapısının Oluşturulması Ayrıntılı Proje Planının Yapılması Projenin İzlenme Yönteminin Belirlenmesi Proje kaynakları, projeyi başarıyla yürütmek için gereken her türlü insan, donanım, yazılım ve diğer varlıkları kapsar. Planlama aşamasında, bu kaynakların tanımı, zaman kullanımı, görev süreleri ve edinilme zamanlarının dikkatlice düzenlenmesi gereklidir. İşte üç ana kaynak kategorisinin planlanması: 1. İnsan Kaynakları: a) Tanım: Projede görev alacak kişiler, ekipler veya dış danışmanlar. Bu kaynaklar, proje boyunca belirli görevler ve sorumluluklar üstlenecek profesyonellerdir. b) Planlama: i. Zaman Kullanımı: Her bir personelin ne kadar süreyle projeye dahil olacağı, görevlerdeki çalışma saatleri ve iş yükü belirlenir. ii. Görev Süreleri: Hangi görevlerin kim tarafından ne kadar sürede tamamlanması gerektiği detaylandırılır.Edinilme Zamanları: İnsan kaynaklarının hangi aşamada projeye dahil olması gerektiği ve hangi noktada ekipte yer alacakları planlanır. 2. Donanım Kaynakları: a) Tanım: Projede kullanılacak fiziksel ekipmanlar, cihazlar, makineler ve altyapı gibi varlıklar. Bu kaynaklar, projeyi yürütebilmek için ihtiyaç duyulan teknolojik veya operasyonel unsurlardır. b) Planlama: i. Zaman Kullanımı: Donanımın ne zaman ve hangi süre boyunca kullanılacağı, hangi ekipmanın hangi aşamada devrede olacağı belirlenir. ii. Görev Süreleri: Her bir donanım kaynağının hangi görevde ve ne kadar süreyle aktif olarak kullanılacağı planlanır.Edinilme Zamanları: Donanım kaynaklarının ne zaman temin edilip kullanıma hazır olacağı planlanır (satın alma, kiralama veya mevcut donanım kullanımı). 3. Yazılım Kaynakları: a) Tanım: Projeye özel yazılımlar, yönetim araçları, geliştirme platformları ve diğer yazılım çözümleri. Proje sürecinde gereken teknik çözümleri sağlar. b) Planlama: i. Zaman Kullanımı: Yazılımın hangi aşamalarda devrede olacağı ve ne kadar süre kullanılacağı belirlenir. ii. Görev Süreleri: Yazılımın hangi görevlerde ve hangi sıklıkla kullanıldığına dair plan yapılır.Edinilme Zamanları: Yazılım lisanslarının ne zaman alınacağı veya yazılım geliştirme süreçlerinin hangi dönemde başlatılacağı planlanır. Planlama Sürecinde Eleman Türlerinin Belirlenmesi: Proje, ihtiyaçlarına göre farklı türde elemanlara ihtiyaç duyar. Her proje, kendi özelliklerine, hedeflerine ve karmaşıklık derecesine göre çeşitli uzmanlık gerektirir. Bu uzmanlıklar aşağıda detaylandırılmıştır: ![metin, ekran görüntüsü, yazı tipi, sayı, numara içeren bir resim](media/image4.png) **[Donanım Kaynakları]** Ana Bilgisayarlar Sunucular (Web, E-posta, Veri Tabanı) Kullanıcı Bilgisayarları (PC) Yerel Alan Ağı (LAN) Alt Yapısı Geniş Alan Ağı (WAN) Alt Yapısı Yazılımın geliştirileceği ortam, gerçek kullanım ortamından farklı olmalıdır. Geliştirme ortamı ile uygulama ortamının aynı konfigürasyona sahip olması, kurulum sırasında karşılaşılabilecek taşıma sorunlarını büyük ölçüde ortadan kaldıracaktır. **[Yazılım Kaynakları]** Geliştirme Araçları: Programlama Dilleri: Projede kullanılacak yazılım dilleri (örn. Python, Java, C++, JavaScript vb.). Entegre Geliştirme Ortamları (IDE): Yazılım geliştirmek için kullanılan platformlar (örn. Visual Studio, Eclipse, IntelliJ IDEA). Kod Düzenleyiciler: Basit kod yazma ve düzenleme araçları (örn. Sublime Text, Visual Studio Code, Atom). 2. Versiyon Kontrol Sistemleri: Git: Yazılım geliştirme sürecinde kodun sürüm kontrolünü sağlamak için kullanılan en popüler sistem. SVN (Subversion): Git'in alternatiflerinden biri olan başka bir sürüm kontrol sistemi. GitHub, GitLab, Bitbucket: Git tabanlı projelerin barındırılması ve yönetilmesi için kullanılan platformlar. 3. Veritabanı Yönetim Sistemleri (DBMS): SQL Tabanlı Veritabanları: MySQL, PostgreSQL, Microsoft SQL Server, Oracle DB gibi ilişkisel veritabanları. NoSQL Tabanlı Veritabanları: MongoDB, Cassandra, Couchbase gibi yapılandırılmamış veya yarı yapılandırılmış verileri saklamak için kullanılan veritabanları. 4. Proje Yönetim ve Takip Araçları: JIRA: Yazılım projelerini planlamak, yönetmek ve izlemek için kullanılan proje yönetim aracı. Trello, Asana: Görev takibi ve ekip koordinasyonu sağlamak için kullanılan popüler araçlar. Confluence: Ekip içi dokümantasyon ve bilgi paylaşımı sağlamak için kullanılan platform. 5. Test Araçları: Birime Dayalı Test Araçları: JUnit, NUnit, pytest gibi birim testlerini otomatikleştiren araçlar. Fonksiyonel ve Entegrasyon Test Araçları: Selenium, TestComplete, Apache JMeter gibi otomatik test araçları. Sürekli Entegrasyon (CI) ve Test: Jenkins, CircleCI, Travis CI gibi araçlarla yazılımın sürekli entegrasyon ve test süreçlerini otomatikleştiren sistemler. **[Proje Maliyetleri]** Proje maliyetleri, bir projeyi başlatmak, yürütmek ve tamamlamak için gereken tüm finansal kaynakların hesaplanmasını ve yönetilmesini kapsar. Bu maliyetler, projedeki farklı aşamalarda ortaya çıkar ve doğru bir bütçeleme yapılması, projenin başarıyla tamamlanması için kritik bir rol oynar. Proje maliyetleri, aşağıdaki ana kategorilere ayrılır: 1. Doğrudan Maliyetler Proje faaliyetleriyle doğrudan ilgili olan maliyetlerdir. Bu maliyetler, proje çıktıları ve iş süreçlerine doğrudan katkı sağlayan kaynakları içerir. İnsan Kaynakları Maliyetleri: Projede yer alan ekip üyelerinin maaşları, danışmanlık ücretleri, dış kaynak kullanımı ve proje ekibine sağlanan ek ödemeler. Bu, genellikle projenin en büyük maliyet kalemidir. Örnek: Proje yöneticisi, geliştiriciler, tasarımcılar, test uzmanları gibi personelin maaşları ve yan hakları. Donanım Maliyetleri: Projede kullanılan bilgisayarlar, sunucular, ağ altyapısı, veri saklama birimleri ve diğer teknik ekipmanlar. Örnek: Sunucular, ana bilgisayarlar, ağ donanımları (LAN, WAN), yedekleme cihazları, güvenlik donanımları. Yazılım Maliyetleri: Projede kullanılan lisanslı yazılımlar, geliştirme araçları, test araçları, veritabanları ve diğer platformlar için yapılan ödemeler. Örnek: Yazılım lisansları (Windows Server, SQL Server, Adobe ürünleri), bulut hizmetleri (AWS, Azure), geliştirme ortamı lisansları (IDE\'ler). Malzeme ve Sarf Maliyetleri: Proje sürecinde kullanılan ofis malzemeleri, yazıcılar, kağıt, toner gibi günlük çalışma ihtiyaçları. Örnek: Bilgisayar sarf malzemeleri, kırtasiye giderleri, teknik dokümantasyon için gereken malzemeler. Yolculuk ve Konaklama Maliyetleri: Proje sürecinde yapılan iş seyahatleri, toplantılar, seminer ve eğitimler için oluşan masraflar. Örnek: Uçak bileti, otel konaklaması, araç kiralama, gündelik harcırah. 2. Dolaylı Maliyetler Proje faaliyetlerine doğrudan bağlı olmayan, ancak proje başarısına katkı sağlayan maliyetlerdir. Bu maliyetler genellikle genel giderler olarak da bilinir. Kiralama Maliyetleri: Proje süresince kullanılan ofis alanı veya tesislerin kira bedelleri. Örnek: Proje ekibinin çalıştığı ofis alanının kira bedeli. Elektrik, Isıtma ve Soğutma Maliyetleri: Projede kullanılan tesislerdeki enerji giderleri. Örnek: Bilgisayarların, sunucuların ve ekipmanların çalışması için gereken elektrik giderleri. Sigorta ve Vergiler: Proje boyunca kullanılan ekipman, insan kaynakları ve tesislerle ilgili sigorta bedelleri ve vergiler. Örnek: Proje ekipmanları ve iş gücü için yapılan sigorta ödemeleri. 3. Sabit Maliyetler Proje süresinden veya çalışma hacminden bağımsız olarak sabit kalan maliyetlerdir. Proje boyunca bir kez yapılır ve genellikle uzun vadeli yatırımları kapsar. Donanım Alım Maliyetleri: Projede kullanılmak üzere bir defaya mahsus olarak satın alınan bilgisayarlar, sunucular veya diğer teknik ekipmanlar. Örnek: Projeye özel olarak alınan sunucular ve bilgisayarlar. Yazılım Lisans Maliyetleri: Proje için kullanılan yazılımlar için yapılan tek seferlik lisans ücretleri. Örnek: Veri tabanı yazılımı veya proje yönetim araçlarının lisans bedelleri. 4. Değişken Maliyetler Proje ilerledikçe veya kapsam genişledikçe artan ya da azalan maliyetlerdir. Bu maliyetler, proje süresine, iş hacmine ve kaynak kullanımına göre değişir. İş Gücü Maliyetleri: Projeye eklenen yeni çalışanlar veya dış kaynaklardan alınan ek destek hizmetleri. Örnek: Proje süresince freelance çalışanların veya danışmanların ücretleri. Sarf Malzeme Maliyetleri: Projede sürekli olarak kullanılan ve tüketilen malzemeler. Örnek: Yazıcı kağıdı, toner, yedek donanım parçaları. 5. Beklenmeyen Maliyetler Proje sırasında öngörülemeyen olaylar veya risklerin gerçekleşmesi durumunda ortaya çıkabilecek maliyetlerdir. Bu maliyetler için bir yedek bütçe ayrılması, projeyi güvence altına alır. Risk Yönetimi Maliyetleri: Proje sırasında karşılaşılan beklenmeyen gecikmeler, teknik sorunlar veya dış faktörlere karşı alınan önlemler için kullanılan bütçe. Örnek: Proje sırasında yaşanan donanım arızaları veya yazılım hatalarının giderilmesi için harcanan ek maliyetler. 6. Eğitim ve Gelişim Maliyetleri Proje ekibinin daha verimli çalışması ve teknolojik yetkinliklerini artırmak amacıyla verilen eğitimler ve sertifikalar için yapılan harcamalar. Personel Eğitim Maliyetleri: Proje ekibine sağlanan teknik eğitimler, seminerler ve sertifika programları. Örnek: Yeni bir yazılım teknolojisi veya araç kullanımı için alınan eğitim programı ücretleri. 7. İletişim ve İşbirliği Maliyetleri Proje süresince ekipler arasındaki iletişimi ve işbirliğini sağlamak için kullanılan araçlar ve platformlar. İletişim Araçları Maliyetleri: Projede kullanılan işbirliği araçlarının ve iletişim platformlarının maliyetleri. Örnek: Slack, Zoom, Microsoft Teams gibi yazılımların abonelik ücretleri. 8. Yasal ve İdari Maliyetler Proje ile ilgili hukuki işlemler, lisanslar ve idari masraflar için yapılan harcamalar. Yasal Danışmanlık ve İzinler: Projenin yürütülmesi için gerekli olan yasal izinler ve hukuki danışmanlık hizmetleri. Örnek: Yazılım geliştirme için gerekli olan yasal onaylar veya patent başvuru ücretleri. **[Gözlemlenebilecek Değerler]** Projenin toplam süresi Projenin toplam maliyeti Projede çalışan eleman sayısı, niteliği, çalışma süresi Toplam satır sayısı Bir satırın maliyeti (ortalama) Bir kişi/ay'da gerçekleştirilen satır sayısı Toplam işlev sayısı Bir işlevin maliyeti Bir kişi/ay'da gerçekleştirilen işlev sayısı Bir kişi/ay'da maliyet Projenin boyut türüne göre Proje büyüklüğünü kestiren yöntemler Proje zaman ve işgücünü kestiren yöntemler 2. Projelerin büyüklüğüne göre Makro yöntemler (büyük boyutlu projeler 30 kişi-yıl) Mikro Yöntemler (orta ve küçük boyutlu projeler) 3. Uygulanış biçimlerine göre Yalın düzeyde Orta düzeyde Ayrıntılı düzeyde 4. Değişik aşamalarda kullanılabilirlik Planlama ve analiz aşamasında kullanılabilen Tasarım aşamasında kullanılabilen Gerçekleştirim aşamasında kullanılabilen yöntemler 5. Yöntemlerin yapılarına göre Uzman deneyimine gereksinim duyan Önceki projelerdeki bilgileri kullanan yöntemler. **[Maliye Kestirim Yönetim]** Projenin boyut türüne göre Proje büyüklüğünü kestiren yöntemler Proje zaman ve işgücünü kestiren yöntemler 2. Projelerin büyüklüğüne göre Makro yöntemler (büyük boyutlu projeler 30 kişi-yıl) Mikro Yöntemler (orta ve küçük boyutlu projeler) 3. Uygulanış biçimlerine göre Yalın düzeyde Orta düzeyde Ayrıntılı düzeyde 4. Değişik aşamalarda kullanılabilirlik Planlama ve analiz aşamasında kullanılabilen Tasarım aşamasında kullanılabilen Gerçekleştirim aşamasında kullanılabilen yöntemler 5. Yöntemlerin yapılarına göre Uzman deneyimine gereksinim duyan Önceki projelerdeki bilgileri kullanan yöntemler. **[İşlev Noktaları Yönetimi]** İşlev Noktaları Yöntemi (Function Point Analysis, FPA), yazılım projelerinin karmaşıklığını ve işlevsel büyüklüğünü ölçmek için kullanılan bir yöntemdir. Bu yöntem, yazılım projelerinin geliştirilmesi, yönetilmesi ve maliyetlendirilmesi aşamalarında kritik rol oynar. FPA, yazılımın kullanıcıya sunduğu işlevleri baz alarak bir yazılımın ne kadar büyük ve karmaşık olduğunu ölçer, böylece yazılım projeleri için daha doğru bir tahmin ve değerlendirme sağlar. İşlev Noktalarının Kategorileri: FPA, yazılımın işlevsel büyüklüğünü beş ana kategori altında toplar. Her kategoriye ait işlevlerin karmaşıklık düzeyine (basit, orta, karmaşık) göre farklı ağırlıklar atanır. 1.Girdi İşlemleri (External Inputs, EI): Kullanıcıdan gelen verilerin veya komutların sisteme girdi olarak alındığı işlevlerdir. Örneğin, bir form doldurma ekranı ya da veri giriş işlemi. 2.Çıktı İşlemleri (External Outputs, EO): Sistemden kullanıcıya sağlanan çıktı bilgileridir. Raporlar, grafikler veya çıktı ekranları bu kategoriye girer. 3.Sorgulama İşlemleri (External Inquiries, EQ): Kullanıcının sistemden sorgulama yaparak bilgi almasını sağlayan işlemlerdir. Örneğin, bir arama sorgusu veya bilgi getirme işlemi. 4.Dahili Dosyalar (Internal Logical Files, ILF): Sistemin kendi içerisinde tuttuğu ve işlediği veri dosyalarıdır. Bu dosyalar, sistemin iç yapısına dahil olan veritabanlarıdır. 5.Harici Dosyalar (External Interface Files, EIF): Sistemin diğer sistemlerle veya yazılımlarla etkileşime geçtiği harici dosyalardır. Örneğin, bir başka yazılımın kullandığı veri dosyası bu kategoriye dahil olabilir. metin, ekran görüntüsü, sayı, numara, yazı tipi içeren bir resim **[İşlev Noktası Değerlerine Göre Proje Büyüklüğü]** Küçük Projeler: 1 - 100 işlev noktası: Genellikle daha basit, sınırlı işlevsellikteki yazılım projeleri. Örnek: Tek bir form veya rapor üretme sistemi, basit bir veri girişi uygulaması. 2. Orta Ölçekli Projeler: 101 - 300 işlev noktası: Orta düzeyde karmaşıklık ve işlevselliğe sahip projeler. Örnek: Kurum içi bir yönetim sistemi, birkaç modülden oluşan bir uygulama. 3. Büyük Projeler: 301 - 700 işlev noktası: Çok sayıda işlev ve veri akışına sahip, daha geniş kapsamlı yazılım projeleri. Örnek: Kurumsal kaynak planlama (ERP) yazılımı, müşteri ilişkileri yönetimi (CRM) sistemleri. 4. Çok Büyük Projeler: 700+ işlev noktası: Geniş kapsamlı, karmaşık ve birçok kullanıcıya hitap eden projeler. Örnek: Büyük çaplı bir bankacılık sistemi, ulusal sağlık yönetim sistemleri, büyük e-ticaret platformları. **[Proje Maliyet Formülü]** Proje Maliyet Formülü: Proje Maliyeti = Toplam İşlev Noktası x İşle Noktası Başına Düşen Çalışma Süresi x Saatlik Maliyet Bu formül üç temel bileşene dayanır: 1.Toplam İşlev Noktası (Function Point Total): Proje işlev noktası analizine göre hesaplanan toplam işlev noktası değeri. 2.İşlev Noktası Başına Düşen Çalışma Süresi: Her bir işlev noktası için gereken ortalama çalışma süresi (genellikle saat olarak). Bu süre, yazılım projesinin karmaşıklığına, ekibin tecrübesine ve kullanılan teknolojiye bağlı olarak değişir. Ortalama değerler: 1. Basit projelerde: 10 - 15 saat/işlev noktası 2. Karmaşık projelerde: 20 - 30 saat/işlev noktası 3.Saatlik Maliyet (Hourly Rate): Yazılım geliştiricilerinin, proje yöneticilerinin, test uzmanlarının ve diğer proje ekibinin saatlik ücretleri. Bu değer, ülkeye, sektöre ve ekip yapısına göre değişiklik gösterebilir. Ortalama değerler genellikle: 1. Yazılım geliştirme projelerinde: 50 - 150 USD/saat **COCOMO(Constructive Costing Model)** COCOMO, 1981 yılında Barry Boehm tarafından geliştirilmiş algoritmik bir yazılım maliyet kestirim yöntemidir. COCOMO, her yazılım projesinin temel hedefi, müşterinin ihtiyaçlarını karşılayan, öngörülmüş bütçe ile zamanında teslim edilen hatasız bir yazılım geliştirmektir. Yazılımda ölçüm yöntemlerinin kullanılması, yazılım sektöründe gittikçe önem kazanmıştır. **[Beş Temel Yazılım Ölçütü]** Büyüklük (Size)→ Kodun satır sayısı. Emek (Effort)→ Proje kapsamında ayda kaç kişi çalışacak. Maliyet (Cost)→ Projenin ne kadara mal olacağı Zaman (Duration)→ Proje kaç ayda tamamlanacak Kalite (Quality) → Projenin kalitesi tespit edilen hata sayısından ölçülebilir. Ayrık projeler; küçük boyuttaki programcı takımlarının, iyi bildikleri bir ortamda uygulamalar geliştirmesidir. İletişim problemi azdır ve elemanlar çabucak işlerini halledebilecek durumdadırlar. Yarı ayrık projelerde ise ekipte tecrübeli ve tecrübesiz elemanlar bulunabilir. İlgili sistemler konusunda deneyimleri sınırlı olabilir ve geliştirilen sistemin her şeyini bilmeyebilirler. Gömülü projelerde ise geliştirilecek yazılım, sistemin donanım, kurallar, işletim süreçleri veya yazılım gibi diğer bileşenleri ile çok kuvvetli bağlantılar oluşturur. Gereksinim değişiklikleri ile problemleri halletmek olanaksızlaşmıştır. İhtiyaç belirtiminin geçerlilik irdelemesi çok pahalıdır. Elemanların her şeyi bilme olasılığı iyice azalmıştır. COCOMO, Kullanılacak ayrıntı düzeyine göre üç ayrı model biçiminde yapılabilir: Basit Orta Detaylı COCOMO Modeline Göre Proje Tipleri: 1.Ayrık Proje (Organik Projeler) 2.Yarı Ayrık Proje (Yarı Ayrık Projeler) 3.Gömülü Proje (Embedded Projeler) 1. Emek Hesaplaması: Ayrık Projeler: Emek = 2.4 × (KLOC)\^1.05 Yarı Ayrık Projeler: Emek = 3 × (KLOC)\^1.12 Gömülü Projeler: Emek = 3.6 × (KLOC)\^1.20 Emek burada personel-ayı (Person-Month) cinsinden ifade edilir. Bu, bir projenin tamamlanması için gerekli olan toplam insan gücünü (çalışan ayı) belirtir. Formüldeki katsayılar ve üstel değerler, projenin karmaşıklığına göre farklılık gösterir. 2. Süre Hesaplaması: Ayrık Projeler: Süre = 2.5 × (Emek)\^0.38 Yarı Ayrık Projeler: Süre = 2.5 × (Emek)\^0.35 Gömülü Projeler: Süre = 2.5 × (Emek)\^0.32 Süre (Time), projenin kaç ayda tamamlanacağını tahmin eder. Hesaplama, önce emek miktarı bulunarak yapılır ve ardından süre formülüyle tahmin edilir. Hesaplama Adımları: 1. KLOC değerini belirleyin (örneğin, yazılım projenizdeki kodun 5000 satır olduğunu varsayın, bu durumda KLOC = 5). 2.Seçilen proje tipine göre Emek formülünü kullanarak gerekli iş gücünü hesaplayın. 3.Bulduğunuz emek değerini süre formülünde yerine koyarak Süreyi hesaplayın. Ürün Özellikleri RELY: Yazılımın güvenirliği. DATA: Veri tabanının büyüklüğü. CPLX: Karmaşıklığı. Bilgisayar Özellikleri TIME: İşletim zamanı kısıtı. STOR: Ana bellek kısıtı VIRT: Bilgisayar platform değişim olasılığı. Örnek; bellek ve disk kapasitesi artırımı TURN: Bilgisayar iş geri dönüş zamanı. Örnek; Hata düzeltme süresi. Personel Özellikleri ACAP: Analist yeteneği. Deneyim, birlikte çalışabilirlik. AEXP: Uygulama deneyimi. Proje ekibinin ortalama tecrübesi. PCAP: Programcı yeteneği. VEXP: Bilgisayar platformu deneyimi. Proje ekibinin geliştirilecek platformu tanıma oranı. LEXP: Programlama dili deneyimi. Proje Özellikleri MODP: Modern programlama teknikleri. Örnek; Yapısal programlama, görsel programlama, yeniden kullanılabilirlik. TOOL: Yazılım geliştirme araçları kullanımı. Örnek; CASE araçları, metin düzenleyiciler, ortam yönetim araçları SCED: Zaman kısıtı Proje Planı Açıklaması 1.Proje Başlatma: Proje hedeflerinin belirlenmesi, ekip oluşturulması ve gerekli kaynakların sağlanması. 2.Araştırma ve Analiz: Proje gereksinimlerinin toplanması ve analiz edilmesi. 3.Tasarım: Projenin teknik ve görsel tasarımının tamamlanması. 4.Geliştirme: Ürün veya hizmetin geliştirilmesi. 5.Test: Yazılımın/hizmetin hatalarının bulunup düzeltilmesi. 6.Uygulama ve Değerlendirme: Ürünün uygulamaya alınması ve projenin son değerlendirmesi. **[Analiz (Çözümleme)]** Amaç: Sistemin işlevlerini ve kesin gereksinimleri açıklığa kavuşturmak ve sonucunda bunları belirli bir formatta dokümante etmektir. Analiz Çalışması; müşteri, yazılım mühendisi, sistem analisti, iş analisti, ürün yöneticisi vb. rollerin bir araya geldiği gruplar tarafından yapılabilir. İhtiyaçların net olmadığı durumlarda yazılım mühendisi ve müşteri arasında iletişim ve birlikte çalışmanın çok daha fazla olması gerekir. Çeşitli yazılım geliştirme metodolojilerinde bu aşamada kullanıcı dokümanlarının taslakları ile ve test plan dokümanları da oluşturulabilir. Gereksinim, bir projenin veya sistemin başarılı bir şekilde gerçekleştirilmesi için yerine getirilmesi gereken koşullar, özellikler veya niteliklerdir. Proje veya ürünün hedeflerini karşılayabilmesi için ihtiyaç duyulan her türlü unsur, \"gereksinim\" olarak adlandırılır. Gereksinim Türleri 1.İş Gereksinimleri: Organizasyonun hedefleri ve proje ile elde edilmek istenen sonuçlar. Örneğin, \"Müşteri memnuniyetini artırmak\" veya \"Satışları %10 artırmak\" gibi. 2.Kullanıcı Gereksinimleri (İşlevsel Gereksinim): Ürünü veya sistemi kullanacak kişilerin ihtiyaçları. Örneğin, \"Kullanıcı dostu bir arayüz\" veya \"Kolay erişilebilir dokümanlar\". 3.Fonksiyonel Gereksinimler: Sistemin ne yapması gerektiğini açıklayan spesifik özellikler. Örneğin, \"Bir ürünün fiyatını hesaplayabilmek\" veya \"Kullanıcı giriş ekranı oluşturmak\". 4.Fonksiyonel Olmayan Gereksinimler (Niteliksel Gereksinimler): Sistemin performans, güvenilirlik, kullanılabilirlik, güvenlik gibi özelliklerini tanımlar. Örneğin, \"Sistem yanıt süresi 2 saniyeden az olacak\" veya \"Veriler şifrelenmiş olarak saklanacak\". Bir bankacılık uygulaması projesinde: İş Gereksinimi: Müşterilerin online bankacılık hizmetlerini güvenli bir şekilde kullanmasını sağlamak. Kullanıcı Gereksinimi: Müşterinin kolayca para transferi yapabilmesi. Fonksiyonel Gereksinim: Bir para transferi özelliği geliştirilmesi. Fonksiyonel Olmayan Gereksinim: İşlem sırasında veri güvenliğinin sağlanması ve işlem süresinin 5 saniyeden az olması. Gereksinimler, projenin kapsamını ve başarısını belirler, bu yüzden doğru şekilde tanımlanmaları kritik öneme sahiptir. **[İşlevsel Gereksinim:]** İşlevsel gereksinimler, bir sistemin veya yazılımın gerçekleştirmesi gereken belirli görevleri, fonksiyonları ve işlemleri tanımlar. Yani, sistemin \"ne yapacağını\" açıklayan gereksinimlerdir. Bu gereksinimler, kullanıcıların ihtiyaçlarını karşılamak için sistemin nasıl davranması gerektiğini belirler. İşlevsel Gereksinim Özellikleri Sistem tarafından sağlanması gereken hizmetleri ve görevleri tanımlar. Kullanıcılar veya diğer sistemlerle etkileşimleri belirtir. Çıktı ve girdi süreçlerini tarif eder. Örnekler 1.Bir E-Ticaret Uygulaması İçin: 1. Kullanıcılar, bir ürün arama çubuğu kullanarak ürün arayabilmelidir. 2. Kullanıcılar, alışveriş sepetine ürün ekleyebilmelidir. 3. Sistem, kullanıcı giriş bilgilerini doğrulamalıdır. 4. Kullanıcılar, kredi kartı ile ödeme yapabilmelidir. 2.Bir Bankacılık Yazılımı İçin: 1. Kullanıcı, hesap bakiyesini görüntüleyebilmelidir. 2. Sistem, kullanıcıya her başarılı işlem için onay mesajı göndermelidir. 3. Kullanıcılar, para transferi işlemleri gerçekleştirebilmelidir. 4. Sistem, belirli limitleri aşan işlemler için kullanıcıdan ek doğrulama istemelidir. 3.Bir Hastane Yönetim Sistemi İçin: 1. Doktorlar, hastaların tıbbi kayıtlarını görebilmelidir. 2. Hastalar, randevu saatlerini görüntüleyip değiştirebilmelidir. 3. Sistem, acil durumlarda otomatik olarak doktorlara bildirim göndermelidir. 4. İlaç stokları azaldığında eczane sorumlularına uyarı gönderilmelidir. İşlevsel Gereksinimlerin Önemi Kapsamı Tanımlar: Proje ekibine, sistemin ne yapması gerektiği konusunda net bir anlayış sağlar. Test Edilebilirlik: Bu gereksinimlere dayalı olarak sistemin test edilmesini ve doğru çalışıp çalışmadığının doğrulanmasını sağlar. Kullanıcı İhtiyaçları: Kullanıcıların gereksinimlerini karşılayacak şekilde sistemin nasıl davranacağını açıkça belirtir. şlevsel olmayan gereksinimler (niteliksel gereksinimler olarak da adlandırılır), bir sistemin \"nasıl çalışması gerektiğini\" belirten gereksinimlerdir. İşlevsel olmayan gereksinimler, sistemin kalitesini, performansını, güvenilirliğini, ölçeklenebilirliğini, güvenliğini ve diğer önemli niteliklerini tanımlar. Yani, bir sistemin belirli işlevleri yerine getirirken hangi kalite standartlarını karşılaması gerektiğine odaklanır. İşlevsel Olmayan Gereksinim Kategorileri 1.Performans Gereksinimleri: 1. Sistem yanıt süresi, işlem hızı, veri işleme kapasitesi gibi konuları kapsar. 2. Örneğin: \"Sistem, kullanıcıdan gelen her isteğe 2 saniyeden kısa sürede yanıt vermelidir.\" 2.Güvenilirlik Gereksinimleri: 1. Sistemin belirli bir süre boyunca hatasız çalışabilme yeteneği. 2. Örneğin: \"Sistem, %99.9 çalışma süresi garantisi sağlamalıdır.\" 3.Kullanılabilirlik Gereksinimleri: 1. Sistemin kullanıcılar için ne kadar erişilebilir ve kullanımı kolay olduğunu belirtir. 2. Örneğin: \"Sistem, görme engelli kullanıcılar için ekran okuyucu desteği sunmalıdır.\" 4.Güvenlik Gereksinimleri: 1. Sistemin veri koruma, yetkilendirme ve güvenlik protokollerini içerir. 2. Örneğin: \"Kullanıcı verileri, endüstri standardı şifreleme teknikleriyle korunmalıdır.\" 5.Bakım ve Yönetilebilirlik Gereksinimleri: 1. Sistemin bakım, güncelleme ve yönetiminin nasıl yapılacağına dair kriterler. 2. Örneğin: \"Sistem, bakım sırasında minimum kesinti süresi sağlamalıdır.\" 6.Ölçeklenebilirlik Gereksinimleri: 1. Sistemin, artan kullanıcı sayısı veya iş yükü ile başa çıkabilme yeteneği. 2. Örneğin: \"Sistem, 10.000 eşzamanlı kullanıcıyı destekleyebilmelidir.\" 7.Taşınabilirlik Gereksinimleri: 1. Sistemin farklı platformlarda çalışabilme kapasitesi. 2. Örneğin: \"Uygulama, hem Android hem de iOS işletim sistemlerinde çalışabilir olmalıdır.\" 8.Yasal ve Düzenleyici Gereksinimler: 1. Yasal uyumluluk ve endüstri standartlarıyla ilgili kurallar. 2. Örneğin: \"Sistem, KVKK, GDPR (Genel Veri Koruma Yönetmeliği) gerekliliklerini karşılamalıdır.\" 1.Bir Web Uygulaması İçin: 1. Performans: \"Web sayfası, 1000 eşzamanlı kullanıcı ile çalışırken 3 saniyeden kısa sürede yüklenecek.\" 2. Güvenlik: \"Kullanıcı parolaları, SHA-256 algoritması kullanılarak şifrelenmelidir.\" 3. Kullanılabilirlik: \"Kritik hatalar durumunda sistem, otomatik olarak bir uyarı mesajı gösterecek.\" 2.Bir Bankacılık Sistemi İçin: 1. Güvenlik: \"Her işlem için iki faktörlü kimlik doğrulama uygulanmalıdır.\" 2. Performans: \"Sistem, para transferi işlemini en fazla 5 saniyede tamamlamalıdır.\" 3. Güvenilirlik: \"Sistem, yılda maksimum %0.5 kesinti oranına sahip olmalıdır." İşlevsel Olmayan Gereksinimlerin Önemi Kullanıcı Deneyimi: Sistemin kullanıcılar için ne kadar kullanışlı olduğunu etkiler. Sistem Performansı: Yüksek performans, güvenilirlik ve güvenlik sağlar. Sistem Kalitesi: Kalite standartlarını belirler ve sistemin uzun vadeli başarısını garanti eder. Risk Yönetimi: Güvenlik ve yasal gereksinimler, riskleri en aza indirmeye yardımcı olur. **[Gereksinim Türleri]** Bir sistemin veya ürünün gereksinimlerini tanımlarken dikkate alınması gereken ana faktörlerdir. Her biri, sistemin geliştirilmesi, kullanımı ve bakımı sırasında önemli olan farklı alanları kapsamaktadır. 1. Fiziksel Çevre Tanım: Sistem veya ürünün çalışacağı fiziksel koşulları belirtir. Ortamın sıcaklık, nem, toz, titreşim, gürültü gibi faktörleri dikkate alınır. Örnekler: \"Sistem, -10°C ila 50°C arasında çalışabilmelidir.\" \"Cihaz, yüksek nemli ortamlarda düzgün çalışacak şekilde tasarlanmalıdır.\" 2. Arayüzler Tanım: Sistemin diğer sistemlerle, donanımlarla veya kullanıcılarla nasıl etkileşime geçeceğini tanımlar. Bu, yazılım arayüzleri, kullanıcı arayüzleri ve donanım bağlantıları gibi unsurları içerir. Örnekler: \"Sistem, veri alışverişi için bir RESTful API sağlayacaktır.\" \"Kullanıcı arayüzü, dokunmatik ekranlarla uyumlu olacaktır.\" 3. Kullanıcı ve İnsan Etmeni Tanım: Sistemin kullanıcılarla etkileşime geçtiği noktada, insan faktörlerini göz önünde bulundurur. Kullanıcıların becerileri, deneyimleri, fizyolojik özellikleri ve ergonomi gibi faktörler dikkate alınır. Örnekler: \"Sistem, kullanıcı dostu bir arayüz sağlayacak şekilde tasarlanmalıdır.\" \"Ekrandaki metin, görme zorlukları olan kullanıcılar için yeterince büyük ve okunabilir olmalıdır.\" 4. İşlevsellik Tanım: Sistemin veya ürünün yapması gereken görevleri tanımlar. Bu, işlevsel gereksinimler kapsamında ele alınır. Örnekler: \"Sistem, kullanıcıların online ödeme yapmasına olanak tanımalıdır.\" \"Bir müşteri hesabı, sipariş geçmişi verilerini tutabilmelidir. 5. Belgeleme Tanım: Sistemle ilgili dokümantasyonun nasıl sağlanacağını ve ne içermesi gerektiğini belirtir. Kullanıcı kılavuzları, teknik belgeler, bakım kılavuzları vb. içerir. Örnekler: \"Kullanıcı kılavuzu, sistemin tüm özelliklerini ayrıntılı olarak açıklayacaktır.\" \"Sistem güncellemeleri için bir sürüm notu sağlanacaktır.\" 6. Veri Tanım: Sistem tarafından işlenen veya saklanan verilerin gereksinimlerini belirtir. Bu, veri yapısı, formatı, boyutu, doğruluğu ve veri saklama sürelerini içerebilir. Örnekler: \"Tüm müşteri verileri, en az 5 yıl süreyle saklanmalıdır.\" \"Veriler, CSV formatında dışa aktarılabilir olmalıdır.\" 7. Kaynaklar Tanım: Sistemin geliştirilmesi ve çalıştırılması için gereken kaynakları tanımlar. Bu, insan gücü, donanım, yazılım ve diğer mali kaynakları kapsayabilir. Örnekler: \"Geliştirme ekibi, proje süresince haftada 40 saat çalışacaktır.\" \"Sistem, 16 GB RAM ve 500 GB depolama alanı gerektirecektir.\" 8. Güvenlik Tanım: Sistemin güvenliğini sağlamak için alınması gereken önlemleri ve güvenlik standartlarını belirtir. Veri koruma, kullanıcı kimlik doğrulama ve sistem izleme gibi unsurlar bu kategoride yer alır. Örnekler: \"Kullanıcıların hesapları, iki faktörlü kimlik doğrulama ile korunacaktır.\" \"Sistem, veri sızıntılarını önlemek için düzenli güvenlik testlerine tabi tutulacaktır.\" 9. Kalite Güvencesi Tanım: Sistemin belirlenen kalite standartlarını karşılamasını sağlamak için yapılan testler ve denetimlerdir. Kalite kontrol süreçlerini ve performans kriterlerini kapsar. Örnekler: \"Sistem, her yeni sürümde kapsamlı testlerden geçirilmelidir.\" \"Yazılım, %99,9 çalışma süresi sağlayacak şekilde tasarlanmalıdır.