Sert kodlama - Hard coding

Sabit kodlama (aynı zamanda kodlamak ya da kodlamak ) verilerini doğrudan gömme yazılım geliştirme uygulamadır kaynak kodu a programı dış kaynaklardan veri elde etmek ya da bu üreten karşı ya da diğer yürütülebilir nesne çalışma . Sabit kodlanmış veriler tipik olarak yalnızca kaynak kodu düzenleyerek ve yürütülebilir dosyayı yeniden derleyerek değiştirilebilir, ancak bir hata ayıklayıcı veya onaltılık düzenleyici kullanılarak bellekte veya diskte değiştirilebilir . Sabit kodlanmış veriler genellikle fiziksel sabitler , sürüm numaraları ve statik metin öğeleri gibi değişmeyen bilgi parçalarını temsil eder . Yumuşak kodlanmış veriler ise kullanıcı girişi , metin dosyaları , INI dosyaları , HTTP sunucusu yanıtları, yapılandırma dosyaları, önişlemci makroları, harici sabitler, veritabanları, komut satırı argümanları aracılığıyla rastgele bilgileri kodlar ve çalışma zamanında belirlenir.

genel bakış

Sabit kodlama, son kullanıcının ayrıntıları programın dışında bazı yollarla değiştirmesinin daha uygun olabileceği durumlarda, giriş verileri veya istenen biçim her değiştiğinde programın kaynak kodunun değiştirilmesini gerektirir.

Sabit kodlama genellikle gereklidir, ancak bir anti-kalıp olarak da kabul edilebilir . Programcılar, üzerinde çalışılan son kullanıcı için dinamik bir kullanıcı arabirimi çözümüne sahip olmayabilir, ancak yine de özelliği teslim etmeli veya programı serbest bırakmalıdır. Bu genellikle geçicidir ancak kısa vadede kodu teslim etme baskısını çözer. Daha sonra, bir kullanıcının son kullanıcıya sonuçları veya sonucu değiştirmesi için bir yol sağlayan parametreleri iletmesine izin vermek için yumuşak kodlama yapılır.

"Sabit kodlanmış" terimi başlangıçta donanım devrelerine bir benzetme olarak kullanıldı - ve yazılım tasarımı ve uygulamasında kullanımından kaynaklanan esneksizliği ifade etmek anlamına geliyordu. Çalışma zamanı uzayabilir bağlamında ortak geliştirme ortamları gibi çamurlar , hardcoding aynı zamanda düşük seviyeli görevleri ve yürütülmesinden sorumlu sisteminin esas motoru geliştirmeye belirtmektedir komut dosyaları aksine, softcoding olsun, yüksek seviyeli komut geliştirmektedir metin dosyaları , INI dosyaları , önişlemci makroları , dış sabitler, veritabanları , komut satırı bağımsız değişkenleri, HTTP sunucusu yanıtları, yapılandırma dosyaları ve kullanıcı girişi gibi dış kaynaklardan gelen değerlerle çalışma zamanında sistem tarafından yorumlanır . Bu durumda, terim aşağılayıcı değildir ve özellikle çıktı verilerini gömmek yerine genel gelişmeye atıfta bulunur.

Sabit kodlama ve arka kapılar

Sabit kodlama kimlik bilgileri, arka kapı oluşturmanın popüler bir yoludur . Sabit kodlanmış kimlik bilgileri genellikle yapılandırma dosyalarında veya hesap numaralandırma komutlarının çıktısında görünmez ve kullanıcılar tarafından kolayca değiştirilemez veya atlanamaz. Keşfedilirse, bir kullanıcı, programı kaynak kodundan değiştirerek ve yeniden oluşturarak ( kaynak herkese açıksa ), derlemeyi çözerek veya tersine mühendislik yazılımı kullanarak , programın ikili kodunu doğrudan düzenleyerek veya bir bütünlük oluşturarak böyle bir arka kapıyı devre dışı bırakabilir. beklenmeyen erişimi önlemek için kontrol edin (dijital imzalar, kurcalamaya karşı koruma ve hile önleme gibi), ancak bu tür eylemler genellikle bir son kullanıcı lisans sözleşmesi tarafından yasaklanmıştır .

Sabit kodlama ve DRM

Bir olarak dijital haklar yönetimi tedbir, yazılım geliştiriciler eşsiz hardcode olabilir seri numarasını bir programa doğrudan. Veya bir genel anahtarın sabit kodlanması yaygındır, bu da kendisi için bir anahtar oluşturmanın mümkün olmadığı DRM'yi oluşturur.

Tersi durumda, bir yazılım korsanı programa geçerli bir seri numarasını sabit kodlayabilir veya hatta yürütülebilir dosyanın kullanıcıdan bunu istemesini engelleyerek, geçerli bir numara girmeye gerek kalmadan yetkisiz kopyaların yeniden dağıtılmasına izin vererek aynı seri numarasını paylaşabilir. sabit kodlanmışsa, her kopya için anahtar.

Sabit kurulum yolu

Bir Windows programı, her zaman C:\Program Files\Appname konumuna yüklendiğini varsaymak üzere programlanmışsa ve birisi onu alan veya organizasyonel nedenlerle farklı bir sürücüye yüklemeye çalışırsa, yükleme başarısız olabilir veya yüklemeden sonra çalışmayabilir. Ortalama bir kullanıcı varsayılan sürücüye ve dizine kurulum yaptığından ve test, kurulum dizinini değiştirme seçeneğini içermeyebileceğinden, bu sorun test sürecinde tanımlanmayabilir. Ancak, varsayılan yükleme yolu işletim sistemine, işletim sistemi sürümüne ve sysadmin kararlarına bağlı olduğundan, programcıların ve geliştiricilerin bir programın yükleme yolunu düzeltmemeleri önerilir . Örneğin, Microsoft Windows'un birçok yüklemesi, birincil sabit diskleri olarak C: sürücüsünü kullanır , ancak bu garanti edilmez.

