私の同僚は彼が働くことを理解していません。何をすべきか?[閉まっている]


13

私は同僚が作成したライブラリで非常に不明瞭なバグをデバッグするのに3日間費やしましたが、このバグはほとんど発生しません。結局のところ、このバグはロックなしのオブジェクトへのクロススレッドアクセスが原因で発生することがわかりました。実際、これはこの種の最初のバグではなく、以前にも同様のバグがありました。彼はユニットテストを実行するだけで、何かが失敗した場合はどこかにロックをかけます。そして、何も失敗しなければ、うーん、彼のコードは完璧です。彼はスレッド化の安全性について何も考えていないようです。まだ表面化していない類似のバグがたくさんあることは100%確信しています。PMもスレッド処理を理解していないようです。
問題は、彼が私よりもずっと会社で働いていることです。とにかく、「このエリアではこの男は無能だ」と言うことはできません。なぜなら、これは常に「悪いチームプレーヤー」などとして表示されるからです。


これはどこの国ですか?

国際企業です。
ティカ

2
それが本当に大きな問題であり、あなたの同僚が間違いを犯していることを100%確信しているなら、最初に彼が脅されないように丁寧に指摘することです。2つ目は、同僚が耳を傾けない場合、現金での潜在的な損害を指摘することです。それはすべてのマネージャーが耳にするものであり、非常に慎重にそれを聞いています。あなたが説明したようなスレッド化の問題は潜在的に非常に有害であり、あなたの声明に100%確信がない限り、それらを進めてください。
NB

Project Management SEサイトに属している可能性があります。
バーナード

1
Project Management SEサイトには「マルチスレッド」タグがありません。これはこの質問にあるはずです。
ラルフシャピン

回答:


13

そのようなバグを避けるために、スレッドの処理に関するチームのノウハウを改善する必要があることをPMに納得させ、ワークショップやそれに関するプレゼンテーションのようなものを組織して喜んでいると伝えてください。あなたとあなたの同僚の間の個人的なものにしないでください。


彼は彼この分野でプロであると思っているので(そして誰もが自分自身を教えることができるので)これはその男には歓迎されないだろうと思う。しかし、私は試すことができます。
ティカ

ああ、そして一つの大きな問題-英語は私の母国語ではありません、私はあまり上手に話せません。
ティカ

同僚とPMの両方がスレッドの知識とスレッドの安全性に制限がある場合、トレーニングが間違いなく最良のアプローチです。それは一人の人間の能力ではありません-問題はチームの能力です。
boisvert

1
ワークショップは、すべての人が知識を投入できる場所であり、すべての人がそこから何かを学ぶ必要があります。あなたの同僚がスレッドについて何か知っていると思うなら、おそらくあなたも彼からいくつかのことを学ぶことができます。
Doc Brown

8

バグを示す単体テストを作成し、バグの修正を依頼します。


1
彼はすでにこのバグを認識しています。彼は理由を見つけることができません。
ティカ

3日間のデバッグセッションで理由を見つけられませんでしたか?または、あなたの質問を間違って読みますか?

1
@scarfridgeプラットフォームに依存します。Javaの場合、バイトコードインスツルメンテーションまたはアスペクト指向プログラミングを使用して、問題が発生している場所に待機を挿入できます(またはJVMTIを使用して実行を制御します)。することは可能です!

1
それは順序だけの問題ではありません。他の多くの要因が関与している- GCが発生したときにどのコアが、コードを実行し、それは変更が別のコアのキャッシュから伝播されているかのオブジェクト、などをどのように移動するか
ティカ

1
実際には、何十億回も繰り返される一連のメソッド呼び出しです。しかし、これは大した問題ではありません。本当の理由は、ロックなしで(つまり、メモリバリアなしで)2つのスレッドから辞書オブジェクトにアクセスすることです。スレッドAが作成し、スレッドBが読み取ります。
ティカ

4
  • 自分のコードを確認して改善を提案するのは、上級開発者の仕事です。
  • あなたは彼の仕事の後にチェックするためにそこにいません。
  • 彼があなたのアドバイスを受け入れない場合、コミュニケーションの問題を修正するのはPMの仕事です。
  • 単体テストのスレッドの問題は、このテストが統合テストやコンポーネントテストではなく、実際に単体テストであるかどうか疑問に思います。

あなたの考えがわかります。あなたの命令に従ってください。
ティカ

2
問題を示すテストが「単体テスト」または「統合テスト」と呼ばれる場合、何が問題になりますか?全体の状況は変わりません。
Doc Brown

1
私の懸念は、彼の同僚が単体テストとコンポーネントテストの違いを知らない可能性があるため、この問題に対処するにはさらなるトレーニングが必要になる可能性があることです。
CodeART

