Meslektaşım birlikte çalıştığı şeyleri anlamıyor. Ne yapalım? [kapalı]


13

Meslektaşım tarafından yapılmış bir kütüphanede çok belirsiz bir hata ayıklamak için 3 gün geçirdim, bu hata çok seyrek oluyor. Sonuçta ben bu hata herhangi bir kilit olmadan bir nesneye çapraz iplik erişimi nedeniyle olduğunu bulundu. Aslında bu tür bir ilk hata değil, daha önce benzer hatalar vardı. Sadece birim testlerini yapar ve bir şey başarısız olursa bir yere bir kilit koyar. Ve hiçbir şey başarısız olursa, ughm, o zaman kodu mükemmel. Görünüşe göre güvenliği dişlemek konusunda hiçbir fikri yok. Henüz yüzeye çıkmamış birçok benzer hata olduğundan% 100 eminim. PM'nin iş parçacığı işlerini de anlamadığı anlaşılıyor.
Sorun şu ki, şirkette benden çok daha fazla çalışıyor. Her neyse, sadece "bu adam bu alanda beceriksiz" diyemem, çünkü bu sizi her zaman "kötü takım oyuncusu" olarak gösterir.


Bu hangi ülke?

Uluslararası bir şirket.
tika

2
Bu gerçekten büyük bir sorunsa ve iş arkadaşınızın bir hata yaptığından% 100 eminseniz, ilk şey bunu kibarca tehdit edilmeyecek şekilde işaret etmektir. İkincisi, eğer meslektaşınız dinlemiyorsa, sadece olası zararları nakit olarak belirtmektir. Tüm yöneticiler bunu dinler ve çok dikkatli bir şekilde bunu dinler. Açıkladığınız gibi bir iş parçacığı sorununa sahip olmak potansiyel olarak çok zararlıdır ve ifadelerinizde% 100 emin değilseniz, onlarla devam edin.
NB

Muhtemelen Proje Yönetimi SE sitesine aittir .
Bernard

1
Proje Yönetimi SE sitesinde, bu sorunun olması gereken bir "Çok iş parçacıklı" etiketi yoktur.
RalphChapin

Yanıtlar:


13

Başbakan'ı bu tür hatalardan kaçınmak için takımın iş parçacığı oluşturma konusundaki know-how'ının iyileştirilmesi gerektiğine ve onlara bir atölye veya bir sunum gibi bir şey düzenlemeye hazır olduğunuzu söyleyin. Siz ve meslektaşınız arasında kişisel bir şey yapmayın.


O düşünür, çünkü bu o adam tarafından hoş olmayacaktır korkuyorum olduğu bu alanda profesyonel (ve herkes kendini öğretebilir). Ama deneyebilirim.
tika

Ah evet, ve büyük bir sorun - İngilizce benim ana dilim değil, çok iyi konuşmuyorum.
tika

Hem iş arkadaşınız hem de Başbakan, iplik geçirme ve iplik güvenliği konusunda kısıtlıysa, eğitim kesinlikle en iyi yaklaşımdır. Bu bir erkeğin yetersizliği değil - sorun ekibin yetkinliğidir.
boisvert

1
Atölye, hepinizin bilgilerini atabileceği bir şeydir ve hepiniz bundan bir şeyler öğrenmelisiniz. İş arkadaşınız diş çekme hakkında bir şeyler bildiğini düşünüyorsa, belki de ondan bazı şeyler de öğrenebilirsiniz.
Doc Brown

8

Hatayı gösteren bir birim testi yazın ve ondan düzeltmesini isteyin.


1
Bu hatanın zaten farkında. Sadece sebebini bulamıyor.
tika

Üç günlük hata ayıklama oturumunda nedeni bulamadınız mı? Yoksa sorunuzu yanlış mı okurum?

