ユースケース駆動開発を試してみる - ロバストネス分析基本コース

前回は、基本コースのロバストネス図の作成を行いました。今回はこれに加えて、代替コースのロバストネス図の作成を行おうと思います。

ユースケース記述

基本コース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは、下記バリデーションを実施する

  • 従業員名:入力必須、文字列、1文字以上20文字以内
  • メールアドレス:入力必須、メールアドレス、1文字以上100文字以内
  • 権限:入力必須、文字列、管理者、従業員、閲覧者のどれか

その後、システムはメールアドレス重複がないか、データベースに問い合わせる

システムは従業員データを保存する。システムは完了画面を表示する。

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • バリデーションエラー:再度入力させる
  • すでにメールアドレスが登録されている場合 : 再度入力させる

ロバストネス図

代替コースのロバストネス図を記載する

まずは、代替コースのおさらいをします。

代替コース

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • バリデーションエラー:再度入力させる
  • すでにメールアドレスが登録されている場合 : 再度入力させる

代替コースはこんな感じになっています。これに全ての代替コースを追加していこうと思います。今回はログインはロバストネス図には記載しないで、2つ目から記載していこうと思います。

バリデーションエラー

まずはバリデーションエラーの場合を考えます。バリデーションチェックに引っかかった場合は、再度入力させるため、入力画面をシステムは表示させます。

これで、バリデーションエラー時のロバストネス図が完了だと思います。

すでにメールアドレスが登録されている場合

この場合はエンティティを参照する必要がありますね。こちらも最終的にはユーザー登録画面を表示するようにしようとおもいます。

これでおそらく全ての代替コースが完了したかなと思います。

最後にまとめましょう。

最終的なユースケース記述

基本コース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは、下記バリデーションを実施する

  • 従業員名:入力必須、文字列、1文字以上20文字以内
  • メールアドレス:入力必須、メールアドレス、1文字以上100文字以内
  • 権限:入力必須、文字列、管理者、従業員、閲覧者のどれか

その後、システムはメールアドレス重複がないか、データベースに問い合わせる

システムは従業員データを保存する。システムは完了画面を表示する。

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • バリデーションエラー:再度入力させる
  • すでにメールアドレスが登録されている場合 : 再度入力させる

最終的なロバストネス図

これでおそらく完成でしょう。

ここからは実際にソースコードを書いていこうと思います。

ユースケース駆動開発を試してみる - ロバストネス分析基本コース

先ほどまでで一旦完成した、ユースケースを持ってきます。

ユースケース

基本コース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは、下記バリデーションを実施する

  • 従業員名:入力必須、文字列、1文字以上20文字以内
  • メールアドレス:入力必須、メールアドレス、1文字以上100文字以内、重複していないか
  • 権限:入力必須、文字列、管理者、従業員、閲覧者のどれか

システムは従業員データを保存する。システムは完了画面を表示する。

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • バリデーションエラー:再度入力させる

今回は、このユースケースをもとに、『ユースケース駆動開発実践ガイド』を参考にしながら、ロバストネス分析をやってみようと思います。

ロバストネス図作成

今回ユーザー登録は、一覧リストの右上にある『追加』ボタンみたいなもので追加を始めることにします。

そうなると、最初のロバストネス図は下記のようになると思います。

これに、追加する動作を加えていきます。

おそらくこんな感じになると思います。続いて、システムはユーザー登録画面を表示します。

続いて、ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力します。

コード変えたら図が縦になりました、びっくり。

まずは基本コースのみを考えるので、次はメールアドレス重複を確認するようにします。 後々アーキテクチャのところで書こうと思いますが、コントローラーのバリデーションでは入力内容が意図するものか否かを確認するようにして、アプリケーションコード内で、メールアドレスの重複チェックをするようにしようとおもいます。

ので、ユースケースも一部ブラッシュアップですね。

基本コース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは、下記バリデーションを実施する

  • 従業員名:入力必須、文字列、1文字以上20文字以内
  • メールアドレス:入力必須、メールアドレス、1文字以上100文字以内
  • 権限:入力必須、文字列、管理者、従業員、閲覧者のどれか

