Mühendisler kodu dağıtıp çalıştırdıklarında hangi işlemler veya araçlar Görevlerin Ayrılmasını sağlar?


18

Finansal Hizmetler sektörü gibi yüksek düzeyde düzenlenmiş ortamlarda, Görevlerin Ayrılması, geliştirme sorumlulukları ve üretim ayrıcalıklarına sahip bireyler arasında çarpışmayı önlemek için önemli bir mekanizmadır.

Geleneksel olarak bu, Geliştiricilerin kod geliştirmesi ve daha sonra kodu İşlemlere devretmesi anlamına gelir, ancak birçok DevOps İşletim Modelinde Geliştirme ve İşlemler arasındaki ayrım en azından bulanıktır:

Ayları Görev Ayrılığı mekanizmasının kök nedenlerine kadar inceledikten sonra Sarbanes Oxley Bölüm 404 : İç Kontrollerin Yönetimin Değerlendirilmesi:

(a) Gerekli Kurallar. Komisyon, 1934 tarihli Menkul Kıymetler Borsası Kanununun 13 (a) veya 15 (d) bendinde öngörülen her yıllık raporu, bir iç kontrol raporu içermesini gerektiren kurallar belirler.

(1) finansal raporlama için yeterli bir iç kontrol yapısı ve prosedürlerinin oluşturulması ve sürdürülmesinde yönetimin sorumluluğunu belirtmek; ve

(2) ihraççının en son mali yılı bitiminden itibaren, iç kontrol yapısının ve ihraççının finansal raporlama prosedürlerinin etkinliğine ilişkin bir değerlendirme içerir.

(b) İç Kontrol Değerlendirme ve Raporlama. (A) bendinin gerektirdiği iç kontrol değerlendirmesinde, ihraççı için denetim raporunu hazırlayan veya düzenleyen her kayıtlı kamu muhasebe firması, ihraççının yönetimi tarafından yapılan değerlendirmeyi onaylar ve raporlar. Bu alt bölüm kapsamında yapılan bir tasdik, Kurul tarafından çıkarılan veya kabul edilen tasdik sözleşmeleri standartlarına uygun olarak yapılır. Böyle bir tasdik, ayrı bir sözleşmeye konu olamaz.

Yorumlara dayanarak, yaptığım birkaç varsayımı belirtmek önemlidir :

  • Ağırlıklı olarak kitle piyasası finansal hizmetlerini düşünüyorum, yani işlem hacimleri yüksek ama nispeten düşük değer. Bu, farklı bir işlem değeri profiline sahip ticari finansal hizmetlerin aksine olacaktır.
  • Bir finansal kurumun çevrimiçi teklifi, farklı risk faktörlerine sahip birçok bileşenden oluşacaktır:
    • Para Taşı - Hesaplar arasında para taşıma veya farklı sahiplerin hesapları arasında transferler. Kara Para Aklamanın Önlenmesi, Sahtekarlık Koruması ve Ambargo'lu ülkelerin birkaçını dikkate alması gereken bir operasyon.
    • Müşteri Edinme - Para Taşıma ile karşılaştırıldığında düşük işlem hacimlerine sahip olduğu için daha az "Riskli" olmasına rağmen yine de dikkate alınması gerekir.
    • İnternet Bankacılığı - Değişen risk seviyelerine sahip geniş bir hizmet yelpazesini kapsar, Parayı Taşı bunun bir parçası olarak kabul edilir.
  • Muhtemelen riske bağlı olarak her biri için farklı bir yaklaşım benimsenebilir, ancak basit tutmak adına, en riskli operasyonların bazıları için geçerli olacak bir çözüm üzerinde çalışıyorum.

TL; DR : Menkul Kıymetler ve Borsa Komisyonu düzenlemelerine uygun yeterli iç kontrollerin olmasını sağlamak yönetimin sorumluluğundadır .

Sarbanes Oxley 404 normalde, bir kısmı çarpışma riskini değerlendirecek ve hafifletme stratejilerini öne çıkaracak Yukarıdan Aşağıya Risk Değerlendirmesi'nin tamamlanmasıyla tatmin olur.

DevOps uygulama ve kültürünü kullanan bir şirkette, Geliştiricilerin hem kaynak kontrolüne hem de üretime rutin olarak erişebildikleri bir görevde Görevlerin Ayrıştırılması nasıl gerçekleştirilebilir veya daha genel olarak birleşme riski nasıl azaltılabilir.


