软件工程导论第六版 第一章 软件工程学概述知识点总结(上)
目录
- 关于20世纪60年代 (选择题考点)
- 软件危机
- 软件危机的概念 (填空题考点)
- 软件危机的表现 (简答题考点)
- 软件危机产生的原因 (简答题考点)
- 软件工程的概念
- 软件工程的七条基本原理
- 软件生命周期
- 本章练习
关于20世纪60年代 (选择题考点)
1、为了更加有效地开发与维护软件,软件工作者在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科 —— 软件工程。(换句话说,计算机软件工程学出现于20世纪60年代)
2、1968年北大西洋公约组织的计算机科学家在西德召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了软件工程这个名词。(即软件工程第一次提出是在1968年)
软件危机
软件危机的概念 (填空题考点)
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
它包括:
(1)如何开发软件,满足对软件日益增长的需求(开发方面)
(2)如何维护数量不断膨胀的已有软件(维护方面)
软件危机的表现 (简答题考点)
(1)对软件的开发成本和开发进度的估计往往很不准确(开发人员方面)。实际成本比估计成本有可能高出一个数量级,实际进度比预期进度有可能慢了几个月甚至几年,这种现象降低了软件开发组织的信誉。而为了赶进度和节约成本所采取的一些权宜之计往往又损害了软件产品的质量,从而不可避免地引起了用户的不满。
(2)用户对“已完成的”软件不满意的现象时有发生(用户方面)。软件开发人员常常在对用户的要求只有模糊的了解,就匆忙着手编写程序,软件开发人员和用户之间的信息交流往往很不充分,从而导致最终的产品不符合用户的实际需要。
(3)软件常常是不可维护的。(软件方面)
(4)软件产品的质量往往靠不住。
(5)通常没有适当的文档资料。
(6)软件维护费用在计算机总成本比例中逐年提高。
(7)供求问题,开发速度跟不上计算机普及速度。
软件危机产生的原因 (简答题考点)
(1)软件自身问题,软件不同于硬件,硬件是物理部件,而软件是计算机系统中的逻辑部件,缺乏可见性。软件规模庞大复杂,修改和维护比较困难。
(2)软件开发和维护的方法不当,忽视软件需求分析的重要性,认为软件开发就是代码编写并设法使之运行,轻视了软件维护。
(3)供求矛盾,面对日益增长的需求,开发过程显得力不从心。
软件工程的概念
软件工程是从管理和技术两个方面研究如何开发与维护计算机软件的一门工程学科。采用工程的概念、原理和方法来开发和维护软件,把经过时间检验而证明正确的管理技术和当前得到的最好的开发技术结合起来,以经济地开发出高质量的软件并有效地推护它。
软件工程的七条基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制。在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的。当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。基准配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。 绝对不能谁想修改软件(包括尚在开发过程中的软件),就随意进行修改。
- 采用现代程序设计技术。实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。
- 结果应能清楚地审查
- 开发小组的人员应该少而精。这条基本原理的含义是,软件开发小组的组成人员的素质应该好,而人数则不宜过多。当开发小组人员数为N时,可能的通信路径有N(N一1)/2条,可见随着人数N的增大,通信开销将急剧增加。因此,组成少而精的开发小组是软件工程的一条基本原理。
- 承认不断改进软件工程实践的必要性
注:当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个要素:方法、工具和过程。
软件工程导论第六版 第一章 软件工程学概述知识点总结(上)相关推荐
- 软件工程导论第六版 第一章 软件工程学概述知识点总结(下)
目录 软件过程 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 Rational 统一过程 敏捷过程和极限编程 面向对象方法学 简答题 本章练习 软件过程 顺口溜:布 原 增 螺 喷 统 瀑布模 ...
- 软件工程学导论第一章-软件工程学概述
软件工程学概述 软件危机 软件危机的介绍 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题. 软件危机包含两方面的问题:如何开发软件,以满足对软件日益增长的需求.如何维护数量不断膨胀的 ...
- 软件工程——第1章软件工程学概述知识点整理
本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.为什么要有软件工程这门学科? 2.软件分为哪些阶段? 3.软件危机的定义? 4.软件危机包含的问题有哪些? ...
- 《软件工程导论》/ 第一章 软件工程学概述 / 1.4软件过程 / 1.4.1瀑布模型
在20世纪80年代之前,瀑布模型一致是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型.传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述. 一.按照传统的瀑布模型开发 ...
- [软件工程导论(第六版)]第5章 总体设计(复习笔记)
文章目录 5.1 设计过程 5.2 设计原理 5.2.1 模块化 5.2.2 抽象 5.2.3 逐步求精 5.2.4 信息隐藏和局部化 5.2.5 模块独立 5.3 启发规则 5.4 描绘软件结构的图 ...
- 软件工程导论第六版 第五章 总体设计知识点总结
目录 总体设计概述 目的 任务 设计过程 设计原理 什么是模块?什么是模块化? 模块化的优点 模块化和软件成本 逐步求精 什么是逐步求精? Miller法则 抽象 信息隐藏和局部化 什么是信息隐藏 信 ...
- 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第1章 软件工程学概述
文章目录 第1题 第2题 第3题 第4题 第5题 第6题 第7题 第8题 第9题 第10题 第11题 第12题 第1题 一.什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 答:软件危机是指在 ...
- 计算机网络自上而下第六版答案,《计算机网络: 自顶向下方法》(第六版) 第一章习题...
声明 本书为<计算机网络:自顶向下方法>(第六版),也就是图片上的那本.所有的课后复习题和习题答案均为个人理解,若有错误或不足的地方欢迎大家在评论中指出. 习题 P1. 设计并描述在自动柜 ...
- [软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)
文章目录 1. 什么是面向对象方法学?它有哪些优点? 2. 什么是"对象"?它与传统的数据有何异同? 3. 什么是"类"? 4. 什么是"继承&quo ...
最新文章
- 监听UIWebView点击视频播放的事件
- Maven内置变量说明
- 【Android FFMPEG 开发】FFMPEG 获取编解码器 ( 获取编解码参数 | 查找编解码器 | 获取编解码器上下文 | 设置上下文参数 | 打开编解码器 )
- 5、线程终止方式:pthread_cleanup_push/pthread_cleanup_pop()
- summerDao-比mybatis更强大无需映射配置的dao工具
- mongobd python_Python操作MongoDB数据库PyMongo库使用方法
- “被狗啃”的按钮引发的开源社区信任危机
- mp4剪辑器_想学视频剪辑,可是专业的视频软件太难,来试试这软件吧!
- 不同系统的Single Sign On(单点登录)
- MongoDB-Replication Replica Set Arbiter
- 【编程题目】求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case和条件语句...
- 【信号处理】经验模态分解 (Empirical Mode Decomposition)
- 如何在计算机安装WPS,windowsxp系统电脑怎样安装wps插件
- 华为鸿蒙系统卡顿怎么解决,为什么手机卡顿成系统难题?华为推出的鸿蒙系统有望解决...
- 【小米手机ROOT记录】
- FPGA2016~2018,FPL2017会议论文整理(持续更新)
- Linux系统搭建GPU加速的PyTorch环境
- 统计学——卡方检验和卡方分布
- Linux NFS配置固定端口
- 利用Python开发王者荣耀,一路直奔上王者