その後、システムはメールアドレス重複がないか、データベースに問い合わせる

システムは従業員データを保存する。システムは完了画面を表示する。

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • バリデーションエラー:再度入力させる
  • すでにメールアドレスが登録されている場合 : 再度入力させる

こんな感じにブラッシュアップされるのかなと思います。

動きとしては、情報入力後にユーザーは『登録する』みたいなボタンをクリックして、システムが動き出す感じになるかと思います。

バリデーションチェックが完了したら、システムはメアド重複を確認して、問題なければ従業員を登録して、システムは完了画面を表示させます。

おそらくこれで、従業員登録に関する基本コースのロバストネス図は完了だと思います。

次の回では、代替コースのロバストネス図を追加していこうと思います。

ユースケース駆動開発を試してみる(基本コース)

基本ユースケースで作成したユースケースです。

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは従業員データを保存する。システムは完了画面を表示する。

今回は、ユースケース駆動を参考にしながら、代替コースを考えていこうと思います。

代替コースとは

基本コースでは、ユーザーはこちらが意図した通りの動きや内容を入力しているという暗黙の世界があります。 しかし、実際にユーザーはこちらが意図した通りに動かないなんてケースもある話だと思います。

そこで、こちらが意図しないケースを考えていくのが、代替コースでのメイントピックになります。

早速考えてみる

まずは、このユースケース図では、ログインされている前提で話が進んでいますが、ログインをしていないケースがあるかもしれません。ので、ユースケースの代替コースに下記内容が追加されますね

  • ログインしていない場合 :

ログインしていない場合は、ログイン画面に飛ぶのが一般的かなと思うので、それをそのまま記載してみましょう。

  • ログインしていない場合 : ログイン画面にリダイレクト

続いて、『問題分析』で出した従業員クラスから、考えてみましょう。

まずは、この従業員は名前と権限を持っています。代替コースでログインが出てきたということは、何かしらの情報でログインをするわけですね。

今回はこれは、メールアドレスとパスワードでログインできるようにしようと思います。よって、このクラス図は下記画像のようになると思います。

管理者は、これら情報を使ってユーザーの登録をするようになると思います。今回は初回パスワードはシステム側で作って、初回ログイン時にユーザーがパスワードを変えるような設定にしようと思います。

そうなると、従業員登録時に

  • 従業員名
  • メールアドレス
  • 権限

これらを入力します。これらを普通に入力されないケースとして

  • 従業員名、メールアドレス、権限が入力されていない
  • 従業員名、メールアドレス、権限に非常に長い値が入力されている

などが考えられます。そのため、これらも代替コースに入ると思います。

  • ログインしていない場合 : ログイン画面にリダイレクト
  • 従業員名、メールアドレス、権限が入力されていない:再度入力させる
  • 従業員名、メールアドレス、権限に非常に長い値が入力されている:こちらも再度入力させる

こうなるのかなと。

また、従業員のメールアドレスは、会社の中では一人一個で重複は発生しないものになっています。なので

  • ログインしていない場合 : ログイン画面にリダイレクト
  • 従業員名、メールアドレス、権限が入力されていない:再度入力させる
  • 従業員名、メールアドレス、権限に非常に長い値が入力されている:こちらも再度入力させる
  • 既に同じメールアドレスが登録されている:再度入力させる

こんな感じになりますかね。

ユースケースを振り返る

基本コース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは従業員データを保存する。システムは完了画面を表示する。

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • 従業員名、メールアドレス、権限が入力されていない:再度入力させる
  • 従業員名、メールアドレス、権限に非常に長い値が入力されている:こちらも再度入力させる。

代替コースをブラッシュアップしたので、基本コースもブラッシュアップしてみましょう。

バリデーションルール

  • 従業員名、メールアドレス、権限が入力されていない:再度入力させる
  • 従業員名、メールアドレス、権限に非常に長い値が入力されている:こちらも再度入力させる。

