fc2ブログ

無精で短気で傲慢なプログラマ

UNIX や web やプログラムの技術的なことを中心に。

web 開発のヒアリングシート/チェック項目

要件定義のヒアリングシートはいくつか見たことはあるが、web 開発に
特化したまともなヒアリングシートを見たことがないので作ってみた。
「サイトの目的は」などの上流部分はあえて省いて、機能・実装にフォーカスしている。

思いつくままに記述してみたが、結果としてはインターネット上の
コマース向けサイトに特化した形になった。

請負時のヒアリングシートと、発注時の要件伝達漏れチェックシートと、
開発時のレビュー観点の元ネタとして使えるといいなぁ。今後気づいた
ところがあれば追記していきます。

●2010/02/24 追加分。
- サイトメンテナンス時のアナウンス要否
  - メンテナンスページは「503 Service Temporarily Unavailable」を返すようにし、
   検索エンジンにキャッシュされないよう注意する。

●2007/08/23 追加分。
404/403/500 などのエラーページについて
  - できる限り ErrorDocument 404 http://example.com/error404.html などの絶対 URL
   ではなく、ErrorDocument 404 /error404.html と相対 URL で書く。
   参考: ErrorDocumentを絶対URLで書くのはやめようよ

●2007/07/22 追加分。
入力フォームについて。
 - 半角のみ・全角のみの場合は、ime-mode の active/inactive を設定する。disabled は
  設定しないことをおすすめする (メールアドレスを disabled にしてしまい
  日本語ドメインが入力できなくなる、といった事態は避けたい)。現時点
  では IE6/IE7 のみ。Firefox はバージョン3で対応予定 →参考

●2007/05/01 追加分。
  - ファイル一覧・CVS ディレクトリ・.htaccess・.htpasswd など、見えてはいけないファイルの隠蔽
    - ファイル一覧が見えてしまうようなら、とりあえず Options -Indexes。
    - さらに DirectoryIndex ディレクティブを適切に設定する。
    - CVS/ などの管理用ディレクトリは DirectoryMatch などで deny。
    - .ht から始まるファイルは、apache のデフォルト設定で <Files ~ "^\.ht"> されているので
     問題ないはずだが、誤って見えてしまっているサイトが結構ある。

●2007/04/22 追加分。
  - http://www.exmaple.com と http://exmaple.com のどちらが正式 URL かを明確に決める
   - いずれにしても、www あり・なしの両方でアクセス可能なようにする
   - たとえば www ありが正式な URL なら、www なしの方は www ありにリダイレクトする
   - URL をうろおぼえで入力する人や、印刷された URL を入力する際にwww 有無を
    間違えることは結構ある。間違った URL でも、とにかくサイトにたどりつける
    ようにはしておく。
   - www あり・www なしの両方でサイトが閲覧できるようにはしないこと。両方とも
    検索エンジンに拾われると、集客が分散してしまう。必ず片方はリダイレクトする。


----------- ここから ------------
●コンテンツ
- サイト内検索有無
- ランキング系コンテンツの有無
  - ランキング生成ロジックは?
  - リアルタイムに生成? バッチで生成?
  - 管理者がランキングを自由に設定できる必要あり?
- 画像・アイコン有無
  - flash の有無
  - マウスオーバー用の画像要否
  - img 要素の width/height 属性を付ける
   - 多種多様な画像サイズが存在し、なおかつ自動で更新されるような場合、
    width/height を事前に調べるバッチの要否を検討
  - 携帯端末用画像ファイル生成が必要か?
    - 端末ごとに、フォーマット・画像サイズに制限がある
  - favicon.ico
    - IE7 のタブに favicon が表示されるので、忘れずに作成したいところ。
- ヘッダ・フッタ有無/種類数
  - ヘッダ・フッタを表示しない例外ページはないか?
- RSS の有無
- 会員規約/利用規約の有無
- 会社概要の有無
- サイトマップの有無

●Web ポリシー
- 想定の回線速度
- 対象ブラウザ
  - IE6/IE7/Mozilla/Firefox/Safari/Opera/...
- Javascript 必須でよいか?
- cookie 必須でよいか?
- Javascript/cookie を解さないブラウザがきた場合、入り口ではじくべきか?
- 想定の画面解像度
  - ブラウザ左のツールバー・エクスプローラバーの存在を忘れずに
  - 画面横幅固定? 可変? 範囲指定? (max-width、min-width)
  - 画面横幅固定の場合、センタリング?
- web エンコーディング
  - 個人的には EUC-JP だが、使用したい文字によっては UTF-8 もあり。
  - 携帯なら実質 Shift_JIS
