Posts Tagged ‘ソフトウェア’

その他心に残った話 – JaSST’10 Tokyo

1月 31st, 2010

◯コードの共同所有のやり方
共同所有をすると品質向上、リスクの低減、チームの自己組織化、メンバの安心度につながるが、どうすれば実現出来るのか。

最初は物理的な共有、svnやgitなどのツールの活用がこれに当たります。
次は知識の共有、ペアプロやレビュー、TDDなどの取り組みがこれに当たります。
最後が責任の共有、リファクタリングの実施やCIがこれに当たります。

単にコードを共有しましょうというよりも段階を見せて、効果を説得しないと駄目ですね。社内で使わせていただきます。

◯オフショアで成功するコツ
工程ではなく、機能で委託する。機能単位で責任を持ってもらうことが出来る。
例えばテスト工程だけオフショアに出すと、高い確率でレベルが低い人材が割り当てられる。

アメリカではオフショアをかなりやめているらしい。5割から6割を国内に戻したらしい。結論としては「オフショアはうまく行かない。」という認識が広まっている。(ハーバードビジネスレビューで見たとか?)
オフショアするのは企業が重要視してないところ、テストをオフショアする企業は結局「テストを軽視している」ということ。

あとは人が辞めてしまうので、仕組みにノウハウがたまるようにしないとだめだとNEC誉田さんからコメント。
品質の期待値をきちんと伝えるのも効果があるらしい。

◯オフショア開発におけるテスト改善
事例発表でTISの鈴木三紀夫さんが「890個のテスト観点リストと745個の不具合推測リスト」を作成したと話していた。こんなにたくさんのリストを見きれるのかという疑問がすぐ頭をよぎるが、全部読むことが重要ではなく「作業者に頭を使わせることが大事」とのこと。数が膨大だと作業者がコピペで済ませることができなくなり、担当者なりに頭を使う必要が必ず生じる。

・・・

基調講演と招待講演は大変タメになりましが、その他のセッションは役に立ちそうなものと、役に立たなそうなものと結構はっきり分かれました。
参加費は2日間で8000円ぐらいでしたが、値段的にはこんなものでしょう。学会の延長線上と思えば。
でも来月同じ雅叙園で開かれるデブサミを考えるとデブサミのほうがおすすめかも知れません。

来年は誰か他の人に行ってもらおうかな。

品質という王道を行こう – JaSST’10 Tokyo 招待講演

1月 31st, 2010

NECの誉田直美さんが、自信が考える品質のあり方について語った90分のメモです。

・・・

誉田さんが考える「王道を行く」とは本質を理解した上で、決意を持ち達成に向けて行動すること。
手段ではなく目的、手抜きではなく効率化、新たな気持も大事だけど先人の知恵に学ぶ。
品質のみを追求している訳ではないが、品質を追求すればコストも納期も改善出来ると誉田さんは考えている。

<事例1>
自社が関連する単体テスト実施状況を調査したところ、単体テストをきちんと実施しているプロジェクト(限界値とか、テストの組み合わせを考慮して普通にやる)は単体テストで手抜きをしている or 単体テストをしていないプロジェクトと比較して出荷後のバグが38%少なかった。きちんとテストを実施すれば62%も取り除けたのに(きちんと単体テストをしても38%も残るのかという見方もできるけど・・・これは私の主観)

<事例2>
オフショアの品質を改善するために、海外子会社をかなりの労力をかけて教育した。具体的には数値目標を立て、プロセス・基礎開発技術・マネジメント・日本語語学力に国内同等レベルを求めた。結果として現地管理職の認識も代わり、改善が進むようになった。(最も、事例としてあげた中国の工場は管理者が転職してしまったらしいんだけど・・・)

<事例3>
開発案件や組織力が似ている組織Aと組織Bからいろいろなデータを取ってみた。Aを100%としたとき、Bの全工数は106%程度、ただしレビューやテストは50%前後だった。1000行あたりのバグ件数はBはAの80%。全バグ数に対する上流工程までのバグ摘出率はAとBはほぼ同じ。Bのテスト項目数はAの約半分だった。

組織Bは「プロセスを改善すれば工数やバグ数は減るはず」と解釈し、そのように取り組んでいた。だからテスト工数がAより少なくなり、そのような統計結果も出た。でも市場で出たバグを見るとBの方が品質が悪かった(数は変わらなくても、Bの方が長期間にわたってバグが出続けた!)。結果としてBのほうがAより2倍以上品質が悪いという調査結果が出た。