この代替コースについて考えてみます。

従業員名

従業員名のバリデーションルールですが、思い当たる感じだと

  • 1文字以上20文字以内くらい(今のところそんな感じがします)
  • 文字列
  • 入力必須

多分こんな感じですかね。長さは結構適当に決めてます

メールアドレス

メールアドレスのバリデーションルールは、思い当たる感じだと

  • 1文字以上100文字以内くらい(今のところそんな感じがします)
  • メールアドレス
  • 入力必須

多分こんな感じですかね、こちらも長さは適当に決めてます

権限

権限に関しては、

  • 文字列
  • 管理者、従業員、閲覧者のどれか
  • 入力必須

このようになるかと思います。

これらバリデーションルールも一応追加しておいてもいいかなと思いました。

ユースケースのブラッシュアップ

バリデーションルールで浮かんできたものを、ユースケースに反映させていきます。

基本コース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは、下記バリデーションを実施する

  • 従業員名:入力必須、文字列、1文字以上20文字以内
  • メールアドレス:入力必須、メールアドレス、1文字以上100文字以内、重複していないか
  • 権限:入力必須、文字列、管理者、従業員、閲覧者のどれか

システムは従業員データを保存する。システムは完了画面を表示する。

代替コース

  • ログインしていない場合 : ログイン画面にリダイレクト
  • バリデーションエラー:再度入力させる。

多分こんな感じになるかなと思います。

多分この章はこんな感じでいいかなと思います。個人的にはもうアプリ作れそうなのですが、ロバストネス分析くらいまで流行ってから、ソースコードを書いていこうと思います。

ユースケース駆動開発を試してみる(基本コース)

会社で起こっている、アカウント管理問題について、ユースケース駆動を用いて開発を進めてみようかなと思います。

 問題分析で登場したアクターは

でした。それぞれのアクター別にユースケースを考えてみます。

管理者のユースケース

管理者のユースケースですが、ざっくり考えて下記図のようなると思います。

また、会社には従業員が新たに入ってきたり、いなくなったりすることがあると思います。そうなると、従業員に関するユースケースも発生してきますね。

ちょっとユースケースが多くなってきたので、何かしらでまとめてみます。

では、とりあえず従業員管理パッケージから紐解いて行っています。

従業員管理

従業員管理は

  • 登録
  • 検索
  • 更新
  • 削除

これらユースケースがあります。CRUDですね。

従業員登録

では、従業員登録から考えてみます。

ここからは、書籍『ユースケース駆動開発実践ガイド』を参照にユースケースをブラッシュアップしていきます。

まずは、従業員登録をするにあたって、管理者はログインをしていなければなりません。そのため、ログインに関する記載をします。

管理者が新規従業員を登録する場合、まずは従業員一覧にある『追加』みたいなボタンを押した時に追加されるようにしてみます。

ので、ユースケース

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。

みたいなところからスタートですかね。次に、登録画面が表示されるようにしたいので、

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。

みたいになるかなと思います。次に管理者は新規追加する従業員の情報を入力します。問題分析の章でサクッと作ったクラス図には

  • 従業員ID
  • 名前
  • 権限

がありました。ので、まずはこれら情報が入力できなければなりません。また、加えて従業員がこれから作るアプリケーションにログインできなければならないため、ログイン情報も今回はここに持たせようと思います。よって、入力内容は

  • 従業員ID
  • 名前
  • 権限
  • メールアドレス

になると思います。パスワードはメール飛ばしてユーザーに入力してもらうか、システムで適当に発行するか、後で考えることにします。また、IDシステムで発行するようにします。はよって、ユースケースの続きは

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。

みたいになるかなと思います。そしたら、『登録する』みたいなボタンをクリックして登録されることにしようと思うので、

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

みたいな感じになりそうですね。

続いて、システム側の話をメインにしていきます。最終的な目的地は、従業員の登録になります。登録をするにあたって

みたいな作業が必要になると思います。まずは、システムは入力内容を受け取らないといけないので、それを明記しています。

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。

