「要求仕様書」を書いてみる
『「要求仕様書」を書いてみる』は、移転しました。
移転先 『「要求仕様書」を書いてみる』

2008/05/02 
Amebaでブログを始めよう!

【す】 スローガン 100回言うより 具体策

-企画-

-目次-


スローガン 100回言うより 具体策





「今年こそ英語を身に付けよう」


「もっと売上げを上げよう、がんばろう!」



抽象的なスローガンを掲げても、達成できることは無い。


何をすれば良いのか?

成果はあがっているのか?


が、分からないからだ。

つまり、要求のみで仕様がないからだ。


必要な事は、

 目標を具体的に

 実施すべきことを具体的に

することだ。


エンジニアかるた -目次ー

-企画-

エンジニアかるた

目次


 
   
   
   
   
 
   
   
   
   
 
   
  スローガン 100回言うより 具体策
   
   
 
   
   
   
   
 
   
   
   
   
 
   
   
   
   
 
   
   
   
   
 
   
   
 
   
   
   
   
 

エンジニアかるた -企画-

★SEの残業しない仕事術★ブログ:キーフレーズをたくさん持つ で刺激を受け、

自分なりのフレーズを持ちたいと思った。


キーフレーズ集。 どうせ作るなら、ゲーム要素も加えて、「かるた」にしよう。


で、要求仕様書を書いてみる。


要求 CARD01 エンジニアかるたを考える
  理由 必要なメソッドを忘れないようにしたい。
チームで仕事をしているときに気楽に言い合えるようなものしたい。
  説明  
CARD01.01 エンジニアに必要な習慣など、メソッドをフレーズにする。
CARD01.02 「あ」~「わ」まで、44文字を頭文字につかう
「を」、「ん」は使わない
CARD01.03 5、7、5調の川柳のスタイルにする
CARD01.04 フレーズと補足を記事にする
CARD01.05 頭文字が重複してもかまわずに、思いついたフレーズを記事にする。

実行しながら、様子をみる。



■トラックバック

★SEの残業しない仕事術★ブログ:キーフレーズをたくさん持つ

パフォーマンス・マネジメント―問題解決のための行動分析学

島宗 理
パフォーマンス・マネジメント―問題解決のための行動分析学

「なか見!検索」で、一章の半分ぐらい見ることができた。


部下にうまく仕事をさせるための手法として、

チェックリストがあげられた。


ただ、それだけか? と思う。


確かに有効な手段だとは思うが・・・。 それだけか?


ここで、いうチェックリストは、単に

 ・仕事の項目

 ・提出期限

があげられているだけでなく、

 ・仕事を進める際の細かな注文

が付け足されたものだ。


まるで、要求仕様書ではないか!

興味が沸いてきた。


また、提出する前に

 ・仕事が完了したか、チェックリストで確認すること

 ・上司も同じチェックリストを使い仕事をする

が大事だという。


「上司も同じチェックリストを使う」には、おもわず拍手である。

やはりこれが、足りなかったのだと思うことを経験していたからである。


上司も同じ様に仕事をしているのを見て、

部下は

 ・手を抜けない

 ・仕事をやらされているのではなく参加している

と思うのだろう。


部下は、良くも悪くも「上司の背中を見て」仕事をしているものだと思う。(無意識に)

なかには、例外はあると思うが・・・。


他には、どんな手法があるのか、すごく興味が沸いて購入した。


行動を変えようとしても、

 ・注意では人は動かない、変わらない。

 ・理想を掲げても人は動かない。

 ・意思だけでは行動を制御できない。


行動を変えるには、

 ・分析(ABC分析)

 ・原理に沿った手段を用いて管理

が、必要だ。


自分自身を思うように制御するためにも役立ちそうだ。

トレーニング・サポート・ツール -仕様を記述-

トレーニング・サポート・ツール -要求の作成- の続き


仕様を記述した。


要求 TRNG01 トレーニングの履歴を残す
  理由 トレーニングの履歴を簡単に残したい。
