Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Software Development

JaCoCoのデータから行単位のbranch coverage (C1 coverage)は復元できない

JaCoCoはC1 Coverageが取れると言っておきながら実際に取れるのはC1(分岐網羅)でなくC2(条件網羅)という問題がある。 この問題に対して、JaCoCo組込みのReportGeneratorを改造するか、またはReportGeneratorを改造するかして、コードカバレッジのデータ…

AltCoverでVB.NETのコードカバレッジが取れるか?

結論 OpenCoverがアーカイブモードに入ってしまった。後継として推されていたAltCoverでも、OpenCoverと同じように行単位のC1が取れそう。 手順 QuickStart Guideに記載の通り、テストケースの格納されているプロジェクト中でdotnet add package AltCoverす…

Pythonプログラム中からimport文レベルの依存関係ベースで不要なファイルを除外する

動機 ソースコード調査ツールの中には、調査対象となるソースコードのサイズで価格が決まるものがあります*1*2。そういったツールの利用価格を低く抑えるには、調査対象のソースツリーから不要なファイルはできるだけ除外したいところです。 米国大統領令でS…

ツールごとのC1カバレッジ取得方法比較

Java ReportGeneratorでは、分岐カバー率50%を超える行は緑色で表示されてしまい、条件網羅を記録するJaCoCoのようなツールでは逆に表示が分かりにくいという問題があることが分かったので、JaCoCoはEclipseの画面をそのまま表示。 JaCoCoはバイトコード単位…

OpenCloverでC1カバレッジが取れるか?

結論 JaCoCoでは行単位のC1カバレッジが取れないのだ、OpenCloverでは行単位のC1カバレッジが取れそう。C1が100%実行されていないのに100%と表示されてしまうといった問題もなさそう。 手順 手元の環境ではなぜかEclipseでOpenCloverを使う手順が上手く動か…

OpenCoverでVB.NETのコードカバレッジが取れるか?

結論 OpenCover VB.NETとかでググってもぜんぜん事例が出てこないので心配になるが、OpenCoverでVB.NETのコードカバレッジも取れる。ちゃんと行単位でのC1 coverage(branch coverage, 分岐網羅)も取れる。Coverletと違って、C1が100%実行されていないのに1…

CoverletでVB.NETのコードカバレッジが取れるか?

結論 https://docs.microsoft.com/ja-jp/dotnet/core/testing/unit-testing-code-coverage では「Coverlet とは、C# 用のクロスプラットフォームのコード カバレッジ フレームワーク」と言っているが、実際にはCoverletでVB.NETのコードカバレッジも取れる。…

セキュリティ対策を発注元に断わられたことを記録する方法は?

背景 要求仕様にセキュリティ対策の記載がない場合でも、十分に認知されているリスクはベンダが対策を行う必要があるとした東京地裁平成26年1月23日判決(平23(ワ)32060号)*1が出て以降、この点についてソフトウェア請負開発を行うベンダの立場は弱く、また…

バイナリファイルをアップロードするときのエンコーディング

Q: ブラウザからバイナリファイルをPOSTリクエストでアップロードするとき、HTTPリクエストボディ上ではどういう見た目になるんだっけ? URLエンコードされる?Base64になる? A: バイナリがそのまま渡される。ChromeのAdvanced REST Clientで確認。こんな感…

Spring Frameworkのmax-file-sizeによるアップロードファイルサイズ制限のまとめ

satob.hatenablog.com application.propertiesにspring.servlet.multipart.max-file-size=100のように設定することでサイズ制限設定可能。 Spring Frameworkのファイルアップロード機能は、Webコンテナが持っているmultipartリクエストの処理機能をそのまま…

Spring Frameworkのアップロードファイルサイズ制限のテスト

spring.servlet.multipart.max-file-size=100を設定した状態で、以下のようなControllerに様々なmultipart/form-dataリクエストを送信して結果を比較した。 @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile fi…

Validate memory consumption in a JUnit test case

For load test If you want to run a load test in a JUnit test case and get maximum memory consumption or GC count as a Java variable, the way to do it doesn't seem to be. For memory consumption of whole Java VM If you want to run some tests…

テストデータに使う電話番号の作りかたの案

ダメだぞ、03-1100-xxxx とか 03-1199-xxxx みたいな番号を例に使ったら。 https://t.co/BEAaGJatJZ— AoiMoe a.k.aしお兄P (@AoiMoe) 2021年9月23日 example.com のような例示用番号というのが明確には存在しないようなので。テストエース*1とかどうしてるん…

マークアップ言語に対する静的解析

JSPやXMLなどのマークアップ言語に対して、たとえば JSPで<form:password>タグのshowPassword属性はtrueにしたらダメ JETTでxlsxファイルに<jt:comment>タグは使ったらダメ Apache FOPで<fo:external-graphic>タグのsrc属性に#や%や空白が入っていたらダメ のような、「XML SchemaやDTDでは禁止されていないけ</fo:external-graphic></jt:comment></form:password>…

監査証跡の記録をビジネスロジックとして実装する理由