こんな感じですかね。とりあえず細かな処理は置いておいて、実際にデータが保存されます。

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは従業員データを保存する。

最後に完了画面やポップアップなどの通知を送るのが重要だと思うので、それも書きましょう。

管理者は、従業員一覧画面にある『追加』ボタンをクリックする。システムは登録画面を表示する。ユーザーは

  • 従業員名
  • メールアドレス
  • 権限

これらを入力する。管理者は『登録する』をクリックする。

システムは、フォームの入力内容を受け取る。システムは従業員データを保存する。システムは完了画面を表示する。

これで一旦は問題なくユースケースが記載できたのではないでしょうか。

次の記事で、基本コースのブラッシュアップと代替コースの作成をしていこうと思います。

問題分析

起こっている問題について分析してみます。とりあえず登場人物と概念の整理。

登場人物と概念

会社の中で使用されている様々なアカウント管理が問題である。従業員はそのアカウント情報を使って様々なものやサービスを利用します。

ただ、全ての従業員が全てのアカウント情報を知っているわけではなく、自分が担当している?従事している業務に関するアカウント情報のみを知っています。

※アカウントをユースケースで書いてるのすみません。

また、新規従業員や新規インターン・アルバイトはアカウント情報を持っていないケースもあります。

概念と登場人物の概要はこんな感じかなと思います。

従業員を素因数分解する

従業員と一言で言っても様々な従業員がいます。

  • アカウントを発行、管理する従業員
  • 発行されたアカウントを閲覧する従業員
  • 発行されたアカウントを閲覧するインターン・アルバイト

などなど、様々です。そうなると、従業員は

これらに分類できると思います。

アカウントを素因数分解してみる

ざっくりですが、これは色々なアカウント情報がありますが、基本的には

  • ログインURL
  • Id
  • Password

これらに分けることができると思います。

とりあえず構成要素をまとめてみる

多分こんな感じになるんですかね。この問題について、従業員はこれらアカウント情報がないと、従業員としては存在できますが、仕事はできません。ので、

多分こうなるのかな??と思ってます。でも、従業員がいないとアカウントってオブジェクトは生まれないですよね〜。

依存関係はない?ってあるんですかね?もしくは言語化できてないだけなのかもしれない...

この記事はここらへんにして、次からはユースケースを考えてみようと思います。 問題点もブラッシュアップされるかもしれない。

気になる技術でアカウント管理アプリを作ってみる

会社で問題になっているアカウント管理問題について、勝手に個人で考察してみます。

現状の問題点

様々なアカウント管理をスプレッドシートで管理している状態です。これは良くはない気がするが、大企業でもない限りあるあるなのではないかと。そんなことなかったらすみません。

定着率?みたいなのが高い社員だけの場合は、この管理でも問題ないですが問題はアルバイトやインターン生の入れ替わりがあることです。

ありがたいことに定着が長い子は定着してくれるけど、そうでない子は初日で辞めるとかもありました。すごいですよね。

そのケースは置いておいて、色々なログイン情報を渡した後に、辞めるとかってなると意外と大変でした。みなさんどうやって管理してるんでしょうか。我もその辺の管理方法勉強しないといけないなと日々思っております。

誰のどのアカウント情報を提供したか、管理コストが非常に高い

色々なものを使っていると、その分アカウント情報の管理コストってすごい高いような気がします。何かしらのサービスとか使えば解決かもしれませんが、それの導入コストを話すと前向きにはならず。

そこで、個人的にどんなコードを実装すれば、その問題を解決できるかを考えてみました。

これはあくまで個人開発

これはあくまで個人開発です。実際に会社で使うとかそういうものではなく、世の中のアカウント管理サービスはどんなことをしているのかを考えてみたくなり、実装してみているという感じになります。

あらかじめご了承いただいた上で、続きをご覧いただければ幸いです。

使ってみたいものや思想

これらは書籍を購入して、実際に面白いなと思ったものたちです。あとはTwitterでよくみた。

個人開発なんでこんな志望動機ですが、暖かい目で見守ってください。