Yazılım

bilgipedi.com.tr sitesinden
Kullanıcının tipik bir masaüstü bilgisayarda uygulama yazılımı ile nasıl etkileşime girdiğini gösteren bir diyagram. Uygulama yazılımı katmanı işletim sistemiyle arayüz oluşturur ve bu da donanımla iletişim kurar. Oklar bilgi akışını göstermektedir.

Yazılım, bir dizi bilgisayar programı ve bunlarla ilişkili dokümantasyon ve verilerdir. Bu, sistemin oluşturulduğu ve aslında işi gerçekleştiren donanımın tersidir.

En düşük programlama seviyesinde, çalıştırılabilir kod, tek bir işlemci tarafından desteklenen makine dili talimatlarından oluşur - tipik olarak bir merkezi işlem birimi (CPU) veya bir grafik işlem birimi (GPU). Makine dili, bilgisayarın durumunu önceki durumundan değiştiren işlemci talimatlarını ifade eden ikili değer gruplarından oluşur. Örneğin, bir talimat bilgisayarda belirli bir depolama konumunda saklanan değeri değiştirebilir - kullanıcı tarafından doğrudan gözlemlenemeyen bir etki. Bir talimat aynı zamanda birçok girdi ya da çıktı işleminden birini çağırabilir, örneğin bilgisayar ekranında bir metin görüntülenmesi gibi; kullanıcı tarafından görülebilmesi gereken durum değişikliklerine neden olur. İşlemci, farklı bir talimata "atlama" talimatı verilmediği veya işletim sistemi tarafından kesintiye uğratılmadığı sürece talimatları verildikleri sırayla yürütür. 2015 yılı itibariyle çoğu kişisel bilgisayar, akıllı telefon ve sunucuda birden fazla yürütme birimine sahip işlemciler ya da birlikte hesaplama yapan birden fazla işlemci bulunmaktadır ve hesaplama geçmişe kıyasla çok daha eş zamanlı bir faaliyet haline gelmiştir.

Yazılımların çoğunluğu yüksek seviyeli programlama dillerinde yazılmaktadır. Programcılar için daha kolay ve verimlidirler çünkü doğal dillere makine dillerinden daha yakındırlar. Yüksek seviyeli diller bir derleyici veya yorumlayıcı ya da ikisinin bir kombinasyonu kullanılarak makine diline çevrilir. Yazılım, bilgisayarın makine dili talimatlarına güçlü bir şekilde karşılık gelen ve bir assembler kullanılarak makine diline çevrilen düşük seviyeli bir montaj dilinde de yazılabilir.

Yazılım, değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik aygıtların birbirleriyle haberleşebilmesini ve uyumunu sağlayarak görevlerini ya da kullanılabilirliklerini geliştirmeye yarayan makine komutlarıdır.

Tarihçe

İlk yazılım parçası olabilecek bir algoritma, 19. yüzyılda Ada Lovelace tarafından planlanan Analitik Motor için yazılmıştır. Motorun Bernoulli sayılarını nasıl hesaplayacağını göstermek için kanıtlar oluşturdu. İspatlar ve algoritma nedeniyle ilk bilgisayar programcısı olarak kabul edilir.

