本文用书:《软件工程导论》 第六版 清华大学出版社
第一章 软件工程学概述
一、软件危机
1.什么是软件危机?
指在计算机软件开发和维护过程中所遇到的一系列严重问题。
2.软件危机的典型表现:(不怎么重要)
对软件开发成本和进度的估计常常很不准确;
用户对“已完成的”软件系统不满意的现象经常发生;
软件产品的质量往往靠不住;
软件常常是不可维护的;
软件通常没有适当的文档资料;
软件成本在计算机系统总成本中所占的比例逐年上升;
软件开发生产率提高的速度,远远比不上计算机应用迅速普及及深入的趋势。
3.出现软件危机的原因:
(1)与软件本身特点有关:
缺乏可见性,进展较难衡量,软件质量较难评价;
不会用坏,难维护;
复杂性随规模的增加呈指数上升。
(2)与软件开发与维护的方法不正确有关:
忽视软件需求分析的重要性;
轻视软件维护。
4.消除软件危机的途径:
对计算机软件有一个正确的认识;
软件是一个工程项目;
推广使用成功地技术和方法,探索使用更有效的技术和方法;
应该开发和使用更好的软件工具。
二、软件工程
(一)软件工程
1.什么是软件工程?
是指导计算机软件开发和维护的一门工程学科。
2.软件工程的本质特性:
软件工程关注于大型程序的构造;
软件工程的中心课题是控制复杂性;
软件经常变化;
开发软件的效率特别重要;
和谐地合作是开发软件的关键;
软件必须有效地支持它的用户;
在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。
3.怎么用软件工程消除软件危机:
应该对计算机软件有一个正确的认识;
应该充分认识到软件开发是一种组织良好,管理严密,各类人员协同配合,共同完成的工程项目;
使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好的技术和方法;
应该开发和使用更好的工具。
(二)软件工程方法学
1.软件工程方法学三要素:方法、工具和过程。
2.简述结构化泛型和面向对象泛型的要点及其优缺点:
目前使用得最广泛的软件工程方法学:
(1) 传统方法学:也称为生命周期方法学或结构化范型。
要点:
a.结构化范型也称生命周期方法学,属于传统方法学;
b.传统的软件开发方法大部分采用瀑布模型。这种模型要求每一阶段都以前一阶段形成的文档为基础完成工作;
c.每一阶段将要完成时,都要求开发人员进行验证或确认;
d.瀑布模型要求在软件产品生成之前对用户需求进行尽可能精确的、完全的刻画。但要完成这种任务相当困难。
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作, 从而降低了整个软件开发过程的困难程度。
缺点:
a.当软件规模庞大时,或者对软件的需求是模糊的或会承受时 间而变化的时候,开发出的软件往往不成功;
b.而且维护起来仍然很困难。
(2) 面向对象方法学:
要点:
a.把对象作为融合了数据及在数据上的操作行为的统一的软件构件;
b.把所有对象都划分为类;
c.按照父类(基类)与子类(派生类)之间的关系,把若干个相关类组成一个层次结构的系统;
d.对象彼此间只能通过消息互相联系。
优点:
a.降阿斯顿发生的发生的低了软件产品的复杂性;
b.提高了软件的可理解性;
c.简化了软件的开发和维护工作;
d.促进了软件重用。
三、软件生命周期
问题定义->可行性研究->需求分析->总体设计->详细设计->编码和单元测试->综合测试->软件维护
四、软件过程
(先看综合)
模型 | 优点 | 缺点 |
瀑布模型 | 文档驱动 | 系统可能不满足需求 |
原型模型 | 关注满足需求 | 可能导致系统设计差,难于维护 |
增量模型 | 开发早期反馈及时,易于维护 | 需要开放式结构,可能会设计差 |
螺旋模型 | 风险驱动 | 风险分析人员需要有经验且经过充分训练 |
4GL模型/面向对象模型 | 支持工具丰富,自动化程度高 | 对开发组织和人员要求较高 |
(一)瀑布模型(线性顺序模型)
特点:1.顺序性、依赖性;
2.推迟程序的物理实现;
3.质量保证的观点——阶段文档与评审的要求,利于尽早发现错误。
优点:规范的、文档驱动的方法。
缺点:1.缺乏灵活性,难以适应需求不明确的或需求经常变化的软件开发;
2. 线性开发,开发过程末期见到成果,风险大;
适用场合:1.软件项目较小;
2.需求在项目开始之前已经被全面了解;
3.需求在开发中不太可能发生重大变化
4.外部环境的不可控因素很少。
(二)快速原型模型
特点:不带反馈环。
优点:有助于保证用户的真实需求得到保证。
缺点: 1.缺乏过程可见性;
2.系统结构通常会很差。
适用情况:1.中小规模的交互系统;
2.用于大型系统局部开发(系统界面);
3.可以和瀑布模型混合使用;
4.生命周期较短的系统。
(三)增量模型(渐增模型)
优点:1.能在较短时间内向用户提交可完成一些有用的工作产品;
2.用户有较充裕的时间学习和适应新产品;
3.项目失败风险较低;
4.最重要的系统服务将接受最多的测试。
缺点:集成新增量构件到现有软件体系结构中时,必须不破坏原来已经开发出的产品;
2.软件体系结构必须是开放的;
3.更需要精心的设计。
(略以下)
(四)螺旋模型
(五)喷泉模型
(六)Rational统一过程
(七)敏捷过程与极限编程
(八)微软过程