Mimari tasarım çevik bir ortamda nasıl yapılır?


59

Agile Architect için İlkeleri , sonraki ilkeleri tanımladıklarını okudum :

İlke # 1 Sistemi kodlayan ekipler sistemi tasarlar.
İlke # 2 İşe yarayabilecek en basit mimariyi oluşturun.
İlke # 3 Şüphe duyduğunuzda kodlayın.
İlke # 4 İnşa ediyorlar, test ediyorlar.
İlke # 5 Sistem ne kadar büyükse, pist o kadar uzun olur.
İlke # 6 Sistem mimarisi bir rol işbirliğidir.
İlke # 7 İnovasyon konusunda tekel yoktur.

Belge, mimari tasarımın çoğunun kodlama aşamasında yapıldığını ve bundan önce yalnızca sistem tasarımının yapıldığını söylüyor. Bu iyi.

Peki, sistem tasarımı nasıl yapılır? UML kullanıyor musunuz? Veya arayüzleri ve ana blokları tanımlayan bir belge? Belki başka birşey?


11
UML'de "tasarım" yapmazsınız. Tasarımı yaparsınız, sonra yazmak veya iletişim kurmak için UML'yi kullanırsınız.
tdammers

4
@tdammers: Kesin olmak gerekirse, yazmak için UML'yi kullanmaya çalışın ve UML'nin yeterli olmadığını fark edin.
Doktor Brown

Yanıtlar:


77

Yasal Uyarı: Ben değilim Elder, "Hiçbir savaş planı düşmanla temasını hayatta" diyor Helmuth von Moltke gibi bir çevik bir ortamda mimarı ama. Başka bir deyişle, pratiklikler, kılavuz ilkelerin tam harfinin her zaman izlenemeyeceği anlamına gelir.

Yukarıda belirtilen puanların çoğu takımın elinden geldiğince takip edilir. Bununla birlikte, ilke 1 (Sistemi kodlayan ekipler, sistemi tasarlayan ekipler), ekip farklı kıtalara ve zaman dilimlerine yayılmış onlarca (veya yüzlerce) geliştiriciden oluştuğunda takip etmesi gerçekten zordur . Bu, geliştiricilerin becerileri veya tutumlarıyla ilgisi yoktur, hepsinden daha çok müşterilerin gereksinimlerini toplamak ve mevcut karmaşık sistemleri anlamak için mevcut olan lojistik problemdir.

Peki, sistem tasarımı nasıl yapılır? UML kullanıyor musunuz? Veya arayüzleri ve ana blokları tanımlayan bir belge? Belki başka birşey?

Genellikle mimar ana bileşenleri tanımlar, sonra aralarındaki arayüzleri tanımlar (güvenlik, hız ve güvenilirlik gibi işlevsel olmayan gereksinimler dahil) ve bileşenlerin iç tasarımını bireysel ekiplere devreder . Bu, ekiplerin, herkesin sistem hakkında her şeyi bilmesini gerektirmeden kendi bileşenlerini tasarlamalarına izin vermek arasında iyi bir uzlaşmadır.

Her organizasyonun mimari tasarımlar için kendine özgü standartları vardır ve bu bazen organizasyondan projeye projeye değişebilir. Takımdan önce yapılan bu tasarım, kodlamaya başlamadan veya olabildiğince erken ve genellikle içerir (ve tam bir liste değildir):

  1. Genişletilmiş gereksinimler ve kapsam tanımı. Bunlar, üst düzey iş gereksinimlerini karşılayan kullanım durumlarını veya kullanıcı hikayelerini içerir. Kişisel olarak RFC 2119'u işlevsel olmayan gereksinimler için kullanmayı seviyorum . Tasarım bunlara dayanıyor ve bunlara dayanıyor. Her ne kadar tasarımın ortak tanımına uymasa da, bunlar genellikle aynı derecede önemlidir.
  2. Üst düzey bir ağ veya bileşen şemasından ve bir metin sayfasından oluşan genel bakış. Bu, üst yönetimden dev ve QA'ya kadar çok geniş bir kitleye yöneliktir. Bu nadiren geniş kitleden dolayı UML'yi veya tanımlanmış bir gösterimi kullanır.
  3. Ayrı ayrı bileşenler için ayrıntılar, genellikle yukarıda belirtilen aralarındaki arayüzlere veya API'lere odaklanır. Arayüzler, ön koşul ve son koşul detaylarıyla hedef dilde yöntem imzaları olarak belirtilebilir. Bileşenler, VM'lerin yerleşimini bir bulutta veya veri merkezinde göstermek ve ağ düzenlemelerini göstermek gibi ağ diyagramlarına sahip olabilir. İlişkisel veritabanları genellikle Varlık-İlişki diyagramlarına sahip olacaktır.
  4. Eğer biliniyorsa, mimari risklerin ve bunların hafifletilmelerinin bir listesi. Gereksinimler gibi, bunlar tasarım kararlarını ve takası da göstermektedir.