Takımdaki herkesi üretimde olanlardan sorumlu kılmak için bir adanmış kuruluşun arkasındaki ana fikir, görevler ayrılığı olamaz. Bu, esasen bu tür bir organizasyonun, bu ayrım için düzenleyici ihtiyaçlar olduğunda gerçekten kullanılamayacağı anlamına gelir.
17'de Tensibai

@Tensbai DevOps'un Görev Ayrımı ile uyumsuz olduğu iddiasına esasen katılmıyorum. Kanunlar, kontrollerin şekli konusunda kural koyucu değildir ve düzenleyiciler, bankalara ve finansal hizmetlere önceden tanımlanmış bir süreç uygularlar. Uygun olanın ne olduğunu belirlemek ve düzenleyiciler ve onların tayin edilen denetçileri ile tamamen şeffaf olmak büyük ölçüde kuruluşa bağlıdır. Örnek olarak hem ING hem de Barclays, müşterilerine değer verme yeteneklerini hızlandırmalarını sağlamak için DevOps uygulamalarını benimsemiştir.
Richard Slater

Evet, düzenleyici ayrılığa bağlı olmayan konulardaki adanmışlar ve kısıtlı konular için (aslında çok az olan) geleneksel silo tabanlı bir kuruluştaki otomasyondan yararlandılar. Yazılımın ne tür işlem yapacağına bağlı olarak sadece iki çeşit
kuruluşu

“Düzenleme Ayrımı” diye bir şey yoktur. Tüzükler / yasalar ve düzenleyici kurumlar, finansal riski yönetmek için "Uygun Kontrollere" sahip olmak için bir yönetim sorumluluğu uyguladıkları finansal kurumlara ayrım yapmazlar. Agile'nin yazılım geliştirmeyi uzun döngülerden küçük döngülere götürdüğü gibi, DevOps da işlemleri küçük döngülere sokuyor, Finansal Hizmetlerde DevOps'un Görevleri Ayrıştırmayı küçük döngülere almanın bir yolunu bulması gerekiyor, örneğin bir CD kanalı akran değerlendirmesi ve onay temelli tanıtım gibi "uygun kontroller" uygular.
Richard Slater

1
@ Pierre.Vriens evet geniş soru başlığında, bazı varsayımlar yaparak üzerine genişletmeye çalıştım. Roller, Cam ve İmtiyazlı Hesap Yönetimi gibi çözümün bir parçası olabilir. Roller ve Sorumluluklar DevOps / Agile'da ilginç bir kavramdır, çünkü bir zamanlar Java Geliştirici, F / E Geliştiricisi, Tasarımcı, PM, İnşaat Mühendisi, Yayın Yöneticisi ve Ops Mühendisi - şimdi bir grup insanınız var. birden fazla şapka giymek - uzman olabilir ama sonuçta sorumluluk paylaşabilirsiniz "Mühendisler" oluşan çapraz fonksiyonel ekipleri.
Richard Slater

Yanıtlar:


8

Sorunuz, ilgili platform / işletim sistemi hakkında herhangi bir varsayımda bulunmuyor gibi görünüyor. Bu nedenle, bunun "mühendislerin" (soru başlığınızda olduğu gibi) aslında düzinelerce (muhtemelen yüzlerce) insanın olduğu bir ana bilgisayar ortamında nasıl yapıldığı / ele alındığı hakkında bir cevap eklemek mantıklı olabilir. içeriyordu. Cevabım en çok tanıdığım SCM ürününü temel alıyor (ürün adını ifşa etmenin gerekip gerekmediğinden emin değilim).


1. Mimarlık


