Dosya adı kodlamaları ile ilgili bir gereksinimi ifade etme


12

Ben bir şartname spec yazma sürecinde ve gereksinimleri bir parça ifade bir ikilem var.

Senaryo: Dosyaları bir web sitesinden indiriyoruz ve indirilen dosyaların sahip olduğumuz CM aracındaki bir öğeye eklenmesi gerekiyor. İndirilen dosyalar ASCII, ISO-8859-1, Japonca vb. Olabilen adlar içerir.

Aşağıdaki ifadede, "ASCII olmayan" tüm durumları kapsıyor mu?

İndirilen dosya adı ASCII olmayan karakterler içerebilir ve bunun işlenmesi, uygulamanın çökmesine neden olmaz


Gönderen bir web sitesi veya gelen birçok web sitelerinde? Bu web sitesi gerçekten bir gobbledegook dosya sistemi içeriyor mu?
200_success

7
dosya adı ascii içeriyorsa uygulamanın çökmesine izin verilir;)
jk.

11
"Japonca" nın kodlama olmadığını belirtmek bilgelik olmaz mıydı?
Ixrec

@lxrec -> haklısın. Japonca bir kodlama değildir. Söylemek istediğim Japonca karakterlerdi ama tam olarak yazmadım. teşekkürler
KK99

@jk Bazı uygulamalarda dosya adı ASCII değilse uygulama kilitlenir. gerçek hikaye :-)
KK99

Yanıtlar:


30

Belirtildiği gibi, gereksinim benim için bulanık.

İlk sorum şu: kaç karakter kodlamasının desteklenmesi gerekiyor? Olası yorumlar şunları içerir:

  1. Tek bayt (örn. ISO-8859-15 ), çoklu bayt (örneğin Big5 , Shift-JIS , HZ ) ve nadir / garip kodlar (örneğin UTF-7 , Punycode , EBCDIC ) dahil olmak üzere şimdiye kadar geliştirilen her kodlama .
  2. Açıkçası aşırı. Sadece asgari desteğe, yani ISO-8859-1'e ne dersiniz ?
  3. Sadece ISO-8859-1 zayıf görünüyor. Modern en iyi uygulamaları, yani Unicode'u UTF-8 olarak desteklemeye ne dersiniz ?

Hangi kodlamaları kastettiğinizi belirtmezseniz, kodlamaya özgü bir hata oluştuğunda, siz ve uygulayıcı kavga edebilir ve her ikisi de haklı olabilirsiniz. Bu, tanım gereği, bulanık bir spesifikasyonun sonucudur.

Dahası, yazılımın çökmekten başka dosya adıyla ne yapması gerekiyor? Gerekirse…

  1. Dosya adını orijinal kodlaması olan bayt bayt olarak saklansın mı?
  2. Her şey Unicode için normalleştirilsin mi? Öyleyse, kaynak kodlamasını otomatik olarak algılaması gerekiyor mu? Hangi mekanizma ile?
  3. Normalleştirmenin başarısız olması durumunda Unicode formunu ve orijinali saklayın.

İhtiyacınızın daha iyi bir versiyonu

İndirici en az ASCII, ISO-8859-1, ISO-8859-15, KOI8-R, UTF-8, Shift-JIS, EUC-JP, GB2312 ve Big5 dahil olmak üzere çeşitli kodlamalarda dosya adlarını desteklemelidir. Web sunucusu yanıtı bir kodlama belirtiyorsa, buna uyulması gerekir. (Kodlama belirtilmezse, ISO-8859-1 varsayılabilir veya daha iyi bir tahmin yapılabilir.) Dosya adları, içerik yönetim sistemindeki Unicode temsiline normalleştirilecektir.

Gerekli kodlamaların spesifik örnekleri kabul kriterlerinin oluşturulması için gereklidir. Eklenen cümleler yazılımın ne yapması gerektiğini, çökmekten öte olduğunu belirtir.


NTFS dosya adlarını Unicode'da saklarken, diğer birçok dosya sistemi dosya adlarını belirtilen kodlama olmadan bayt akışları olarak depolar. Bu durumda, hangi kodlamanın tahmin edileceğini nasıl bilebilirsiniz?
Gabe

@Gabe Web sunucusu, dosyaya hizmet verdiğinde kodlamayı gösterebilir. Değilse, bir kodlamayı tahmin edebilecek metin analizi buluşsal yöntemleri de vardır.
200_success

2
Unutmayın, dosya içeriğinden değil dosyanın adından bahsediyoruz. Oran, web sunucusunun dosya adının kodlamasını bilmesinin bir yolu yoktur, bu nedenle dosya adının belirli bir kodlamada olduğunu iddia ederse, muhtemelen yalan söyler. UTF-8'den UTF-16'ya dönüştürmeye çalışırsanız, ancak dosya adınız gerçekten ISO-8859-1 ise, büyük olasılıkla bir kilitlenme yaşarsınız. Ayrıca, dosya adı boyutundaki metin örneklerinden kodlamaları tahmin etmek için sezgisel taramaların ne kadar kötü olduğunu gösteren bir örnek için blogs.msdn.com/b/oldnewthing/archive/2007/04/17/2158334.aspx adresine bakın .
Gabe

@Gabe ISO-8859-1'i varsayılan olarak önerdiğimi unutmayın. Bunun bir nedeni var - bahsettiğiniz birçok tehlikeyi önler.
200_success