Yazılımla ilgili ilk teori, bugün bildiğimiz anlamda bilgisayarların yaratılmasından önce, Alan Turing tarafından 1935 yılında kaleme aldığı On Computable Numbers, with an Application to the Entscheidungsproblem (karar problemi) adlı makalesinde ortaya atılmıştır. Bu, sonunda bilgisayar bilimi ve yazılım mühendisliği akademik alanlarının yaratılmasına yol açmıştır; her iki alan da yazılımı ve yazılımın yaratılmasını incelemektedir. Bilgisayar bilimi bilgisayar ve yazılımın teorik olarak incelenmesidir (Turing'in makalesi bilgisayar bilimine bir örnektir), yazılım mühendisliği ise mühendislik ilkelerinin yazılım geliştirmeye uygulanmasıdır. 1946'dan önce yazılım, bugün anladığımız şekliyle dijital bilgisayarların hafızasında saklanan programlar değildi; bunun yerine ilk elektronik bilgi işlem cihazları "yeniden programlamak" için yeniden kablolanmıştı.

2000 yılında Yale Hukuk Fakültesi'nde kütüphaneci olan Fred Shapiro, John Wilder Tukey'in 1958 tarihli "The Teaching of Concrete Mathematics" adlı makalesinin, JSTOR'un elektronik arşivlerinde yapılan bir aramada bulunan "yazılım" teriminin bilinen en eski kullanımını içerdiğini ve OED'nin alıntısından iki yıl önce olduğunu ortaya koyan bir mektup yayınladı. Bu durum birçok kişinin, özellikle de aynı yıl yayınlanan ölüm ilanlarında, Tukey'e bu terimi icat ettiği yönünde atıfta bulunmasına yol açmıştır, ancak Tukey hiçbir zaman bu tür bir icat için kredi talep etmemiştir. Paul Niquette 1995 yılında, iddiasını destekleyen herhangi bir belge bulamamasına rağmen, terimi ilk olarak Ekim 1953'te bulduğunu iddia etmiştir. "Yazılım" teriminin mühendislik bağlamında bilinen en eski yayını Ağustos 1953'te Richard R. Carhart tarafından bir Rand Corporation Araştırma Memorandumunda yapılmıştır.

Türler

Blender, ücretsiz bir yazılım programı

Neredeyse tüm bilgisayar platformlarında yazılımlar birkaç geniş kategoride gruplandırılabilir.

Amaç veya kullanım alanı

Amaca bağlı olarak, bilgisayar yazılımı ikiye ayrılabilir:

  • Uygulama yazılımı, bilgisayarın temel işleyişinin ötesinde özel işlevler gerçekleştirmek için bilgisayar sistemini kullanır. Modern bir bilgisayarla gerçekleĢtirilebilecek görevler çok geniĢ olduğu için birçok farklı uygulama yazılımı türü vardır - yazılım listesine bakınız.
  • Sistem yazılımı, kullanıcıların ihtiyaç duyduğu temel işlevleri sağlamak ya da diğer yazılımların düzgün çalışmasını sağlamak için donanım davranışını yönetir. Sistem yazılımı aynı zamanda uygulama yazılımlarını çalıştırmak için bir platform sağlamak üzere tasarlanmıştır ve aşağıdakileri içerir:
    • İşletim sistemleri, kaynakları yöneten ve "üzerinde" çalışan diğer yazılımlar için ortak hizmetler sağlayan temel yazılım koleksiyonlarıdır. Denetleyici programlar, önyükleme yükleyicileri, kabuklar ve pencere sistemleri işletim sistemlerinin temel parçalarıdır. Uygulamada, bir işletim sistemi ek yazılımlarla (uygulama yazılımları dahil) birlikte gelir, böylece bir kullanıcı potansiyel olarak yalnızca bir işletim sistemine sahip bir bilgisayarla bazı işler yapabilir.
    • Aygıt sürücüleri, bir bilgisayara bağlı belirli bir aygıt türünü çalıştırır veya kontrol eder. Her aygıtın en az bir ilgili aygıt sürücüsüne ihtiyacı vardır; bir bilgisayarda tipik olarak en az bir giriş aygıtı ve en az bir çıkış aygıtı bulunduğundan, bir bilgisayar tipik olarak birden fazla aygıt sürücüsüne ihtiyaç duyar.
    • Yardımcı programlar, kullanıcılara bilgisayarlarının bakım ve onarımında yardımcı olmak üzere tasarlanmış bilgisayar programlarıdır.
  • Kötü amaçlı yazılım veya malware, bilgisayarlara zarar vermek veya bozmak için geliştirilen yazılımlardır. Kötü amaçlı yazılımlar bilgisayarla ilgili suçlarla yakından ilişkilidir, ancak bazı kötü amaçlı programlar eşek şakası olarak tasarlanmış olabilir.

Yürütme niteliği veya alanı

  • Web tarayıcıları ve Microsoft Office ve LibreOffice ve WordPerfect gibi masaüstü uygulamalarının yanı sıra akıllı telefon ve tablet uygulamaları ("uygulamalar" olarak adlandırılır).
  • JavaScript komut dosyaları, geleneksel olarak web sayfalarına gömülü olan ve bir web sayfası yüklendiğinde bir web tarayıcısı eklentisine ihtiyaç duymadan doğrudan web tarayıcısının içinde çalıştırılan yazılım parçalarıdır. Diğer programlama dillerinde yazılmış yazılımlar da, yazılım JavaScript'e çevrilirse veya bu dili destekleyen bir web tarayıcısı eklentisi yüklenirse web tarayıcısı içinde çalıştırılabilir; ikincisinin en yaygın örneği Adobe Flash eklentisi tarafından desteklenen ActionScript komut dosyalarıdır.
  • Aşağıdakileri içeren sunucu yazılımı:
    • Genellikle web sunucusunda çalışan ve web tarayıcılarına dinamik olarak oluşturulmuş web sayfaları çıktısı veren web uygulamaları, örneğin PHP, Java, ASP.NET veya hatta sunucuda çalışan JavaScript kullanarak. Modern zamanlarda bunlar genellikle web tarayıcısında çalıştırılacak bazı JavaScript'leri de içerir, bu durumda genellikle kısmen sunucuda, kısmen de web tarayıcısında çalışırlar.
  • Eklentiler ve uzantılar, başka bir yazılım parçasının işlevselliğini genişleten veya değiştiren yazılımlardır ve çalışması için o yazılımın kullanılmasını gerektirir.
  • Gömülü yazılım, gömülü sistemlerde, otomobiller ve televizyonlar gibi tek bir kullanıma veya birkaç kullanıma adanmış cihazlarda (kablosuz yonga setleri gibi bazı gömülü cihazların kendileri bir PC veya akıllı telefon gibi sıradan, gömülü olmayan bir bilgisayar sisteminin parçası olabilmelerine rağmen) ürün yazılımı olarak bulunur. Gömülü sistem bağlamında bazen sistem yazılımı ile uygulama yazılımı arasında net bir ayrım yoktur. Bununla birlikte, bazı gömülü sistemler gömülü işletim sistemleri çalıştırır ve bu sistemler sistem yazılımı ile uygulama yazılımı arasındaki ayrımı korur (tipik olarak her zaman çalıştırılan tek bir sabit uygulama olmasına rağmen).
  • Mikro kod, işlemcinin kendisine makine kodunu nasıl çalıştıracağını söyleyen özel, nispeten belirsiz bir gömülü yazılım türüdür, bu nedenle aslında makine kodundan daha düşük bir seviyedir. Genellikle işlemci üreticisine özeldir ve gerekli düzeltici mikro kod yazılım güncellemeleri onlar tarafından kullanıcılara sağlanır (bu, yedek işlemci donanımı göndermekten çok daha ucuzdur). Bu nedenle sıradan bir programcı bununla uğraşmak zorunda kalmayı beklemeyecektir.

Programlama araçları

Programlama araçları aynı zamanda geliştiricilerin yazılım oluşturmak, hata ayıklamak, sürdürmek veya başka bir şekilde desteklemek için kullandıkları programlar veya uygulamalar biçimindeki yazılımlardır.

Yazılım bir veya daha fazla programlama dilinde yazılır; var olan birçok programlama dili vardır ve her biri kendi programlama araçları setinden oluşan en az bir uygulamaya sahiptir. Bu araçlar, bir görevi yerine getirmek için birleştirilebilen derleyiciler, hata ayıklayıcılar, yorumlayıcılar, bağlayıcılar ve metin editörleri gibi nispeten bağımsız programlar olabilir; veya bu tür bağımsız araçların işlevselliğinin çoğunu veya tamamını birleştiren entegre bir geliştirme ortamı (IDE) oluşturabilirler. IDE'ler bunu ilgili bireysel araçları çağırarak ya da işlevlerini yeni bir şekilde yeniden uygulayarak yapabilirler. Bir IDE, belirli bir projedeki dosyalarda arama yapmak gibi belirli görevleri yapmayı kolaylaştırabilir. Birçok programlama dili uygulaması, hem bireysel araçları hem de bir IDE'yi kullanma seçeneği sunar.

Konular

Mimarlık

Modern genel amaçlı bilgisayarları (gömülü sistemler, analog bilgisayarlar ve süper bilgisayarların aksine) kullanan kişiler genellikle çeşitli görevleri yerine getiren üç yazılım katmanı görürler: platform, uygulama ve kullanıcı yazılımı.

  • Platform yazılımı: Platform, aygıt yazılımı, aygıt sürücüleri, bir işletim sistemi ve tipik olarak bir kullanıcının bilgisayar ve çevre birimleriyle (ilişkili ekipman) etkileşime girmesini sağlayan bir grafik kullanıcı arayüzü içerir. Platform yazılımı genellikle bilgisayarla birlikte gelir. Bir bilgisayarda genellikle platform yazılımını değiştirme olanağı vardır.
  • Uygulama yazılımı: Uygulama yazılımı, çoğu insanın yazılım denince aklına gelen şeydir. Tipik örnekler arasında ofis paketleri ve video oyunları yer alır. Uygulama yazılımları genellikle bilgisayar donanımından ayrı olarak satın alınır. Bazen uygulamalar bilgisayarla birlikte verilir, ancak bu bağımsız uygulamalar olarak çalıştıkları gerçeğini değiştirmez. Uygulamalar genellikle işletim sisteminden bağımsız programlardır, ancak genellikle belirli platformlar için uyarlanmışlardır. Çoğu kullanıcı derleyicileri, veri tabanlarını ve diğer "sistem yazılımlarını" uygulama olarak düşünür.
  • Kullanıcı tarafından yazılan yazılım: Son kullanıcı geliştirme, sistemleri kullanıcıların özel ihtiyaçlarını karşılayacak şekilde düzenler. Kullanıcı yazılımları elektronik tablo şablonları ve kelime işlemci şablonları içerir. E-posta filtreleri bile bir tür kullanıcı yazılımıdır. Kullanıcılar bu yazılımı kendileri yaratır ve genellikle ne kadar önemli olduğunu gözden kaçırırlar. Kullanıcı tarafından yazılan yazılımın varsayılan uygulama paketlerine ne kadar yetkin bir şekilde entegre edildiğine bağlı olarak, birçok kullanıcı orijinal paketler ile iş arkadaşları tarafından eklenenler arasındaki farkın farkında olmayabilir.

Yürütme

Bilgisayar yazılımının bilgisayarın depolama alanına (sabit disk veya bellek gibi) "yüklenmesi" gerekir. Yazılım yüklendikten sonra bilgisayar yazılımı çalıştırabilir. Bu, talimatların uygulama yazılımından sistem yazılımı aracılığıyla donanıma aktarılmasını ve nihayetinde talimatın makine kodu olarak alınmasını içerir. Her bir talimat bilgisayarın bir işlem yapmasına neden olur - verileri hareket ettirmek, bir hesaplama yapmak veya talimatların kontrol akışını değiştirmek.

Veri hareketi tipik olarak bellekteki bir yerden diğerine yapılır. Bazen verilerin bellek ile CPU'da yüksek hızlı veri erişimi sağlayan kayıtlar arasında taşınmasını içerir. Verilerin, özellikle de büyük miktarların taşınması maliyetli olabilir; bunun yerine bazen verilere "işaretçiler" kullanılarak bundan kaçınılır. Hesaplamalar, değişken bir veri öğesinin değerinin artırılması gibi basit işlemleri içerir. Daha karmaşık hesaplamalar birçok işlemi ve veri öğesini birlikte içerebilir.

Kalite ve güvenilirlik

Yazılım kalitesi, özellikle ticari ve sistem yazılımları için çok önemlidir. Yazılım hatalıysa, bir kişinin çalışmasını silebilir, bilgisayarı çökertebilir ve beklenmedik başka şeyler yapabilir. Hatalar "bug" olarak adlandırılır ve genellikle alfa ve beta testleri sırasında keşfedilir. Yazılımlar genellikle yazılım yaşlanması olarak bilinen ve görünmeyen hataların bir araya gelmesinden kaynaklanan aşamalı performans düşüşünün de kurbanı olurlar.

Birçok hata yazılım testleri yoluyla keşfedilir ve düzeltilir. Ancak, yazılım testleri nadiren de olsa her hatayı ortadan kaldırır; bazı programcılar "her programda en az bir hata daha vardır" der (Lubarsky Kanunu). Yazılım geliştirmenin şelale yönteminde, genellikle ayrı test ekipleri kullanılır, ancak toplu olarak çevik yazılım geliştirme olarak adlandırılan daha yeni yaklaşımlarda, geliştiriciler genellikle tüm testleri kendileri yapar ve geri bildirim almak için yazılımı düzenli olarak kullanıcılara / müşterilere gösterir. Yazılım, test edilecek kod miktarı büyük olabileceğinden, manuel olarak veya en yaygın olarak otomatik olarak yapılan birim testi, regresyon testi ve diğer yöntemlerle test edilebilir. Komut yazılımı içeren programlar, donanım mühendisliği ve sistem operasyonlarının birlikte çok daha kolay işlemesini sağlar.

Lisans

Yazılımın lisansı, kullanıcıya yazılımı lisanslı ortamda kullanma hakkı verir ve özgür yazılım lisansları söz konusu olduğunda, kopya çıkarma hakkı gibi diğer hakları da verir.

Tescilli yazılımlar iki türe ayrılabilir:

  • "ücretsiz deneme" yazılımı veya "freemium" yazılım kategorisini içeren ücretsiz yazılımlar (geçmişte ücretsiz deneme/ freemium yazılımlar için genellikle shareware terimi kullanılırdı). Adından da anlaşılacağı gibi, ücretsiz yazılımlar ücretsiz olarak kullanılabilir, ancak ücretsiz denemeler veya freemium yazılımlar söz konusu olduğunda, bu bazen yalnızca sınırlı bir süre için veya sınırlı işlevsellik için geçerlidir.
  • Ücret karşılığında temin edilebilen ve yasal olarak yalnızca lisans satın alındığında kullanılabilen yazılımlar.

Açık kaynaklı yazılımlar, alıcıya yazılımı değiştirme ve yeniden dağıtma hakkı veren bir özgür yazılım lisansı ile birlikte gelir.

Patentler

Yazılım patentleri, diğer patent türleri gibi, teorik olarak bir mucide bir yazılım parçasının veya bir yazılım parçasının bir bileşeninin nasıl uygulanacağına dair ayrıntılı bir fikir (örneğin bir algoritma) için özel, zaman sınırlı bir lisans vermelidir. Yazılımın yapabileceği faydalı şeylere ilişkin fikirlerin ve kullanıcı gereksinimlerinin patentlenebilir olmaması gerekir ve somut uygulamaların (yani patenti uygulayan gerçek yazılım paketlerinin) da patentlenebilir olmaması gerekir - ikincisi zaten genellikle otomatik olarak telif hakkı kapsamındadır. Dolayısıyla yazılım patentlerinin gereksinimler ile somut uygulama arasındaki orta alanı kapsaması beklenmektedir. Bazı ülkelerde, iddia edilen buluşun fiziksel dünya üzerinde bir etkiye sahip olması şartı da bir yazılım patentinin geçerli sayılabilmesi için gereken şartların bir parçası olabilir - ancak tüm faydalı yazılımların fiziksel dünya üzerinde etkileri olduğundan, bu şart tartışmaya açık olabilir. Bu arada, Amerikan telif hakkı yasası yazılım kodunun yazımının çeşitli yönlerine uygulanmıştır.

Yazılım patentleri yazılım sektöründe tartışmalı bir konudur ve pek çok kişi bu konuda farklı görüşlere sahiptir. Tartışmanın kaynaklarından biri, yukarıda bahsedilen ilk fikirler ve patent arasındaki ayrımın patent avukatları tarafından pratikte yerine getirilmiyor gibi görünmesidir - örneğin, nasıl uygulanırsa uygulansın AOP fikrini uygulayan herhangi bir programlama aracı üzerinde hak iddia ettiği iddia edilen görünüş odaklı programlama (AOP) patenti. Tartışmaların bir diğer kaynağı da inovasyon üzerindeki etkisidir; pek çok seçkin uzman ve şirket yazılımın o kadar hızlı gelişen bir alan olduğunu ve yazılım patentlerinin sadece büyük ek dava maliyetleri ve riskler yarattığını ve aslında inovasyonu geciktirdiğini savunmaktadır. Amerika Birleşik Devletleri dışındaki yazılım patentleri ile ilgili tartışmalarda, büyük Amerikan şirketlerinin ve patent avukatlarının yazılım patentlerine izin verilmesi ya da izin verilmeye devam edilmesinden birincil olarak faydalanacakları ileri sürülmektedir.

Tasarım ve uygulama

Yazılımın tasarımı ve uygulanması, yazılımın karmaşıklığına bağlı olarak değişir. Örneğin, Microsoft Word'ün tasarlanması ve oluşturulması, Microsoft Not Defteri'nin tasarlanması ve geliştirilmesinden çok daha fazla zaman almıştır çünkü birincisi çok daha temel işlevlere sahiptir.

Yazılım genellikle Eclipse, IntelliJ ve Microsoft Visual Studio gibi süreci basitleştiren ve yazılımı derleyebilen entegre geliştirme ortamlarında (IDE) geliştirilir. Farklı bir bölümde belirtildiği gibi, yazılım genellikle mevcut yazılımın ve GTK+, JavaBeans veya Swing gibi altta yatan yazılımın sağladığı uygulama programlama arayüzünün (API) üzerine oluşturulur. Kütüphaneler (API'ler) amaçlarına göre kategorize edilebilir. Örneğin, Spring Framework kurumsal uygulamaları hayata geçirmek için, Windows Forms kütüphanesi Microsoft Word gibi grafiksel kullanıcı arayüzü (GUI) uygulamaları tasarlamak için ve Windows Communication Foundation web hizmetleri tasarlamak için kullanılır. Bir program tasarlandığında, API'ye dayanır. Örneğin, bir Microsoft Windows masaüstü uygulaması, uygulamayı kapatmak veya açmak için .NET Windows Forms kütüphanesindeki Form1.Close() ve Form1.Show() gibi API işlevlerini çağırabilir. Bu API'ler olmadan, programcının bu işlevleri tamamen kendisinin yazması gerekir. Oracle ve Microsoft gibi şirketler kendi API'lerini sağlar, böylece birçok uygulama genellikle içinde çok sayıda API bulunan yazılım kütüphaneleri kullanılarak yazılır.

Hash tabloları, diziler ve ikili ağaçlar gibi veri yapıları ve quicksort gibi algoritmalar yazılım oluşturmak için faydalı olabilir.

Bilgisayar yazılımı, tasarımını, yaratımını ve dağıtımını diğer ekonomik malların çoğundan farklı kılan özel ekonomik özelliklere sahiptir.

Yazılım üreten bir kişiye programcı, yazılım mühendisi veya yazılım geliştiricisi denir, bu terimlerin hepsi benzer anlama gelir. Programcı için "kodlayıcı" ve "hacker" gibi daha gayri resmi terimler de mevcuttur - ancak son kelimenin kullanımı kafa karışıklığına neden olabilir, çünkü daha çok bilgisayar sistemlerine yasadışı olarak giren biri anlamında kullanılır.

Bilgisayar yazılım türleri

Bilgisayar yazılımları genel olarak üç ana grupta incelenebilir.

Uygulama yazılımları

OpenOffice.org Writer

Bu kullanıcıların işlerine çözüm sağlayan örneğin çek, senet, stok kontrol, bordro, kütüphane kayıtlarını tutan programlar, bankalardaki müşterilerin para hesaplarını tutan programlar gibi yazılımlardır.

Bütün sistem programları içinde en temel yazılım işletim sistemidir ki, bilgisayarın bütün donanım ve yazılım kaynaklarını kontrol ettiği gibi, kullanıcılara ait uygulama yazılımlarının da çalıştırılmalarını ve denetlenmelerini sağlar.

Çevirici yazılımlar

Herhangi bir dilde yazılan programı makine diline çeviren yazılımlardır.