研究日誌(study diary)

2012年2月の記事一覧

コンピュータ内蔵機器の設計

コンピュータ内蔵機器の設計を行うにあたって,知っているとよいことがいろいろある。

1
まず,作ったものをどう測定するか。最終製品の試験,測定方法は分かっても,内部のソフトウェアの試験,測定方法が分からないことがあるかもしれない。
組込みソフトウェア開発向け品質作り込みガイド (SEC BOOKS)
独立行政法人 情報処理推進機構 ソフトウェア・エンジニアリング・センター
翔泳社(2008/12/03)
値段:¥ 1,800

本書に書かれていることを,自分なりに優先順位をつけて利用するとよい。
分野,立場によって,重視すべきことが違うことにまで踏み込んでいないかもしれないから。

2
実際にプログラムを書く際に,知っているとよいこと
C言語版もある。

原点はMISRA-C, MISRA-C++なのでそれらの本も合わせて読むと良い。

3 仕事をする人の能力を向上させずによいソフトウェアはできない。
どんどん新しい技術,複雑さを乗りこなすには,人の能力をおいてない。
組込みスキル標準ETSS教育プログラムデザインガイド (SEC BOOKS)
独立行政法人 情報処理推進機構 ソフトウェア・エンジニアリング・センター
翔泳社(2009/05/21)
値段:¥ 1,800

ETSS関連のシリーズはざっと目を通すとよい。
自社で必要な技能の一覧を抜き書きするとよい。
中小企業では,最初は10項目くらいにしないと,維持できないかもしれない。

4 作業改善
常に改善を心がけるとよい。
よい事例がついているのは「ベストプラクティス編」


10の事例のうち,参考になる順にならべて,一番参考になるものから学べばよい。
参考にならないものにケチをつけていても改善は進まない。

5. 利用
システムに必要なのは利用者視点。
どういう切り口で利用者視点を確保するかの参考にするとよい。
0

さつき,SMVセミナの記録

はずかしながら,初めて,SMVを使いました。


状態遷移表などのシステム設計として記述するのは,相対的に楽だと思いました。


CTLの書き方が修業がたりず,エラーになることがありました。


1.現在,さつきのサーバでwebアクセスで15分以内の回答が無料でえられます。

1.1

webアクセスはCTL記述に限定。

CTLを記述していないとinput,nextを要求するエラーがでる。

1.2

LTLを記述するとJAVAのエラーがでる。
SATソルバとの連係はWEBではしていない。

1.3

IDとパスワードをその都度発行されるので,記録して,結果が出るのを待つ。

(簡単なもので,ほかに作業していなければ瞬時)

1.4
4日で学ぶモデル検証の例題も入れてみました。

1:
となっている行は
True:
と直せばエラーにならないようでした。

4日で学ぶモデル検査 (初級編) (CVS教程 (1))
産業技術総合研究所システム検証研究センター
エヌ・ティー・エス(2006/07)
値段:¥ 2,100



2. お金を払って会員になれば,SSHで利用できるようになる。
sshはWindowsであればWINCMPとputtyがあればよい。

(puttyはインストーラで導入するとフォルダができ,必要なpagentも導入出来る。)


モデル検査 初級編―基礎から実践まで4日で学べる
産業技術総合研究所システム検証研究センター
ナノオプトメディア(2009/11)
値段:¥ 2,940


モデル検査 上級編―実践のための三つの技法
産業技術総合研究所システム検証研究センター
ナノオプトメディア(2010/02)
値段:¥ 2,940




5

状態遷移図,状態遷移表からSMVを生成するソフトは作りやすそう。

CTLを部分的にでも自動生成するとモデル記述の確からしさが確かめながら作れるかも。


議論に出た
ツールに関する情報は
モデル検査支援ソフトウェアの開発
篠崎 孝一 太田 弘 早水 公二 星野 光勇 今村 哲典 吉田 雅昭

プロセスに関する情報
モデル検査の適用プロセスの提案 早水 公二


<この項は書きかけのため順次追記します。>

ps.

今年,SMVの実習を中部地方でさらに企画してみます。


0

NuSMVの導入

NuSMVを使うために,

http://nusmv.fbk.eu/
からソースコードをダウンロード。

バイナリは,LinuxとWindowsはあるがMac OSは見当たらない。