履歴を残すことでヤル気を維持したい。
  説明  
  要求 TRNG01_01 実行した日時、トレーニングの時間を記録する
    理由 何月何日、何時にそのトレーニングを行ったか記録したい
    説明  
  TRNG A列にトレーニングの開始日時、時間を記録する
  TRNG B列にトレーニングの終了日時、時間を記録する
  要求 TRNG01_02 トレーニングの総合時間を記録
    理由 時間の蓄積が履歴に残ると、ああっ、これだけの時間トレーニングしたんだなと自信、継続の動機になる
    説明  
  TRNG データとして取った後、集計する。 
  要求 TRNG01_03 Excelのシート上にデータを記録する
    理由 データのグラフ化などの加工に慣れているから
    説明  
  TRNG Excelのマクロでプログラム化する
  TRNG マクロ起動時にダイアログを表示し、以降トレーニング中は、ダイアログ上で操作を行う
  TRNG データを記録するシートを選択、新規作成する
  要求 TRNG01_04 コメントを残す
    理由 トレーニングの日記的なものとして使いたい。
    説明  
  TRNG ダイアログ上にコメントを入力する欄を設ける
  TRNG トレーニング終了時にコメントをシートに記録する
  TRNG C列にコメントを記録する
要求 TRNG01 トレーニングの時間を管理する
  理由 時間の管理を時計を使った面倒なものから、あらかじめ設定したもので簡単に実行できるようにしたい。
  説明  
  要求 TRNG02_01 一定時間行うトレーニングを管理
    理由 トレーニング中に時間の計算とかしなくて済むように後何分か分かり、規定時間が済んだか簡単に分かるようにしたい
    説明  
  TRNG 時間を設定する
  TRNG 入力範囲は1秒~10時間
  TRNG 入力形式は、[hh:mm:ss]
  TRNG 開始ボタンを設ける
  TRNG 経過時間を表示する
  TRNG 残り時間を表示する
  TRNG 途中終了ボタンを設ける
  TRNG 設定した時間をトレーニング時間として記録する
  TRNG 途中終了した場合は、それまでに経過した時間をトレーニング時間として記録する
  要求 TRNG02_02 一定時間内に何回行えるかを管理
    理由 ある動作が、回を重ねる毎に速く出来るようになる様子を観察したい
    説明  
  TRNG 時間を設定する
  TRNG 入力範囲は1秒~10時間
  TRNG 入力形式は、[hh:mm:ss]
  TRNG 開始ボタンを設ける
  TRNG 経過時間を表示する
  TRNG 残り時間を表示する
  TRNG 1回終了ボタンを設ける
  TRNG 各回毎の経過時間を表示する
  TRNG 平均時間を表示する
  TRNG 途中終了ボタンを設ける
  要求 TRNG02_03 トレーニングのタイプをプログラム可能
    理由 様々なトレーニングに対応したい
    説明  
  TRNG プログラム用のシートを設ける。
  TRNG シート名をプログラム名とする
  TRNG A列をトレーニングの項目名とする
  TRNG B列をトレーニングのタイプとする
  TRNG C列を無条件に開始するか、ダイアログを表示するかの切替えフラグとする
  TRNG D列以降をB列で設定したタイプのプロパティとする

後で、見直す。

トレーニング・サポート・ツール -要求の作成-


中国語の習得 のトレーニングを記録するツールが欲しくなった。

どんな機能が欲しいのか要求の作成をした。


要求 TRNG01 トレーニングの履歴を残す
  理由 トレーニングの履歴を簡単に残したい。
履歴を残すことでヤル気を維持したい。
  説明  
  要求 TRNG01_01 実行した日時、トレーニングの時間を記録する
    理由 何月何日、何時にそのトレーニングを行ったか記録したい
    説明  
  要求 TRNG01_02 トレーニングの総合時間を記録
    理由 時間の蓄積が履歴に残ると、ああっ、これだけの時間トレーニングしたんだなと自信、継続の動機になる
    説明  
  要求 TRNG01_03 Excelのシート上にデータを記録する
    理由 データのグラフ化などの加工に慣れているから
    説明  
  要求 TRNG01_04 コメントを残す
    理由 トレーニングの日記的なものとして使いたい。
    説明  