İşte sorunuza nasıl cevap vereceğimin önemli noktaları:

  • Tüm kodlar (ve yürütülebilir dosyalar gibi ilgili eserler), hep birlikte kütüphane yapısı dediğimiz dosyalarda saklanır .
  • Her (muhtemelen uzak) hedef sistemdeki her ortam için, kütüphane yapısındaki TÜM (yineleme: TÜM) güncellemelere dikkat eden bir sunucu (ana bilgisayar konuşmasında "başlatılan görev") vardır. Birkaç istisna vardır (güvenlik personeli veya alan yönetimi ekibi gibi), ancak bunun dışında hiç kimse (tekrar: kimse) bu kütüphane yapısındaki herhangi bir dosyaya güncelleme uygulama yetkisine sahip değildir. Başka bir deyişle: sunucu tüm kütüphane yapısına özel güncelleme yetkisi alır . Dikkat: Erişimlerini sınırlamak için yürürseniz (ilk başta direnecekler ...) OPS kullanıcıları çıldırır, bu yüzden bu erişim kurallarını uygulamak için üst yönetim (CxO) kapsamında olduğunuzdan emin olun ...
  • Gerçek yazılım değişiklikleri tek bir bileşenden oluşuyor (gecenin ortasında küçük bir kod düzeltmesi ...) ya da yüzlerce veya binlerce kaynak, yürütülebilir dosya veya başka herhangi bir eser olabilir (bir yayın hafta sonu boyunca). Onları yönetilebilir kılmak için, birlikte (az ya da çok) birlikte taşınması gereken şeyler, bir yazılım değiştirme paketi olarak adlandırılır .

Yukarıdakiler yerinde olduğunda, sunucu tarafından kütüphane yapısına uygulanacak her türlü güncelleme, ancak bir yazılım değiştirme paketinin yaşam döngüsünü ( tercih ederseniz SDLC) olarak adlandırdığımız iyi tanımlanmış bir iş akışı ile mümkün olacaktır . Bu iş akışındaki çeşitli adımları gerçekten yürütmek için, bunun gerçekleşmesi gerekir:

  • Gerekli (ve önceden yapılandırılmış) adımları yalnızca sunucu yürütür.
  • Sunucu, böyle bir adımı gerçekleştirmek için gerekli onaylar (insanlardan) toplandıktan sonra, yalnızca belirli bir adımı (= kütüphane yapısında bir yerde güncelleme) yapacaktır.
  • Onaylar, yalnızca bu onayları vermelerine izin veren (= izin) rolü olan kullanıcılar tarafından verilebilir.


2. Roller ve izinler


Sunucu, bir şey yapmaya çalışan kullanıcının ('bir şeyi onaylama' gibi) ancak kullanıcının izinleri uygun olduğunda bunu yapabilmesini sağlar. Bu kısım kolay. Ancak, ilgili tüm kullanıcılar için tüm bu izinleri yönetmek için SCM sistemini kullanmak istemezsiniz, iş sisteminizi (SCM sisteminizde) uyarlayabilmeniz için güvenlik sisteminize (SCM sistemine değil!) Aittir. gitmek için bu izinleri kontrol edin. Aşağıdaki adımlar bununla ilgili daha fazla ayrıntı sunmaktadır.

