软考--软件工程基础知识-00

  • 软件生存周期:
    1. 需求分析:准确地确定软件系统必须做什么。
    2. 概要设计:每个成分都是意义明确模块。
    3. 详细设计:对每个模块完成的功能进行具体的描述,对功能细化。
    4. 编码:转换成计算机可接收的程序代码。
    5. 维护:逆向工程中从源码提取设计信息。

  • 软件过程:
    1. 软件质量依赖软件开发过程的质量。
    2. 其中个人因素占主导作用。

  • 能力成熟度模型(CMM)
    1. 初始级:杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤。
    2. 可重复级:有可以跟踪项目费用、进度和功能的特征。
    3. 已定义级:管理和工程上,已经文档化、标准化。(部署)
    4. 已管理级:重点关注产品的过程和质量。产品质量被开发成员理解和控制。
    5. 优化级:通过来自过程质量反馈和来自新观念、新技术的反馈,使过程能不断持续的改进。

  • 能力成熟度模型集成(CMMI)
    1. 阶段式模型
      (1). 初始的:过程不可预测且缺乏控制。
      (2). 已管理的:过程为项目服务。
      (3). 已定义的:过程为组织服务。
      (4). 定量管理的:过程已度量和控制。
      (5). 优化的:集中于过程改进。
    2. 连续式模型
      (1). CL0(未完成的)
      (2). CL1(已执行的)
      (3). CL2(已管理的)
      (4). CL3(已定义级的)
      (5). CL4(定量管理的)
      (6). CL5(优化的)

  • CMMI不能指导代码优化。

  • 演化模型:
    1. 原型模型
    2. 螺旋模型

  • 原型模型:
    1. 验证需求有效性
    2. 探索特殊解决方案
    3. 支持用户界面设计
    4. 有效的捕获系统的需求

  • 根据使用原型的目的不同,原型可以分为3类。
    1. 探索型原型
    2. 实验型原型
    3. 演化型原型

  • 瀑布模型:
    1. 高内聚,低耦合。
    2. 模块规模,越大越好。
    3. 瀑布模型的一个变体是V模型。
    4. 容易理解,管理成本低。
    5. 强调早期计划及需求调查和产品测试。
    6. 客户必须能够完整、正确、清晰地表达他们的需要。(缺点,因为这很难)
    7. 在有类似的开发经验时,推荐采用。(因为此时需求明确)

  • 增量模型
    1. 快速构造可运行产品的好方法。
    2. 第一个可交付的版本所需要的成本和时间很少。
    3. 由于很快交付第一个版本,所以可以减少用户需求的变更。
    4. 在项目开始时,可以仅对一个或两个增量投资。
    5. 如果没有对用户的变更需求进行规划,初始的增量很可能对后续增量带去不稳定。(缺点,因为用户可能自己都不知道之后的变更情况,发生概率很高)
    6. 如果需求不像早期思考的那样稳定和完整,那么一些增量就要重新开发,重新发布。(缺点,同上条,这两条都是用户需求对增量的影响)
    7. 早期的增量作为原型,从而可以加强对系统后续的开发需求的理解。
    8. 具有最高优先级的功能首先交付,随着后续的增量不断加入,这就使得更重要的功能得到等多的测试。
    9. 注意:将用户需求划分为多个分量不是该模式的特点。
    10. 可能不得不修改原来已经构建好的系统部分。(缺点,边做边改)
    11. 可维护性大大提高。
    12. 每次只提交用户部分功能,用户有较充分的时间学习和适应新产品。

  • 统一过程(UP)模型
    1. 起始阶段:项目的初创活动,构想文档。
      --生命周期目标
    2. 精化阶段:需求分析和架构演进。
      --生命周期架构
    3. 构建阶段:关注系统的构建,产生实现模型,产生在适当的平台上集成的软件产品
      --初始运作功能。
    4. 移交阶段:提交方面的工作。
      --产品发布

  • 敏捷方法
    1. 极限编程(XP)
    2. 水晶发(Crystal)
    3. 并列争求法(Scrum)
    4. 自适应软件开发(ASD)
    5. 敏捷统一过程(AUP)

  • 极限编程(XP)
    1. 四大价值观:沟通、简单性、反馈、勇气。
    2. 5个原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
    3. 12个最佳实践:计划游戏、隐喻、简单设计、测试先行、重构、结队编程小型发布、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。

  • 计划游戏:快速制定计划、随着细节的不断变化而完善。
  • 小型发布:系统设计要能搞尽可能早的交付。
  • 隐喻:找到合适的比喻传达消息。
  • 简单设计:只处理当前需求,使设计保持简单。
  • 测试先行:先写测试代码,然后编写程序。
  • 重构:重新审视需求和设计,重新明确的描述它们以符合新的和现有的需求。
  • 持续集成:可以按日甚至小时为客户提供可运行版本。

  • 水晶法(Crystal):为每一个不同的项目都需要一套不同的策略、约定和方法论。
  • 并列争求法(Scrum):每30天一次的迭代成为一个“冲刺”。

  • 自适应软件开发(ASD)
    1. 有一个使命作为指导。
    2. 特征被视为客户价值的关键点。
    3. 过程中的等待是很重要的,“重做”和“做”一样关键。
    4. 变化不被视为改正,被视为对软件开发实际情况的调整
    5. 确定的交付时间迫使开发人员认真考虑每一个生产版本的关键需求风险也包括其中。

  • 敏捷统一过程(AUP):建模,实现,测试,部署,配置及项目管理,环境管理。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容