« 2010年1月 | トップページ | 2010年3月 »

2010年2月

構成管理の現状

最近、構成管理について何人かの人と話をする機会があったのだが、彼らの話に共通しているのは、構成管理はまだまだ開発現場に普及していないということだ。
Subversionなどのバージョン管理システムを使っていないどころか、開発チーム用の共有ディレクトリに一週間に一度でも最新の設計文書やソースコードのファイルを集めていれば良いほうで、個人用PCのローカルディスクにしか開発中のファイルがない、というやり方で開発を行っている組織も多いという。

そのような組織では構成管理ミスが原因の不具合が頻発し、金銭的な損失も大きいのだが、構成管理プロセスや手法を改善しようという動きは、何故か起こらないらしい。

正確には、個人的に改善しようという人はいるのだが、組織としては改善が進まないそうだ。

改善が進まない理由を調べてみると、その組織では、いままでのやり方で問題がないので、新しいやり方に変える必要がない、と考えている人が多いことに気づく。

なるほど、要は自分たちの組織で起こっていることを認識していないのだ。

不具合が起こっていることを組織として情報共有していないのかもしれないし、あるいは、何か問題があることはわかっていても、それが構成管理ミスに関係があることを認識できないのかもしれない。

こんな状態では、開発プロセス改善を進めようとしても、なかなか上手く進まないのも頷ける。開発プロセス改善のような高度なことをする前に、基本的なエンジニアリング技術の不足をなんとかしなければならないのだろう。

★WOZ★

| | コメント (0) | トラックバック (0)

OJTの前に教育が必要だ

ソフトウェアエンジニアの育て方について、人と話をする機会がよくある。

ある開発プロセス・アセスメントの専門家は、師弟制度が良いという。

実際、大学であれ企業であれ、研究所は師弟制度が徹底しているところが多い。

研究所では、研究テーマ自体が、先輩から後輩に引き継がれていくので、知識や技術の伝承がやりやすく、教育が自然とできてしまう。

問題は研究所以外にいる圧倒的多数のソフトウェアエンジニアだ。

そのアセスメントの専門家が言うには、ろくな教育もないまま、OJT(On-the-Job Training)と称して、単に人足として開発に投入し、若いソフトウェアエンジニア達を消費している企業が多いという。

その結果、要求分析のやり方がわからないとか、テストで何をしたら良いのかわからないという中堅のソフトウェアエンジニアは意外に多いそうだ。

で、そんな中堅のソフトウェアエンジニアは、わからないことがあっても「いまさら聞くに聞けない」年代になってしまっているので、ずっとそのままになってしまうことが多いという。

自己責任といってしまえば、確かにそういう側面もあるのだが、一方できちんとした教育も受けさせないまま、即戦力として使ってしまう側にも、責任がないとは言えないだろう。

★WOZ★

| | コメント (0) | トラックバック (0)

マインドマップを使って、混沌とした状況を整理しよう

どの分野でもそうだと思うが、ソフトウェア開発においても、開発チームのマネジメントをする人がしっかり仕事をしていないと、開発の状況が混沌としてきて、その結果、開発チームのメンバーがあたふた、おろおろしてしまうことが多い。

そして、その「あたふた」「おろおろ」に無駄な時間を費やしてしまい、開発メンバーが必要以上に忙しい思いをすることになりがちだ。場合によっては、あまりの忙しさにモチベーションが下がったり、病気になってしまう人もいるかもしれない。

不幸にもそうなってしまったら、とりあえず状況を整理することから始めよう。

状況の整理には、マインドマップを使うのがお薦めだ。

マインドマップを描いていく過程で、混沌とした中から、何が目的で、その目的のために何をしなければならないのか、何が問題なのかが浮かび上がり、それらの間の関係が見えてくるはずだ。

★WOZ★

「できる社員」の最強メソッド マインドマップ(R)ビジネス超発想術 (アスキームック) Book 「できる社員」の最強メソッド マインドマップ(R)ビジネス超発想術 (アスキームック)

