このテストは何の誤りを検出できるのかしら?

やりたいこと

所得調整控除算出関数の作成

引数は収入のみ

 

収入が850万円未満

 →所得調整控除=0円

収入が850万円以上1000万円未満

 →所得調整控除=(収入-850万円)×10% 円未満切上

収入が1000万円以上

 →所得調整控除=15万円

 

たったの三分岐である。さて、収入のテストパターンをいかがしたものか?

 

単純に境界値の

8499999

8500000

9999999

10000000

でいいのか?

 

 

テストケースどうしよう?

「年調給与額」から「給与所得控除後の給与等の金額」を算出するメソッドを書いている。

計算式は下表のとおりである。円未満は切り捨てることになっている。

年調給与額が下表の範囲外になることはないものとする。

f:id:turkey_pc:20200707172224p:plain

 

メソッド自体は簡単に書けそうである。(C#ぽい何か)

decimal Hoge(decimal A){

if(A<=550999) return 0;

if(A<=1618999) return A-550000;

if(A<=1619999) return Math.Floor(A*0.6+97600);

・・・

}

みたいな感じ。

 

で、このメソッドのテストを書くにあたって境界値のケースを用意した。

A=1     (expected=0)

A=550999         (expected=0)

A=551000        (expected=1000)

A=1618999      (expected=1068999)

A=1619000      (expected=1069000)

A=1619999      (expected=1069599)

A=1620000      (expected=1070000)

・・・

うん、動く。この程度で失敗する心配はない。

 

ここでうっかりメソッド本体を書き換えてみる

decimal Hoge(decimal A){

if(A<=550999) return 0;

if(A<=1618990) return A-550000;

if(A<=1619999) return Math.Floor(A*0.6+97600);

・・・

}

一つ書き換えただけである。

これで1618999のケースが失敗するはz・・・あれ成功した?

それもそのはず

(正計算式)1618999-550000=1068999

(誤計算式)1618999*0.6+97600=1068999.4→円未満切り捨て→1068999

と、同じ値を返してしまうのである。

 

前後の計算式を取り違えた場合に失敗になるようなケースを追加しないといけない。

 

1618998だとどうだろ?

(正計算式)1618998-550000=1068998

(誤計算式)1618998*0.6+97600=1068998.8→円未満切り捨て→1068998

だめだ同じ値。

 

1618997だとどうだろ?

(正計算式)1618997-550000=1068997

(誤計算式)1618997*0.6+97600=1068998.2→円未満切り捨て→1068998

よし、ここだ。

 

 A=1618997      (expected=1068997)

のケースを追加。

 

テストケースを探すのもしんどい。

 

 

 

 

 

 

メモ AutoItで画像認識

OS Win10Pro(64bit)

AutoItのFull Instrationをダウンロードしてインストール(x86のほう)

Visual Studio 2019 Community のインストール(C++のやつ)

https://github.com/MyBotRun/Libraries のをダウンロードして展開

上で展開したファイルにつき

 ImageSearchDLL.slnがあるフォルダ(ImageSearchDLLフォルダ)をC:\にコピー

 ImageSearch.au3をAutoIt3のIncludeフォルダにコピー

C:\ImageSearchDLL\ImageSearchDLL.slnをVS2019で開く

 アップグレードメッセージが出るので従う

レッツコンパイルで出来上がるC:\ImageSearchDLL\Release\ImageSearchDLL.dllをC:\Windowsフォルダにコピー

 

で、ダブルクリックしたい画像ファイルを作成して同じフォルダにスクリプト書き書き

#include <ImageSearch.au3>
$x=0
$y=0
$result = _ImageSearch(@ScriptDir & "\" & "test.png",1,$x,$y,0)
if $result = 1 Then
   MouseClick("Primary",$x,$y,2)
EndIf

実行するとめでたくダブルクリックしてくれましたとさ。

 

雑多なメモおしまい。

 

 

 

 

 

 

 

 

 

 

 

AutoIt by VisualStudioCode C#

かっこいいタイトルつけたけど中身はどろくさいです。

C#でAutoItを使うコードをVisualStudioCode( not VisualStudio )で書いて実行させましょうということでございます。

 

Visual Studio Codeのコンソールでdotnet new console -o [プロジェクト名]

  例:dotnet new console -o AutoItByCSharp

②プロジェクトのフォルダのbin\Debug\netcoreapp3.0(一度ビルドしないと作成されない)にAutoItX3.Assembly.dllとAutoItX3_x64.dllをコピペ

③.csprojファイルのProjectタグの下に以下のようにItemGroupタグを追加

 例:AutoItByCSharp.csprojに赤字部分追加

 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <TargetFramework>netcoreapp3.0</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="AutoItX3.Assembly">
       <HintPath>C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.Assembly.dll</HintPath>
     </Reference>
   </ItemGroup>
 </Project>

④Program.csにAutoItを使ったコードを書いてみるみる

        static void Main(string[] args)
        {
            AutoIt.AutoItX.Run("notepad.exe","");
        }

⑤[F5]で実行するなり

 

AutoItXを動かすまで

個人メモ

 

よんどころなき事情にてAutoItでスクリプトを書いている。

付属のSciTE Script Editorは全角文字の対応が怪しい。

 ・新規作成したファイルに全角文字を入力しようとすると文字化け

 ・ConsoleWriteで全角文字を出力すると文字化け

f:id:turkey_pc:20191102162120p:plain

VSCodeのExtentionでAutoItのがあったのでそっちで入力した

 ・VSCodeから実行はできなかったので実行はSciTE Script Editorでやることにした

 

この後ひたすらAutoItのスクリプトを書いて所期の目的はなんとか達成できた。

 

んが、今後AutoItのスクリプトを保守していくにあたり

 ・VSCodeから実行できない

 ・スクリプトでClassが使えない

 ・AutoItの文法を他の人に学んでもらわないと保守できるのが私しかいない

というのは今後のことを考えると若干困ったなと。

 

C#からAutoIt動かせねーの?とググったらAutoItにAutoItXというのが付属していたことが判明。COMとかいうらしいのだがなんかdllを参照したりコピーしたら動いたので手順書いておく。

 

①VisualStudioでC#のConsoleプロジェクトを作る
②C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.Assembly.dllを参照追加
③Mainメソッドに適当にスクリプトを入れる

  例)AutoIt.AutoItX.Run("notepad.exe", "");
④プロジェクトのbin\DebugフォルダにC:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dllをコピー

 

で、AutoItのスクリプトでやれることがC#でできそうな感じである。

 

 

 

 

 

AutoItやってみた。

AutoItてのがあります。

何をするのかはググればすぐ見つかることですが、ざっくりいうとマウスやらキー操作の手順(スクリプト)を書いたら手順どおりにマウスやらキー操作をしてくださるありがたいものです。

www.autoitscript.com

 

弊現場にて開発中のソフトの動作確認を要求されているのですが、これが結構めんどくさいし同じことの繰り返しでイラッとするので自動化してみようと思って導入した次第です。

 

まずはAutoItをインストロールしないことには始まりません。

あ、以下、PCの環境は以下

・OS:Windows10 日本語のやつ。

・VisualStudioCodeインストール済

 

ではAutoItのインストール開始。

www.autoitscript.com

 

↑の

"AutoIt Full Installation. Includes x86 and x64 components, and:"

をDownloadして馬鹿インストール(インストールウィザードにひたすら[OK])

 

 

 

 

インストールしたらば、AutoItに付属のエディタでスクリプトを入力・・・と思ったのですが、こいつが日本語対応できてない。

しかたなくスクリプトの入力にはVisualStudioCodeを使う。AutoIt用の拡張があるのでインストールよろしくです。で、スクリプトを入力。

f:id:turkey_pc:20190607145926p:plain

 

スクリプトを入力したら即実行[F5]・・・

f:id:turkey_pc:20190607150140p:plain

あら動かないわ。なんかメッセージ書いてあるけど気にしない。AutoItに付属のエディタで開きなおす。

 

f:id:turkey_pc:20190607150343p:plain

で、ここから[F5]で無事にスクリプトを起動することができました\(^o^)/

VisualStudioCodeで編集&保存→AutoIt付属のエディタで[F5]という見事(?)な連携である。

ちなみに上のスクリプト

「メモ帳を起動してHello,Worldと入力しマイドキュメントのHello,World.txtに保存する」

というものです(※マイドキュメントにHello,World.txtがすでにある場合は上書確認で止まってしまいます)

 

本来の目的である開発中のソフトの動作確認の自動化はもうちょっとマシなスクリプトを書き上げれば達成・・・ということになります(※実物はモロにソフトの名称が入っているので公開できまへん)。

 

VisualStudioCodeで編集・gitで管理という環境にしておけばスクリプト改善が安心して行えます。頑張って自動化をめざすぞい・・・

 

<顛末>

スクリプト書くよりも、自分の手で動作確認したほうが早かった。

AutoItに慣れてないもんね。仕方ないか。また次回チャレンジだわ。

 

 

 

 

Visual Studio 2010 to Visual Studio 2019(続き)

turkey-pc.hatenablog.com

 

の、続き。

 

VS2010で識別子(変数名・プロパティ名・メソッド名など)に’・'(カタカナ中点)を使ってるとそのままではVS2019ではビルドエラーになるので、エラーになる箇所を一つずつ変更していくか。かったりーなー・・・・とツイッタランドで呟いてたら

などという啓示が。ツイッタランドには神がいた。

ブログ主が理解浅きゆえに

 などと呟こうものなら、

さっさと神自ら解決の道具までおつくり下さいました(かんしゃー

 

神の作りし道具に弊現場で使われているアセンブリを全部投げ込めばカタカナ中点を使っている識別子を網羅してくれるので、ソースコード中の該当箇所を文字列置換してしまえばOK・・・と。

 

ちょっと見えてきた。