til

ソフトウェアエンジニアリング (software engineering)

ページ構成にあたって情報処理技術者試験の区分を参考にした。[^ipa_shiken] [^ipa_shiken]: 試験区分一覧 | IPA

設計

並列処理

複数のプロセス, スレッド, アプリケーション等から共有する資源にアクセスする際、競合することなく利用するための変数をセマフォという。

セマフォでは、共有資源に同時にアクセス可能なプロセス等の上限数と、現在アクセスされている数をカウントする。数のみをカウントするため、プロセスが資源の開放を忘れると問題となる。

同時にアクセスできる上限が1のセマフォをミューテックスと呼び、これは資源に対する所有権を管理していると見做せる。

セマフォを用いたアクセス管理は、デザインパターンでは悲観ロックと呼ばれる。[^oreilly_j2ee]悲観ロックの実装としてはDBMSのトランザクションがよく挙げられるが、Webアプリケーションの場合は注意が必要である。ユーザーがデータを取得してから更新を指示するまでに2つのHTTPリクエストがあるが、HTTPはステートレスなため、DBMSのトランザクションが2つのトランザクションを跨って存在することは当然ない。従って、悲観ロックに拘る場合はセマフォを実装することも考えられる。多くの場合では、現実的には楽観ロックを併用して参照時と更新時でタイムスタンプを比較するのが良いと思われる。 [^oreilly_j2ee]: J2EEデザインパターン

形式手法

数学や論理学などに基づいたシステムの記述・検証方法を形式手法という。中でも、システムの取りうる「全ての状態」と「全ての実行パス」を全自動で網羅的に検査し、不具合を発見する手法をモデル検査という。[^formaltech] [^formaltech]: モデル検査とは

ウェブ (web)

URL

[!NOTE] RFC2616はURLの最大長を定めていないけど、長すぎる場合にDNS問い合わせやHTTPリクエストで問題にならないの?

URLフラグメント

URLにおいて#から始まる文字列。IDを加えたURLにリンクすることで特定の説にリンクできる。これを文書フラグメントと呼ぶ。

また、Webページ内のIDが指定されていない節でも、テキストを指定してリンクすることができ、これをテキストフラグメントと呼ぶ。

WebRTC

プロジェクトマネジメント (project management)

ネットワーク (network)

ネットワークを参照。

データベース (database)

組み込みシステム (embedded system)

セキュリティ (security)

ファジング

システムの脆弱性を明らかにするための費用対効果が高い方法として、ランダムな入力を用いる方法がある。これをファジングという。似た用語としてモンキーテストがある。個人的な印象としては、ファジングは脆弱性の検出に、モンキーテストは表示やデータの不整合の検出に重点を置いている。

XSS

CSRF

iOSアプリ解析

iOSアプリ解析には静的解析と動的解析がある。静的解析にはGhidraなどのツールがある。動的解析にはアプリの動作をインターセプトするFridaや通信をプロキシするCharlesなどがある。通信のプロキシにはTLS証明書の差し替えが必要になっているが、Certificate Transparencyの導入によって難しくなっている。