著者:遠竹智寿子、月刊アスキー編集部
販売元:アスキー
Amazon.co.jpで詳細を確認する

| | コメント (0) | トラックバック (0)

Pythonでエクセルブックとオラクルデータベースを連携させる

Pythonはグルー言語と言われる。

英語で書くと"glue language"だ。

glueとは、にかわ(接着剤)のことで、グルー言語とは、様々なコンポーネントをくっつける言語のことだ。

例えば、Pythonを使うと、エクセルブックとオラクルデータベースをくっつけて、

エクセルブックからデータを読み込んで、オラクルデータベースに登録するアプリケーションや、

逆に、オラクルデータベースに登録されているデータを、エクセルブックに書き出したりするアプリケーションを、

簡単に作り上げることができる。

エクセルブックの読み書きにはwin32comパッケージを、オラクルデータベースの操作にはcx_Oracleパッケージを使うのが良い。

★WOZ★

初めてのPython 第3版 Book 初めてのPython 第3版

著者:Mark Lutz
販売元:オライリージャパン
Amazon.co.jpで詳細を確認する

★WOZ★

| | コメント (0) | トラックバック (0)

ファシリテーション

プロジェクト崩れになってしまったシステム開発案件には、開発のまとめ役がいない場合が多い。

そのようなプロジェクトの実状を見てみると、開発メンバーが能力的に問題があるわけでもなく、ましてやサボっているわけでもないことも多いので、まとめ役がいないという理由だけで、システム開発がデスマーチになってしまうのは、もったいない話だ。

誰か優秀な司令塔がいれば、、、と思うのだが、うまい具合にどこかから、そんな人が現れる可能性も低いので、まずは混沌とした状況を打開することを目標に、ちらばった情報や漠然とした情報を整理してみることから始めたい。

そんな時に使えるのが「ファシリテーション」という技術だ。

ファシリテーション技術は、特にこんな人にお勧めだ。

  • 開発プロジェクトをとりまとめてみたいが、言い出す勇気がない人
  • 一人ぼっちで考えているのが嫌な人
  • 早く仕事を片付けて帰りたい人
  • だらだらしていつ終わるかわからない会議にいきたくない人
  • 人と話すのが苦手な人

こんな人がファシリテーション技術を学び、開発に関する情報を整理するためのお膳立てを始めるとすれば、きっと、システム開発プロジェクトがうまく動き始めるに違いない。

★WOZ★

ファシリテーション入門 (日経文庫) Book ファシリテーション入門 (日経文庫)

著者:堀 公俊
販売元:日本経済新聞社
Amazon.co.jpで詳細を確認する

| | コメント (0) | トラックバック (0)

PythonのURLデコード

Apacheのアクセスログの一部がURLエンコードされていることがある。
例えば、アクセスログにこんな文字列を見つけたら、それはURLエンコードされた文字列だ。
%e9%89%84%e4%ba%ba28%e5%8f%b7

実はこの文字列は"鉄人28号"をURLエンコードしてある。

Pythonでこの文字列をURLデコードするには、urllibパッケージを使う。
使い方はこうだ。

>>> import urllib
>>> a = '%e9%89%84%e4%ba%ba28%e5%8f%b7'
>>> print a
%e9%89%84%e4%ba%ba28%e5%8f%b7
>>> b = urllib.unquote_plus(a)
>>> b
'\xe9\x89\x84\xe4\xba\xba28\xe5\x8f\xb7'
>>> print b
鉄人28号

Apacheのアクセスログの解析ツールをPythonで作る場合に、この方法が使える。

★WOZ★

| | コメント (0) | トラックバック (0)

Pythonのdatetimeパッケージ

Pythonからオラクルデータベースを操作して、ある期間のデータを取得する場合、例えば”今日から遡って一週間分のデータ”というように指定する。
この時に使うと良いのが、datetimeパッケージだ。