Adım 1: İzinleri yapılandırın (güvenlik sisteminde)

  • Define güvenlik varlıkları bu varlıklar için iyi tanımlanmış adları ile birlikte güvenlik sistemi. Birkaç örnek (kendi ihtiyaçlarınıza uyacak benzerleri ekleyin):

    • PrmUnitBir istemek için izin almak için kullanılan teşvik söylemek Birim -Kaynak.
    • PrmQABir istemek için izin almak için kullanılan teşvik söylemek Qa -Kaynak (hadi bu test en üst düzeyde olduğunu varsayalım).
    • PrdEnduser, bir tür teste katılan son kullanıcılar tarafından, bir tür test tarafından üretilen sonuçlardan memnun olduklarını belirtmek için kullanılır. Ve bu nedenle, bu son kullanıcılar kütüphane yapısındaki değişime katılıyorlar.
    • PrdRelmgnt, yayın yöneticileri tarafından üretimde bir Etkinleştirme izni vermek için kullanılır (= kütüphane yapısındaki son / en yüksek seviye).
  • Güvenlik sisteminizdeki kullanıcı gruplarını tanımlayın . Birkaç örnek (kendi ihtiyaçlarınıza uyacak benzerleri ekleyin):

    • GrpDevs(ki bu) geliştiricilerinize karşılık gelir (muhtemelen yalnızca 1'den sonra).
    • GrpEnduser(son olarak) son kullanıcılarınıza karşılık gelir (en az 1, tercihen daha benzer kullanıcılarla).
    • GrpRelMgnt(ki bu) sürüm yöneticilerinize karşılık gelir (en az 1, tercihen birkaç kullanıcı daha).
  • Seçili " kullanıcı grupları " için seçilen " güvenlik varlıklarına " erişim sağlamak için güvenlik sisteminizi de kullanarak izinler verin . Yukarıdaki örneğe devam etmek için, uygun görünen şey (kendi ihtiyaçlarınıza göre uyarlayın):

    • Grup GrpDevs(yalnızca!) Güvenlik varlığına erişim sağlar PrmUnit.
    • Grup GrpEnduser(yalnızca!) Güvenlik varlığına erişim sağlar PrdEnduser.
    • Grup GrpRelMgnt, (her ikisi de!) Güvenlik varlığına PrmQAve PrdRelmgnt.

2. Adım: İş akışını yapılandırın (SCM sisteminde)

Güvenlik sisteminizde izinler yapılandırıldıktan sonra (1. Adımda olduğu gibi), SCM sisteminizde yapmanız gereken tek şey, lifecyle'deki çeşitli adımların güvenlik sisteminizdeki ilgili güvenlik varlıklarıyla nasıl eşleşeceğini yapılandırmaktır. Yani, yalnızca gerekli güvenlik varlığına uygun erişimi olan kullanıcıların sunucudan iş akışındaki ilgili adımı gerçekleştirmesini istemesine izin verilir.

SCM sisteminizi biraz sihir yapmak için nasıl yapılandıracağınıza dair bazı örnekler:

  • Bir kullanıcı erişimi varsa etmek PrmUnit, sonra da bu tür kullanıcı bir talep etmesine izin verilen teşvik etmek Birimi -Kaynak. Açıkçası, gruptaki GrpDevskullanıcılar bunun için yetkilendirilmiş kullanıcılardır (not: ör. Gruptaki kullanıcılar değil GrpRelMgnt).
  • Bir kullanıcı erişimi varsa etmek PrmQA, sonra da bu tür kullanıcı bir talep etmesine izin verilen teşvik etmek QA -Kaynak. Açıkçası, gruptaki GrpRelMgntkullanıcılar bunun için yetkilendirilmiş kullanıcılardır (not: ör. Gruptaki GrpDevsveya gruptaki kullanıcılar değil GrpEnduser).
  • Bir kullanıcının erişimi varsa PrdEnduser, bu tür bir kullanıcının kütüphane yapısında ileriye doğru olan değişikliği yetkilendirmesine izin verilir (bu genellikle gruptaki kullanıcıların GrpRelMgntbir değişikliği inceleyebilmesi için bir ön koşuldur ). Açıkçası, gruptaki GrpEnduserkullanıcılar bunun için yetkilendirilmiş (yalnızca) kullanıcılardır.
  • Bir kullanıcı erişebiliyorsa PrdRelmgnt, söz konusu kullanıcının üretimde bir Etkinleştirme yetkisi vermesine izin verilir (= kütüphane yapısındaki son / en yüksek seviye).


3. Beklenmeyeni bekleyin ve buna hazır olun


Yukarıdaki sadece bir taslaktır, umarım sonunda görevlerin ayrılığıyla ilgilenen sunucunun nasıl olduğunu anlamaya yardımcı olur ... CxO'nun herkesin beğenmeyeceği bazı erişim kurallarını empoze etmek için sizi kapsaması koşuluyla.

Resmi yukarıda açıklandığı gibi tamamlamak için, sunucu sistemde olan her şeyin bir denetim izi (günlük kaydı) oluşturur. Böylece herhangi bir zamanda, aşağıdaki gibi soruları cevaplamak her zaman mümkündür

Ne zaman ve neden oldu ve hangi yetkili kullanıcı bunu gerçekten onayladı ...

Ancak, muhtemelen en zor kısım, yeterli raporlama araçlarına sahip olmak (ve bunların nasıl kullanılacağını bilmek). En azından BT denetçilerinden gelen talepleri (kolayca) karşılamak (soruları çok zor olabilir). Ama aynı zamanda, üretimin (bir kısmının) çöktüğü kriz durumlarında her türlü "Ne oldu" sorusunu yanıtlamak için SCM sisteminizdeki ilgili günlük kayıtlarına işaret etmek.


PS: Cevabım DevOps uyumluysa ya da hayırsa, herkesin kendi kararına bırakıyorum.


Bu, yukarıdan aşağıya risk değerlendirmesinin temel bir uygulaması gibi geliyor, bunun, geliştiricilerin ´deploy 'anahtarını tetikleme haklarına sahip olacağı adanmış bir şekilde nasıl uygulanabileceği sorusunu nasıl ele aldığını anlamıyorum. Bir adanmış kuruluşta yapamayacağınız fikri mi?
17'de Tensibai

@Tensibai "eğer" devs, (örneğin) prod için nihai onaylama yetkisine (rolüne) sahipse (genellikle bu tür kuruluşlarda OLMAYANLAR), bu tür bir sunucu (başlatılan görev) konuşlandırmayı başlatır. Ve sorunun başlığına göre, bunun "olası" bir cevap olduğunu düşünüyorum. Ancak bu bir DevOps kuruluşu olarak adlandırdığımız şeyse sorulabilir, ancak denetçilerin bu tür “yapılandırılabilir” görev ayrımını gerçekten sevdiğini biliyorum (örneğin: dört göz ve bunun varyasyonları). Belki Richard bu konudaki bakış açısıyla bize yardımcı olabilir?
Pierre.Vriens

1
Kesinlikle böyle denetçilere katılıyorum, sadece listenin 6-7'den fazla kişi içerdiğinde hangi denetçinin genellikle beğenmediği erişimin "patlaması" ile nasıl ilişkilendirildiğini / uyduğunu kaçırdım. Uygun olmadığını söylemek kesinlikle geçerli bir cevap IMHO.
17'de Tensibai

1
Cevaba çok zaman ayırdığınız için teşekkürler. Aslında 3 kişilik bir kural uygulamayı düşünüyorum, bir geliştirici kodu yazar, farklı bir geliştirici kodu inceler ve üçüncü bir kişi kodu dağıtmak için serbest bırakma düğmesine basar. Diğer bir husus, bunun şirket çapında Agile / DevOps'un benimsenmesinin bir parçası olması, geliştirme ekiplerinin oldukça küçük olması, üretimin ince üretim dilimine erişimi olan küçük insan gruplarının net etkisi ile bu, risk perspektifinden olumlu görünüyor .
Richard Slater

1
@ Pierre.Vriens İki kez oy alamaz, harika uzatma :)
Tensibai