nusmvというフォルダにINSTALLという説明文書あり。
./configure
make
make install
という手順の記載あり。

ogawa-sei-no-MacBook-Pro-2:nusmv kaizen$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... helpers/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
checking build system type... i386-apple-darwin11.3.0
checking host system type... i386-apple-darwin11.3.0
checking for style of include used by make... GNU
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/Users/kaizen/Downloads/NuSMV-2.5.4/nusmv':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

-----
コンパイラの名前が

sudo /opt/local/bin/port -v selfupdate
ogawa-sei-no-MacBook-Pro-2:nusmv kaizen$ sudo port install gcc43
--->  Fetching archive for gmp
--->  Attempting to fetch gmp-5.0.4_0.darwin_11.x86_64.tgz from http://packages.macports.org/gmp
--->  Fetching gmp
--->  Attempting to fetch gmp-5.0.4.tar.bz2 from ftp://ftp.dti.ad.jp/pub/GNU/gmp
--->  Attempting to fetch gmp-5.0.4.tar.bz2 from http://jog.id.distfiles.macports.org/macports/mpdistfiles/gmp
--->  Verifying checksum(s) for gmp
--->  Extracting gmp
--->  Applying patches to gmp
--->  Configuring gmp
Warning: No processor dependent assembly code being used. gmp might be slower.
Error: Target org.macports.configure returned: configure failure: shell command failed (see log for details)
Log for gmp is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/gmp/main.log
Error: Unable to upgrade port: 1
Error: Unable to execute port: upgrade gmp failed
To report a bug, see <http://guide.macports.org/#project.tickets>

sudo port install apple-gcc42

--->  Fetching apple-gcc42
--->  Attempting to fetch gcc-5666.3.tar.gz from http://opensource.apple.com/tarballs/gcc/
--->  Verifying checksum(s) for apple-gcc42
--->  Extracting apple-gcc42
--->  Applying patches to apple-gcc42
--->  Configuring apple-gcc42
--->  Building apple-gcc42
Error: Target org.macports.build returned: shell command failed (see log for details)
Log for apple-gcc42 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_apple-gcc42/apple-gcc42/main.log
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>
ogawa-sei-no-MacBook-Pro-2:nusmv kaizen$ 

-----
なぜかgccのパスが切れていないようなので別のマシンに移動。
./configure
は通過。

------------------------------------------------------------------

Addons

  configured:compass 

------------------------------------------------------------------

------------------------------------------------------------------

The ZCHAFF sat solver will NOT be linked to NuSMV.

If you want to link it, please use configure options

--enable-zchaff, --with-zchaff-libdir, --with-zchaff-incdir.

For further help, try "./configure --help".

------------------------------------------------------------------


------------------------------------------------------------------

The MINISAT sat solver will NOT be linked to NuSMV.

If you want to link it, please use configure options

--enable-minisat, --with-minisat-libdir, --with-minisat-incdir.

For further help, try "./configure --help".

------------------------------------------------------------------


------------------------------------------------------------------

WARNING: No SAT solver will be linked to NuSMV.

WARNING: All NuSMV commands and options that depend on a SAT 

WARNING: solver will not be available.

WARNING: If you want to use SAT solver NuSMV features, please 

WARNING: compile and link the zchaff SAT solver or the MiniSat

WARNING: SAT solver. 

WARNING: For further help, try "./configure --help".

------------------------------------------------------------------

Warning: Cannot find the cudd libraries in './../cudd-2.4.1.1/lib'.

         Did you build cudd?

         If you did not, make will search for cudd dir into

         the parent dir, and will make cudd before making

         the NuSMV executable

         Cudd will be built with "make -f Makefile_os_x_64bit"

---------------------------------------------------------------------------------------------------------------------

SATソルバを先に導入していないといけない。

MiniSat

https://github.com/niklasso/minisat/downloads
からダウンロードして解凍

ken005M:niklasso-minisat-369fc3f administrator$ make config prefix=$PREFIX

ken005M:niklasso-minisat-369fc3f administrator$ make install

install -d /include/minisat

for dir in mtl utils core simp; do \

 install -d /include/minisat/$dir ; \

done