今日から遡って一週間のデータを取得する場合、今日(to)と一週間前(from)は次のように計算する。

>>> import datetime
>>> to_date = datetime.date.today()
>>> from_date = todate - datetime.timedelta(7)

それぞれ、以下のように値が入っている。

>>> to_date.isoformat()
'2010-02-16'
>>> print to_date.isoformat()
2010-02-16

>>> from_date.isoformat()
'2010-02-09'
>>> print from_date.isoformat()
2010-02-09

★WOZ★

| | コメント (0) | トラックバック (0)

Pythonは要求分析や基本設計にうってつけの言語だ

要求分析や基本設計を専門にしている人の中には、プログラミングは敷居が高いと感じている人は多いだろう。そんな人にはPythonを試してみて欲しい。

例えば、Pythonを使うと、

  1. オラクルデータベースに接続する
  2. データを取得する
  3. データを加工する
  4. 結果を表示するhtmlを生成する

こんなプログラムを少しづつ試しながら作り進めるのが容易だ。

そして、もともとPythonの文法は可読性を高めるように設計されているので、できあがったソースコードはまさに動く設計書だ。

もし、あなたが要求分析や基本設計などのモデリングの要素が強い上流フェーズの担当者なら、Pythonは仕事を効率よく進めるのに、うってつけの武器になる。Pythonでアイデアをどんどん試してみて、設計を手際よく片付けよう。

★WOZ★

| | コメント (0) | トラックバック (0)

Pythonのタプルのリスト

開発チームのリスク状況をモニターして、警告レベルが閾値を越えたときに、開発チームに知らせるモデルは、Pythonで次のように書ける。

ただし、タプルは(警告タイプ、警告レベル)を表し、タプルのリストはモニターして収集したリスク情報を表しているとする。
例えば、警告レベルは1、2、3という順序で緊急度が増すとする。
収集したリスク状況にレベル2あるいはレベル3の緊急度の警告が含まれているかは次のようにして調べる。

>>> alerts = [("alert_A", 1), ("alert_B", 2), ("alert_C", 1)]
>>> 2 in [level for type, level in alerts]
True

>>> 3 in [level for type, level in alerts]
False

このモデルでは、レベル2の警告があるが、レベル3の警告はない。

★WOZ★

| | コメント (0) | トラックバック (0)

Pythonのソートメソッド

以下のサンプルは、いろいろと便利に使えるPythonのリスト・ソートの覚書だ。

1.普通のソート
>>> l = [5, 2, 3]
>>> l.sort()
>>> l
[2, 3, 5]

2.タプルの第1要素でソート
>>> l = [(5, 100), (2, 10), (3, 1)]
>>> l.sort()
>>> l
[(2, 10), (3, 1), (5, 100)]

3.タプルの第2要素でソート
>>> l = [(5, 100), (2, 10), (3, 1)]
>>> l.sort(cmp=lambda x, y: cmp(x[1], y[1]))
>>> l
[(3, 1), (2, 10), (5, 100)]

4.リストの第1要素でソート
>>> l = [[5, 100], [2, 10], [3, 1]]
>>> l.sort()
>>> l
[[2, 10], [3, 1], [5, 100]]

5.リストの第2要素でソート
>>> l = [[5, 100], [2, 10], [3, 1]]
>>> l.sort(cmp=lambda x, y: cmp(x[1], y[1]))
>>> l
[[3, 1], [2, 10], [5, 100]]

★WOZ★

| | コメント (0) | トラックバック (0)

構成管理の開始時期

ソフトウェア開発で、構成管理はいつから始めるのが良いのだろうか?

Subversionでソースコードのバージョン管理をしているチームなら、実装フェーズから構成管理を始めているかもしれない。
自分たちは設計だけして、実装は外注するという開発チームでは、外注先からソースコードを受け取った時から、構成管理を始めるかもしれない。
また、まれに、製品が完成したときに、その時のソースコード一式をまとめて、そこから構成管理をする開発チームを見かけることもある。

