Elektrik Mühendisliği İlkeleri
Tdd Principles'ı uygulamak Mekanik Simülasyon Yazılım Geliştirme
Table of Contents
Mekanik simülasyon yazılımı, mühendislikte kritik bir rol üstlenir, uçak kanatlarında geçerlilikli yapısal yüklere güç elektroniklerinde termal davranışı tahmin etmek için.Bu modeldeki tek bir sayısal hata, TDD'yi fizik tabanlı modelleme veya hatta yıkıcı hataları yakalayabilirken, modüler tasarım ve simülasyon araçları uzun süredir talep edilen koşullar altında geliştirir.Bu makale, TDpoint uygulamaları için nasıl adapte edilebilir bir şekilde yorumlanabilir.
TDD bir Simülasyon Kodbase için ne anlama geliyor
Test odaklı gelişme kısa, tekrarlanabilir bir döngüyü reçete eder: başarısız bir test yazın, en az kodu geçebilmeyi yaz, sonra mekanik simülasyon dünyasında, bu döngü matematiksel işlevleri, entegrasyon şemaları, malzeme rutinleri ve darbe arabirimleri, kullanıcı arayüzünden ziyade, temel disiplinler için başarısız bir test yazın.Bir simülasyon modülü için tipik bir TDD testinin, bir kiriş fonksiyonunun% 1'inde teorik Euler-Bernoulli sonucun 1'inde bir basit bir şekilde geri döndüğünü iddia eder.
TDD'yi simülasyon geliştirmede kabul etmek, zihniyette bir değişim gerektirir. Dev bir monolithic bir çözücü oluşturmak ve sonunda doğrulamak, takım daim katlanıcıları, sistemi küçük, test edilebilir birimlere - her biri bağımsız olarak test edilebilir bir yöntem veya parametre dönüşümü.Bu dekompozisyon aynaları model tabanlı tasarımda ortak bir uygulama: bir termal simülasyon ısı iletimine kırılabilir, konveksiyon katlandırabilir ve zaman-dönüşümleri, her biri bağımsız olarak test edilebilir.
Red-Green-Refaksiyonu Uygulamada Red-Green-Refaksiyon
Basit bir tek boyutlu ısı difüzyon çözümü olarak düşünün. Bir TDD yaklaşımı, çözümün başarısız olduğu bir testle başlar. Geliştirici sabit sınır sıcaklıkları için sabit bir devlet lineer profili döndürür. test, örneğin, orta vadede sıcaklık, iki sınırın ortalamasını eşitler.
Bu artışlı bina, simülasyon kodu daha sonra çok geniş bir sistemle entegre edildiğinde özellikle değerlidir, örneğin çok-bölgeli bir ko-simülasyon ortamı olarak. Her birim test bir sözleşme olarak çalışır, yeniden faktörlenmiş bir çözücüyü hala entegrasyondan sonra aynı fizik varsayımlarına saygı gösterir.
Standart Yazılım Kalitesinin Ötesinde Tangible Faydaları
TDD'nin genel avantajları – göz önünde bulundurularak, regresyon güvenliği, daha temiz arayüzler – herhangi bir alana kadar, mekanik simülasyon, mühendislik sonuçlarını doğrudan etkileyen bazı özel kazanımlar sunar.
Sayısal doğruluk ve Convergence Güvence
Yüzücü-point arithmetic, diskretizasyon programları ve iteratif çözücüler, önceden tahmin edilemez bir şekilde toplanabilir olan küçük hataları ortaya çıkarabilirler. TDD testleri, ağ boyutunu kontrol etmek gibi, her bir sipariş planı için dört faktörlü hatanın normunu azaltır.
Deneysel Verilere Karşı Basitleştirilmiş Geçerlilik
Birçok mekanik simülasyonlar fiziksel test verileriyle eşleşmelidir. TDD, simülasyon çıktısını bilinen bir kritere kıyasla (örneğin, standart bir NASTRAN cantilever kiriş defleksiyon) test paketi, güncel materyal özellikleri nedeniyle deneysel sonuçlar değişirse, test paketi tüm etkilenen modüllerdeki değişiklikleri ortaya çıkarmak için şeffaf bir yol sunar.
Asla Stales
Fiziksel modeller doğal olarak karmaşıktır ve belirli bir malzeme modelinin arkasındaki sebep veya devre parametre, literatür veya iç wikislerden kovalayan yorumlarda veya tasarım belgelerinde kaybedilebilir.
Hızlı Fizikte Bir Şekilde Hızlıca Debugging
Multifizik simülasyonları - örneğin, çift çalıştırıldığında, ekip hemen kendi birim testlerini geçeceğini biliyor, bu yüzden bug, ağların arasındaki gizemli inst yükümlülükler olarak ortaya çıkabilir.Bu keskin bir şekilde ilk olarak, arama alanı ile test edilebilir.Bir çift çalıştırıldığında, ekip derhal kendi birim testlerini geçeceğini biliyor, böylece bug, darbe arayüzünde veya diğer ağ geçidinde veya veri transferlerinde yalan söylemeli.
TDD'yi Uygulama: Simülasyon Takımları için Pratik Bir Yol Haritası
Mevcut bir simülasyon kodu TDD'ye yükseltmek dikkatli bir planlama gerektirir, ancak yeşil alan projeleri bile yapılandırılmış bir oyun kitabı takip etmekten faydalanır.
Adım 1: Test Birimlerinin Doğru Granularityunu Tanımlayın
Simülasyon kodu doğal olarak katmanlara girer:
- [FONT=0)Foundation katmanı: [Dönetici: [Dönetici: Çözücüler, Geometrik sistemler, interpolasyon işlevleri.
- [FONT:0)Physical çekirdeği:[Dönetici:[Dönetici: · 1) Stres-strain ilişkileri, ısı flux hesaplamaları, sıvı mülkiyet değerlendirmeleri.
- [FONT=0]Time-integration: açık Euler, Runge-Kutta, Newmark-beta.
- [FONT:0) Sınır koşulu ve yükleme modülleri: Yer değiştirmeler, basınç alanları, termal yükler.
TDD testlerini temel katmanı için yazmaya başlayın. Bu fonksiyonlar makine içindeki hassaslığı ile saf matematiksel işlemlerdir.Bir Cholesky faktörizasyonu için bir test, örneğin rastgele bir simetrik pozitif-de sonlu matrix üretebilir ve bunu doğrulayın.1.Temel sağlam olduğunda, fiziksel çekirdeklere kadar hareket eder ve sonunda arayüzlere kadar hareket eder ve sonunda arayüzlere bağlanır.
2. Adım 2: Doğru Test Framework ve Araçları seçin
Çeşitli programlama dilleri mekanik simülasyona hükmediyor: C++, Python, Fortran ve giderek Rust. Her biri olgun test çerçeveleri var:
- [FONT=0)C++: [Dönetici:[Dönetici:0) Google Test, Catch2, Boost.Test.
- [FONT:0)Python:[Dönetici:0] [Dönetici:2) Yüzücü karşılaştırmalar için.
- [FONT:0)Fortran: [Dönetici: [Dönetici: FRUIT, pFUnit.
- [FONT:0]Rust:[Dönemli:[Dönemli: · 3) inşa edilmiş olan (D) veya özel toleranslar.
Ayrıca, her işlemde sunulan tam test paketini çalıştırmak için sürekli entegrasyon (CI) kullanın. GitHub Actions, GitLab CI, veya Jenkins kodu derleyebilir ve testleri uzman yüksek performanslı hesaplama kümeleri üzerinde yürütebilir. CI, bir modülde getirilen bir regresyon hatasının haftalar içinde yakalanmasını sağlar.
Adım 3: Toklar ile Testler yaz, Eşitlik Değil
Yüzüncü nokta, ansiklopedik değildir; aynı hesaplama yeniden düzenlenebilir, farklı yuvarlak sonuçlar verebilir. Testler göreceli veya mutlak toleranslar kullanmalıdır. Örneğin:
[FONT: 5)
Simülasyonun beklenen hassaslığına dayanan hoşgörüler ayarlayın. Testin her toleransını kullanarak sonlu bir uygulama kodu, testin kendi başına 1e-10'un göreceli bir toleransını güvenle kullanabilir, ancak 1e-6, birçok adım içeren zaman-integrasyon sonuçlarını karşılaştırırken gerekli olabilir.
Adım 4: Miraç Kodbase
Mevcut bir simülasyonda TDD'yi kabul eden takımlar için, “köpektleme testleri” olarak bilinen strateji, temsilci girişleri kümesindeki mirası tespit edebilir ve istenen davranışın çıktısını kayıt edin - bu davranışta hatalar yapmanız gereken hataları içeriyorsa bile, bu karakterizasyon testleri bir güvenlik ağı yaratır: bir işlev yeniden faktörleme yaptığınızda, davranışta istenmeyen değişiklikleri tespit edebilirsiniz. Test paketinin yerdeki test paketinin ardından, istenen doğru davranış için yeni testleri yazabilirsiniz.Bu teknik, kodu daha sonra düzeltmeyi engelleyebilir.
Meydanlar ve Nasıl Overcome Them
TDD'yi mekanik simülasyonda uygulamak, geleneksel uygulama geliştirmede daha az yaygın olan birkaç engel sunar. Acknowledging ve planlamaları sürdürülebilir bir uygulama için gereklidir.
Challenge 1: Solvers'ta Olmayanlık
Bazı iteratif çözücüler (örneğin, rastgele ön koşullara sahip veya paralel indirimlere sahip olmak) başarılı bileşenler üzerinde biraz farklı sonuçlar üretebilir.Tercizinist tohumlar için test etmek veya istatistiksel kontrolleri kullanmak gerekir (örneğin, konjugate bir eşiğin altında ve aynı şeyi hoşgörüsüz bir şekilde davranır). Bir alternatif, ayrı ayrı olarak test etmek için - örneğin, matrix montajını doğrudan kabul ederken test etmek için.
Challenge 2: Long Execution Times
Bir birim testinde her zaman bir dosya kaydedildiğinde ayrıntılı bir sonlu simülasyon simülasyonu, sorunun minyatür versiyonlarını oluşturmak - birkaç kez - aynı kod yollarını egzersizi yapmak ancak milisaniyelerde tamamlamak için her modülün kapsamını sağlamak; tam ölçekli karşılaştırmalar için test paketinin tamamını çalıştırın.
Challenge 3: Random veya Stochastic Modellerini Test
Mekanik simülasyonlar giderek stochastic malzeme özelliklerini içerir, Monte Carlo örnekleme veya rastgele vibrasyon girişleri. TDD hala algoritmanın belirsiz kısımlarını test ederek ve çıktı için istatistiksel hipotez testleri kullanarak başvurabilir. Örneğin, ortalama 100 rastgele örnek, örnek notlar doğayla ilgili olarak bilinen bir analitik değer üretmek zorundadır; 10.000 örneğin anlamını iddia eden bir test yazın, 5'lik bir eşiğinde p değerli eşiği test eder.
Challenge 4: Hızlı Değişen Fizik Modelleri ile Devam Ediyor
Araştırma takımları genellikle malzeme modellerini veya kurucu denklemleri günlük olarak değiştirebilir. TDD, her değişikliğin bir düzine testi güncellediğini hissedebilir. anahtar, iç uygulama ayrıntılarına sağlam olan test arayüzlerini tasarlamaktır.Test API - iç diskretleştirme veya algoritmanın değiştirildiği zaman geçerli kalır.
Challenge 5: Floating-Point Compiler Optimizasyonlara Bağlılıklara Bağır
Farklı derleyici veya optimizasyon bayrakları, farklı yüz noktaları için ayrı test konfigürasyonlarını değiştirebilir ve IEEE uygunluk gerekliyse, TDD testlerini çalıştırılır (Intel) veya [[GCC) aynı derleme bayrakları ile test yapılandırmaları ve bu ayarlamayı kullanmalıdır.
Vaka Çalışması: TDD Açık Kaynak Finite-Element Code
Operasyondaki ilkeleri göstermek için, açık kaynaklı bir termal-yapısal darbe kütüphanesinin gelişimini göz önünde bulundurun. Ekip, elastik devre için ünite testlerini yazmaya başladı: Bilinen bir kiriş defleksiyonunu kullanarak (Euler-Bernoulli).
Her iki çekirdek TDD altında stabil olduğunda, ekip darbe testi için entegrasyon testleri yazdı. Komling testi, daha önce yapılan bir el hesaplamasına kadar, daha sonra bir geliştirici arasındaki farkları tekrarladı, projedeki test kapsamı hemen hemen hemen sıfırdan 80'e yükseldi ve test paketi birkaç dakika içinde bug'yi ortaya çıkardı.
Mekanik Simülasyon TDD için araç ve Sürekli Entegrasyon
Test çerçevesinin ötesinde, araç ekosistemi bir simülasyon ortamında TDD'yi yapabilir veya kırılabilir.
- [FONT:0)Numerical test hizmetleri: Kütüphaneler [FONTD:2) Sayısal karşılaştırmalar (Python) ve ) ile [[Katch2[FLT: 5) yüzen karşılaştırmalar basitleştirmek.
- [FONT:0] Parametreli testler:[Dönetici:[Dönetici:0) Bu özelliği birçok giriş setinde aynı testi çalıştırmak için kullanın - örneğin, farklı malzeme özellikleri veya ağ boyutları.
- [FONT=0) Grafiksel diff araçları:[Dönetici: 0,0)[DÜye Olmayanlar İçin Görsel Geçerlilik İçin:0)DÜSÜSÜye Olmayanlar (DÜye Olmayanlar) veya [[DÜye Olmayanlar) Paraview[DÜye Olmayanlar (DÜye Olmayanlar)[DÜye Olmayanlar için Simülasyon Sonuçları karşılaştırabilir, ancak bunlar sistem seviyesindeki testlere karşı daha uygun değildir.
- [FONT=0)Benchmark databases:[Dönetici:[Dönetici:0)[Döneticileri)[Döneticileri ile otomatik olarak karşılaştırılabilen (örneğin,))
Simülasyon kodu için sürekli entegrasyon genellikle büyük giriş dosyalarını (mesh dosyaları, materyal kütüphaneleri) işlemek gerektirir. Küçük test girişleri için sürüm kontrolü ( birkaç megabayt) ve uzaktan sanatifact sunucusunda daha büyük olanları depolamak, test kurulumunda büyük ikili dosyaların sürümden kaçınmak için sentetik ağlar oluşturmak.
Yüksek performanslı hesaplama (HPC) kullanan takımlar için CI, iş programları nedeniyle zorlanabilir.Sadece birim düzeyinde kod ve HPC koşucularını gece ölçeklendirme testleri için test eder. Birçok HPC merkezleri şimdi bulut tabanlı test ortamları sunar; örneğin,FLT:0).
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Test odaklı gelişme iş uygulamaları veya mikro hizmetler için rezerve edilmez. Mekanik simülasyon yazılımına uygulandığında TDD, sayısal hataları yakalayan bir disiplini uygular ve TDD'yi kabul eden fiziksel modeller için canlı bir spesifikasyon yaratır. kodlama zamanından önce yazmada yüksek bir temel geliştirir, yüzen bir köprüyü tekrarlayıcı ve yüksek performanslı bir bilgisayar panelini tekrarlayıcı olarak kanıtlayın. TDD'yi otomatik olarak kabul eder.
TDD'yi bilimsel hesaplamaya uygulama hakkında daha fazla okuma için, bakınız:0) Miraç Kod[DÜT:1) Michael Feathers ve [[ENFLT:2) Sayısal test kalıpları için).