Benzer bir sorun , bellekte sabit bir adreste yürütmeye başlayan ilk bilgisayarlarda mikroişlemcilerde vardı .

başlangıç ​​diski

Bazı " kopya korumalı " programlar, izinsiz kopya olmadıklarını doğrulamak için başlangıçta bir diskette veya flash sürücüde belirli bir dosyayı arar. Bilgisayar, disket sürücüsü olmayan daha yeni bir makineyle değiştirilirse, disket yerleştirilemediğinden, artık onu gerektiren program çalıştırılamaz.

Bu son örnek, sabit kodlamanın, o zaman tamamen işe yarayacak gibi görünse bile neden pratik olmadığını gösteriyor. 1980'lerde ve 1990'larda PC'lerin büyük çoğunluğuna en az bir disket sürücüsü takılıydı, ancak disket sürücüler daha sonra kullanım dışı kaldı. 15 yıl önce bu şekilde kodlanmış bir program, güncellenmediği takdirde sorunlarla karşılaşabilir.

Özel klasörler

Bazı Windows işletim sistemlerinde, dosyaları sabit diskte mantıksal olarak düzenleyen Özel Klasörler bulunur. Sabit kodlamayı içeren ortaya çıkabilecek sorunlar vardır:

Profil yolu

Bazı Windows programları, profil yolunu, örneğin . Bu, Windows 2000 veya sonraki sürümlerin büyük çoğunluğunun yoludur , ancak profil bir ağda depolanırsa veya başka bir şekilde yeniden konumlandırılırsa bu bir hataya neden olur. Bunu elde etmenin doğru yolu, işlevi çağırmak veya ortam değişkenini çözmektir . Geliştiricilerin sıklıkla yaptığı bir diğer varsayım, profilin yerel bir sabit diskte bulunduğunu varsaymaktır. C:\Documents and Settings\UsernameGetUserProfileDirectory%userprofile%

Belgelerim klasör yolu

Bazı Windows programları yolunu hardcode My Documentsolarak ProfilePath\My Documents. Bu programlar İngilizce sürümünü çalıştıran makinelerde çalışır, ancak Windows'un yerelleştirilmiş sürümlerinde bu klasörün normalde farklı bir adı vardır. Örneğin, İtalyanca sürümlerde My Documentsklasörün adı Documenti . My DocumentsWindows 2000 veya sonraki sürümlerde Grup İlkesi'nde Klasör Yeniden Yönlendirme kullanılarak da yeniden konumlandırılmış olabilir. Bunu elde etmenin doğru yolu, SHGetFolderPathişlevi çağırmaktır .

Çözüm

Program içindeki "DosyaAdı" adlı bir değişken gibi dolaylı bir referans, bir "dosyaya gözat" diyalog penceresine erişilerek genişletilebilir ve dosya taşındığında program kodunun değiştirilmesi gerekmez.

Sert kodlama, yazılımın diğer dillere çevrilmesi için hazırlanmasında özellikle sorunludur.

Çoğu durumda, dizi boyutu gibi tek bir sabit kodlanmış değer, bir programın kaynak kodunda birkaç kez görünebilir. Bu sihirli bir sayı olacaktır . Değerin bazı görünümleri değiştirilirse, ancak hepsi değil, bu genellikle bir program hatasına neden olabilir. Böyle bir hatayı bulmak zordur ve programda uzun süre kalabilir. Aynı sabit kodlanmış değer birden fazla parametre değeri için kullanılırsa, örneğin 6 elemanlı bir dizi ve minimum 6 giriş dizisi uzunluğu kullanılırsa benzer bir sorun ortaya çıkabilir. Bir programcı, değerin tüm örneklerini yanlışlıkla değiştirebilir (genellikle bir editörün arama ve değiştirme özelliği) her örneğin nasıl kullanıldığını görmek için kodu kontrol etmeden. Adları değerlerle ilişkilendiren sabitler tanımlanarak ve kod içindeki her görünüm için sabit adları kullanılarak her iki durumdan da kaçınılır .

Sabit kodlamanın önemli bir örneği, dizelerin doğrudan dosyaya yerleştirilmesidir, bu da çevirmenleri bir programı çevirmek için kaynak kodu düzenlemeye zorlar. ( gettextDizelerin dosyalarda bırakılmasına izin veren, ancak çevirmenlerin kaynak kodunu değiştirmeden çevirmelerine izin veren bir araç vardır; dizeleri etkin bir şekilde kodlar.)

Yarışmalarda sert kodlama

Uluslararası Bilişim Olimpiyatları gibi bilgisayar yarışmalarında , yarışmacıların soruların ihtiyacına göre belirli girdi-çıktı desenine sahip bir program yazmaları gerekmektedir.

Olası girdi sayısının yeterince küçük olduğu nadir durumlarda, bir yarışmacı tüm olası girdileri doğru çıktılarına eşleyen bir yaklaşım kullanmayı düşünebilir. Bu program, algoritmik olanın aksine sabit kodlanmış bir çözüm olarak kabul edilecektir (sabit kodlanmış program algoritmik bir programın çıktısı olsa bile).

Ayrıca bakınız

Referanslar