しかし、上の開発チームのいずれも、構成管理の開始時期としては遅い。
開発を始めた時から構成管理も開始するのが適切だ。
というのも、構成管理の対象になるのは、ソースコードだけではなく、

  • ソフトウェア開発計画書
  • ソフトウェア開発チームへの入力であるシステム設計書
  • 要求仕様書、基本設計書、詳細設計書その他の設計書
  • テスト仕様書と成績書
  • 各種レビュー議事録
  • テストデータ
  • 開発に使ったツールと設定ファイル
  • テストに使ったツールと設定ファイル
  • 製品の設定ファイル

など、開発に関わる一切のものだからだ。
こう書くと大変なようだが、これらはいずれにせよ何らかの方法で管理しなければならないものなので、せっかくならソースコードと同じように、Subversionなどのツールを使って、バージョン管理とベースライン管理をしてしまえば、管理自体も簡単で確実だ。

開発の途中からしか構成管理をしていないという開発チームや、ソースコードしか構成管理していないという開発チームには、開発に関わる一切の情報を開発の最初から構成管理するという方法をぜひ試してみてほしい。

★WOZ★

| | コメント (0) | トラックバック (0)

NuSMVをUbuntu9.04にインストールしてみた

モデル検査を長くやっている人から、Spinより状態爆発に強いという話を聞いたので、もう一つのモデル検査ソフトウェアであるNuSMVを、Ubuntu9.04にインストールしてみた。

configureでつまづいたが、なんとかインストール成功だ。

早速、4日で学ぶ本の最初のサンプルを動かしてみた。

きちんと動いている。

Spinと違って、NuSMVにはGUIアプリケーションがないようだが、コマンドラインから動かすのも、すっきりしていて好きだ。

最初に取り組もうと思っているC言語のソースコードのモデル検査については、SPINの場合は、比較的簡単にC言語からPromela言語に変換できそうなのに対して、NuSMVの場合は、プログラムカウンタを表す変数を一つ作って、それで状態を表すといった一工夫が必要になるようだ。

Spinは並行プロセスの検証に強いという話も聞いているので、しばらくは両方のシステムを調べることになりそうだ。

★WOZ★

モデル検査 初級編―基礎から実践まで4日で学べる Book モデル検査 初級編―基礎から実践まで4日で学べる

著者:産業技術総合研究所システム検証研究センター
販売元:ナノオプトメディア
Amazon.co.jpで詳細を確認する

| | コメント (0) | トラックバック (0)

Ubuntu9.04でconfigureする時のエラー

Ubuntu9.04でconfigureを実行すると、次のようなエラーが出ることがある。
このエラーは最近、モデル検査ツールであるNuSMVをインストールしようとして起こった。

configure: error: C++ preprocessor "/lib/cpp" fails sanity check

これは、C++コンパイラがインストールされていないという意味なので、次のコマンドでインストールする。

sudo apt-get install build-essential

★WOZ★

| | コメント (0) | トラックバック (0)

デバッグツールとしてのモデル検査ソフトウェア

こんな話を聞いた。
あるソフトウェア開発会社では、モデル検査ソフトウェアを強力なデバッグツールとして使っており、これまでの不具合解析では100%の欠陥検出率だそうだ。

また、その会社ではモデル検査により品質を向上させるとは、あえて言わないそうだが、この点では全く同意だ。
モデル検査対象のモデルのコードと、製品の実装コードが異なるので、製品の品質を直接向上させるとは言えないからだ。

あくまでも、ソフトウェア妥当性確認テストの前に、その時点で残ってしまった不具合を解析するのがモデル検査だという考え方だ。しかし将来的には、モデル検査を要求分析や基本設計段階にも適用したいと考えている。

ソフトウェア開発エンジニアの観点からは、モデル検査と従来の検証(レビューとテスト)の組み合わせは、開発者が、よりクリエイティブな作業に専念するための支援技術だ。現時点では導入にあたり制約があるものの、積極的に使っていきたい技術だ。