5

Fransızca "İç kontroller" düzenlemesi hakkındaki bilgilerime dayanarak, işaret ettiğiniz SEC düzenlemelerine eşdeğerdir, burada bir Fransız yasal metnine bağlantı oluşturmanın gerçekten yararlı olmayacağını ve bunun iyi bir çevirisinin olmadığını biliyorum.

İdeal bir 'Sen inşa et, sen koş' modelinde, takımdaki herkes değişimden sorumlu olacak. Risk değerlendirmesi, görevler ayrılığı ile uygulanamaz ve düzenlemeye uymayı sürdürmenin tek yolu, serbest bırakan kişiyi geri almak için değiştirilemez bir eylem takibi ile birlikte periyodik bir kısa dönem denetim denetimine sahip olmaktır. .
Bu, tüm işlem günlüklerinin ve eylemlerin ekibin erişemeyeceği sınırlı bir alana itildiği, kaydedilen "değişikliklerin" bir değişikliğinin ekibin erişemeyeceği fonksiyonel testlerle yakalanması ve daha kötüsü yakalanacağı anlamına gelir. tarafından denetlenir ve yazarına izlenir.

Bu, tüm ürünler için geçerli değildir, Fransa'da yazı yazarken herhangi bir şirketin para (özellikle bankalar) yaymasına izin verilmesi, her işlemin kaydedilmesini sağlamak zorundadır ve bu nedenle bir işlemin kaçırılması riskini alamaz.
Öte yandan, bir kişi bir kredi istediğinde herhangi bir ticari teklifi veya risk değerlendirmesini izlemek için yasal bir yükümlülüğü yoktur ve bu nedenle bu müşteri seçimini ve teklifte yer alacak ücretleri hesaplayan ürünlerin bir gönderiye sığması daha kolaydır - kiralama denetim modeli.

Ana fikir, serbest bırakma modelinin risk değerlendirme yükümlülüklerine göre ayarlanması gerektiğidir.

İlgili bir kaynak ISO27001 normudur.


Pek çok Avrupa bankasının Fransa'da faaliyet göstermesi nedeniyle ilginç bir cevap ve çok ilgili. 'Para Yayma'nın ne anlama geldiğini genişletme şansınız var mı? Bu durumda, tüzüğe bağlantı vermek, bulundukları dilden bağımsız olarak ilgili yasalara bir işaret verdiği için değerli olacaktır.
Richard Slater