要求 TRNG01 トレーニングの時間を管理する
  理由 時間の管理を時計を使った面倒なものから、あらかじめ設定したもので簡単に実行できるようにしたい。
  説明  
  要求 TRNG02_01 一定時間行うトレーニングを管理
    理由 トレーニング中に時間の計算とかしなくて済むように後何分か分かり、規定時間が済んだか簡単に分かるようにしたい
    説明  
  要求 TRNG02_02 一定時間内に何回行えるかを管理
    理由 ある動作が、回を重ねる毎に速く出来るようになる様子を観察したい
    説明  
  要求 TRNG02_03 トレーニングのタイプをプログラム可能
    理由 様々なトレーニングに対応したい
    説明  

これに対する仕様は、また後で・・・。続き

要求仕様書の表示方法 -マクロのコード-

要求仕様書の表示方法 -その5- のマクロは、以下の通り




Option Explicit

Dim strFileName As String ' OPENするファイル名(フルパス)

Sub HTMLforSpex_31()

'------------------------------------------------------
' 選択範囲が複数あるか確認する
'
If Selection.Areas.Count > 1 Then
MsgBox ("選択範囲は1つだけにしてください。")
Exit Sub
End If

'------------------------------------------------------
' ファイル名の入力
'
If SetFileName() = False Then
Exit Sub
End If

'------------------------------------------------------
' ファイル番号の取得
'
Dim intFF As Integer ' FreeFile値
intFF = FreeFile
Open strFileName For Output As #intFF

'------------------------------------------------------
' HTMLの先頭部分を出力
'
OutBeginHTML intFF


Dim iRow As Integer
Dim iCol As Integer
Dim iRowStart As Integer
Dim iRowEnd As Integer
Dim iColStart As Integer
Dim iColEnd As Integer
Dim theSheet As Worksheet

'------------------------------------------------------
'縦横の開始、終了位置を取得
'
Dim theCell As Range
Set theSheet = ActiveSheet
iRowStart = Selection.Areas(1).Row
iRowEnd = iRowStart + Selection.Areas(1).Rows.Count - 1
iColStart = Selection.Areas(1).Column
iColEnd = iColStart + Selection.Areas(1).Columns.Count - 1


'------------------------------------------------------
'個別の幅、全体の幅を取得
'
Dim iColWidth() As Integer
ReDim iColWidth(Selection.Areas(1).Columns.Count)
Dim iWidth As Integer
Dim i
iWidth = 0
i = 0
For iCol = iColStart To iColEnd
Set theCell = theSheet.Cells(iRowStart, iCol)
iWidth = iWidth + theCell.Width
iColWidth(i) = theCell.Width
i = i + 1
Next


'------------------------------------------------------
'テーブルタグと個別の幅を設定するCOLタグを出力
'
Dim strTable As String
strTable = "<table cellspacing=0 class=xl_table " + _
"style='border-collapse:collapse;table-layout:fixed;" + _
"width:" + Str(iWidth) + "pt;' >"
Print #intFF, strTable

For i = 0 To Selection.Areas(1).Columns.Count - 1
Print #intFF, "<col style='width:" + Str(iColWidth(i)) + "pt' >"
Next


'------------------------------------------------------
' セル全体を2重ループで回す
'
For iRow = iRowStart To iRowEnd
For iCol = iColStart To iColEnd
'----------------------------------------------
'個別にセルを取得
Set theCell = theSheet.Cells(iRow, iCol)

'----------------------------------------------
'
'
If iCol = iColStart Then
'out tr
Print #intFF, "<tr>"
End If

'----------------------------------------------
'セル毎に TD タグの出力
' セルの連結、罫線の位置、背景色を反映する
'
If theCell.MergeCells Then
'--- セルが結合されていた際の処理 ---
iCol = iCol + theCell.MergeArea.Count - 1
Print #intFF, "<td colspan=" + Format(theCell.MergeArea.Count) + _
" class=xl_cell" + _
Format(GetLineOr(theSheet, iRow, iCol, theCell.MergeArea.Count), "00") + _
" style='" + GetBackGround(theCell) + "'> "
Else
Print #intFF, "<td class=xl_cell" + Format(GetBorderStyle(theCell), "00") + _
" style='" + GetBackGround(theCell) + "'> "
End If