UTF-8'in yeterli olmayacağından korkuyorum - en azından bazı Windows sürümlerinden (FAT dosya sistemleri?) Unicode olmayan yerel kodlamalarda dosya adları alacaksınız - örneğin win-1252 veya win-1257; tarayıcı yükleme sırasında dosya adlarını utf-8'e dönüştürebilir, ancak bundan şüpheliyim.
Peteris

14

Yazdığınız gereklilik iyi bir gereksinimin özelliklerine sahip değil . Özellikle, yapışkan değildir, atomik değildir ve açık değildir. Bu özelliklerin eksikliği nedeniyle, aynı zamanda kolayca doğrulanamaz.

İlk eyalet gereksiniminiz:

İndirilen dosya adı ASCII olmayan karakterler içerebilir ve bunun işlenmesi, uygulamanın çökmesine neden olmaz

"... ve bunun işlenmesi uygulama çökmez" kaldırılmasını öneriyoruz. Bir yazılım parçasının bir şey yapması gerektiğine dair bir gereksiniminiz varsa, yazılımı çökmeden yapması gerektiğini varsaymanın doğru olduğunu düşünüyorum.

Bu gereksinimi şuna dönüştürür:

İndirilen dosya adı ASCII olmayan karakterler içerebilir

Şimdi, uyumlu ve atomik bir gereksiniminiz var. Ancak, bunun açık olduğundan emin değilim. Sorunuzda bir dizi farklı formattan bahsediyorsunuz. Birkaç seçenek var.

Bazıları, desteklenmesi gereken her dosya adı kodlaması için ayrı ve benzersiz bir gereksinim önerir. Bu en iyi şekilde uyumlu, atomik, izlenebilir, açık ve doğrulanabilir gereksinimleri destekleyecektir. Ayrıca her gereksinimin önemini belirtmeyi kolaylaştırabilir - belki de bazı kodlamalar için destek daha önemlidir veya daha erken ihtiyaç duyulur.

Diğerleri desteklenen biçimlerden oluşan bir tablo önerebilir ve bu gereksinim bir tabloya bağlanır. Daha az eksiksiz olurdu (metinsel bir cümleniz ve korunacak bir tablonuz var), ancak aynı belge veya veritabanında olacaklardı. Ancak, bir gereksinim yönetimi aracında bağlantı gerçekleştirecekseniz, bunlara yapılan değişiklikler bağlantılı gereksinimi vurgulayacak şekilde birbirine bağlanabilir. Ayrıca, metnin diğer yazılım paketlerine olduğu gibi, ancak farklı kodlamalar için farklı bir tabloyla akmasına izin verir.

Gereksinimleri nasıl belgelediğiniz özel gereksinimlerinize bağlıdır.


4

İfadenizle ilgili gereksinimi zayıflatan birkaç sorun vardır:

1) gerekliliğini ifade etmelidir olumlu ziyade gerektiğini açısından daha terimlerin yapamaz . Biri nasıl "çökmüyor" diye test eder.

2) ifadesi "indirilen dosya adı olabilir içeriyor ..." belirsiz.

Önerilen alternatif ifadeler (tamamen öznel) elbette şunlar olabilir:

Uygulama, ASCII olmayan karakterler içeren indirilen dosya adlarını destekleyecektir.

("Destek" kelimesi hala biraz belirsiz ve başvurunuzla ilgili diğer gereksinimlerle birlikte kullanıldığında daha somut olarak değiştirilebilir.)


1
Kendi kendine yorum: ASCII olmayanlar da en iyi ifade değildir, çünkü ASCII olmayan diğer kodlamalar anlamına gelebilir. Daha iyi bir gereklilik, izin verilen kodlamaları listeleyerek sonuçlanan test senaryolarının, yazılımın amaçlandığı şekilde çalıştığını belirleyebilmesini sağlar. Aksi takdirde, bir ASCII olmayan kodlamanın test edilmesi gereksinimi karşılayabilir, ancak yazılımı tam olarak test etmeyebilir.
Kent

2
"Uygulamanın Unicode karakterleri içeren indirilen dosya adlarını destekleyeceğini" belirtmek ve belki de desteklenmesi gereken belirli kodlamayı belirtmek gerekir, örneğin UTF-8.

1

Yazılan spec ile ilgili sorun, uygulamanın "ilginç" dosya adlarıyla ne yapması gerektiğini söylememesi. Ben onunla anlamadı herhangi bir dosya adı karakterleri yerini alacak bir programı karşılaştığınız _etkisiyle, yani ikinci dosya isimleri karakterler haricinde aynıydı yarar anlamadı iki karakter içeren bir dizin kopyalamak için sorulduğunda dizine yazılan ilk kodun üzerine yazılır. Bu tür davranışlar "çökmeme" olarak nitelendirilir, ancak açık bir spesifikasyonun olmadığı kabul edilebilir olduğu anlamına gelmez.

İyi bir spesifikasyonun ne olması gerektiğini açıkça belirtmesi gerektiğini veya başka eylem biçimlerinin kabul edilebilir olduğunu, örneğin "Bir dosya adı tanınmayan karakterler içeriyorsa, sistem genel işlem için yeni bir GUID oluşturmalı ve bir dosya adı oluşturmalıdır. bu GUID, bir dizin numarası ve orijinal dosya adının kolayca yerleştirilebilecek herhangi bir bölümünü birleştirir; eski ve yeni dosya adlarını eşleyen bir tablo oluşturmalıdır "veya" Bir dosya adı tanınmayan karakterler içeriyorsa, sistem yeni bir tanıdığı karakterleri birleştirerek, iki dosya adı bu dönüşümle özdeşleşirse, ikisinden biri keyfi olarak 'kazanan' olarak ilan edilebilir ".

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.