- 長い文字列 (ユーザが長い文字列や URL を入力した場合の対応)
  - Firefox はブロック要素を突き破ってレンダリングしてしまう (CSS の
   規格としては誤りではないが、これが原因でデザインが大崩れしたりして
   よくモメる)
   - 対策その1: css で word-break: break-all; overflow: hidden
    (Firefox では長い部分が隠れる。overflow: auto でスクロール
     バーを出すのもアリだろう)
   - 対策その2: 一定文字数ごとに、wbr 要素・ソフトハイフン (&shy;) の挿入
   - 参考: 長い文字列の改行方法 - wbr, &shy;, css
   - 参考: Firefox 3 の修正内容のご紹介 その3 ― URLも改行されるように
- リンクポリシー
  - 外部サイトに飛ぶ場合は target="_blank" とする? 同一ウィンドウに表示する?
- ポップアップ
  - ポップアップを実装する場合、ブラウザのポップアップブロック機能に邪魔
   されないよう気をつける (必然性のある場合のみ実装しよう)
  - ボタン押下でポップアップ表示 → ポップアップのウィンドウが背面に隠れる →
   再度ボタン押下、とした際、最前面に表示されるようウィンドウを focus() すること。
- 404/403/500 などのエラーページのカスタマイズ要否
  - できる限り ErrorDocument 404 http://example.com/error404.html などの絶対 URL
   ではなく、ErrorDocument 404 /error404.html と相対 URL で書く。
   参考: ErrorDocumentを絶対URLで書くのはやめようよ
- 機種依存文字の有無
- 携帯の場合、絵文字の有無 (キャリアごとに互換性がまったくなく、一から実装すると
 かなりしんどい。絵文字ライブラリの購入も検討するとよい)
- Google Analytics 設定要否
  - SSL の場合は https の方を読むよう注意
- Google Sitemap 設定要否

●入力フォーム
- 入力補完
  - 全角半角自動変換
  - 前後の空白・タブの自動除去 (メーラー・Excel からコピペした場合によく空白がつく)
- エラー時の挙動
  - Javascript によるチェック要否
  - エラー表示方法
    - 画面上部にまとめてエラー内容を表示する?
    - 各 INPUT 要素の上下にエラー内容を表示する?
- submit ボタン連続押下対策要否
  - うっかり連打した場合を考えると、2回目の処理がエラーとなり、
   「エラーです」と表示されるのはよろしくない。
- 固定幅フォント
  - メールアドレス入力フォームなどは font-family: monospace で固定幅フォントにする
   (カンマとドットを判別できない人が多いため)
- 半角のみ・全角のみの場合は、ime-mode の active/inactive を設定する。disabled は
 設定しないことをおすすめする (メールアドレスを disabled にしてしまい日本語ドメイン
 が入力できなくなる、といった事態は避けたい)。現時点では IE6/IE7 のみ。Firefox は
 バージョン3で対応予定 →参考
- モバイルの場合、input 要素に istyle, mode, format 属性を指定
 することで全角かな/半角カナ/英字/数字が指定可能。→参考
- input 要素の maxlength は指定しない
- チェックボックス・ラジオボタンには label 要素必須 (わたしの趣味)
- TEXTAREA には wrap="off" 必須 (わたしの趣味)

●メール
- メール送信有無
- 携帯にも配信するか?
  - キャリアに SPAM 判定されないための対策が必要。
    - 適宜 sleep を入れる?
    - 高速配信エンジンを利用する?
- エラーメール対処
  - エラーメールが返ってきたら、どうする?
    - ヘッダに X-HOGEHOGE-ID: などと独自ヘッダを付け、/etc/aliases 経由で
     エラーメールの X-HOGEHOGE-ID を解析するのが好き。
  - エラーメールを管理者がチェックする必要があるか?
- メールアドレス形式チェック
  - 携帯の場合、「顔文字@docomo.ne.jp」などのメールアドレスが平気で
   使用されるので、あまり厳密にチェックしない方がよい。
  - 携帯の場合、「.hoge@example.com」など RFC 違反のメールアドレスが
   利用可能なため、あまり厳密にチェックしない方がよい。
  - Postfix はデフォルトではハイフンから始まるメールアドレス宛に
   送信しないことに注意 (RFC 的にはハイフンで始まっても問題ない)。
   allow_min_user=yes で送信可能。
- メールのエンコーディング
  - ISO-2022-JP が無難だが、半角カナを含む場合は要検討
  - UTF-8 で送る場合は、配信先メーラーの対応状況をチェック