多くのRDBMSでは、それぞれ監査証跡を記録する機能を備えている*1*2*3。一方で、RDBMSの監査証跡機能を利用せず、ビジネスロジックとして証跡を取得する(監査証跡を機能要件として定める)ケースもある。そこで、RDBMSの監査証跡機能を利用しない・できない…

外部プロセスとしてシェルスクリプトを起動する方法

任意の処理系から外部プロセスとしてシェルスクリプトを起動したい場合、大きく以下の2つの方法が考えられます。 (1) shの引数にシェルスクリプトを指定する /bin/sh foobar.sh のように、shの引数にシェルスクリプトを指定して起動する。 shに与えるパラメ…

Equivalent of native2ascii and native2ascii -reverse in CyberChef

CyberChef Unescape string is equivalent to native2ascii -reverse. CyberChef Escape string is almost equivalent to native2ascii. Escape level should be "Special chars". native2ascii never escape Escape single quotes, double quotes, or backt…

テスト用HTTPスタブサーバに適したプログラム

以下の条件で、以下のページで挙げられているツールをながめてみた。 nordicapis.com ボディの内容がこのパターンにマッチしたらこの内容を返す、また別の内容にマッチしたらこの内容を返す……というテストができること HTTPヘッダも含めたレスポンスの内容を…

匿名加工情報の作成に使う鍵つきハッシュの鍵をPBKDF2で生成する

個人情報を含むデータをもとにプログラムのテストデータを作成する場合などには、データの匿名化が必要になります。個人情報保護委員会「個人情報の保護に関する法律についてのガイドライン(匿名加工情報編)」*1には、管理用IDなど特定の個人の識別に使え…

ファイルをAESで暗号化したときに送信先とnonceを共有する方法

AESをECBモードで使っていたり、IVとして固定値を使っていたりするケースを避けるお手本として あるファイルをAESで暗号化し、ローカルマシンのストレージ上に保存しておく 暗号化したファイルをリモートマシンへ送付し、リモートマシンのストレージに保存す…

非機能要件の安全率の事例収集

非機能要件の安全率として「どのくらいの安全率なら適切か」という値はありません *1 (研究もないように思います)。IPA 非機能要求グレード *2 の「04_項目一覧.pdf」では、性能目標値の「余裕率」として、1倍・1.2倍・1.5倍・2倍・3倍・10倍以上から選択…

What is the difference of RFC 5322, RFC 821 and implementations of javax.mail.internet.InternetAddress ?

Test for RFC 5322: https://gist.github.com/satob/0dc003aefe020d5f1e9263bd7e173f9f (with regexp in http://www.din.or.jp/~ohzaki/mail_regex.htm#RFC) Test for RFC 821: https://gist.github.com/satob/8c5a42cf636732d81b850b58e8808eef (with regex…

メールアドレスのバリデーション方法

じゃぁメールアドレスのバリデーションってどうやったらいいのさ、という話。 satob.hatenablog.com もちろんバリデーションをした後には、メールアドレスの実在性確認のために実際にメールを送信します*1。その前段で、画面に表示したときにセキュリティ的…

What does "the syntax of RFC822" means in javax.mail.internet.InternetAddress ?

Javadoc of JavaMail API says InternetAddress class uses "the syntax of RFC822". https://javaee.github.io/javamail/docs/api/javax/mail/internet/InternetAddress.html Then how about actual implementation? Is it different from some other email…

日本政府提供のサポート終了等技術リスト

政府CIOポータルでは、日本の官公庁・地方自治体向け情報システムを開発する際に参照すべき標準ガイドライン群を公開しています。 その中に「政府情報システムにおけるサポート終了等技術への対応に関する技術レポート」という資料が公開されていて、別添資…

GDPRを遵守するためにアプリケーションに必要となる機能

あるシステムがEU域内の個人データを扱う場合、GDPRの遵守はシステムの運用主体が負うことになるわけだけれど、とはいえGDPRに対応するための機能自体がシステムに入ってないと問題になることは見えているので、機能要件に織り込んでおく必要があるわけです…

「プログラミングできるのが普通の若者たち」のレベル感

UR都市機構 Open Smart URのコンセプトブック「UR 2030」*1では、「プログラミングできるのが普通の若者たち」という2030年の若者像を示しています。 では、この「若者たち」とは、具体的にどういう人たちから構成されるのでしょうか? SSP*22030(階層と社…

mvn command results in error in Windows

You will get error when you run following Maven command from Windows PowerShell: PS C:\workspace> mvn -B archetype:generate -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quicksta…

ソフトウェア考古学論考 (2)

どっちかもいうとこっちが本題。 さて、ソフトウェア考古学の目的としては、 レガシーシステムの保守開発の効率化 システムの仕様理解の補助 の他にも、poorly-documentedなレガシーシステムのソースコードから、その仕様(あるいは意図)を読み解き復元し、…

ソフトウェア考古学論考 (1)

ソフトウェア考古学(Software Archaeology)という考え方は、OOPSLA 2001で提唱されたのが始まりのようです *1。 Wikipediaにある通り *2 、poorly-documentedなレガシーシステムのソースコードやドキュメントをどう読み解くか?というところから始まったよ…