软件的定义:
软件一词所指包括程序以及支持程序安装、操作、修复和升级所需的所有信息及材料。这和Fred Brooks的定义是一致的,他把程序定义为一组能够在计算机上运行的指令,把编程制品定义为程序和使程序智能、可用及可扩展的元素的集合。在这种定义方式下,软件即指编程制品。
软件工程的定义:
软件工程是指将工程学、科学、原理和方法按照一定规则应用到软件开发过程中以保证质量并节约成本。
虽然这里每个词条都可以进行更深入的讨论,但我们主要考虑规则和质量,因为其他几个方面已经被广泛的接受和理解。在复杂的工程和科学领域,已定义的专业规则提供了一个框架,这个框架是在过去的教训上建立的。通过把这些规则应用到配置管理、编码标准或者命名惯例中,一个软件组织就能够避免重复解决以前遇到过的问题。这些规则对于软件工程的价值就等同干净的房间之于半导体或者标准计量单位之于实验学科。
质量是指一个产品在多大的程度上满足用户的要求。这包括功能满足、出错率、性能、可扩展性、可用性,或者任何其他对用户重要的产品特征。
软件工程过程的定义:
软件工程过程是将用户需求转化为软件所需的软件工程活动的总集。
这个过程可能包括投入、需求分析、规格说明、设计、实施、验证、安装、使用支撑和文档化,还可能包括短长期的修复和升级以满足用户增长的需求。因为维护没有被普遍接受,所以在这里没有包括进来。在美国国防部(DoD)维护包括软件修复和升级,而在商业计算机领域它是指提供服务、修复软件缺陷但不包括升级。
由于用户的需求和使用环境具有不可预知性,因此软件工程过程是一个学习改进的过程。这可能需要专门的研究用户需求,将其具体化在需求定义中,并随着在设计和实现过程中获得的更多知识进行调整。
软件工程过程的范围:
软件工程过程开始于实现软件中某项任务的决定。但它不包括如下这些与系统有关的活动:定义系统的总体目标和需求;在软硬件之间划分系统的功能;定义软硬件的接口;进行软硬件之间的整合和测试;整个系统的可接受性的测试和操作。
虽然上述这些活动是必不可少的,它们或许还需要相当的软件技能,但它们应当划分在系统设计或者系统管理当中,而不应该是软件工程过程的一部分。
软件过程架构:
一个软件过程架构是一个框架,在这个框架中一个项目的具体过程被定义了。
虽然应用在具体项目中的软件工程过程应当反映特殊性,但一个框架却需要提供项目间的共同属性。一个软件架构包括关键检查点,任务,允许采用的通用技术、方法和度量的说明。这样既带来了标准化的许多好处,又能根据项目需要灵活调整。此外,它还提供了一个评估和改进软件工程过程的框架。