- メールマガジン有無
  - ユーザごとに異なる文面のメールを送る?
    - 冒頭に「○○さん」と顧客名を出す?
    - リンク押下を追跡できるよう、メール中の URL に一意なパラメータをつける?
  - 配送予約要否 (n日の AM 9:00 から送信開始、など)
  - 夜間配送 OK?
    - 携帯電話の場合、夜間のメール送信はクレームにつながる
- 1行あたりの文字数
  - sendmail だと確か 1000バイトで強制的に改行を入れるはず
  - 1行が長い CSV ファイルなどをメールでそのまま送る場合は注意

●CGM
- CGM の有無 (Consumer Generated Media: ユーザ参加型コンテンツ)
- 管理者による投稿内容チェックが必要か?
  - 事前チェック? 事後チェック?
  - ユーザからの通報機能は必要?
  - ブラックリスト方式による自動通報機能は必要?
- ユーザへの警告通知/投稿禁止/強制退会機能の有無

●SEO・SEM
- TITLE 要素
- META タグ
  - keywords 有無、動的/静的
  - description 有無、動的/静的
- URL 静的化 (foo?a=b&c=d ではなく foo/b/d とする、など)
- ALT 要素
- URL にキーワードを含める?
 (Amazon のように、商品名を URL エンコードして URL に埋めたりする?)
- モバイル検索に対応する?
  - DoCoMo と au が検索サービスを開始した。モバイルの検索は、今かなりアツい。

●アナウンス
- アナウンスは必要?
  - トップページのみ? 全ページに表示する?
- サイトメンテナンス時のアナウンス要否
  - 「現在メンテナンス中です」と表示するために、別マシンや別 web サーバを
   用意する必要がある?
  - メンテナンスページは「503 Service Temporarily Unavailable」を返すようにし、
   検索エンジンにキャッシュされないよう注意する。

●業務系
- ユーザ種別 (一般/会員/特別会員/代理店/管理者/スーパーユーザなど)
  - 何種類?
  - 役割は?
- 利用する場所は? (自宅/社内/営業所/出張先/取引先)
- 認証有無
  - パスワード忘れの場合は? リマインダ?
  - BASIC/Digest 認証?
  - セッション用 cookie 発行?
  - ルータによる IP アドレス制限?
- 承認フローが必要な部分は? (上司が承認ボタンを押さないと公開されないなど)
- マスタは?
  - どんな種類のマスタがある?
    - 部門マスタ/取引先マスタ/担当者マスタ
    - 商品マスタ/在庫マスタ
    - 郵便番号マスタ
    - 銀行マスタ (金融機関コードなど)
    - 営業日マスタ
    - 商品区分マスタ
    - 消費税マスタ
    - 和暦マスタ
  - マスタは初期設定のみでよい? 自動流通? 管理画面から参照/編集可能?
- Excel・Word・PowerPoint ファイルを生成する必要は?

●広告
- 広告有無 (サイトを広告媒体化する?)
- 予約機能有無 (n日の 0:00 から表示開始、など)
- 会員登録時に、ユーザの属性 (性別/年代/都道府県など) を尋ねておく必要あり?
- ページごとに、表示する広告を変えたい?
- ユーザの属性ごとに表示する広告を変えたい?
- PC/モバイルごとに表示する広告を変えたい?
- ランダム表示あり?
- テキスト広告? 画像広告? flash 広告?
- 表示条件は、期間設定? 表示回数? クリック回数?
- レポート機能有無
  - CSV を吐き、Excel で整形してもらう?

●ログ・監視系
- アプリ出力のログ内容は?
  - エラー発生時?
  - バッチの開始/終了メッセージは?
    - 開始/終了の際は、日時と「開始しました」「終了しました」をログに
     残そう。実行されていたという記録になるし、実行時間の計測もできる。
  - 管理者の操作を記録する?
- ログローテート方針は? 年月日付きのファイル名に出力する?
- ログのフォーマットをかっちり決めてしまおう。おすすめは↓ (grep したときに
 わかりやすいように作る)
  YYYY/MM/DD HH:MM:SS プログラム名(プロセスID) ステータス ログ内容
  例:
  2007/03/29 03:52:34 mailsend.pl(7223) INFO 開始しました
  2007/03/29 03:52:35 mailsend.pl(7223) INFO 商品発送メール送信。会員ID[2422] オーダID[39273]
  2007/03/29 03:52:35 mailsend.pl(7223) ERROR 発送状態ステータス異常。送信スキップ。会員ID[4522] オーダID[32324] ステータス[3]
  2007/03/29 03:52:36 mailsend.pl(7223) INFO 終了しました
- 保存期間は?
- 保存対象は?
  - アプリ出力のログ
  - SMTP サーバ等ミドルウェア出力のログ
  - OS 出力のログ
