1、为了更加有效地开发与维护软件,软件工作者在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科 —— 软件工程。(换句话说,计算机软件工程学出现于20世纪60年代)
2、1968年北大西洋公约组织的计算机科学家在西德召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了软件工程这个名词。(即软件工程第一次提出是在1968年)
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
它包括:
(1)如何开发软件,满足对软件日益增长的需求(开发方面)
(2)如何维护数量不断膨胀的已有软件(维护方面)
(1)对软件的开发成本和开发进度的估计往往很不准确(开发人员方面)。实际成本比估计成本有可能高出一个数量级,实际进度比预期进度有可能慢了几个月甚至几年,这种现象降低了软件开发组织的信誉。而为了赶进度和节约成本所采取的一些权宜之计往往又损害了软件产品的质量,从而不可避免地引起了用户的不满。
(2)用户对“已完成的”软件不满意的现象时有发生(用户方面)。软件开发人员常常在对用户的要求只有模糊的了解,就匆忙着手编写程序,软件开发人员和用户之间的信息交流往往很不充分,从而导致最终的产品不符合用户的实际需要。
(3)软件常常是不可维护的。(软件方面)
(4)软件产品的质量往往靠不住。
(5)通常没有适当的文档资料。
(6)软件维护费用在计算机总成本比例中逐年提高。
(7)供求问题,开发速度跟不上计算机普及速度。
(1)软件自身问题,软件不同于硬件,硬件是物理部件,而软件是计算机系统中的逻辑部件,缺乏可见性。软件规模庞大复杂,修改和维护比较困难。
(2)软件开发和维护的方法不当,忽视软件需求分析的重要性,认为软件开发就是代码编写并设法使之运行,轻视了软件维护。
(3)供求矛盾,面对日益增长的需求,开发过程显得力不从心。
软件工程是从管理和技术两个方面研究如何开发与维护计算机软件的一门工程学科。采用工程的概念、原理和方法来开发和维护软件,把经过时间检验而证明正确的管理技术和当前得到的最好的开发技术结合起来,以经济地开发出高质量的软件并有效地推护它。
注:当N=4时,显然有4(4-1)/2 = 4x3/2 = 6条通信路径
概括地说,软件生命周期由软件定义、软件开发和软件维护3个时期组成,每个时期又进一步划分成若干个阶段。
软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计、详细设计、编码和单元测试、综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
问题定义:回答要解决的问题是什么?
可行性分析:这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”为了回答问题,需要进行一次大大压缩和简化了的系统分析和设计过程。
需求分析:这个阶段的一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常称为需求规格说明书(specification)。
总体设计:回答应该怎样实现目标系统?(选择题考点 总体设计与体系结构相对应)总体设计的一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。
详细设计:回答应该怎样具体地实现这个系统?(选择题考点 详细设计与数据结构相对应)详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。
编码和单元测试:这个阶段的关键任务是写出正确的容易理解﹑容易维护的程序模块。
综合测试:最基本的测试是集成测试和验收测试。所谓集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。所谓验收测试则是按照规格说明书的规定(通常在需求分析阶段确定),由用户(或在用户积极参加下)对目标系统进行验收。
1、软件生命周期由软件定义、软件开发和软件维护 3个时期组成。
2、软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
3、软件开发时期,分为总体设计(又叫概要设计)、详细设计(又叫过程设计)、编码和单元测试、综合测试四个阶段。
4、软件开发时期,分为概要设计(又叫总体设计)、详细设计、编码和单元测试、综合测试四个时期,其中前两个阶段又叫 系统设计,后两个阶段叫 系统实现。
顺口溜记忆法:问、可、需、总、详、编、综
5、在经典的软件开发工程中,编写程序所需的工作量只占软件开发全部工作量的10% - 20%。
6、用于软件维护的费用占软件总费用的55% - 70%(维护的成本最高)。
7、测试工作所需要的工作量通常占软件开发全部工作量的40% - 50%
8、软件 = 程序 + 数据 + 文档(填空题考点)
9、软件工程关注于大型程序的构造 (判断题考点)
10、软件工程的中心课题是控制复杂性。软件规模的扩大会导致软件复杂性程指数倍数增加。(选择题考点)
11、软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
12、软件工程方法学包含3个要素:方法、工具和过程。