Bir özelliği test etmemek uygun olur mu?


12

Dilinizi / veritabanınızı / sisteminizi bu kadar tanıdığınız herhangi bir nokta var mı , yeni bir özellik / yapılandırma / sorgu / vb. sisteminize uygulamadan önce içerilen / simüle edilen testlerle (özellikle verileri değiştiren bir özellikle ilgili)? Yoksa yeni bir sorguyu test ortamında simülasyonla test etmek her zaman gerekli midir?

Daha fazla belirtmek gerekirse, test etmenin her zaman en güvenli olduğu açıktır . Bununla birlikte, riskin ne kadar az olduğunu test etmenin çabaya değmeyeceğini belirlemenin bir yolu var mı? Bunu ifade etmenin başka bir yolu: bir özelliği uygulamak için ölçülü bir risk almak ne zaman veya hiç profesyonel bir uygulamadır?

Ayrıca, en her şeyin yedeklenmiş, böylece, en kötü durum senaryosu, veri varsayalım olabilir biraz çaba ile restore edilecek.

Birisi bunu ele almak için özel ve uzman bir deneyim sunabilir mi? Lütfen uygun / mümkün olduğunda referanslar ekleyin.

Yanıtlar:


10

Verdiğim örnekler bu yüzden yaptığım her şeyin SQL Server olduğunu söyleyerek başlamak istiyorum. Ancak genel olarak bu sistemden bağımsız olarak her türlü kod için geçerlidir.

Bunu biraz parçalayarak başlayalım.

Yükseltmeler

Bir sisteminiz var ve bir kısmını veya tamamını yükseltmek üzeresiniz. Örneğin, bir örneği SQL Server 2012'den 2014'e yükseltme. Bu noktada test yapılması önemlidir. Ne yazık ki küçük bir uygulamanın bile her parçasını test etmek muhtemelen mümkün olmayacaktır. Bu noktada "çalışma" testi dediğim şeyi yaparım. Temel sistem çalışıyor mu? Ortak görevlerinizin üzerinden geçmeye başlayın. Her seçeneği test etmeyin, sadece ana yol.

Bir SQL Server yükseltmesi yaparken de gerekli bazı okumalar vardır . Temel olarak Backward Compatibilityyeni sürümün girişini okumak istiyorsunuz ( işte 2014 sürümü ) ve listelerin hiçbirinde hiçbir değişiklik olmadığından (değişiklikleri kırma, davranış değişiklikleri vb.) Emin olun.

Başvuru Kodu

Burada yeni / değişen uygulama koduna bakıyoruz (elbette var olan herhangi bir şey zaten test edildi mi?). Bu durumda her şey test edilmelidir. Test senaryolarını önceden ayarlamanız ve etkilenen özelliklerinizin en azından çoğundan geçmeniz gerekir. Tercihen bu noktada başka birine de benzer bir kontrol yaptırmalısınız. Bu kod, muhtemelen oldukça uzun bir süre için geçerli olacak ve çok sayıda insan tarafından kullanılacak. İyi çalıştığından ve iyi çalıştığından emin olmak istiyorsunuz.

Bununla gerçekten yardımcı olabilecek şeylerden biri unit tests, kolayca tekrarlanabilir bir dizi oluşturmaktır . Steve Jones , TSQL kodunuzu test etmek için tSQLt kullanmanızı önerir (sadece SQL Server korkarım). Ancak bunu yaparak sabit bir dizi testten hızlı bir şekilde geçebilirsiniz ve regresyon testine gerçekten yardımcı olacaktır (bir yükseltme yapmadan önce her şeyi test edin).

Özellikler / Yapılandırmaları

Uygulama kodu değişikliklerinden bile daha fazla, yeni özellikleri ve yapılandırma değişikliklerini iyice test etmek istiyorsunuz. Örneğin, sütun deposu dizinleriyle çalışmaya başlamaya karar verirsenizilk defa etkilenen tablolara dokunan her kod parçasını test etmeniz gerekecektir. Uygulamanızı test etmek için oluşturduğunuz birim testlerini kullanın. Bu özellikler muhtemelen sizin için yenidir (ve muhtemelen platformda yenidir) ve muhtemelen beklemediğiniz bazı eşyalar olacaktır. Yapılandırma değişikliklerine gelince, muhtemelen tüm sisteminizi etkileyebilecek bir şeyden bahsediyorsunuz. Temel kural test etmek ve dikkatle test etmektir. Aktif bir sisteme (muhtemelen sadece üretim sisteminize) girene kadar gerçekten göremeyeceğiniz bazı değişiklikler var, ancak bu onları ilk önce bir test ortamında denememek için bir bahane değil.

