导读

软件工程导论。 张海潘、牟永敏 著
第一章 课后部分习题

习题一:

1.什么是软件危机?他有哪些典型表现?为什么会出现软件危机?

  • 软件危机:
    是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
    主要包含2方面问题:如何开发软件;如何维护数量不断膨胀的已有软件。

  • 典型表现:
    对软件开发成本和进度的估计常常不准确。
    用户对“已完成的”软件系统不满意的现象经常发生。
    软件产品的质量往往靠不住。
    软件常常是不可维护的。
    软件通常没有适当的文档资料。
    软件成本在计算机系统总成本中所占的比例逐年上升。
    软件开发生产率的提高,远远跟不上计算机应用迅速普及深入的趋势。

  • 原因:
    主要有2个方面: 与软件本身有关; 在开发与维护过程中的不正确方法有关。
    软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。
    目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。

    错误的认识和做法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视了软件维护。

    急于求成,仓促上阵,对用户要求没有正确认识就匆忙开始着手编写程序,这就如同不打好地基就盖高楼一样,最终必然垮台。

    一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。必须清除只重视程序而忽视软件配置其余成分的糊涂观念。

    轻视维护是一个最大的错误。

3. 什么是软件工程?他有哪些本质特性? 怎样用软件工程消除软件危机?

  • 软件工程:
    是指导计算机软件开发和维护的一门工程学科。1968年第一届NATO会议上指出软件工程的目标是 经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,他应该建立并使用完善的工程原理。
    包括技术和管理两方面的内容,是技术和管理紧密结合所形成的工程学科。
  • 本质特性:
    软件工程关注与大型程序的构造。
    软件工程的中心课题是控制复杂性。
    软件经常变化。
    开发软件的效率非常重要。
    和谐地合作是开发软件的关键。
    软件必须有效地支持他的用户。
    在软件工程领域中通常由具有一种文化背景的人 替 具有另一种文化背景的人创造产品。
  • 怎样消除:
    软件工程的7条基本原理:
    用分阶段的生命周期计划严格管理。
    坚持进行阶段评审。
    实行严格的产品控制。
    采用现代程序设计技术。
    结果应能清楚地审查。
    开发小组的人员应该少而精。
    承认不断改进软件工程实践的必要性。

4. 简述结构化范型 和 面向对象范型的要点,并分析他们的优缺点。

  • 结构化范型:
    也叫传统方法学,生命周期方法学。
    是吧软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。 自顶向下的顺序完成各个阶段的任务。
    • 优点:
      每个阶段的任务相对独立,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度。
      是软件开发的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。
    • 缺点:
      维护起来仍然很困难。
      当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学往往不成功。
      要么面向行为,要么面向数据。
  • 面向对象范型:
    尽量模拟人类习惯的思维方式,是开发软件的方法与过程 尽可能接近 人类认识世界、解决问题的方法与过程,从而使 描述问题的问题空间(问题域) 和 实现解法的解空间(求解域) 在结构上尽可能的一致。
    主动地多次反复迭代的演化过程。
    对象: 把对象作为融合了数据 及在数据上的操作行为的统一的软件构件。
    类: 把所有对象都划分成类。 类是对 有着相同数据和相同操作的一组相似对象的定义
    继承:类的层次结构的系统。 父类与子类(或者说 基类与派生类)
    封装:对象彼此间能通过发送消息互相联系。对象的所有信息不能从外界直接访问。
    • 优点:
      促进了软件重用。
      最后都是由很多小的对象组成,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。

6. 什么是软件过程,他与软件工程方法学有何关系。

  • 软件过程:
    是为了获得高质量软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤。
    软件过程必须科学、有效。
  • 软件工程方法学:
    在软件生命周期全过程中使用的一整套技术方法的集合。
    包含3个要素: 方法、工具和过程。
  • 软件工程方法学 里 包含了 软件过程。

7. 什么是软件生命周期模型? 试比较瀑布模型、快速原型模型、增量模型、螺旋模型的优缺点,说明每种模型的使用范围。

  • 软件生命周期模型:
    生命周期模型简洁地描述软件过程,规定了把生命周期划分成哪些阶段及各个阶段执行顺序。
    可划分为8个阶段
    问题定义
    可行性研究
    需求分析
    总体设计
    详细设计
    编码和单元测试
    综合测试
    软件维护

  • 瀑布模型:
    优点: 它是规范的、文档驱动的方法。
    缺点: 最终开发出的软件产品可能并不是用户真正需要的。
    适用范围: 规模很小的项目。

  • 快速增长模型:  是为了克服瀑布模型的缺点而提出来的。
    优点: 不带反馈环的,软件产品的开发基本上是线性顺序进行的。

  • 增量模型:  也称为渐增模型。
    优点: 使投资获得明显回报和交易维护。
       能在较短时间内向用户提交可完成部分工作的产品。
        逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,
        从而减少一个全新的软件可能给客户组织带来的冲击。
    缺点: 在吧每个新的增量构建集成到现有的软件体系系统结构时,
     必须不破坏原来已经开发出的产品。
        要求软件具有开放的结构。
       本身是自相矛盾的,除非开发人员有足够的技术能力协调好这一明显的矛盾,否则用增量模型开发出的产品可能并不令人满意

  • 螺旋模型:   是风险驱动的一种模型。
    优点: 维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
    缺点: 只有在开发人员具有风险分析和排除风险的经验及专门知识时,
       使用这种模型才会获得成功。
    适用范围:适合内部开发的大规模软件项目。