1
@scarfridge Platforma bağlıdır. Java için, sorunun tam olarak bulunduğu yere bir bekleme eklemek için bayt kodu enstrümantasyonunu veya Aspect odaklı programlamayı kullanabilirsiniz (veya yürütmeyi kontrol etmek için JVMTI kullanın). Bunu yapmak mümkün!

1
Bu sadece dizi meselesi değil. Diğer birçok faktör söz konusudur - hangi kod yürütülür, GC oluştuğunda ve nesneleri nasıl hareket ettirdiğinde, değişikliklerin bir çekirdeğin önbelleğinden diğerine nasıl yayıldığı vb.
tika

1
Aslında tekrarlanan milyarlarca kez çağrılan bir yöntem kümesidir. Ama bunun bir önemi yok. Asıl sebep, bir sözlük nesnesine kilitsiz 2 iş parçacığından (yani bellek engelleri olmadan) erişmektir. A iş parçacığı oluşturur, B iş parçacığı okur.
tika

4
  • Kodunu incelemek ve iyileştirmeler önermek kıdemli bir geliştiricinin görevidir.
  • Onun işinden sonra kontrol etmek için orada değilsin, eğer birisi bir şeyin kırıldığını görmek için tüm değişiklikleri tekrar kontrol ederse kişisel olarak nefret ederdim
  • Tavsiyenizi kabul etmezse, iletişim sorununu çözmek PM'nin görevidir.
  • Birim testindeki iş parçacığı sorunu, bu testin entegrasyon veya bileşen testinden ziyade gerçekte bir birim test olup olmadığını merak etmemi sağlıyor.

Fikrini anladım. Komutuna itaat et.
tika

2
Bir sorunu gösteren bir teste "birim test" veya "entegrasyon testi" denmesi ne anlama gelir? Bütün durum aynı kalır.
Doc Brown

1
Benim endişem meslektaşı birim ve bileşen testi arasındaki farkı bilmeyebilir, bu nedenle bu sorunu çözmek için daha fazla eğitim gerekebilir.
CodeART

@CodeRush - Akran incelemesine inanmadığınızı mı sanıyorum? Başka birisinin kodunuzu tekrar kontrol ettiğini (üretimde sadece çökmenin aksine) gerçekten takdir etmek için ne gerekir?

Fikri anladım, ancak önceki işlerimde etkili bir şekilde çalıştığını görmedim. Üst düzey bir geliştiricinin incelemelerinin daha iyi bir geri bildirim mekanizması olduğunu düşünüyorum.
CodeART

-5

Bence şirketiniz çoklu iş parçacığı kullanmamalı.

Çok iş parçacıklı bir proje yaptıktan sonra, işlerin işleyebilmesi için iki tekniğin kritik olduğunu gördüm. İlk olarak , kodun doğru yazılması gerekiyordu. Her alanın, uygun şekilde bildirildiğinden ve başvuru yapılan her yerde eşitlendiğinden emin olmak için manuel olarak kontrol edilmesi gerekiyordu. (Uyarı: Cevabımı kısa veya herhangi bir hızda, daha kısa tutmak için burada işleri biraz basitleştiriyorum.) İkincisi , kodun tek ve çok çekirdekli makinelerde düz olarak çalıştırılmasıyla test edilmesi gerekiyordu - birçok dakika% 100 kullanarak her bir çekirdeğin. (Ve her çekirdeğin sadece% 2'sini kullanıyorsa, benim için sıkça yaptığı gibi, bu da bir hata.)

Bunu yönetebilirsiniz, ancak kuruluşunuz yapamaz. Onlar anlamadıkları sorunu anlasalar bile, uzmanlıkları yoktur.

Çoğu dil bundan kaçınmanın yollarını sunar. Genellikle kendi iş parçacığına sahip bir soket okuyucunuz varsa, bilgileri ana iş parçacığına mümkün olduğunca hızlı ve basit bir şekilde almasını sağlayın. Daha da iyisi, okumanın iş parçacığını sizin için ele alacak sistem sınıflarını / işlevlerini arayın. Çoğu GUI API'sinin yaptığı gibi "olaylar" ı birbiri ardına çalıştıran bir kuyruk kullanın. (Bu konuda GUI API'sı olay kuyruğunun kendisini kullanın.) Paralel işleme ihtiyacınız varsa, veri / alanları tek bir iş parçacığında tutmanıza ve sizin için tüm aktarımları işlemenize izin verecek bir tür "işçi iş parçacığı" bulabilirsiniz.

