<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>テスト  |  NORE（ノア：ノー・リタイアメント）</title>
	<atom:link href="https://genzo.jp/tag/verify/feed/" rel="self" type="application/rss+xml" />
	<link>https://genzo.jp</link>
	<description>デジタル力で生き抜く！</description>
	<lastBuildDate>Mon, 26 Aug 2024 03:57:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.5</generator>

<image>
	<url>https://genzo.jp/wp-content/uploads/2023/08/cropped-genzo_512-32x32.png</url>
	<title>テスト  |  NORE（ノア：ノー・リタイアメント）</title>
	<link>https://genzo.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href=""/>	<item>
		<title>テストの網羅率で品質を高める</title>
		<link>https://genzo.jp/improve_quality_with_test_coverage/</link>
		
		<dc:creator><![CDATA[源田 公平]]></dc:creator>
		<pubDate>Sun, 10 Mar 2024 07:17:59 +0000</pubDate>
				<category><![CDATA[ITツール]]></category>
		<category><![CDATA[エンジニア]]></category>
		<category><![CDATA[テスト]]></category>
		<guid isPermaLink="false">https://genzo.jp/?p=1143</guid>

					<description><![CDATA[ソフトウエアの品質を担保するのはテストです。どんなバグもテストで見つけられれば品質を上げられます。バグを1つでも多く発見できるように網羅率の高い検査項目を出して、効率的にテストしていくことが必要になります。]]></description>
										<content:encoded><![CDATA[<div class="summary_box">
&#x1f4a1; ソフトウエアの品質を担保するのはテストです。どんなバグもテストで見つけられれば品質を上げられます。バグを発見できるように網羅率の高い検査項目を出して、効率的にテストしていくことが必要になります。</p>
</div>
<h3>ソフトウエアの品質を守る最後の砦はテスト</h3>
<p>ソフトウエアをリリースして良いかを判断する重要な指標の一つにテストの結果があります。</p>
<p>テストは開発者と別の人が、仕様書と付きあわせて検査項目を作り、一つ一つ検査していきます。</p>
<p>開発者は自分でプログラミングしているので問題ないはずと思っていますし、またある程度の規模以上では複数人で開発することがほとんどなので、個々の部分には問題がなくても全体で動かすとお問題が起きることもあります。</p>
<p>ですので、第三者がソフトウエアの全体をくまなく検査することが求められます。</p>
<p><strong>テストはソフトウエアの品質を決める最後の砦なのですが、問題はきちんと検査項目をしっかり出し、機能のほとんどをカバーできているか、ということがとても重要になります。</strong></p>
<p>テストは期間の定めもあり、人員の制約もありますので、テストの網羅率を高めた上で効率的に進めていくことが求められる、非常に重要な仕事です。</p>
<p><img decoding="async" style="display:block; margin-left:auto; margin-right:auto;" src="/wp-content/uploads/2024/03/240310-02.svg" alt="240310 02" title="240310-02.svg" border="0" width="" height="" /></p>
<h3>検査項目は正常系と異常系をカバーする</h3>
<p>検査項目を作るとき、仕様書の記述に沿って検査項目を作っていきます。</p>
<p>開発者はプログラムのコードのすべてをカバーできるようにプログラムベースのテストしますが、テストで行う工程ではプログラムがどう作られているかではなく、機能が仕様書通りに動くのかで検査します。</p>
<p><strong>機能的には大きく正常系と異常系に分かれ、正常系とは通常の操作で問題なく動作する場合のことを言います。エラー処理も決まっている場合は、これも正常系に含みます。</strong></p>
<p>例えば、入力画面で入力できない文字を入力したときにはじくようにするのは正常系に分類されます。</p>
<p>異常系とは、正常な動作をしたにもかかわらず起きる場合で、入力がサーバーに通知されたのに保存されていないとか、保存できていないことがわかり別の部分がアラートを出したとか、そういったときの処理になります。</p>
<p>正常系、異常系、どちらもシステムの機能として不可欠です。</p>
<p>両方をカバーしてはじめて検査項目としてできたということが言えます。</p>
<p><img decoding="async" style="display:block; margin-left:auto; margin-right:auto;" src="/wp-content/uploads/2024/03/240310-03.svg" alt="240310 03" title="240310-03.svg" border="0" width="" height="" /></p>
<h3>異常系のテストが難しい</h3>
<p>異常系もテストに必要なのはわかっていても、異常系とはそもそも通常の仕組みの中で起きにくいことなので、なかなか現象を起こせないというジレンマがあります。</p>
<p>そのテストのためには、いかにして異常に近い状態を発生させるか、ということがカギになります。</p>
<p>そのためには開発者の協力が不可欠になる場合もあります。</p>
<p>やりたい異常系の状態にもよりますが、例えば内部的に異常な状態を作り出すわけですね。</p>
<p><strong>なかなかこういうテストは難しく、機能の100%をカバーしていくことは至難の業です。</strong></p>
<p><strong>それでもテストが最後の砦である以上、できる限りカバーしていくことが求められます。</strong></p>
<p>どうしてもテストできないものは、開発者がテストしていることでよしとする場合もあります。</p>
<p><img decoding="async" style="display:block; margin-left:auto; margin-right:auto;" src="/wp-content/uploads/2024/03/240310-04.svg" alt="240310 04" title="240310-04.svg" border="0" width="" height="" /></p>
<h3>網羅性の高い検査項目を作る</h3>
<p>検査項目を出すとき、組み合わせとして多くのことをカバーするのが大切です。</p>
<p>やみくもにたくさんやっても、同じことを検証しているだけということになりかねませんし、いかにテストの網羅性を上げるかということに注力しましょう。</p>
<p><strong>網羅性を上げるためには、組み合わせとして違うパターン作ったり、値として意味の違うものを与えることによって、プログラムの違う経路を確認したりします。</strong></p>
<p>そのためにも、機能仕様を理解して、通常はこういう動作をするが、これこれのときは別の処理をしているなということを理解して、通常と別の処理をしているパターンを分けてテストをするということになります。</p>
<p>その辺の検査項目の組み方は少々熟練する必要があるとは思いますが、既存のテスト項目をみながら学んでいくことが大事でしょう。</p>
<p><img decoding="async" style="display:block; margin-left:auto; margin-right:auto;" src="/wp-content/uploads/2024/03/240310-05.svg" alt="240310 05" title="240310-05.svg" border="0" width="" height="" /></p>
<h3>テストの効率化を目指す</h3>
<p>テストは最後の砦ですが、何でもかんでもテストでカバーすることはできません。</p>
<p><strong>時間は限られますし、テストの人員も必要な分だけ提供されるわけでもありません。</strong></p>
<p><strong>そこで効率的なテストの実施が求められます。</strong></p>
<p>検査項目の順序の組み方次第で、1つの手順で2つ以上の検査を実施できる場合もありますし、組み合わせとして減らせる場合もあります。</p>
<p>テストの順番によって同じことを繰り返す手間を減らせることもあります。</p>
<p>テストの進捗やテストの目的にもよりますが、テスト項目に書かれた通りに順にやるのではなく、効率的な実施方法も考えながらやることも大事です。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>プログラムのバグをなくすなら、テストを綿密にするのが早道</title>
		<link>https://genzo.jp/how_to_remove_bugs/</link>
		
		<dc:creator><![CDATA[源田 公平]]></dc:creator>
		<pubDate>Mon, 06 Aug 2018 07:11:58 +0000</pubDate>
				<category><![CDATA[エンジニア]]></category>
		<category><![CDATA[テスト]]></category>
		<guid isPermaLink="false">https://genzo.jp/?p=141</guid>

					<description><![CDATA[プログラムのバグをなくすことは、プロジェクトの関係者なら誰でも望むことです。ところがこれを実現するには、綿密にテストするしかありません。テストしなくても大丈夫だろうと思わず、緻密な検証を重ねることがプログラムのバグをなくす最短経路と言えます。]]></description>
										<content:encoded><![CDATA[<aside>
プログラムのバグをなくすことは、プロジェクトの関係者なら誰でも望むことです。テストしなくても大丈夫だろうと思わず、緻密な検証を重ねることがプログラムのバグをなくす最短経路と言えます。</p>
</aside>
<h3>仕様通りに作られているかを検証する</h3>
<p>どんな製品やシステムも、性能が正しく満たされているか、期待通り動くかテストが不可欠です。</p>
<p>ソフトウエアも例外ではありません。</p>
<p>すべての仕様が期待通り実装されているのか、検証が欠かせないのです。</p>
<p>設計段階から仕様通りになるように設計し、時にレビューし書いたプログラムをテストし問題なく動くように実装していくのですが、<strong>実際には「すべての仕様」が満足通り動くことを確認することはかなり難しいことです。</strong></p>
<p>難しいのは、すべての仕様を洗い出すことです。</p>
<p>技術者にとって仕様とは「仕様書に書かれるもの」を意味しますが、必ずしも仕様にはすべてのことが網羅されていないことがあります。</p>
<p>できる限りのことを書くのですが、書き切れない仕様も実際には発生してしまいます。</p>
<p>そうすると、実際には予期していなかった動作をしたり障害が起こりえます。</p>
<p>最悪の場合、世の中に出してから気づくことも少なくないのです。</p>
<p>仕様に基づいてテストすることは当たり前ですし、それだけではなく仕様と仕様の組み合わせの評価をしっかりと行うことが大事です。</p>
<p>仕様を積み重ねていった結果、あの仕様とこの仕様を組み合わせると、想定していなかった組み合わせが発生するということで抜けが発生することもあります。</p>
<p><strong>たとえ仕様書に書かれていても組み合わせとして気づかなかったり、仕様書には書かれていなくてもバグが潜む可能性を察知して問題点を洗い出すことがとても大事になります。</strong></p>
<p>評価は評価者の仕事、という風に考えず、自らしっかりとテストする意識がが欠かせないのです。</p>
<h3>バグは早めに潰すことが大切</h3>
<p>誰しも人から「君、間違っているよ」といった指摘は受けたくないものです。</p>
<p>特にプログラムの場合、評価者から指摘されると、その指摘件数が記録に残りますし、そのバグを直すためにどのような対応をしたのかも説明する必要があります。</p>
<p>特に開発の終盤であれば、小さな修正であっても他の機能への萍郷がないのかを綿密に調べる必要があるのです。</p>
<p>バグの内容と修正にかかる手間を考えたとき、そのバグを適切な時期まで直さないという対応だって採られることがあるくらいなのです。</p>
<p><strong>後になって発見されればされるほど、ことは深刻になっていきます。</strong></p>
<p>ですから、バグは極力早めに潰すことが大事になりますし、そのためにも自分でできる限りの評価をするという姿勢が大事になるのです。</p>
<h3>評価には設計が必要</h3>
<p>バグを早く取り除くようにするといっても、手当たり次第に評価を実施していたのでは、ばらつきが出ますし抜けも発生します。</p>
<p><strong>テストすべき項目が抜けた場合には、本来見つかるべきバグが見つけられないということになりかねません。</strong></p>
<p>そうした抜けを防ぐためには、評価にも設計をして抜けを発生させない対策が必要になります。</p>
<p>テストを設計するためには、仕様書や設計書に基づいたテストをしていく必要があります。</p>
<p>プログラマはプログラムに基づいてテストをすることが多いと思いますが、仕様書などのよりどころに基づいて評価をすることによって、抜けを防ぐことができます。</p>
<p>もし、自分が書いたコードに基づいてテストしたら、本来あるべき仕様が入っていない（実装漏れ）ことに気づかないかもしれないのです。</p>
<p>ですから、<strong>評価をする場合には仕様書や設計書といった、よりどころとなる文書に基づいて行うのです。</strong></p>
<h3>ホワイトボックステストを実施する</h3>
<p>テストは、大きく2つの観点があります。</p>
<p><strong>コードの中身を知った上で行う「ホワイトボックステスト」と、中身の動作を知らず入力と出力の結果だけを頼りにテストをする「ブラックボックステスト」の2つです。</strong></p>
<p>この2つは大きく目的が異なります。</p>
<p>ホワイトボックステストは、初期の頃に行われるテストでよく行われ、プログラマが開発しながら行うテストではコードに沿ったテストをします。</p>
<p>このとき、コードのどれだけの部分を評価したかという指標であるカバレッジも大事になります。</p>
<p>後の行程のテストになればなるほど、コードの細かい部分のテストはできなくなっていきますので、初期段階でコードごとのテストを行い、後半のテストでは全体として問題かを確認するのです。</p>
<p>特にエラーが発生したときの例外処理など、実際のテストでは起こせないものもありますので、ホワイトボックステストで隅々までテストしておくことが求められるのです。</p>
<h3>コード修正したら必ず周辺もテストする</h3>
<p>忘れがちなのが、何かバグがあって修正したときの関連部分のテストです。</p>
<p><strong>コード修正するとき、自分が思っている影響範囲のテストはするのですが、それよりも広くテストすることが大事です。</strong></p>
<p>影響があると思われることは結構調べるのに、それ以外のことを意外と見落としていることも少なくないのです。</p>
<p>それを防ぐには、一連の機能の確認をすればいいです。</p>
<p>ざっと機能を確認すれば、コード修正による影響を見つけやすいからです。</p>
<p>面倒だけれども、直したコードに問題がないか、より広い視野で確認することが必要です。</p>
<p><strong>後になって見つかったバグを調べていったら、ずっと前に直したコードの影響だった、ということはプログラマなら経験のあることでしょう。</strong></p>
<p>こういうのは原因見つけるのに時間がかかったりもします。</p>
<p>コード修正時になるべくバグを混入させない、そういう意識で取り組むことが大事です。</p>
<h3>プログラムの品質はテストで上げる</h3>
<p>結局のところ、完璧なプログラムというのは存在しません。</p>
<p>だから評価で確認するという気持ちが不可欠なのです。</p>
<p><strong>頭の中で「問題ないはず」と思っていることを、面倒でも「動かして検証する」という姿勢が必要なのです。</strong></p>
<p>面倒でもこういうことをやるプログラマのコードにバグは少なく、面倒くさがる人のコードにはバグが残るのです。</p>
<p>仮に瞬殺できるバグだとしても、そういうバグを残さないことが大事です。</p>
<p>そういう緻密さがプログラマとしての信頼を高めてくれるのです。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