for h in minisat/mtl/Alg.h minisat/mtl/Alloc.h minisat/mtl/Heap.h minisat/mtl/IntMap.h minisat/mtl/IntTypes.h minisat/mtl/Map.h minisat/mtl/Queue.h minisat/mtl/Sort.h minisat/mtl/Vec.h minisat/mtl/XAlloc.h minisat/core/Dimacs.h minisat/core/Solver.h minisat/core/SolverTypes.h minisat/simp/SimpSolver.h minisat/utils/Options.h minisat/utils/ParseUtils.h minisat/utils/System.h ; do \

 install -m 644 $h /include/$h ; \

done

Compiling: build/release/minisat/core/Solver.o

In file included from minisat/core/Solver.cc:23:

./minisat/mtl/Alg.h: In function ‘void Minisat::remove(V&, const T&)’:

./minisat/mtl/Alg.h:39: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

./minisat/mtl/Alg.h: In function ‘bool Minisat::find(V&, const T&)’:

./minisat/mtl/Alg.h:50: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

In file included from ./minisat/core/SolverTypes.h:31,

                 from ./minisat/core/Solver.h:29,

                 from minisat/core/Solver.cc:26:

./minisat/mtl/Map.h: In member function ‘void Minisat::Map<K, D, H, E>::remove(const K&)’:

./minisat/mtl/Map.h:158: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

minisat/core/Solver.cc: In member function ‘void Minisat::Solver::analyze(Minisat::CRef, Minisat::vec<Minisat::Lit, int>&, int&)’:

minisat/core/Solver.cc:325: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement

minisat/core/Solver.cc: In function ‘double luby(double, int)’:

minisat/core/Solver.cc:825: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

Compiling: build/release/minisat/simp/SimpSolver.o

In file included from ./minisat/core/Solver.h:26,

                 from ./minisat/simp/SimpSolver.h:25,

                 from minisat/simp/SimpSolver.cc:22:

./minisat/mtl/Alg.h: In function ‘void Minisat::remove(V&, const T&)’:

./minisat/mtl/Alg.h:39: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

./minisat/mtl/Alg.h: In function ‘bool Minisat::find(V&, const T&)’:

./minisat/mtl/Alg.h:50: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

In file included from ./minisat/core/SolverTypes.h:31,

                 from ./minisat/core/Solver.h:29,

                 from ./minisat/simp/SimpSolver.h:25,

                 from minisat/simp/SimpSolver.cc:22:

./minisat/mtl/Map.h: In member function ‘void Minisat::Map<K, D, H, E>::remove(const K&)’:

./minisat/mtl/Map.h:158: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

./minisat/mtl/IntMap.h: At global scope:

./minisat/mtl/IntMap.h: In instantiation of ‘void Minisat::IntMap<K, V, MkIndex>::clear(bool) [with K = int, V = char, MkIndex = Minisat::MkIndexDefault<int>]’:

minisat/simp/SimpSolver.cc:651:   instantiated from here

./minisat/mtl/IntMap.h:52: warning: unused parameter ‘dispose’

./minisat/mtl/IntMap.h: In instantiation of ‘void Minisat::IntMap<K, V, MkIndex>::clear(bool) [with K = Minisat::Lit, V = int, MkIndex = Minisat::MkIndexLit]’:

minisat/simp/SimpSolver.cc:653:   instantiated from here

./minisat/mtl/IntMap.h:52: warning: unused parameter ‘dispose’

./minisat/mtl/IntMap.h: In instantiation of ‘void Minisat::IntMap<K, V, MkIndex>::clear(bool) [with K = int, V = Minisat::vec<unsigned int, int>, MkIndex = Minisat::MkIndexDefault<int>]’:

./minisat/core/SolverTypes.h:338:   instantiated from ‘void Minisat::OccLists<K, Vec, Deleted, MkIndex>::clear(bool) [with K = int, Vec = Minisat::vec<unsigned int, int>, Deleted = Minisat::SimpSolver::ClauseDeleted, MkIndex = Minisat::MkIndexDefault<int>]’

minisat/simp/SimpSolver.cc:652:   instantiated from here

./minisat/mtl/IntMap.h:52: warning: unused parameter ‘dispose’

Compiling: build/release/minisat/utils/Options.o

Compiling: build/release/minisat/utils/System.o

Linking Static Library: build/release/lib/libminisat.a