- ディスク容量監視/自動通知
- 負荷監視/自動通知

●インフラ/システム
- 自社内サーバ? ハウジング? レンタルサーバ? 共用サーバ?
- DB 有無
  - レプリケーション有無
  - トランザクションログ有無
- SSL 有無
  - 携帯端末の場合は対応認証局が少ないため、ベリサインにしておくのが無難
  - SSL から非 SSL ページの画像や CSS・Javascript などを呼ぶと、IE は警告が出る
   (共通ヘッダなどで src="http://example.com/common.css" などと書き、SSL
    ページからそのヘッダを使用すると警告のダイアログが表示される)
- RAID 有無
- バックアップ
  - タイミング (日次/週次/月次/年次)
  - 対象
    - プログラム
    - データファイル (自動生成される CSV など)
    - DB (フルダンプ/トランザクションログ)
  - バックアップ先 (自サーバ内/他サーバ/テープ)
- ドメイン取得有無
- サブドメイン設定有無
  - cookie 対応
- DNS 設定有無
  - http://www.exmaple.com と http://exmaple.com のどちらが正式 URL かを明確に決める
   - いずれにしても、www あり・なしの両方でアクセス可能なようにする
   - たとえば www ありが正式な URL なら、www なしの方は www ありにリダイレクトする
   - URL をうろおぼえで入力する人や、印刷された URL を入力する際にwww 有無を
    間違えることは結構ある。間違った URL でも、とにかくサイトにたどりつける
    ようにはしておく。
   - www あり・www なしの両方でサイトが閲覧できるようにはしないこと。両方とも
    検索エンジンに拾われると、集客が分散してしまう。必ず片方はリダイレクトする。
  - MX 設定
  - au 宛に送信したメールについて、エラーメールを受け取りたい場合は SPF 対応が必要
- 開発環境・テスト環境の有無
  - 開発環境・テスト環境・本番環境の 3本立てが望ましい (DB も別)

●セキュリティ
- XSS
  - 表示の際に、実体参照化すること
  - 実体参照化する文字は < > ' " &
  - あらゆる箇所で実体参照化するのを忘れずに。
    - input 要素の value 属性内、a 要素の href 属性内、javascript 内、
     title 要素、meta タグなどは、実体参照を忘れがち。
    - href="hoge?a=b&c=d" は誤り。href="hoge?a=b&amp;c=d" が正しい。
- SQL インジェクション
  - あらゆる箇所でバインドを使う
- コマンドインジェクション
  - sh を実行させない
- セッション固定化 (Session Fixation)
- CSRF
- パストラバーサル (ファイル名をパラメータで受けてしまい、../../data/hoge.csv などが
  漏洩してしまう
  - そもそもファイル名をパラメータで受けない。ファイル ID などを受け取り、
   ファイルID を元にファイル名を決定するようにする
- ドキュメントルート以下に、できるだけデータファイルを置かない
- 事前に漏れては困るコンテンツがあるか (URL が推測可能になっており、
  入試結果発表データなどが漏洩してしまわないか)
- サーバ内にアンチウィルスソフトが必要か
- DB などのパスワード
  - ソースファイルに直接記述しない
   (.htaccess などの設定ミスでソースが丸見えになっても大丈夫なようにする)
  - 設定ファイル化したとしても、ドキュメントルート以下に置かない
   (誤って Options +Indexes とした場合、設定ファイルを発見されてしまう)
- apache のバージョン隠蔽 (ServerTokens と ServerSignature の設定)
  - 個人的にはどうでもいいと思っているが、脆弱性診断などでは指摘されて
   しまうので。
- apache のマニュアルページ
  - http://example.com/manual/ で apache のマニュアルが見えてしまうと、
   ちょっと恥ずかしい。DocumentRoot は必ず /home/service/www/ などに
   変更しよう。
- ファイル一覧・CVS ディレクトリ・.htaccess・.htpasswd など、見えてはいけないファイルの隠蔽
  - ファイル一覧が見えてしまうようなら、とりあえず Options -Indexes。
  - さらに DirectoryIndex ディレクティブを適切に設定する。
  - CVS/ などの管理用ディレクトリは DirectoryMatch などで deny。
  - .ht から始まるファイルは、apache のデフォルト設定で <Files ~ "^\.ht"> されているので
   問題ないはずだが、誤って見えてしまっているサイトが結構ある。
スポンサーサイト



PageTop

コメント


管理者にだけ表示を許可する
 

素晴らしい

うわ、これはすごいですね。
早速Zeetaに取り込みます。
Zeetaってこんなんです⇒http://mm3991.qp.land.to/

タンジ | URL | 2008-01-17(Thu)00:33 [編集]