@CodeRush-あなたはピアレビューを信じていないと思いますか?他の誰かがあなたのコードを再チェックしていることを実際に理解するのに何が必要ですか?

アイデアは得られましたが、以前の仕事で効果的に機能しているのを見ていません。上級開発者によるレビューは、より良いフィードバックメカニズムだと思います。
CodeART

-5

あなたの会社はマルチスレッドを使用すべきではないと思います。

大規模なマルチスレッドプロジェクトを行った後、物事を機能させるには2つの手法が重要であることがわかりました。 最初に、コードを正しく記述する必要がありました。すべてのフィールドを手動でチェックして、参照先が適切に宣言され、適切に同期されていることを確認する必要がありました。(警告:私は私の答えの短いを維持するために少しここでは、物事を単純化しています-またはそれより短い任意のレートで。) 第二に、コードは単一のそれ平らに実行することによってテストされなければならなかったし、マルチコアのマシンを-何分の100%を使用して各コアの。(そして、私がよくやったように、各コアの2%しか使用しない場合、それもバグです。)

これを管理できるかもしれませんが、組織はできません。たとえ彼らが理解していない問題を理解していても、専門知識を持っていません。

ほとんどの言語は、これを回避する方法を提供します。通常は独自のスレッドを持つソケットリーダーを使用している場合は、できる限り迅速かつ簡単にメインスレッドに情報を取得します。さらに良いことに、読みのスレッド部分を処理するシステムクラス/関数を探してください。ほとんどのGUI APIのように、「イベント」を次々に実行するキューを使用します。(その点については、GUI APIのイベントキュー自体を使用してください。)並列処理が必要な場合は、おそらくすべての転送を処理する単一のスレッドでデータ/フィールドを保持できる「ワーカースレッド」を見つけることができます。

マルチスレッドのすべての危険性を強調します。(怖い話:私のお気に入りのバグには、次のような行 int i = 5; i = i * i;が含まれiていました。結果として35の値になりました。私がよく見たのはif (thing != null) thing.reset();、nullポインター例外をスローすることでした。)まったく新しい、奇妙な世界に足を踏み入れて、多分彼らは大きな一歩を踏み出すべきだと。

マルチスレッドどのように処理されるべきかはわかりません。仕事を一人に任せることができ、失敗したら彼らがすることはすべて捨てられます。しかし、チームは最弱のメンバーと同じくらい強力になるだけであり、優秀なプログラマーでさえ本格的なマルチスレッド化で問題を抱えています。言語の人々がそれを安全にする方法を見つけることを願っています。役に立つソフトウェアをいくつか見ました。しかし、実行時間が重要であり、優れたプログラマーまたは実績のあるチームが利用可能でない限り、マルチスレッドを回避することが最善だと思います。


2
会社が何なのか、彼らが何をしているのかわからないので、「これを管理できるかもしれないが、あなたの組織はできない」というコメントは少し根拠がありません -ティカはマイクロソフトで働くことができます。誰であれ、マルチスレッドは問題を解決する最良の方法です。それが適合する多くの状況があります。そして、それはさておき、質問はマルチスレッドに関するものではなく、専門知識の不足により問題を引き起こしている同僚を扱うことです。
アナキシマンダー

@anaximander:マルチスレッドは、再現するのが非常に難しく、追跡するのが非常に難しいバグを生成します。使用可能で修正可能なMTソフトウェアを作成するには、少なくとも、危険を認識しているプログラマーと管理者が必要です。ティカの組織は明らかにこれを処理できませんでした。テスト/ QA担当者は、すべてのバグを厳しくテストし、修正を要求することにより、プログラマーにサウンドコードの作成を強制するのを見てきました。MTでは機能しません。同僚に能力、関心、および動機が欠けている場合は、MTから遠ざけることによって彼を扱います。
ラルフシャピン

@anaximander:あなたはマイクロソフトよりも私が経験したよりも良い経験をしたに違いありません。公平であるように、私は彼らからのマルチスレッドのバグのように見えるものを見たことがありません。....そしてコメントをありがとう。
ラルフシャピン

1
とにかく、「専門知識のない同僚をどのように扱うか」という質問の場合、「あなたの会社はソフトウェアを間違って構築している」とは有効な答えだとは思いません。どのような組織でも、どれほど広大で知識があるとしても、知識にギャップがある人は常に存在します。組織が誰なのか、ソフトウェアが何をしているのかがわからなければ、会社が何をしているのかわからない、またはマルチスレッド化せずに問題を解決できるという判断を確実に下すことはできないと思います。
アナキシマンダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.