Lazy Diary @ Hatena Blog

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

Software Engineering

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

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

リテラルと定数とEnumとOTLTとResourceと……の使いわけ

プログラム中で変更可能なパラメータ(メッセージ、設定値、エラーコードなど)は、その記述方法を工夫することで、ソースコードの可読性やアプリケーション保守の容易性を向上させることができます。 一方で、大規模なチームでアプリケーション開発を行う場…

ソフトウェアエンジニアリング左道

「ソフトウェアエンジニアリング左道」という言葉を思いついた。生産性や品質向上を目的としたソフトウェアエンジニアリングでなく、どうしようもない状況をどうにかこうにか切り抜けたり、イヤな落とし穴をわざと作ったりするソフトウェアエンジニアリング…

日本のSIer的なソフトウェア工学が必要とされる前提条件

以下のような前提条件が満たされると、日本のSIer的なソフトウェア工学の有用性が高くなるのかな?という想像。 解雇規制が強い(↔カリフォルニア州の雇用法。突然の解雇が合法 *1) 雇用の流動性が低い(↔エストニア等で高い。アメリカは中位で、日本は非常…

ソフトウェアの投資効果を業務機能ごとに算出する方法

ソフトウェアを開発した場合、その投資に対する効果を確認する必要があるわけです。特に複数の業務機能を供えたソフトウェアの場合、どの機能は投資効果が高いか(より投資を増やすべきか)、どの機能は投資効果が低いか(塩漬けにするか、または削除するか…

組織内でのAPI認証にOAuth2 Client Credential flowを使うメリット募集

内閣官房が政府CIOポータルで公開してる標準ガイドライン群では、APIテクニカルガイドブックで、API認証をする際は「APIキー又はOpenID Connect」による認証を推奨しています。 ただ、調達の受注者としては「政府CIOポータルで推奨されている方式に従いまし…

ID生成方法の評価観点(主にエンタープライズアプリケーションの視点から)

発端 https://www.asahi.com/articles/ASN5N5VR4N5NULFA01F.htmlwww.asahi.com こんな話がありました。 アプリの開発者に対して「こうやってIDを採番したら、処理が競合したときにIDが重複しますよ」という説明をしたときに、「そんなことが起こる確率は低い…

RDBMSに対する考えかた(レコード内での整合性)

一般的なエンタープライズアプリケーションアーキテクチャの考えかたでは、 RDBMSの1レコードはそのまま現実世界の状態をモデル化したもの 画面に表示されているデータの内容と、DB上のデータとは整合しているべき レコードを更新するということは(たとえ部…

エンタープライズアプリケーションの開発ドキュメント作成で気をつけていること

エンタープライズアプリケーション*1を開発するときに、開発方針(従うべきアプリケーションアーキテクチャの説明から、ライブラリ的なプログラムの使い方までいろいろ)を文書化する役目がよく回ってきます。 「このライブラリにはどういう機能があるの?」…

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

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

「詳細設計書」の目指すところと戸籍情報システム標準仕様書

日本の各自治体で行われている戸籍事務は法定受託事務です。ですから、各自治体で実施する事務の内容がバラバラでは困ります。 そのため、戸籍情報システムを開発するベンダー向けに、法務省が「戸籍情報システム標準仕様書」(標準仕様書)という資料を公開…

標準レベル未満のメンバーを開発プロセスの工夫で救えるか

開発プロセスを工夫することで、標準レベル未満のメンバーを救えるのか?という話。 satob.hatenablog.com satob.hatenablog.com 少なくとも、開発プロセスは「標準レベル未満のメンバーを救うこと」が主目的ではないよなぁ、とは考えています。そういう救い…

Understandability of decision table depending on the countries

In software testing, decision table is an useful tool to identify and list up test cases and what you should check in those test cases. In Japan, there is a standard for decision table: JIS (Japanese Industrial Standard) X 0125:1986. ... B…

オブジェクトの変換にコンストラクタを使ったときの問題

背景 MyBatisのSqlSession#selectOne()で、クラスAのオブジェクトaを取得している。SELECTの結果が0件だった場合はnullが返る。 オブジェクトaを、別のクラスBのオブジェクトbへ変換したい。 問題となる設計 クラスBのコンストラクタが、引数にクラスAのオブ…

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

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

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

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

公共分野のシステム開発調達における上下分離のメリット

日本の公共分野におけるシステム開発の調達では、ときどき「上下分離」による調達が行われることがあります。ひとつのシステム開発を、業務設計 or アーキテクチャ設計くらいまでの上流工程と、コーティングを含む詳細設計~テストまでの下流工程に分けて調…

平均的プログラマ以前のメンバーにどう対処していけばよいか? (1/2)

note.mu 非常によい知見というか、経験談の集まりで、共感するところも多く、興味深く読んだ。大学のプログラミング実習の話のようだけど、企業においても、新卒採用で情報系以外の学科から採用をしている場合、状況はあまり変わらない。 以下、上記記事から…

平均的プログラマ以前向けのスキル標準の提案

「Java経験年数〇年以上のプログラマ募集」みたいなフレーズ、よく聞きますよね。で、そのフレーズで実際に人を募集してみて、来た人って期待どおりでしたか? プロジェクトの体制構築、特にトラブル発生時の体制強化に必要な人材を集める場合、求めるスキル…

SQL文の性能単価測定に適したパラメータの自動推定

多くのRDBMSには、実行したSQLの実行計画や性能単価を取得する機能が備わっています。SQLの性能単価を測定する際は、検索のパラメータや、テーブル中のデータのバラつきといった前提を、できる限り本番環境に近づけることが重要です。 たとえばPostgreSQLで…

非手続き型言語における機械的計測可能で客観的なテスト充分性の指標

プログラムをテストするときに、テストの充分性を示す指標として、C0とかC1とかのカバレッジ(コードカバレッジ)がよく使われます。 C0やC1は、実行されたことがない順次処理や、分岐したことがない分岐処理が、プログラム中に残っていないか計測するための…

「事故」という用語の由来

業務アプリの開発者は、よく「料金計算の結果が間違って出力された」とか「システムが○時間止まった」というトラブルを指して「事故」という言葉を使う。 高校や大学では使ったことのない用語だったので、これって業界用語だよね?と思って調べてみると、ど…

業務アプリケーションの排他処理あるある

この記事を書いた時の反応で、「排他制御を怠るプログラマなんてありえない」みたいなコメントを複数確認したのですが、それが結構あるのですよねー。IPAのやつは、日立さんが担当だそうですが、そういう大企業でもあるのかとは思いました(僕自身も驚いた)…

ソースコードの自動生成の意義

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

OSSの資産計上

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

ソフトウェア工学・暗黙の前提 (2)

開発者全員が開発対象のプログラミング言語を理解している 「初めて Java 触るんだけど、Eclipse ってどうやっていじるの?」も結構います。 「Eclipse が何か言ってるけど意味が分からない」はもっとたくさんいます。 「COBOLなら分かるけどJavaはよくわか…

ソフトウェア工学・暗黙の前提 (1)

就職してもうすぐ2年になります。大学ではソフトウェア工学を、主にオブジェクト指向設計/開発の勉強をしてました。私も就職して初めて気付いたのですが、現在のソフトウェア工学には暗黙のうちに置かれている前提があって、しかもそれが現実とはだいぶ違う…