软件工程:必须以有组织的质量保证为基础,全面质量管理和过程改进使得更加成熟的软件工程方法的不断出现。
目标:
软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:
(1) 合理预算开发成本,付出较低的开发费用;
(2) 实现预期的软件功能,达到较好的软件性能,满足用户的需求;
(3) 提高所开发软件的可维护性,降低维护费用;
(4) 提高软件开发生产率,及时交付使用。
过程:
软件过程是为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。
生命周期:
(1) 计划阶段
确定待开发系统的总体目标和范围,研究系统的可行性和可能的解决方案,对资源、成本及进度进行合理的估算。软件计划的主要内容包括所采用的软件生命周期模型、开发人员的组织、系统解决方案、管理的目标与级别、所用的技术与工具,以及开发的进度、预算和资源分配。
没有一个客户会在不清楚软件预算的情况下批准软件的方案,如果开发组织低估了软件的费用,便会造成实际开发的亏本。反之,如果开发组织过高地估计了软件的费用,客户可能会拒绝所提出的方案。如果开发组织低估了开发所用的时间,则会推迟软件的交付,从而失去客户的信任。反之,如果开发组织过高地估计了开发所用的时间,客户可能会选择进度较快的其他开发组织去做。因此,对一个开发组织来说,首先必须确定所交付的产品、开发进度、成本预算和资源配置。
(2) 分析阶段
分析、整理和提炼所收集到的用户需求,建立完整的分析模型,将其编写成软件需求规格说明和初步的用户手册。通过评审需求规格说明,确保对用户需求达到共同的理解与认识。需求规格说明明确地描述了软件的功能,列出软件必须满足的所有约束条件,并定义软件的输入和输出接口。
在开发的初期,客户从概念上描述软件的概貌,但是这些描述可能是模糊的、不合理的或不可能实现的。由于软件的复杂性,软件开发人员很难将待开发的软件及其功能可视化,这对于一个不懂得计算机专业知识的客户来说是一件十分糟糕的事情。因此,需求阶段常常产生错误,也许当开发人员将软件交付给客户时,客户会说:"这个软件是我们要求的,但并不是我们真正需要的。"为了避免或减少需求的错误,需要采用合适的需求获取和需求分析技术,如快速原型和用例建模的方法等。
(3) 设计阶段
设计阶段的目标是决定软件怎么做,设计人员依据软件需求规格说明文档,确定软件的体系结构,进而确定每个模块的实现算法、数据结构和接口等,编写设计说明书,并组织进行设计评审。
软件设计主要集中于软件体系结构、数据结构、用户界面和算法等方面,设计过程将现实世界的问题模型转换成计算机世界的实现模型,设计同样需要文档化,并应当在编写程序之前评审其质量。
(4) 实现阶段
实现阶段是将所设计的各个模块编写成计算机可接受的程序代码,与实现相关的文档就是源程序以及合适的注释。
(5) 测试阶段
在设计测试用例的基础上,测试软件的各个组成模块。然后,将各个模块集成起来,测试整个产品的功能和性能是否满足已有的规格说明。
一旦生成了代码,就可以开始模块测试,这种测试一般由程序员完成。但是,对于用户来说,软件是作为一个整体运行的,而模块的集成方法和顺序对最终的产品质量具有重大的影响。因此,除了单个模块的测试外,还需要进行集成测试、确认测试和系统测试等。
(6) 维护阶段
一旦产品已交付运行之后,对产品所做的任何修改就是维护。维护是软件过程的一个组成部分,应当在软件的设计和实现阶段充分考虑软件的可维护性。维护阶段需要测试是否正确地实现了所要求的修改,并保证在产品的修改过程中,没有做其他无关的改动。
开发模型:
增量模型(Incremental Model)
与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成,如图1.8所示。
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:
(1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
(2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。
例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。