★WOZ★

| | コメント (0) | トラックバック (0)

モデル検査の課題~モデルの構築

モデル検査では、モデルの構築を容易にすることと状態爆発を防ぐことが重要だという。このうち、モデルの構築を容易にする方法として、例えば実装言語をC言語に特定し、さらに使える構文を限定するコーディング規約をつくり、その制約の下で開発を行うというものがある。
この方法は最初は不便だが、徐々に使える構文や言語を増やしていけば良いのではないか?
この方法はとても実践的だと思うし、実際こういう方法の実用化を目指す企業は多いようだ。

★WOZ★

| | コメント (0) | トラックバック (0)

マインドマップを使って情報を整理しよう

最近になってマインドマップを知った友達が、「高校生のときに知っていたら、もっと効果があったかも」と言っていた。

なるほど、そうかもしれない。

マインドマップは物事を整理するための技術なので、それを使えばノートを上手にとることもできるだろう。

普段の使い方を思い出してみると、ノートをとるのに使っているし、スケジュールを考えたり、WBSを考えたりするのにも使っている。

ノートをとるのにマインドマップを使うと、見たことや聞いたことを、その場で整理していけるのが良い。またスケジュールやWBSでは、するべきことを漏れなく洗い出すことができる。

他にも、オブジェクト分析をするときに概念を洗い出して整理するのに便利だし、ブレーンストーミングの記録にも向いている。

今の世の中、普通に暮らしているだけでも、次から次へと新しい情報があふれてくる。マインドマップを使って、それらをどんどん整理していこう。

★WOZ★

「できる社員」の最強メソッド マインドマップ(R)ビジネス超発想術 (アスキームック) Book 「できる社員」の最強メソッド マインドマップ(R)ビジネス超発想術 (アスキームック)

著者:遠竹智寿子、月刊アスキー編集部
販売元:アスキー
Amazon.co.jpで詳細を確認する

| | コメント (0) | トラックバック (0)

Pythonでオラクルデータベースにアクセスする

cx_Oracleを使うと、Pythonでオラクルデータベースにアクセスできる。

無料で利用できる Oracle Database 10g Express Edition の場合、準備は次の通りだ。

1.オラクル・クライアントのインストール

Oracle Database 10g Express Client をインストールする。

2.cx_Oracleのインストール

クライアントマシンのOS、オラクルデータベースのバージョン、Pythonのバージョンの組み合わせに応じて、適当なcx_Oracleをインストールする。

これでPythonからオラクルデータベースにアクセスする準備ができた。

Pythonのコードは例えば次のように書く。

//

import cx_Oracle

connection = cx_Oracle.connect("system/system@localhost")

cursor = connection.cursor()

sql = "SELECT * from test"

for row in cursor.execute(sql):

    print row

cursor.close()

connection.close()

//

★WOZ★

| | コメント (0) | トラックバック (0)

UMLはコミュニケーションを助けるが、弊害もある

UMLは文法が難しくないので、入門書を一通り読めば、誰でも簡単に書けてしまう。このため、実際にはUML図の雰囲気を知っているだけで、正しい文法や語彙を使えていないとか、UML図を書いただけで設計したつもりになってしまうということが起こりがちだ。

僕は日頃から、UMLを、要求分析や設計をする時のスケッチツールに使おう!といっているので、もともとそれほど厳密な文法は求めていないのだが、明らかに文法や語彙を間違えるとコミュニケーションそのものが成り立たない。

UMLは、モデル検査との組み合わせや、モデル駆動開発の組み合わせで、利用機会が拡がっている。開発チーム内でのコミュニケーションのツールとして、上手に使っていきたい。

★WOZ★

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION) Book UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

著者:マーチン・ファウラー
販売元:翔泳社
Amazon.co.jpで詳細を確認する

| | コメント (0) | トラックバック (0)

« 2010年1月 | トップページ | 2010年3月 »