Kullanıcı verilerini referans alan / etkileyen geçici sorgular

Kullanıcı verilerinizi etkileyen bir kodunuz olduğunda, genellikle, hatta belki de özellikle test etmeniz gerekir Ad Hoc. Şimdi, aynı kod parçasını, farklı parametrelerle tekrar tekrar çalıştırıyorsanız, muhtemelen her seferinde test etme konusunda endişelenmenize gerek yoktur.

Örneğin, her üç ayda bir AdList tablosundan bir veya daha fazla Reklamı silmeniz gerekir.

DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')

Bu noktada kodu zaten test ettiniz (sadece sabit dizeleri değiştiriyorsunuz) ve muhtemelen sadece kodu çalıştırmanız oldukça güvenlidir (her ihtimale karşı iyi yedeklere sahip olduğunuzu varsayarak).

Bir kolay yolu bir test etmek DELETE, UPDATEya da INSERTbeklediğiniz satır sayısı ve tipi döndürülür ki, o zaman onaylamak SELECT'in bunları değiştirmek ve onları çalıştırmaktır.

SELECTHerhangi bir veriyi değiştirmedikleri için s test etmeniz gerekmediğini düşünebilirsiniz . Ancak kodu bir nedenle çalıştırıyorsunuz değil mi? Diyelim ki yöneticiniz için araştırma yapıyorsunuz, bu verileri yöneticilerine iletecek vb. Yanlış verileri almadığınızdan (veya başkalarının verilerini toplamasını engellediğinizden) emin olmak için test yaparsınız.

Sistem verilerini referans alan / etkileyen geçici sorgular

Bu muhtemelen "her şeyi test et" kuralının tek istisnasıdır. Sistem verileri hakkında bilgi sorguları çalıştırıyorsunuz. Burada önemli olan, beklediğiniz verileri geri almaktır. Sorgu basit bir şeyse (sistem görünümünü sorgulama), görünümün / sütunların gerçekten ne anlama geldiğini kontrol ettiğiniz sürece muhtemelen tamamsınız demektir. Sorgu karmaşıksa (örneğin, döndürülen sütunlardaki hesaplamalar ile 3 veya 4 sistem görünümüne vurma), beklediğiniz verileri geri alacağınızdan emin olmak için birkaç test yapmak isteyebilirsiniz.

özet

Özetle, evet, her şeyi test etmek istiyorsunuz. Yazmanız ve çalıştırmanız için yeterince önemliyse, test etmeniz için yeterince önemlidir. Bu, her kod satırının her dalını test etmek için çok fazla zaman harcamanız gerektiği anlamına gelmez. Ancak bir miktar test yapılması gerekiyor.

Otomatik birim testi burada arkadaşınızdır. Gelişiyle birlikte DevOpsve Continuous Integrationgiderek daha fazla uygulama ve hızlı ve kolay bir kod sınama yöntemleri göreceksiniz. Tabii ki bu, iyi bir test ortamı ve onunla birlikte verilere sahip olmayı gerektiriyor, ancak bu tamamen farklı bir tartışma.


4

Ne hissettiğini biliyorum, MySQL ile 3 yıl çalışıyorum ve benim durumumda her zaman her tablo / veritabanı / Slave-replikasyon ile ilgili herhangi bir bilgiyi değiştirebilecek veya kırabilecek DML sorgularını test ediyorum .

Sorgunuzu çalıştırmadan önce test etmenin her zaman en güvenli yoludur.

Sorgunuzun veri bilgilerinizi risk altına alıp alamayacağını bilmenin bir yolu yoktur. Tek yol, veritabanı yapınızı ve yapılandırmanızı bilmektir, böylece bir sorgunun hassas verilerinizi ne zaman riske atabileceğini veya riske atamayacağını kolayca belirleyebilirsiniz.

Açık DELETE, UPDATE, INSERT, her zaman kullanmaya çalışmalısınız SELECTEğer değiştirmeye gidiyoruz hangi bilgilerin emin değilseniz ilk. Seçimlerde, sütun veri tipiyle ilgili koşullar için her zaman aynı veri türünü kullanmaya çalışın, bazı durumlarda EXPLAINoptimizasyon için kullanın .

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.