mike-neckのブログ

Java or Groovy or Swift or Golang

クリーンアーキテクチャーの読書メモ(3)

f:id:mike_neck:20190312230053p:plain

第二部 プログラミングパラダイム

§3 パラダイムの概要

§4 構造化プログラミング

  • Edsger Wybe Dijkstra
  • アルゴリズムの証明
    • プログラマーがプログラムを書けていない問題を、数学の証明を適用することでサポートすることを目指した
    • goto 文を濫用すると分割統治法が破綻することを発見(うまく使えば破綻しない)
    • プログラミングの最小単位である順次/選択/反復という最小セットと同じ構造になるようモジュールにわけることでプログラムが証明可能であると発見した
  • 有害宣言
  • 構造化プログラミング
    • モジュールを証明可能な単位に再帰的に分割する
    • 大きな問題は上位レベルの機能に分割、上位レベルの機能は下位レベルの機能へ無限に分割
  • 証明するという目標は達成できなかった
  • 科学の証明
  • テスト
    • ソフトウェア開発は科学の証明と同じ
      • 構造化プログラミングではプログラムを分割して、証明可能な小さな機能にする
      • 証明可能な小さなプログラムが正しくないことをテストで証明する
    • (制限)正しくないことの証明は証明可能なプログラムにしか適用できない/証明不可能なプログラムはいくらテストしても正しいとみなせない
  • ソフトウェアアーキテクトはビジネスをテスト可能なサービス/コンポーネント/モジュールに分割するため、構造化プログラミングのような制約を課している