Compiling: build/dynamic/minisat/core/Solver.o

In file included from minisat/core/Solver.cc:23:

./minisat/mtl/Alg.h: In function ‘void Minisat::remove(V&, const T&)’:

./minisat/mtl/Alg.h:39: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

./minisat/mtl/Alg.h: In function ‘bool Minisat::find(V&, const T&)’:

./minisat/mtl/Alg.h:50: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

In file included from ./minisat/core/SolverTypes.h:31,

                 from ./minisat/core/Solver.h:29,

                 from minisat/core/Solver.cc:26:

./minisat/mtl/Map.h: In member function ‘void Minisat::Map<K, D, H, E>::remove(const K&)’:

./minisat/mtl/Map.h:158: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

minisat/core/Solver.cc: In member function ‘void Minisat::Solver::analyze(Minisat::CRef, Minisat::vec<Minisat::Lit, int>&, int&)’:

minisat/core/Solver.cc:325: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement

minisat/core/Solver.cc: In function ‘double luby(double, int)’:

minisat/core/Solver.cc:825: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

Compiling: build/dynamic/minisat/simp/SimpSolver.o

In file included from ./minisat/core/Solver.h:26,

                 from ./minisat/simp/SimpSolver.h:25,

                 from minisat/simp/SimpSolver.cc:22:

./minisat/mtl/Alg.h: In function ‘void Minisat::remove(V&, const T&)’:

./minisat/mtl/Alg.h:39: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

./minisat/mtl/Alg.h: In function ‘bool Minisat::find(V&, const T&)’:

./minisat/mtl/Alg.h:50: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

In file included from ./minisat/core/SolverTypes.h:31,

                 from ./minisat/core/Solver.h:29,

                 from ./minisat/simp/SimpSolver.h:25,

                 from minisat/simp/SimpSolver.cc:22:

./minisat/mtl/Map.h: In member function ‘void Minisat::Map<K, D, H, E>::remove(const K&)’:

./minisat/mtl/Map.h:158: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘for’ statement

./minisat/mtl/IntMap.h: At global scope:

./minisat/mtl/IntMap.h: In instantiation of ‘void Minisat::IntMap<K, V, MkIndex>::clear(bool) [with K = int, V = char, MkIndex = Minisat::MkIndexDefault<int>]’:

minisat/simp/SimpSolver.cc:651:   instantiated from here

./minisat/mtl/IntMap.h:52: warning: unused parameter ‘dispose’

./minisat/mtl/IntMap.h: In instantiation of ‘void Minisat::IntMap<K, V, MkIndex>::clear(bool) [with K = Minisat::Lit, V = int, MkIndex = Minisat::MkIndexLit]’:

minisat/simp/SimpSolver.cc:653:   instantiated from here

./minisat/mtl/IntMap.h:52: warning: unused parameter ‘dispose’

./minisat/mtl/IntMap.h: In instantiation of ‘void Minisat::IntMap<K, V, MkIndex>::clear(bool) [with K = int, V = Minisat::vec<unsigned int, int>, MkIndex = Minisat::MkIndexDefault<int>]’:

./minisat/core/SolverTypes.h:338:   instantiated from ‘void Minisat::OccLists<K, Vec, Deleted, MkIndex>::clear(bool) [with K = int, Vec = Minisat::vec<unsigned int, int>, Deleted = Minisat::SimpSolver::ClauseDeleted, MkIndex = Minisat::MkIndexDefault<int>]’

minisat/simp/SimpSolver.cc:652:   instantiated from here

./minisat/mtl/IntMap.h:52: warning: unused parameter ‘dispose’

Compiling: build/dynamic/minisat/utils/Options.o

Compiling: build/dynamic/minisat/utils/System.o

Linking Shared Library: build/dynamic/lib/libminisat.so.2.1.0

ld: unknown option: -soname

collect2: ld returned 1 exit status

make: *** [build/dynamic/lib/libminisat.so.2.1.0] Error 1



0

Interface誌 タッチパネルによる選曲機能付きMP3プレーヤの製作


知り合いの方々の記事が載っているので,くまなく読みました。

1
特集 第8章
付属RX62Nマイコン基板を使ったEdy/nanaco対応システムの事例
FeliCaリーダを使った電子マネー表示システムの製作
杉本 明加

