系统设计与分析第一次作业

简单题

  1. 软件工程的定义。
    • 软件工程是(1)将系统化、规范化、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。
    • (2)对(1)中所述方法的研究。
  2. 阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
    • 软件危机(software crisis)是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
    • 软件危机究其原因,衔接到硬件的整体复杂度与软件开发流程。危机表现在几个方面:
      1)项目运行超出预算
      2)项目运行超出时间
      3)软件质量低落
      4)软件通常不匹配需求
      5)项目无法管理,且代码难以维护
    • 构造性成本模型即COCOMO模型,是由巴里·勃姆(Barry Boehm)提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。
  3. 软件生命周期。
    • 软件生命周期是指软件的产生直到成熟的全部过程。
      • 典型划分GB8567(4个时期7个阶段):
        • 1)软件分析时期:问题定义、可行性研究、需求分析。
        • 2)软件设计时期:总体设计、详细设计。
        • 3)编码与测试时期:编码、测试。
        • 4)运行与维护时期
  4. 按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
    • Software requirements
    • Software design
    • Software construction
    • Software testing
    • Software maintenance
    • Software configuration management
    • Software engineering management
    • Software engineering process
    • Software engineering models and methods
    • Software quality
  5. 解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
    • 初始级
      软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
    • 可管理级
      建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
    • 已定义级
      已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
    • 量化管理级
      分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
    • 优化管理级
      过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
  6. 用自己语言简述 SWEBok 或 CMMI (约200字)
    CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成(也有称为:软件能力成熟度集成模型)。其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。

    解释PSP各项指标及技能要求

  7. 按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?

    • 计划
      • 估计这个任务需要多少时间
    • 开发
      • 分析需求
      • 生成设计文档
      • 设计复审 (和同事审核设计文档)
      • 代码规范 (为目前的开发制定合适的规范)
      • 具体设计
      • 具体编码
      • 代码复审
      • 测试(自我测试,修改代码,提交修改)
    • 记录时间花费
    • 测试报告
    • 计算工作量
    • 事后总结
    • 提出过程改进计划

      需要的技能

      1. 熟悉整个软件的开发流程,对软件复杂度等有一定的估计从而推算出任务所需时间。
      2. 分析能力,能够明确需求
      3. 编写文档能力
      4. 代码规范知识
      5. 编程能力
      6. 团队协作能力

      统计每项数据的方法

      1. 项目大小
      • 通过代码量进行统计
      1. 项目时间
      • 实际统计项目所花时间*项目人数
      1. 项目质量
      • 统计bug数
      1. 是否按时交付
      • 统计每个阶段是否按时交付