'----------------------------------------------
' セルの内容を出力
' HTML用に変換して出力
'
Print #intFF, GetCellValue(theCell)

'----------------------------------------------
' タグの終了
'
Print #intFF, "</td>"
If iCol = iColEnd Then
'out /tr
Print #intFF, "</tr>"
End If

Next
Next

'------------------------------------------------------
'テーブル、HTMLの終了
'
Print #intFF, "</table>"
OutEndHTML intFF

Close #intFF

End Sub

'==========================================================
'ダイアログを表示してファイル名を入力
'
Private Function SetFileName() As Boolean
Const cnsTITLE = "HTMLファイル出力処理"
Const cnsFILTER = "HTMLファイル (*.htm;*.html),*.htm;*.html"
Dim xlAPP As Application ' Applicationオブジェクト
Dim blnRes As Boolean

' Applicationオブジェクト取得
Set xlAPP = Application
' 「名前を付けて保存」のフォームでファイル名の指定を受ける
strFileName = xlAPP.GetSaveAsFilename(InitialFileName:="SAMPLE.html", _
FileFilter:=cnsFILTER, Title:=cnsTITLE)
' キャンセルされた場合は以降の処理は行なわない
blnRes = True
If StrConv(strFileName, vbUpperCase) = "FALSE" Then
blnRes = False
End If
SetFileName = blnRes
End Function

'==========================================================
'セルの内容を取得する
' HTML用に変換
'
Private Function GetCellValue(theCell As Range) As String
If theCell.Value = "" Then
GetCellValue = " "
Exit Function
End If

Dim strRes As String
Dim strChar As String

Dim iLen As Integer
Dim i As Integer


strRes = ""
iLen = Len(theCell.Value)

For i = 1 To iLen
strChar = Mid(theCell.Value, i, 1)
Select Case Asc(strChar)
Case Asc("<")
strRes = strRes + "&lt"
Case Asc(">")
strRes = strRes + "&gt"
Case Asc("&")
strRes = strRes + "&amp"
Case Asc(" ")
strRes = strRes + "&nbsp"

Case &HD, &HA
strRes = strRes + "<br>"
Case Else
strRes = strRes + strChar
End Select
Next
GetCellValue = strRes
End Function

'==========================================================
'罫線の有り無しを数値に変換
' HTML用に変換
'
Private Function GetBorderStyle(theCell As Range) As Integer
Dim intBorderStyle As Integer

If theCell.Borders(xlEdgeTop).LineStyle = 1 Then
intBorderStyle = 1
Else
intBorderStyle = 0
End If
If theCell.Borders(xlEdgeRight).LineStyle = 1 Then
intBorderStyle = intBorderStyle + 2
End If
If theCell.Borders(xlEdgeBottom).LineStyle = 1 Then
intBorderStyle = intBorderStyle + 4
End If
If theCell.Borders(xlEdgeLeft).LineStyle = 1 Then
intBorderStyle = intBorderStyle + 8
End If
GetBorderStyle = intBorderStyle


End Function

'==========================================================
'HTMLの先頭部分をファイルに出力
'
Private Sub OutBeginHTML(intFF As Integer)
Print #intFF, "<html>"
Print #intFF, "<head>"
Print #intFF, "<style>"
Print #intFF, "<!--table"
OutStyle intFF
Print #intFF, "-->"
Print #intFF, "</style>"
Print #intFF, "</head>"
Print #intFF, "<body>"


End Sub

'==========================================================
'HTMLの終了部分をファイルに出力
'
Private Sub OutEndHTML(intFF As Integer)
Print #intFF, "</body>"
Print #intFF, "</html>"


End Sub