データを分析すると組織の取り組み方の違いが現れた。Bの組織は目標の達成が主眼となってしまい、数値目標を達成したらテストを終えてしまっていた。本当はプロジェクトごとに差が出るものなのにそれがなかった。基準値順守が「形骸化」してしまった。社内のベストプラクティスを組織Aと組織Bに適用しても組織Bでは効果が得られなかった。結局組織Bはルールだから実施していた、テスト時に担当者が頭を使っていなかった。

誉田さんがまとめのスライドに載せていたのは「何のためのプロセスかを常に考える土壌作り」が必要とのこと。形だけを真似ても成果は得られない。

・・・

目から鱗でしたね。ソフトウェアの状態をツールやメトリクスを使って見える化し、データをノウハウとして蓄え、組織として横展開できれば品質は今より良くなるはずだと思っていましたから。まさに組織Bの人間です。
プロジェクトごとに性格や条件が違うことに気づき、もっと頭を使わないと駄目ですね。自社の品質改善を考えていくに当たり、大きな宿題をもらった講演でした。

Successful Software Management: 17 Lessons Learned – JaSST’10 Tokyo 基調講演

1月 30th, 2010

1/28と1/29に目黒雅叙園で開催されていたJaSST’10に行ってきました。色々学んだことはあったのですが、まずは基調講演の振り返りから。基調講演はJohannna Rothmanさん、Manage It! 現場開発者のための達人式プロジェクトマネジメントの作者さんですね。

開発者が行う改善は55%だが、マネージャーは65%の改善に貢献出来る。目的を持って人をまとめるのがマネージャーの仕事、開発に集中出来る椅子とかを揃える以外にに良い人間関係を築くことが大事。

効率的なマネージメントのやり方を17の法則としてまとめた。以下原文ママ。

  1. Know What They Pay You Do
  2. Plan the Work: Portfolio Management
  3. Accept Only One #1 Priority at at Tme
  4. Commit to Projects After Asking Your Staff
  5. Hire the Best People for the Job
  6. Preserve Good Teams
  7. Avoid Micromanaging or Inflicting Help
  8. Treat People Individually and With Respect
  9. Meet Weekly with Each Person
  10. Plan Training Time in the Workweek (Plan Training Time Each Week for Yourself)
  11. Give Credit Freely
  12. Fire People Who Can’t Do the Work
  13. Emphasize Results, Not Time
  14. Admit Your Mistakes
  15. Recognize and Reward Good Work
  16. Take a Vacation
  17. Manage Yourself

以下Rothmanさんの発言メモ、一部意訳があるかも。

1. 業務上の肩書きと実際の職務内容、使命があっているか確認すること。
3. 優先度1のタスクは常に1つしか無いはず。複数あるのは何かがおかしい予兆。
4. タスクはチームで決めよう。
5. 雇うべきはgreatな人材、それは必ずしもチームに今いる人材とは違う。タイプ(性格/個性)の異なる人を集め、アイデアを生む。
6. 良いチームは残そう、解散するとチームが備えていた力が失われる。
9. 信頼できる関係を築くなら1対1がいい。直接のフィードバックもし易い。
13. 作業時間に比例して作業内容も増える。1週間40時間で仕事を終えられるよう作業を組むのもマネージャーの仕事。

Pragmatic Programmerシリーズの1冊を書いているだけあって実用的で、口先だけの話をしている人ではないのだなと聞いていて感じました。

ソフトウェアアーキテクトが知るべき97のこと

1月 30th, 2010
ソフトウェアアーキテクトが知るべき97のこと
オライリージャパン
売り上げランキング: 6647

この本の正しい使い方。

  1. ソフトウェアアーキテクチャに興味を持った人が数人集まる。
  2. 適当に1章選んでみんなで読む
  3. 理解できる/理解できない/何が言いたいのか分からない/昔こんなことがあったなど議論を交わす。
  4. 飽きたら辞める。

97個も話があると似たような話があります。もうちょっと整理してくれたら30個ぐらいにできたのに。
息抜きに読むとたまにヒントが得られる本だと思います。もっと砕けた感じが良ければアドレナリンジャンキーがおすすめです。

・・・

