こんにちは、Habr!
私たちプログラマーはすべてを念頭に置いておくのが大好きです。 しかし、時には非常に大きなタスクが発生して、頭蓋骨に収まらないことがあります。 この記事では、このようなタスクを圧縮する方法について説明します。
多くのスクリーンショットがあり、最後に少し驚きがあります。
まず、コースを紹介します。 プログラム可能なタスクトラッカーであるPintaskに取り組んでいます 。 そしてもちろん、ユーザーを招待する機能もあります。 最近まで、特別なトークンが配線された招待メールとして実装されていました。 そして、すでに招待されたユーザーがトークンなしで自分でPintaskに登録しようとするまで、すべてがうまくいきました。
電子メールは同じであるため、ユーザーを解放するのが正しいでしょう。 しかし、システムは既存のアドレスへの登録を試みていると判断し、ユーザーを拒否しました。 混乱して、彼はテクニカルサポートに次のように書きました。 「みんな、私は初めて登録していますが、そのようなメールはすでに登録されているというメッセージがあります 。 」 私たちは状況を手動で解決し、その後、今後これを回避する方法を考えました。
最初に思いついたのは、トークンを破棄し、既存のアドレスで登録できるようにすることです(招待がある場合)。 「すごい、簡単に考えてください」-プロジェクトの別のプログラマーであるVanyaにニヤリと、メールクライアントのスクリーンショットを送信しました。 1つのクライアントが5つの異なるメールボックスをチェックしていることがわかりました。1つは仕事用、もう1つは個人的な通信用、さらに3つの「特別な目的」 メールボックスです。 招待状が職場の住所に届き、ユーザーが個人の住所から登録できることが明らかになりました。
待って、待って...ユーザーが個人のアドレスを介して既に登録していて 、同僚が作業中のメールに招待状を送信した場合はどうなりますか? 「すべてがもっとすごい、もっとすごい」とアリスは私たちの部屋で自分を見つけたと言います。 そして、おそらく、彼女はこの場合、アカウントを結合するための提案を表示する必要があることに同意するでしょう。 しかし、私たちは完全な自信を持っていませんでした。
可能性のあるケースが細胞塊のように繁殖することに気付いたとき、ワイヤをほどくという原理によってタスク圧縮の方法を適用することにしました。 誰もが知っていることです。ワイヤーをコンパクトに敷設するには、ボールを一度に1つずつ引き出して箱に入れるだけで十分です。
リストのあるボードはボックスとして機能し、現在の状態の特性はワイヤとして機能しました。 そのうちの4つしかないことが判明しました。 最後に、私たちは冷静にため息をつきました。
次に、サービス側で可能なアクションを理解する必要がありました。 3つの通常の反応と1つの例外、つまり4つの例外が許容されることが判明しました。 そして、それは良かったです-2の程度は一般に心強いです、そして、連続して2つの4が最終的にトランスに入ります。
それから楽しみが始まりました。 カードの反射を使用して、考えられるすべてのケースのマトリックスを作成しました(スクリーンショット:3 of 16) 。
各特性はバイナリであることが判明したため(「トークンがあります-トークンがありません」)、認識しやすいようにリストヘッダーでバイナリ表記を使用しました。 特性の1つが3つ以上の値をとる場合、それは問題ありません-異なる基数の数値システムを使用するだけです。
その結果、私たちは思考の肥沃な土台を作りました。 それぞれの場合に何をすべきかを修正することを決定し、反射の白魔術を再び適用しました。
私の意見では、設計の最も難しい部分はすべてのケースを考慮することです。 そのため、このスキームは、可能なオプションの100%のカバレッジに自信を与えました。 同時に、彼女は受け入れテストを促進し、数日でタスクに対処することができました。
結論として、最終結果を記載した公開委員会を紹介します。
PS特徴の1つは不要であることが判明しました。 見つけた人への特別オーディエンス賞:)