一、 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?

  • 定义:在计算机软件的开发和维护过程中所遇到的一系列严重问题
  • 表现:
    • 开发成本和进度估计不准
    • 用户对已交付软件不满意
    • 软件产品质量靠不住
    • 软件可维护性差
    • 软件没有适当文档材料
  • 出现原因:
    • 软件本身特点
    1. 管理和控制软件开发过程困难
    2. 开发中发现的错误可能使用很久才发现
    3. 规模庞大,程序复杂
    4. 对用户需求没有完整准确的认识就开始编码
    5. 对软件开发和维护观念未转变,采用错误的方法和技术
    6. 忽视软件需求分析的重要性
    • 软件开发和维护的方法不正确
    1. 只重视程序而忽视软件配置其余成分
    2. 软件定义时期没有正确全面的理解用户的需求

二、 什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?

  • 定义:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
  • 本质特征:
    • 软件工程关注大型程序的构造
    • 软件工程的中心课题是控制复杂性
    • 软件经常变化
    • 开发软件的效率非常重要
    • 和谐的合作是开发软件的关键
    • 软件必须有效地支持它的用户
    • 在软件工程领域中往往是由具有一种文化背景的人替具有另一种文化背景的人创建产品
  • 消除软件危机的方法:
    • 彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念
    • 必须组织良好、严格管理、各类人员协同配合,共同完成
    • 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好的更有效的技术与方法
    • 应该开发和使用更好的开发工具
    • 既要有技术措施,又要有好的管理组织措施

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

  • 结构化泛型:
    • 采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或者软件工程环境来支持结构化技术的运用
    • 传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务
    • 在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审
  • 面对对象泛型:
    • 面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法
    • 把对象作为融合了数据以及在数据时的操作行为的统一的软件构件
    • 把所有对象都划分成类
    • 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统
    • 对象彼此之间仅能通过发送消息相互联系
  • 优缺点分析:
    • 结构化泛型:
    1. 优点:把软件生命周期划分成几个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作, 从而降低了整个软件开发过程的困难程度
    2. 缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时 间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难
    • 面对对象泛型:
    1. 优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作; 促进了软件重用

四、 什么是软件过程?它与软件工程方法学有何关系?

  • 软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤
  • 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合成为方法学,也称泛型

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

  • 定义:软件生存周期是指从开始研发软件到软件停止使用的整个过程,即软件产品从用户提出开发需求开始,经过开发、使用和维护,直到最后淘汰退出的整个周期。包括了软件定义、软件开发、软件维护

  • 瀑布模型

    • 优点:
    1. 可强迫开发人员采用规范的方法(例如,结构化技术)
    2. 严格地规定了每个阶段必须提交的文档
    3. 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
    • 缺点:
    1. 模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际
  • 快速原型模型:

    • 优点:
    1. 确定需求上优于瀑布模型(通过原型与用户交互);
    2. 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用;
    3. 有的软件原型可以成为最终产品的一部分
    • 缺点:
    1. 快速建立的系统结构加连续修改可能导致产品质量低下原型系统的内部结构可能不好
  • 增量模型:

    • 优点:
    1. 能在较短时间内向用户提交可完成部分工作的产品
    2. 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击
    3. 软件结构必须开放,方便向现有产品加入新构件(实现较为困难)。
    4. 前述增量模型在实现构件前完成总体的需求分析、规格说明和概要设计,相对来说风险较小
    • 缺点:
    1. 对现有产品功能上造成破坏
  • 螺旋模型:

    • 优点:
    1. 大型软件开发项目有较好的风险控制
    • 缺点:
    1. 需要风险评估的经验
    2. 契约开发通常需要事先指定过程模型和发布产品
    3. 普及不如前述模型

六、为什么说喷泉模型较好的体现了面向对象软件开发过程无缝和迭代的特性?

因为在面对对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,真个开发过程都是吻合一致的,或者说是无缝连接的。这自然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化。喷泉模型就很好的体现了面对对象软件开发过程迭代和无缝的特性

七、试讨论Rational统一过程的优缺点。

  • 优点:
    • 不断的版本发布成为一种团队日常工作的真正驱动力
    • 将发现问题、制定方案和解决过程集成到下一次迭代
    • 迭***,降低风险
    • 更好地安排产品开发的辅助过程
  • 缺点:
    • RUP只是一个开发过程,没有覆盖软件过程的全部内容
    • 没有支持多项目的开发结构

八、Rational统一过程主要适用于何种项目?

大型的需求不断变化的复杂软件系统项目

九、说明敏捷过程的适用范围

适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束

十、说明微软过程的适用范围

适用于商业环境下具有有限资源的和有限开发时间约束的项目的软件过程模式