'==========================================================
'スタイルシート部分をファイルに出力
'
Private Sub OutStyle(intFF As Integer)
'------------------------------------------------------
'テーブル用のスタイルを定義
'
Print #intFF, ".xl_table" + vbCr + vbLf + "{" + vbCr + vbLf
Print #intFF, "padding-top:1px;" + vbCr + vbLf + _
"padding-right:1px;" + vbCr + vbLf + _
"padding-left:1px;" + vbCr + vbLf + _
"color:windowtext;" + vbCr + vbLf + _
"font-size:9.0pt;" + vbCr + vbLf + _
"font-style:normal;" + vbCr + vbLf + _
"text-decoration:none;" + vbCr + vbLf + _
"vertical-align:bottom;" + vbCr + vbLf + _
"border:solid 0px;" + vbCr + vbLf '0にしないと、テーブルの外枠が表示される。
Print #intFF, "}" + vbCr + vbLf

'------------------------------------------------------
'上下左右の罫線有無で16個スタイルを定義
'
Dim i As Integer
For i = 0 To 15

Print #intFF, ".xl_cell" + Format(i, "00") + vbCr + vbLf + "{"
Print #intFF, "padding-top:1px;" + vbCr + vbLf + _
"padding-right:1px;" + vbCr + vbLf + _
"padding-left:1px;" + vbCr + vbLf + _
"font-size:9.0pt;" + vbCr + vbLf + _
"font-style:normal;" + vbCr + vbLf + _
"text-decoration:none;" + vbCr + vbLf + _
"text-align:left;" + vbCr + vbLf + _
"vertical-align:top;" + vbCr + vbLf + _
"color:windowtext;" + vbCr + vbLf + _
"font-size:9.0pt;" + vbCr + vbLf + _
"font-weight:400;" + vbCr + vbLf

Dim strBoarder As String
strBoarder = ""
If i And &H1 Then
strBoarder = "border-top:1.0pt solid windowtext;" + vbCr + vbLf
Else
strBoarder = "border-top:none;" + vbCr + vbLf
End If
If i And &H2 Then
strBoarder = strBoarder + "border-right:1.0pt solid windowtext;" + vbCr + vbLf
Else
strBoarder = strBoarder + "border-right:none;" + vbCr + vbLf
End If
If i And &H4 Then
strBoarder = strBoarder + "border-bottom:1.0pt solid windowtext;" + vbCr + vbLf
Else
strBoarder = strBoarder + "border-bottom:none;" + vbCr + vbLf
End If
If i And &H8 Then
strBoarder = strBoarder + "border-left:1.0pt solid windowtext;"
Else
strBoarder = strBoarder + "border-left:none;"
End If

Print #intFF, strBoarder
Print #intFF, "}"


Next
End Sub

'==========================================================
'HTMLの終了部分をファイルに出力
'
Private Function GetLineOr( _
argSheet As Worksheet, argRow As Integer, _
argCol As Integer, argCount As Integer) As Integer

Dim theCell As Range
Dim i As Integer
Dim res As Integer

res = 0
For i = argCol To argCol + argCount - 1
Set theCell = argSheet.Cells(argRow, i)
res = res + GetBorderStyle(theCell)
Next

GetLineOr = res
End Function

'==========================================================
'背景色を取得
'
Private Function GetBackGround(argCell As Range) As String
Dim strRes As String
Dim strColor As String
Dim strZero As String
Dim strR As String
Dim strG As String
Dim strB As String

strColor = Hex(argCell.Interior.color)
strZero = Right("000000", 6 - Len(strColor))
strColor = strZero + strColor
'
strR = Mid(strColor, 5, 2)
strG = Mid(strColor, 3, 2)
strB = Mid(strColor, 1, 2)


strRes = "background:#" + strR + strG + strB
GetBackGround = strRes
End Function

使い方は:

 ・出力したい部分を選択する。

 ・マクロ 「HTMLforSpex_31」を実行する。


要求仕様書の表示方法 -その5-

要求仕様書の表示方法 -その4- から2ヶ月

「Webページとして保存」、あまり使い勝手が良くない。


ExcelのマクロでHTMLのコードを出力するようにする。


要求仕様書は、以下の通り


要求 REQ01 Excelで作成した要求仕様書からHTMLコードを出力する。
  理由 Webファイルで保存してもその後の手間が面倒だから。
  説明 VBAのスクリプトで実現する。
  要求 REQ01_01 HTMLのコードは、スタイルシート+テーブル用コードで出力する
    理由 スタイルシートを使ったほうが、全体のコード量が少なくなりそうだから
    説明 スタイルシート部分をブログのCSSに貼り付ける。