@RichardSlater Kısacası, para ile çalışan herhangi bir şirket, geleneksel bankalar boyunca sadece bir yatırım şirketi ve kredi komisyoncuları olabilir. Çoğunlukla bir yerde finansal etkisi olan herhangi bir şey söz konusudur (otoritenin verebileceği birkaç istisna dışında, çevreler gelebilir). Fransızca yasal "liste" burada ama Fransızca bile bu her zaman açık değildir.
Tensibai

ISO standardına olan bağlantının aslında ISO27001
Richard Slater

@Richard, Fransızcadan İngilizceye bağlantı Wikipedia'da güncellenmemiş gibi görünüyor. Daha sonra güncelleyeceğim (ya da isterseniz çekinmeyin
Tensibai


0

IMHO, Geliştiriciler ve Operasyonlar , aynı kod tabanı için her biri ayrı izin modeliyle iki git deposundan başka bir şeyle temsil edilemez , böylece ekipler birbirlerinin çalışmalarına hiç karışmazlar.

Örnek olarak onlara Dev.mygithub.co & ops.mygithub.co diyelim .

Fikir Geliştiriciler -git tam izlenebilirliği sağlamak onların kalp içeriğiyle / şube / birleştirme oluşturmak için serbest olduğunu ve bir düzenleyici çerçeve yorumu çaba ima anlarda, burada-arada önemli olan yani, Çekme Talebi için, kaldırılabilir birleşmenin kontrollü bir şekilde gerçekleşmesi.

Bu konsepti bir sonraki seviyeye taşıyarak , bir geliştirme kolu, başka bir Çekme Talebi eylemi yoluyla uzak Operasyonların üretimine doğru yayılabilir . Bu son bölüm operasyonların elleri ve gözleriyle gerçekleşmelidir, çünkü onu üretime almakla sorumludurlar ve inceleme seviyesini seçerler.

Bu şema sonsuz esneklik, tam izlenebilirlik, çeşitli süreçlerle sorunları erken yakalama yeteneği, endişelerin ayrılması ve süreçte çok makul bir kullanıcı deneyimi sağlar !

Not: Ops & Dev tamamen çakışsa bile yukarıda açıklanan model takip edilebilir!


1
Elbette bu aynı kontrol, geliştiricilerin özgürce işleyebilmelerini sağlayan çekme istekleri ve taahhüt sonrası kancalar ile gerçekleştirilebilir, ancak birleştirme taahhütleri sadece onaylanmış bir grup insan tarafından yapılabilir. Aynı şekilde, aynı taahhüt sonrası kancası, çekme talebini oluşturan taahhütlerin yazarlarının çekme talebini yapan kişiyi içermemesini sağlayabilir.
Richard Slater

@RichardSlater: iki ayrı depoya sahip olmak isteyebilmenizin sebebi, hem geliştiricilerin - geliştirici modunda serbestçe kod değiştirdiklerinde birleştirmelerine izin vermenin yanı sıra çoğu geliştiricinin kodun birleştirilmesini engellemesine izin vermenizdir. üretime yönelmek (modulo SysOps, yani "onaylanmış insan grubu").
fgeorgatos

Tekrarlama sonrası kancalar ve çekme istekleri ile bunu yapabilirsiniz, GitHub Enterprise'ın korunan dallara izin verdiğinden bahsetmiyoruz bile.
Richard Slater

0

daha yüksek daha pahalıdır:

  • farklı dev ve ops siteleri ve yöntemleri birinden diğerine taşımak için yöntemler
  • yukarıdaki gibi farklı dev ve ops sistemleri ve yöntemleri
  • farklı dev ve ops git / vcs depoları ve ilgili yöntemler
  • farklı dev ve ops git / vcs şubeleri (korumalı) ve ilgili yöntemler

Yaptıklarınıza bağlı olarak, bazı çözümler diğerlerinden daha iyidir, örneğin, içinde farklı rollere sahip iki takıma ihtiyaç duyuyorsanız ve her birinin içinde sahiplik ve tam izlenebilirlik sağlıyorsanız, ilk üçün üzerinde dolaşırsınız.

Kısacası, bir erkeğin veya gal'in topu tek başına alıp onunla koşamamasını zorunlu kılan herhangi bir şey ve geliştiriciler arasında belirgin bir sınır aşmaktadır. Şimdi, risk düzeyine bağlı olarak, bu sınır uygulanabilir veya olmayabilir.

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.