Çoklu iş parçacığının tüm tehlikelerine vurgu yapın. (Korkunç hikayeler: En sevdiğim hata şu gibi birkaç satırdan int i = 5; i = i * i;oluşuyordu : bu i35 değerine sahip oldu if (thing != null) thing.reset();. yepyeni, garip bir dünyaya adım atmak ve belki de büyük bir adım atmaları gerekir.

Gerçek emin çoklu nasıl değilim gerektiğini ele alınması. İş bir kişiye verilebiliyorsa ve başarısız olursa yaptıkları her şey yolunda giderse, iyi. Ancak bir takım sadece en zayıf üyesi kadar güçlü olacak ve iyi bir programcı bile tam gelişmiş çoklu kullanımda sorun yaşayacaktır. Umarım dil güvenli hale getirmek için bir yol bulur. Orada bazı yararlı yazılımlar gördüm. Ancak, yürütme süresi kritik değilse ve iyi bir programcı veya kanıtlanmış bir ekip yoksa çok iş parçacığından kaçınmanın en iyisi olduğunu düşünüyorum .


2
Hangi şirket veya ne yaptıkları hakkında hiçbir fikriniz yok, bu yüzden "Bunu yönetebilirsiniz, ancak kuruluşunuz yapamaz" yorumu biraz temelsizdir - bildiğiniz her şey için, tika Microsoft'ta çalışabilir . Kim olursa olsun, çoklu kullanım problemlerini çözmenin en iyi yolu olabilir; uyduğu birçok durum vardır. Ve tüm bunları bir kenara bırakırsak, soru çoklu iş parçacığıyla ilgili değil, uzmanlık eksikliği nedeniyle sorunlara yol açan bir meslektaşı idare etmekle ilgili.
anaximander

@anaximander: Multithreading, çoğaltılması çok zor ve izlenmesi çok zor olan hatalar üretir. Kullanılabilir, düzeltilebilir MT yazılımı üretmek için, en azından tehlikelerin farkında olan programcılara ve yönetime sahip olmanız gerekir. Tika'nın örgütlenmesi açıkça bunu başaramadı . Test gördüm / QA insanları, programcıları yoğun bir şekilde test ederek ve her hata için düzeltmeler talep ederek ses kodu yazmaya zorladı. MT ile çalışmaz. Eğer meslektaşın yetenek, ilgi ve motivasyon eksikliği varsa, onu MT'den uzak tutarak idare edin.
RalphChapin

@anaximander: Microsoft ile yaşadığımdan daha iyi deneyimler yaşamış olmalısınız. Adil olmakla birlikte, onlardan mutlithreading bir hata gibi görünen hiçbir şey görmedim. .... Ve yorum için teşekkürler.
RalphChapin

1
Ne olursa olsun, "uzmanlığı olmayan bir iş arkadaşıyla nasıl başa çıkarım?" Sorusu söz konusu olduğunda, "şirketiniz yazılımı yanlış inşa ediyor" un geçerli bir cevap olduğunu düşünmüyorum. Herhangi bir organizasyonda, ne kadar geniş ve bilgili olursa olsun, her zaman bilgisinde boşlukları olanlar olacaktır. Kimin kuruluşun ya da yazılımın ne yaptığını bilmeden, şirketin ne yaptığını bilmediğine ya da sorunlarının çok iş parçacığı olmadan çözülebileceğine karar verebileceğinizi düşünmüyorum.
anaximander
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.