昨年公開のTOPPERS/sspのアーキテクトによる試作記事。

2
教科書には載っていない! 現場で役立つプログラミングのちょい技
第4回 コンパイラはややこしい!?
邑中 雅樹

組込み系で一番やっかいなのは,クロスコンパイラのコンパイル。
ハードウェアであるCPUの仕様を始め,構成管理が大切なことが分かる。

3
SH-2A&RX62N対応! MP3プレーヤ製作シリーズの最終版
LCDとタッチ・パネルによる選曲機能付きMP3プレーヤの製作
松浦 光洋

特に,「タッチパネルによる選曲機能付きMP3プレーヤの製作」は,3月16日にに名古屋ではんだづけ大会&動作確認のセミナがある。
0

XcodeでStory Board

すごい。連載どちらもStory Boardの記事。

C言語からの 極めるObjective-C!! 【10】Storyboardを使った開発を極めよう 沼田 哲史
iPhone OSアプリ開発者の知恵袋【22】Storyboardで開発効率アップ!吉田 悠一
足並みを揃えたのだろうか。

この記事を見ながら,MacintoshのXcodeで,iPhoneアプリの設計/開発のため,StoryBoardを動かしてみました。

画面展開は,状態遷移のように分かり易い。
初期化など自動生成でもう少し楽をさせて欲しいと思った。
0

危険診断(リスクアセスメント)とHAZOP

危険診断(risk assessment)の一部としてHAZOPを利用する際の覚え書き。

HAZOPは、hazard and operability studyの略なので、障害分析(hazard analysis)と運用研究(operability study)を行うものです。

一連の作業の中で、全体への影響、致命度、頻度から危険性(risk)を考え、検出方法、対策などを検討し、対策の採否、選択を行うものです。

これまでHAZOPを設計審査(design review)として用いる方法を中心に検討してきました。

HAZOPでは途中でriskを考えます。また大規模な運用時の危険診断の一部の技法としても使えます。

運用研究は設計までさかのぼらずに、運用だけでも回避するために使う方法を記録します。

<< 危険診断の手順の中でのHAZOP>>
1 対象の範囲を想定する1回目のHAZOP
対象範囲を決めるのにも、HAZOPを用いるとよいでしょう。
そもそも対象範囲の決め方が問題で、肝心の事象を範囲外にしていると残念な結果になることがあります。

HAZOPを進めるなかで、原因などが出てきたときに、範囲を広げることも可能ですので、絶対最初に必要だという訳ではありません。

2 物に対する分析をしてから、事に対する分析をする

HAZOPでは、システムの状態を分析することができます。

2.1 入力だけ見る

2.2 入力と出力を見る

2.3 入力と出力と状態を見る

3 測定、検出方法の検討

懸念事項について、測定、検出できるかどうかが最初の鍵になります。
測定、検出の確率が低いと、無駄な警告や警報を発令して、結果として警告や警報を無視する習慣が生まれてしまいます。
どのような測定、検出方法をとるかは、大事な鍵になります。

新たに測定、検出する仕組みを入れると、系を乱して、振る舞いがかわるような場合があります。系を乱さずに、測定、検出する仕組みの検討が必要になります。

4 対策案
懸念事項が測定、検出できたとしても、すぐに対応がとれることと、将来しか対応がとれないことがあります。

時定数という概念があり、何か対策をとったとして、その効力がどれくらい後に効いてくるかという指標として使うことがあります。

論理回路では、数マイクロ秒以内に対応が取れますし、
電気回路では、数m秒以内に対応が取れる場合があります。

機械系では、数秒後でないと対応が取れない場合がありますし、
物理的なものの流れを利用したシステムでは数分後でないと流れが止まらない場合もあるかもしれません。

高炉のように止めることを決めてから、数日必要になるものもあるかもしれませんし、原子炉のように止めてから数十年影響を受けるものもあるかもしれません。

時間の違ごとに対策をたてるとよいでしょう。

対策には、設計の変更と運用の変更とが考えられます。

設計変更として対策をたてるときの参考になるのがTRIZなどの発明で利用してきた
設計の変更の指針です。

運用変更として対策をたてるときには、万能設計(ユニバーサルデザイン)、高齢者障碍者設計指針のような利用に関する指針を参考にするとよいでしょう。

