記事で説明されている問題:
- パブリシティまたはプライバシーの選択が問題です。
- より重要なのはクライアントまたはサーバーですか?
- 記事を読むと、1Cがプラットフォームでこれらの質問にどのように答えているかがわかります。
- そして、Googleについてのもう1つの予想外の興味深い事実は、最後まで読んだ人によって発見されるでしょう。
- バグの正確な犯人を見つけた方法を簡単に説明します。
私はすぐにバグを見つけることが好きで、バグは私を見つけたいと言っているに違いありません。 そして私の人生で13日が重要な役割を果たしています。
物語
だから、私は夕方(12月13日のすぐ外)に座って、重要なリリース4.0でお気に入りのxUnitFor1C製品の1つに取り組んでいます。
クライアントからサーバーへ、またはクライアントからサーバーへ、またはその逆に切り替えるときに、マネージアプリケーションモードでテストをテストします。
シンクライアント上でマネージアプリケーションモードでサーバーテストを使用する場合、1つの興味深い困難な動作のシナリオがあります。
テストカーネルコンテキストモジュール(コントロールフォーム)で、2つの同様のメソッドが作成されました:クライアントでテストメソッドを実行(sign&Client)およびサーバーでテストメソッドを実行(sign&Server)。
その目的は名前から明らかです。
通常、テストではUprFormメソッドを使用しました。クライアントでTestメソッドを実行して、UVテストをテストします。 管理されたフォームのコンテキストを介して。
すべて正常です。問題はありません。
しかし、クライアントからサーバーへの移行を確認する必要がありました。 クライアントでRun Testメソッドを使用するだけで十分であると判断し、より深いハッキングを行う時間であり、ServerメソッドでRun Test Testメソッドを呼び出しました。
特別なテストを作成し、シナリオに応じた動作を説明し、テスト内でThisFormを呼び出し、サーバーでテストメソッドを実行します。
私はTDD技術に従って作業しているため、テストは予想通りに落ちます。 テストが機能するように、コードで何を修正する必要があるかを考え始めています(TDDはそのように機能します)。
数分経つと、驚いたことに、私が呼び出したメソッドExecuteTestMethodOnServerはプライベートであることがわかります。 彼には輸出の兆候はありません!
同時に、私は彼に電話をかけることに成功し、彼は完全に満足しています。
1Cプラットフォームのバグの検索と確認
たくさんのスマートな本を読んで、多くのプログラミング言語を知っているので、私は自分の目を信じられません。私はプライベートメソッドをそのように呼び出すことができないことを理解しています。
最初にチェックし、正しい場所から正しいコードを呼び出します。 数分後、エラーがなかったと確信しました。実際、プライベートメソッドを呼び出していて、正常に動作していました。
また、クライアントメソッドでのテストメソッドの実行がパブリック/エクスポートメソッドであることも確認しました。
バグを検索する方法に従って、状況を可能な限り簡素化し、サードパーティの要因を除外しました。
別の外部処理を作成しました。 シンプルな管理可能なフォームが追加されました。
プライベートクライアントメソッドの呼び出しとプライベートサーバーメソッドの呼び出しの2つのコマンドを追加
このフォームに次のコードを追加しました。
& () (""); (" "); & () .(); // !! & () (""); & () .(); // , (" ");
最初に、最新バージョン8.3.7.1805(間違えなければ2015年12月10日にリリース)で同様の手動テストを実行しました。
私は動作を取得します:
- プライベートサーバーメソッドが正常に呼び出され、メッセージが処理されます。 これは間違いです。
- プライベートクライアントメソッドの方が簡単です。 メソッドが検出されなかったという正しい例外がスローされます。
{Form.Form.Form(15)}:オブジェクトのメソッドが検出されませんでした(PrivateOn Client)
EtaForma。Private On Client();
その結果、8.3.7で明示的なバグが発生します。
さらに、バグを見つけるための同じ方法に従って、別のプラットフォーム1C 8.2.19で動作を確認します
動作はまったく同じです。
同じ問題である組み込み処理の動作を確認しました。
実際、バグの言い回しは、 サードパーティのコードがマネージドフォームのコンテキストを介してマネージドフォームのプライベートサーバーメソッドを呼び出すことができ、プライベートクライアントコードはこの方法では呼び出せないということです。
修辞的な問題
- これはバグではなく、機能であることがわかりました。そのような「奇妙な」振る舞いは、非常に長い間、すでに数年にわたって観察されてきたからです。
- しかし、プライバシー/宣伝についてはどうでしょうか? これらが基本原則です!
- しかし、カプセル化はどうですか? 誰でも非表示のサーバーメソッドを呼び出して動作を中断できることがわかりました。
- しかし、平等はどうですか? なぜサーバーに比べてクライアントがそれほど損なわれているのですか?
その結果、このバグは私の夕方になりました!
表示されたbagofichが気に入っていただければ幸いです。
エンコーダーを1Cで展開できるようになりました。書き込みなしでエクスポートできるようになり、すべてがエンコーダーなしで機能します。
Exportを書く時間を無駄にしないなら、どれだけのコードを手に入れることができますか! 全国規模では、時間の節約は何ですか?
しかし、もっと真剣に、私はこのエラーを修正するために1Cになりたいです。
伝道者1C PeterG 、あなたは何と言いますか?
APK(Automated Configuration Check)の製品に同様のバグのチェックを作成することも提案します。
PS必要に応じて、手動テストの処理を提供できます。
PPSバージョン4.0 xUnitFor1Cの新機能に興味がある人は、次の記事と新年の贈り物を待ってください!
Googleはそれと何をしなければなりませんか?
記事の写真を検索すると、PPPSは、Googleで「プライバシー違反」というフレーズを検索すると、Googleロゴの付いたすべての写真がほとんどであることを発見しました。 これはなぜでしょうか?