ソフトウェア工学
software engineering という英語の場合、必ずしも工学の一分野を指すわけではなく、以下のような用法もある。
元々、プログラミングおよびシステム分析と呼ばれていた活動などを総称的に software engineering と呼ぶ。
プログラミングに必要とされる理論的側面をコンピュータ科学と呼び、そうでないあらゆる面を software engineering と称する。
「プログラミング」を単なる技巧や技能ではなく工学として扱うことを主張する用語であり、そのような指針を文書化したもので使われる。
software engineering は、ある種の学問的訓練、専門教育が必要であり、それにはソフトウェア開発には必ずしも使われないものも含まれるとする人もいる。よく言われる喩えとして、建築に携わる全ての人が建築学者ではないのと同様、ソースコードを書く人が常にソフトウェア工学者とは限らない。
ソースコードの様々な場所に定型的コードを追加・削除するツールを提供することで、品質を高める支援をする。アスペクトには、あらゆるオブジェクトや関数が特定の状況でどう振舞うべきかを記述している。例えば、アスペクトを使って、特定の型の全オブジェクトにデバッグ機能、ロギング機能、ロック機能などを追加できる。現在は、アスペクトを使って汎用コードを設計する方法の研究が進んでいる。関連する概念として、自動プログラミングやテンプレートがある。
ソフトウェアシステムをより良くする様々な方法論(英: methodology)がソフトウェア工学として研究されている。ライフサイクルごとの方法論や、アーキテクチャ実現に関する方法論などがある。特定の設計を採用しそれが開発プロセスと強くリンクするような方法論も当然存在する。オブジェクト指向開発方法論、ドメイン駆動設計がその例である。