要求は二者間取引の一つの類型の要素。文書から除外してみる。
なんにでも当てはまる概念ではありません。
ソフトウェアに関する文書から、要求という言葉を文書から削ったら一気にわかりやすくなった経験があります。
分析と設計は、表裏一体です。設計を変えていって違いを見るのが分析で、設計なしに分析はできません。設計と分析を繰り返した結果が仕様です。仕様が先にあるわけではありません。
OpenSESSAME Seminor
https://www.sessame.jp/seminar/BeginnersTextbook/SESSAME_BegginersTextbookChapter5.pdf
全ての基本は構造化から。『組み込みソフトウェア開発のための構造化モデリング』
https://dlrecord.hatenablog.com/entry/2020/12/30/131554
p.174
本文 ファンアウト数が多いということは、それだけそのモジュールの処理が複雑になっていることを表します。すなわちコヒージョンが低いモジュールになっている可能性が高いです。
説明 出力先(fan out)数が多い場合、出力先の処理を分析します。次に共通する処理がある場合は、一端共通処理をする関数に渡すか、マクロ処理をします。出力先が多いからといって処理が複雑になっているとは限りません。全体の構造設計、関数を小さくしすぎているかなど、他の要因を考えられます。凝集度(cohesion)
lack of cohesion of methods
https://www.aivosto.com/project/help/pm-oo-cohesion.html
ソフトウェアの品質(凝集度)って??
https://qiita.com/issykatsu/items/e8c1b4acc7bd30dda32d
凝集度と結合度を調べてみた
https://qiita.com/kosuke-17/items/415f5af84e1e5882fb33
DRY原則
凝集度
https://qiita.com/kannkyo/items/fc843ae2ae788dc843a2
アプリケーションサービスの凝集度を高めたい
https://qiita.com/nrslib/items/4ff4e3a3547bbd69f9f9
[フロントエンド] うわっ…Componentの凝集度、低すぎ?
https://qiita.com/aki202/items/b279fa8097dde82e2730
なぜフロントエンド開発にStorybookを導入するのか
https://qiita.com/aki202/items/bd5a22813352d1834a93
凝集度と結合度について
https://affordd.jp/koha_hp/KeyWords/KW.Coupling.html
結合度と凝集度!!
https://qiita.com/ozlee/items/64edb1cddab3a5a0bdb6
結合度と凝集度
https://qiita.com/dsudo/items/ee3fee1f558c7f1b359f
クラスや関数を設計する時に何を考えればいいのか
https://qiita.com/eotw95/items/7ba8c6fb3b1f74d4ecca
結合度について
https://qiita.com/uesho/items/59c99ccd712a591883d2
「結合度」を意識してコーディングしましょう
https://qiita.com/kona3/items/9c7e853106b8f8d07c30
モジュール結合度について
https://qiita.com/eKushida/items/39bdb3f88fb68ecd66f6
モジュールの結合度について
https://qiita.com/masaya8028/items/e46ad2b9c26c34d4815a
ソフトウェア開発の原則 AFFORDD
https://affordd.jp/koha_hp/SCNews/pdf83-99/SCNews96.pdf
カップリング(結合度)とコヒージョン(凝集度)は、1970年代に Larry Constantine と
Edward Yourdon によって定義されたものだが、これらは今なお、あるソフトウェア・システム
に固有の保守性と適応性を測定する最善の方法である。要するに、カップリングは、2つのソフ
トウェア・コンポーネントがどのように相互に関係するかを測定するものであり、コヒージョン
は、あるソフトウェア・コンポーネントによって実行される機能にどのような関係があるかを測
定するものである。我々は、低いカップリングと高いコヒージョンに向けて努力する必要がある。
なぜなら、高いカップリングは、あるコンポーネントを変更すると、他のコンポーネントも変更
される可能性が高いことを意味し、低いコヒージョンは、エラーの原因や、新たな要求項目に適
応させるための修正個所を特定するのが困難であることを意味するからである。Constantine と
Yourdon は、この2つの概念を測定する簡単な方法も提供している。1979 年以降に書かれたソ
フトウェアの設計に関する本のほとんどは、これらの測定について述べている。これらを学び、
設計上の決定の手引きとして利用せよ。
(201の鉄則:原理73<設計の原理=カップリングとコヒージョンを使え>)
(完全自分用メモ)モジュール設計・モジュール結合度
https://qiita.com/bayastea/items/71b208c14db53e9c64b0
オブジェクト指向に近づく9つのルール (ThoughtWorks アンソロジーより)
https://qiita.com/kiiimiis/items/dab7ebbcab640b4f2aa0
オブジェクト指向 is 抽象データ型
https://qiita.com/saitofjp/items/331ea195bbfd29f96ccc
ソフトウェア工学2023 03 下流工程
https://www.slideshare.net/slideshow/2023-03/261876868
P175
本文 構造図のトップはmain()関数ではありません。
説明 main()関数はPOSIX OSで使うHosted環境での起動関数です。freestanding環境では起動関数はOSが起動していない状態で呼び出します。mainという名前以外の関数を定義してもよいことになっています。
Hosted環境でmain()関数にシステムの目的を記述することは可能です。あるいは、main()関数を持ったいくつものモジュールを組み合わせてシステムを設計する場合、関数ではなくモジュール名を使います。
最大抽象点とは、入力データが種々の変換を経て抽象度が最大となる点のことで、データ毎の独立性が高い処理となります。この点を機能単位での制御モジュールとして扱うことで、データ毎の独立性が高い処理となります。プログラムの処理は入力、変換、出力から構成されると考え、入力は源泉、変換は変換、出力は吸収として分割します。分割の基準は最大抽象入力点と最大抽象出力点で、この2点で分割したモジュールを上位に制御モジュールを配置して管理します。12
目から鱗が落ちるように分かるプログラミング講座
https://www.acroquest.co.jp/webworkshop/programing_course/note.html#DIVIDE_DATUM1
基本設計-1:日本IBMの「IBM-DOA」に基づく外部設計フェーズの手順
https://caoxj-study.blogspot.com/2010/01/blog-post.html
ソフトウェア設計に関する名著
http://my-web-site.iobb.net/~yuki/book/structured-design/
Oxford辞書の意味を書く。国際規格のDirectivesの引用を書く
翔泳社:「組込みソフトウェア開発のための構造化モデリング」
技術評論社:「かんたんUML入門」
C言語(C++) | File | process | CPU例 | OSEK/POSIX/AUTOSAR | |
---|---|---|---|---|---|
ITRON Smallest set Profice | freestanding | 0 | 2 | ARM, M32C | OSEK BCC1相当 |
ITRON 自動車用Profile | freestanding | 0 | 2 | - | OSEK ECC2相当 |
ITORN Just Standard Profile | freestanding | 0 | 2 | ARM, M32C, RH850 | |
OSEK/VDX OS | freestanding | 0 | 2 | ARM | OSEK |
AUTOSAR CP OS | freestanding | 0 | 2 | ARM, RH850 | OSEK |
MS-DOS | hosted(SDL) | 1 | 2 | Intel | non POSIX |
POSIX PSE51 | hosted(SDL/STL)+POSIX | 0 | 1 | ARM, INTEL | AUTOSAR AP |
POSIX PSE52 | hosted(SDL/STL)+POSIX | 1 | 1 | ARM, INTEL | |
POSIX PSE53 | hosted(SDL/STL)+POSIX | 0 | 2 | ARM, INTEL | |
POSIX PSE54 | hosted(SDL/STL)+POSIX | 1 | 2 | ARM, INTEL | |
QNX | hosted(SDL/STL)+POSIX | 1 | 2 | ARM | |
PikeOS | hosted(SDL/STL)+POSIX | 1 | 2 | ARM | |
BSD | hosted(SDL/STL)+POSIX | 1 | 2 | ARM, INTEL, POWERPC… | POSIX PSE54 |
Linux(Debian, Raspbian, Ubuntu) | hosted(SDL/STL)+POSIX | 1 | 2 | ARM, INTEL, POWERPC… | POSIX PSE54 |
macOS | hosted(SDL/STL)+POSIX | 1 | 2 | ARM, INTEL | POSIX PSE54 |
Windows(Cygwin) | hosted(SDL/STL)+POSIX | 1 | 2 | ARM, INTEL | POSIX PSE54(グループ除く) |
PSE51.52.53はライブラリを小さくできるはず
https://www.opengroup.org/testing/testsuites/POSIXProfiles.htm
https://www.opengroup.org/testing/testsuites/VSPSE52.htm
LLD Low Level Driver file:///C:/Users/k-ogawa/Downloads/S32K3_RTD_Training_eMIOS_public.pdf
ADCの能力の種類の資料をのちほど展開
shift add
tick tickless
ISO/IEC 14882 Programming language C++ https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/n5001.pdf
ISO/IEC 9899 Programming Language C https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3435.pdf
POSIX: Portable Operating System :https://pubs.opengroup.org/onlinepubs/9799919799/
NIST POSIX Test Suite https://qiita.com/kaizen_nagoya/items/57ee061892bc9afcf860
https://www.opengroup.org/testing/testsuites/POSIXProfiles.htm
やってないこと、わかってないこと。
計算機が状態機械であることを説明した資料。
RUSTとC++とCの型チェックによるテストを少なくできる例を示す。
CALLBACK 関数、CALL OUT関数、 REENTRANT関数、RECURSIVE関数の良い事例。