以下は自分が良いなと思ったエッセイです。
◯03 最大の問題は、多分技術的なことではない
相手を人として尊重し、憶測で非難しないこと。話しあうこと

◯08 すべてのものは、かならずエラーを起こす
エラーの影響を緩和するために何かを導入する度に、それが新しいエラーを増やしていく。

◯18 一般性よりも単純性、再利用よりもまず最初に使えること
推測による汎用性よりも、経験を通じた単純性の方が役に立つ。
単に汎用的であることを目標として設計された多くのものは、良く考えられていても何の役にも立たない。

◯37 ソフトウェア・アーキテクチャが倫理的な意味を持つことを考えよ
必須フィールドは特に害が無いように見えるかもしれないけど、設計者の都合をユーザに押し付けてしまっている。
設計者が楽をするためにわずかずつであっても他人の生活を不便にすることは倫理的ではない。

◯54 あなたの知識と経験を共有しよう
経験は1つだけど、そこから出来るだけ大きな知恵を引き出すためには経験に合理的な説明を加えなければならない。
簡単に説明出来るようになるまでは、対象を完全に理解しているとは言えない。

◯61 データがすべて
データはコードよりも概念として小さく、複雑度もかなり低い。

◯72 優れたコンテンツは優れたシステムを作る
新しくシステムを設計するときには、開発プロセスの一部を既存コンテンツの評価に当てるべき。

◯82 本当の顧客は目の前の顧客ではない
本当の顧客はあなたの顧客の顧客。
あなたの顧客の顧客が成功すれば、あなたの顧客が成功する。そうすればあなたも成功する。

◯日06 手段的な技術と陳腐化しない本質的な技術
ノウハウ的な知識ばかりが増えても背景にある理論を理解しないと作れないソフトが有る。
作業の90%はノウハウの積み重ねでソフトウェアの魅力が高められる。しかし残り10%で本質的な知識が要求される。そしてそこでソフトウェアの革新性が決定される。

Hudsonのよくわからないエラー

9月 20th, 2009

SCMのポーリングが実行
Updating http://example.com/svn-repos/
FATAL: Unable to call getCredential. Invalid object ID 109
java.lang.IllegalStateException: Unable to call getCredential. Invalid object ID 109
at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:268)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:255)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:215)
at hudson.remoting.UserRequest.perform(UserRequest.java:104)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:236)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)

Windowsのスレーブで1.317から出るようになったみたい。
Subversionのリポジトリをポーリングしてビルドを動かすようにしているけど、出るときとでないときがあります。1回目はエラーがでて、2回目は出ない感じ。何なんでしょう?

・・・

下のスレッドで議論されている内容が原因みたい。斜め読みだけどSingletonの使い方がおかしいのかな?
Nabble – Hudson dev – Error in SubversionSCM “Unable to call getCredential”
このnabble.comってのはどんなサイトなんだろう? 修正パッチも有ったみたいだけどHudsonのMLには同様の情報は流れてないのかな。

・・・

よくHudsonのバグリストを探してみたら見つかった、これな気がする。
hudson: 課題 4176
現在もステータスはOpenになってるし、問題として認識されているんだろう。
個人的には毎日何回もエラーメールが飛んできて困るので2票ほど投票してみた。結構根が深い問題なのだろうか、気長に待とう。

WordPressのメンテナンス

5月 9th, 2009

このブログを動かしているWordPressの設定が面倒でところどころ目をつむりながら動かしてきたんですが、ようやく重い腰を上げて色々な問題を直しました。

まず最初が自動アップグレードができなかったことです。管理画面にログインする度に本体とプラグインのアップグレードを促されるとうんざりしてしまいます。WordPressは2.7以降自動アップグレードシステムがあるのでこれをXREAのサーバで動かすようにしました。
Google先生に聞くとすぐ見つかるのですが、アップグレードをおこなうPHPスクリプトをSAFEモードで動かす必要があるそうです。
作業としてはwp-adminディレクトリに.htaccessファイルを作成し

<Files upload.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
<Files update.php>
AddHandler application/x-httpd-phpcgi .php
</Files>

を追加します。

次にWordPress用のFTPアカウントをXREAの管理画面で作成します。これはFTPのログインディレクトリをWordPressのログインディレクトリにするためです。WordPressだけを動かしているなら必要ない作業ですが、大抵の場合は必要なはずです。