テーブル部分をブログの記事に貼り付ける
  REQ01_01.01 以下の構成でHTMLファイルを出力する
 <HTML>
  <STYLE> 
    スタイルシートのコード
  </STYLE>

  <TABLE>
    テーブルのコード
  </TABLE>
 </HTML>
  REQ01_01.02 ファイル名を入力する
  REQ01_01.03 選択した部分をHTML出力する
  REQ01_01.04 複数個の範囲を選択した場合は実行しない
  要求 REQ01_02 要求仕様書のフォーマットに特化するが、ある程度は、一般性を考慮する
    理由 汎用性を高めると作成に手間がかかる。
まずは、要求仕様書のフォーマットを出力できるようにしたい
    説明  
  REQ01_02.01 フォントサイズは9ptに限定する。
  REQ01_02.02 様々な設定は”Webページで出力”の値を参考にする
  REQ01_02.03 マイクロソフトの拡張仕様は排除する
  REQ01_02.04 罫線の太さは全て「1.0px」とする
  REQ01_02.05 セルの結合は、横方向のみサポートし、縦方向はサポートしない
  REQ01_02.06 各セルの横幅は、プロパティから取得し反映する
  REQ01_02.07 各セルの背景色は、プロパティから取得し反映する

この要求仕様書は、マクロで出力したものを貼り付けてある。

「Webページとして保存」よりは、手間が少ない。

しばらく、テストを兼ねて使ってみることにする。

Life Hacks PRESS ~デジタル世代の「カイゼン」術

田口 元, 安藤 幸央, 平林 純, 角 征典, 和田 卓人, 金子 順, 角谷 信太郎
Life Hacks PRESS ~デジタル世代の「カイゼン」術~

GTDを知ることが目的だったが、他にも

 ・プレゼンが簡単にうまくなる

 ・自分のための情報整理

 ・いつでもどこでも文房具

 ・勉強会のススメ

等、琴線にふれる項目があったので購入した。


兎にも角にも、GTDを運用し始めた。

大きな効果といえるかどうか分からないが、

 ・やるべき事

 ・やりたい事

 ・先延ばしにしている事

 ・その他、気になる事

を書き出したことで、とりあえずホッとしている。


この気分になる事が、まずは、必要なのだろう。

中国語の習得 -中国語用の耳をつくる-

中国語の習得 -トレーニングの意味- に続いて、『LANG01_01:中国語用の耳をつくる』を考える。


耳->入力ドライバ->キャッシュ経路の構成

lang20060725

構成要素は、

 ・ゲート
 ・コンベア
 ・ピック&プレイス(コンベアからキャッシュへ)
 ・キャッシュ

である。



この経路がうまく動作するためには、

 ・ゲートを中国語用に十分に開き音を通過させ、
 ・入ってくる音に対し十分な速度で移動し(コンベアの役目)、
 ・コンベアで流されてきた音をくまなくキャッシュに取り出す(ピック&プレイスの役目)。

が必要となる。



慣れないうちは、

 ・ゲートが十分に開かず、中国語の音が内部に入ってこない。
 ・コンベアの速度が遅いので、入ってきた音がうまく乗らず、ぼろぼろこぼれてしまう
 ・ピック&プレイスの速度が間に合わず、音をコンベアから落としてしまう

 ・意味を解釈しようとして、コンベア、ピック&プレイスの速度が低下する。

が頻繁に発生する。



トレーニングを重ねていくと、


 ・意味は分からないが、音として頭に残る

 ・頭の中に音がこびりついている様な感じ

 ・発音出来そうな気がする


といった状態になる。





この経路の要求仕様書を記述してみた。



要求   中国語用の耳を構成
  理由 中国語の音をくまなく入力する
  説明  
  意味の解釈をしない
  説明 意味の解釈をすると経路の能力が低下する
  中国語に対し、ゲートを十分に開く
  入力される音に対し、コンベア速度が十分に速い
  コンベアで搬送される音に対し、ピック&プレイスの搬送能力が十分速い