Kısacası, çevik bir süreçte bir sistemin tasarımı, geleneksel bir şelale işlemindeki ile tamamen aynıdır. Bununla birlikte, çevik ortamlarda, tasarımın daha azı önceden yapılır ve çoğu da bileşen ekiplerine verilir . Kilit nokta, başlangıçta ne kadar derin olacağı, hangi kararların erteleneceği ve kararların ne zaman yapılması gerektiğinin belirlenmesidir. Birden fazla geliştirme ekibini etkileyen kararlar daha önce alınmalı, özellikle ölçeklenebilirlik ve güvenlik. Zaten uluslararasılaştırılmış bir ürüne ek dil eklemek gibi kararlar çok geç kalıncaya kadar ertelenebilir.

İlk tasarım oluşturulduktan sonra, mimar ekiplerin her biriyle çalışır ve tasarımlarını inceler. Bir iş birimi için ek bir tasarım veya tasarım değişikliği gerekiyorsa (scrum sprint gibi), mimar, işin başladığı zamana kadar hazır bulundurmayı amaçlar. Mimar, etkilenen ekiplere veya paydaşlara yapılan herhangi bir değişikliği iletmekten de sorumludur.


3
Bu, Mimar'ın Çevik bir takımdaki rolünün ne olması gerektiğine dair büyük bir cevaptır, ancak sprint geliştirme başlamadan ve bunu yapmak için en iyi uygulamalardan önce Sistem Tasarımı'nın ne olduğu sorusuna cevap vermez .
maple_shaft

@maple_shaft Tasarımda daha fazla odaklanmak için cevabımı genişlettim.
akton

3
Buna değer olarak, çok uluslu ortamlarda birkaç yıl boyunca çevik ortamlarda çalışan başka bir mimar olarak, bu nokta açıktır.
Rex M

12

Feragatname: Çevik bir koç / mimar değilim - üzerinde çalıştığım çevik projelerde gördüğüm şey budur ve bence iyi sonuç verir.

Agile tarafından mimarlığın nasıl yapıldığını tam olarak tanımladığını sanmıyorum - çevik geliştirme metodolojilerine ve uygulamalarına odaklanıyor. Öte yandan UML, mimarinizi çevik olmayan bir alana iletmek için bir dildir (projenize ve ekibinize uyuyorsa kullanırsınız).

Gerçekten de geçerli olan mimarlık ilkelerinden biri, kararın mümkün olan en son anda verilmesidir - projenin başında tüm kararları almadıysanız, özellikle de bu aşamada en az bilgiye sahip olduğunuzdan, bunun anlamı budur. Zamanla, mimariyi "geliştiren" kararlar alabilirsiniz. Evet, bu bir yeniden işleme gibi görünebilir, ancak bu aynı zamanda çevre, gereksinimler, neyin mümkün olmadığı, vb. Hakkında yeni şeyler öğrenmiş olmanızdan kaynaklanmaktadır.

Kaçınılması gereken en önemli şey, mimari çürüklük - kodun herhangi bir mimariye uymadığı ve sadece karışık bir karmaşa olduğu. Bir mimarinin gelişmesine kıyasla temel fark, ikincisinde periyodik olarak bilinçli kararlar almanız ve bunları net sebeplerle belgelemeniz ve ardından kodunuzun bunu takip ettiğinden emin olmak için takip etmenizdir.


0

Teste dayalı geliştirme yaparken, modüllerinizi yalıtılmış olarak test eden bir test kodu yaratırsınız (= mümkün olduğunca diğer modüllerden bağımsız olarak)

Test kodunun oluşturulmasını kolaylaştırmak için, kolayca çıkarılabilecek diğer modüllere arayüzler tanıtırsınız.

Bu şekilde bir taraf etkilenir ve otomatik olarak modüller arasındaki bağlantının mümkün olduğu kadar küçük olduğu bir mimari elde edilir.

Bence tdd aynı zamanda mimari bir iştir.


Evet, TDD mimari bir çalışmadır ancak yazılım bileşenlerindedir. Benim sorum, çevik ilkeler kullanılarak büyük ölçekli bir projenin mimarisinin nasıl yaratıldığıdır.
BЈовић
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.