最後に画像のアップロードに失敗していたのでwp-content/uploadsディレクトリの書き込み権限を777に変更しました。これもSAFEモードが関係しているのですが、Googleで調べてみたところ事前にアップロードフォルダを手動で作っている人が多かったのですが、毎回そんなことをするのも面倒だったので、アクセス権を緩くして対処した次第です。

これでようやくまともに使えるようになりました! これで更新のペースが上がるといいんですが。

Hudsonを稼働させてるサーバにVMWare Server2をインストールしたら片方起動しなくなった

4月 2nd, 2009

タイトルの問題に今日の仕事中悩んでました。
きっかけはCentOS 5.3のアップデートで、サーバを再起動するついでに前からやりたかったVMWare Serverのアップデートもやってしまおうかと思ったことでした。

VMWare Server2からはWebインターフェースで仮想マシンにアクセスする仕様になってますが、裏ではTomcatが同梱され動いているようです。んでHudsonを動かすTomcatとVMWare Server2が使うTomcatが何らかの原因で共存できなくて問題が起こったようです。

本当は○○すればこの問題は解決します とまで調べて書きたいのですが、他の業務に押されて調べきれず、結局VMWare Serverのバージョンを元に戻してしまいました。

Javaが得意な方で、どの辺の設定をいじれば良いものか検討がつく方はいましたらコメントで教えてください m(_ _ )m

Redmineは右クリックができる

1月 6th, 2009

Redmineのチケット画面で右クリック

今日0.8にアップグレードして気がついたのですが、チケット一覧を表示するページで右クリックが使えるんですね。所定のチケットの優先順位や状態などを一括して変更できて非常に便利です。

JavaScriptで実現しているんだと思うのですが、最近のWebアプリはすごいですね。

入門Redmine読んだよ

12月 5th, 2008
入門Redmine―Linux/Windows対応
前田 剛
秀和システム
売り上げランキング: 1677

発売されてからなかなかAmazonから届かなかったのですが、先週の中頃手に入れてようやく読めました。
リファレンスとしては丁寧によく書かれていますが、「これは知らなかった」とか「これはWebでは知ることができなかった情報だ」というのは特にありませんでした。内容としては著者が管理している Redmine.JP | TOPにある情報+RedmineのMLのまとめ のような印象です。新しくRedmineを使い始める人に「分からなかったらこれで調べて」と渡すのに便利な本です。
自腹で買った私本ですが、会社に置いてます。家にあっても使いようがなさそうなんで。

Trac本も何冊か出ていますが同じような感じなんでしょうか? Redmine使いが増えて、もっと使いこなしに関する情報が出てくるようになるといいんですけど… とりあえず近日中にリリースされそうな0.8に期待です。

Hudsonについて試行錯誤

10月 22nd, 2008

Java製のContinuous Integrationツール Hudsonで試行錯誤しています。

実現したいのはWindows/Linux双方の環境で自動的にテストできる環境を用意することです。HudsonにはSlave機能があって、Masterとなるサーバに複数のSlaveをぶら下げ、Slaveでテストを行わせることができます。
今日いろいろと試していて分かったのは、Slaveには”windows”,”linux”といったラベルを付加することができ、テストに対してどのラベルに関連づけられたSlaveで実行するかを指定することができる。ただしMasterにはラベルをつけることができないので、Windows/Linux混在環境だとMasterにビルドを行わせることはできなそうだということ。

多分Masterはテストの管理をするだけに徹して、Masterを動かしているPC上でテストを行わせるには同じPCでMasterとSlaveを動かせばいいんでしょう、なんか変な気がしますが。

困っているのが、Slaveの登録がLinuxでうまくできないことです。HudsonではJNLPを使った登録がサポートされていますが、Linuxだとうまく動きませんでした。また時間を取って試行錯誤してみたいと思います。

そうそう、WindowsでのビルドをMSBuildでやろうと思ってVisualStudio Express Editionをインストールしたけど、これにはMSBuild.exeって入ってないんですね。 理想のテスト環境の実現にはもうちょっと試行錯誤が必要そうです。

○2008年10月27日追記
MSBuildはProgram Filesじゃなく、WINDOWSフォルダの奥深くにあるんですね。VisualStudioじゃなくて、.NETFrameworkに付属するソフトなのかしら。
MSBuildはあったけど、コンパイラと連携して動いてくれなくてコマンドラインでのビルドテストはできず、残念