原材料の変更や、設備で用いる部品の材料の変更に伴う不具合は、
原材料の試験結果が大切です。

加速試験だけでは、網羅できない不具合の可能性の分析にHAZOPを使うことがあります。

5 致命度の決定

致命度は、企業の事業目標によって異なります。
10年間を見渡した致命度の計算と
1年間しか見ない致命度の計算では、
計算結果が異なるかもしれません。

致命度の決定には、FMEA(failure mode effects analysis)が有効かもしれません。
どの部品のどういう不具合が、どういう結果になるかという因果関係を下から考えて行くことによって、致命度を集計していくことがあります。

故障モード(failure mode)の網羅性を確認するためにHAZOPを使うことがあります。

6 頻度の予測
過去に起きた事故などに基づく場合には、頻度の予測ができる場合があります。
過去に類似の事例がない場合には、頻度の予測は難しい場合があります。

10年間に1回くらい起きない頻度のことでも、
今年起きる可能性があります。

発生の仕組みを検討する必要があり、有効なのはFTA(fault tree analysis)で、
事故などの発生する仕組みを分析し、確率を押さえる対応をとれば、
そこで予測値を決めることができるかもしれません。

FTAの不具合(fault)の網羅性を確保するために、HAZOPを実施することがあります。

7 採否
意思決定の前に、選択可能な候補の案をいくつか作ったり、
同時に実行するとよい対応の比率を検討するとよいかもしれません。

例えば、新たに自動的に測定する仕組みを追加する場合に、
それに伴う追加の作業が与える影響、
測定の仕組みが壊れたときの対応、
それらの教育訓練など、候補をあげて、短期間の効果と長期間の効果を検討するとよいでしょう。

特に、製品寿命、商品の販売期間などに対応した検討と
企業の持続期間、工場の持続期間に対応した減価償却に見合う対策などの
原価計算に基づく費用面での検討も大切です。
0

システム技術研究会ソフトウェアプロセスアセスメント研究部会

システム技術研究会では、毎月原則、第二金曜日に、ソフトウェアプロセスアセスメントの研究部会を開催しています。

1998年から始めて、これまでの成果をここに記載します。
なお、今年の予定も順次、「作業診断試行」と「研究日誌」に順次掲載していきます。

ここでいうソフトウェアプロセスアセスメントとは、ISO/IEC 15504で規定しているprocess assessment のことです。1998年にTR(technical report)を発行し、2003年にISO/IEC 15504 part2を発行してきたものです。
当初,SPICEプロジェクトというヨーロッパ中心の事業の構成員が中心だったので「SPICEモデル」という名前がついていた事もあります。
ISO/IEC TR 15504 part5:1998の段階でも, ISO/IEC 15504 part5:2004の段階でもpart5のアセスメントモデルは,例であって,必須事項ではありません。
また,モデルの中に書いてあるPracticeは,これも指標の例であって必須ではありません。二者間契約において,必須事項として契約することは可能です。

現在有効な文書と過去の文書の一覧を別途作成します。

国際規格は、第一者、第二者、第三者のだれもが使うことができるようになっているため、第一者での利用の仕方、第二者での利用の仕方なども別途記録します。

この規格と関連する制度としては、
アメリカのカーネギーメロン大学にあるソフトウェア工学研究所(SEI)が作成したCMMIというモデルと、そのモデルの使い方に関する活動があります。

ISO/IEC 15504もSEIからco-editorに出てもらって作成しているので、大きな影響を受けています。


自動車分野では、Automotive SPICEという名称で、ヨーロッパの自動車会社、部品会社、コンサル企業などが集まって作成したモデルがあります。

また、航空宇宙では、ESA(europe space agency)が作成したといわれるS4S(spice for space)があるといわれています。

日本では、新日鉄ソリューションズが作成したSPEAKをIPA/SECが導入し、IPA/SECで保守しているSPEAK-IPA版があります。

CMMI, Automotive SPICE, SPEAK-IPAはモデルが公開されています。
企業などでも、それぞれの企業で独自のモデルを作ったりしていて、
それらの共通部分を規定して、国際的な調達の際に用いることができるようにしたものが、ISO/IEC 15504です。

