导读
软件工程导论。 张海潘、牟永敏 著
第一章 课后部分习题
习题一:
1.什么是软件危机?他有哪些典型表现?为什么会出现软件危机?
-
软件危机:
是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要包含2方面问题:如何开发软件;如何维护数量不断膨胀的已有软件。 -
典型表现:
对软件开发成本和进度的估计常常不准确。
用户对“已完成的”软件系统不满意的现象经常发生。
软件产品的质量往往靠不住。
软件常常是不可维护的。
软件通常没有适当的文档资料。
软件成本在计算机系统总成本中所占的比例逐年上升。
软件开发生产率的提高,远远跟不上计算机应用迅速普及深入的趋势。 -
原因:
主要有2个方面: 与软件本身有关; 在开发与维护过程中的不正确方法有关。
软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。
目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。错误的认识和做法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视了软件维护。
急于求成,仓促上阵,对用户要求没有正确认识就匆忙开始着手编写程序,这就如同不打好地基就盖高楼一样,最终必然垮台。
一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。必须清除只重视程序而忽视软件配置其余成分的糊涂观念。
轻视维护是一个最大的错误。
3. 什么是软件工程?他有哪些本质特性? 怎样用软件工程消除软件危机?
- 软件工程:
是指导计算机软件开发和维护的一门工程学科。1968年第一届NATO会议上指出软件工程的目标是 经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,他应该建立并使用完善的工程原理。
包括技术和管理两方面的内容,是技术和管理紧密结合所形成的工程学科。 - 本质特性:
软件工程关注与大型程序的构造。
软件工程的中心课题是控制复杂性。
软件经常变化。
开发软件的效率非常重要。
和谐地合作是开发软件的关键。
软件必须有效地支持他的用户。
在软件工程领域中通常由具有一种文化背景的人 替 具有另一种文化背景的人创造产品。 - 怎样消除:
软件工程的7条基本原理:
用分阶段的生命周期计划严格管理。
坚持进行阶段评审。
实行严格的产品控制。
采用现代程序设计技术。
结果应能清楚地审查。
开发小组的人员应该少而精。
承认不断改进软件工程实践的必要性。
4. 简述结构化范型 和 面向对象范型的要点,并分析他们的优缺点。
- 结构化范型:
也叫传统方法学,生命周期方法学。
是吧软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。 自顶向下的顺序完成各个阶段的任务。- 优点:
每个阶段的任务相对独立,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度。
是软件开发的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。 - 缺点:
维护起来仍然很困难。
当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学往往不成功。
要么面向行为,要么面向数据。
- 优点:
- 面向对象范型:
尽量模拟人类习惯的思维方式,是开发软件的方法与过程 尽可能接近 人类认识世界、解决问题的方法与过程,从而使 描述问题的问题空间(问题域) 和 实现解法的解空间(求解域) 在结构上尽可能的一致。
主动地多次反复迭代的演化过程。
对象: 把对象作为融合了数据 及在数据上的操作行为的统一的软件构件。
类: 把所有对象都划分成类。 类是对 有着相同数据和相同操作的一组相似对象的定义
继承:类的层次结构的系统。 父类与子类(或者说 基类与派生类)
封装:对象彼此间能通过发送消息互相联系。对象的所有信息不能从外界直接访问。- 优点:
促进了软件重用。
最后都是由很多小的对象组成,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。
- 优点:
6. 什么是软件过程,他与软件工程方法学有何关系。
- 软件过程:
是为了获得高质量软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤。
软件过程必须科学、有效。 - 软件工程方法学:
在软件生命周期全过程中使用的一整套技术方法的集合。
包含3个要素: 方法、工具和过程。 - 软件工程方法学 里 包含了 软件过程。
7. 什么是软件生命周期模型? 试比较瀑布模型、快速原型模型、增量模型、螺旋模型的优缺点,说明每种模型的使用范围。
-
软件生命周期模型:
生命周期模型简洁地描述软件过程,规定了把生命周期划分成哪些阶段及各个阶段执行顺序。
可划分为8个阶段
问题定义
可行性研究
需求分析
总体设计
详细设计
编码和单元测试
综合测试
软件维护 -
瀑布模型:
优点: 它是规范的、文档驱动的方法。
缺点: 最终开发出的软件产品可能并不是用户真正需要的。
适用范围: 规模很小的项目。 -
快速增长模型: 是为了克服瀑布模型的缺点而提出来的。
优点: 不带反馈环的,软件产品的开发基本上是线性顺序进行的。 -
增量模型: 也称为渐增模型。
优点: 使投资获得明显回报和交易维护。
能在较短时间内向用户提交可完成部分工作的产品。
逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,
从而减少一个全新的软件可能给客户组织带来的冲击。
缺点: 在吧每个新的增量构建集成到现有的软件体系系统结构时,
必须不破坏原来已经开发出的产品。
要求软件具有开放的结构。
本身是自相矛盾的,除非开发人员有足够的技术能力协调好这一明显的矛盾,否则用增量模型开发出的产品可能并不令人满意 -
螺旋模型: 是风险驱动的一种模型。
优点: 维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
缺点: 只有在开发人员具有风险分析和排除风险的经验及专门知识时,
使用这种模型才会获得成功。
适用范围:适合内部开发的大规模软件项目。