名古屋の研究会では、ISO/IEC 15504のエディタや、Automotive SPICEの認定団体であるドイツのiNTACSと連携した活動、SPEAK-IPAを保守している方などに参加いただいて、日本、名古屋、中小企業にあったモデルの使い方を検討しています。

名古屋では、自動車、航空宇宙、工作機械が強いので、これらの分野に生きるモデルの使い方についても検討しています。
0

作業診断(process assessment)の分類

作業診断(process assessment)をいくつか分類することができます。

1 立場
分類の一つが、当事者の立場です。
診断側が第一者(当事者)、第二者(契約相手、取引先)、第三者(第一者、第二者でない人)の3種類あります。

この区分に従って、必要な技術、作業について確認してみます。

1.1 第一者
作業診断をISO/IEC 15504に基づいて実施する場合には、他の規格との関係をたどっておくと漏れがない可能性があります。

ISO/IEC 12207, 15288に基づいた仕立て(tailoring)をどうしているか

ISO/IEC 17050-1,2に基づいた確認をどうしているか

ISO 9001などの関連規格との接合をどうしているか。

などの3方向での検討をしていると、もれと無駄のない診断ができるというのが経験則です。

その際に、大事なのは、診断側がどういう作業を分担しているかによります。
品質関係の担当が診断すれば、その部分の入出力の確認作業は新たには必要ない。
事業責任者が診断すれば、入出力の確認は済んでいるはず。

主要な仕事は、作業改善の目標は何で、どういう根拠に基づいているかの再確認。
文書になっていないもので、文書にするとよいものは何かあるか。
文書になっているもので、無駄なものが何かあるかの見直し。
何が何に対応しているかの対応付け(mapping)か、
文書などになっているものはどのような作業規則の仕立て(tailoring)を行ったかの確認、
決めごとと現実との乖離があれば、それは現実を変える必要があるか、決めごとを現実にあわせる(fitting)解釈をし、その記録を残すことがあるかもしれません。

1.2 第二者
第二者による診断の場合に、第二者による監査とあわせて実施することがあります。この場合は、文書監査の場合には、文書の確認。口頭監査の場合には面談を行います。

第二者であっても、仕事に深く関与している場合には、大事な区切りの会合の際に、議事録にあわせて診断報告をすることもあります。


1.3 第三者
第三者による診断の場合には、ISO/IEC 17000シリーズの第三者に関する部分の規定を参考にします。

第三者の場合には、情報を得られる可能性が低いので、事前に取引先などを調査しておくことが大切です。

場合によっては、取引先の診断を合わせて請け負うと、無駄のない診断が可能になります。

製造業の診断を請け負うときには、部品会社の診断も請け負っておけば、その境界における課題が、両方の立場から見えて、明確化が可能になります。
0

TRIZとHAZOP

HAZOPの利用で、質の大(as well as)、その他(other than)をどのように取り扱うと効率的かなかなかよい方策が見つかりませんでした。

HAZOPの利用で、一番効率的なのは「言い換え」です。
moreを大きいとするか、多いとするか、高いというか、長いというか、
言葉を言い換えてみると、より容易になることがあります。

計算機の機能としても、項書き換え系というのは基本機能の一つですので、
「言い換え」が情報技術の根幹かもしれません。

次に、「単位系の適用」によって、検討漏れを防ぐようにしてきました。
グレイ、シーベルトなど、最近なじみが深くなった単位もあります。

作業手順としては、「時間を区切る」ことによって、どこまでやるかではなく、
どういう能力の人を何時間かけるかで、どこまでできたかを確認する方法をとることにしました。

何を目的にするかでは、「一つでも新しい知見を出す」ことにします。

作業の効率化のためには、一人一人の能力を最大限発揮してもらうために、
最初に一人HAZOPを実施することです。
0

準アセッサコースの実証実験の記録

準アセッサコースの実証実験をして,考えていることを整理するためにあがったことを記録します。

1 リードアセッサがいない準アセッサの役割実験(ロールプレイ)は無理がある。
2 リードアセッサコースを実施したことがある人の知見を聞くとよい。
3 なぜなぜ分析の仕方の説明があったのに生かしていない。
4 なぜ,アセスメントモデルがあるかのなぜなぜ分析をするとよい。
5 他の実在のモデルがなぜそうなっているかなぜなぜ分析をするとよい。
6 
0