系统分析与设计 HW1

系统分析与设计  HW1


1、简单题

  • 软件工程的定义

    软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。

  • 阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型

    在早期的计算科学领域中,Software crisis 被用于描述在指定时间内难以写出有用且高效的程序的问题。Software crisis 的发生是由于计算机能力的迅速提高以及一些无法解决的问题所具有的复杂性。随着软件的复杂度的提高,很多软件问题也随之出现,而这都是因为现有方法在效率上存在不足。
    建设性成本模型(COCOMO)是由Barry W. Boehm开发的程序性软件成本估算模型。其中的模型参数是通过使用历史项目数据拟合回归公式得出的。它为现代软件开发流程提供了更多支持,并提供了一个更新了的数据库。对于新模型的需求来源于软件开发技术从基于大型计算机和整晚的批处理到桌面开发、代码重用以及利用即有软件模块的改变。

  • 软件生命周期

    软件的生命周期分为可行性研究、需求分析、系统设计、编码、测试和维护。

  • 按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域

    SWEBok V3 把 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
    • Software engineering professional practice
    • Software engineering economics
    • Computing foundations
    • Mathematical foundations
    • Engineering foundations
      本课程关注的主要是工程类与管理类的KA。
  • 解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式

    Level 1 - Initial: 过程难以预测,不便于管理与反应 Level 2 - Managed: 过程按项目要求打造,通常便于反应 Level 3 - Defined: 过程按组织标准而打造,具有主动性 Level 4 - Quantitatively managed: 过程能被测量与控制,即可被量化管理 Level 5 - Optimizing: 专注于过程的改进

  • 用自己语言简述 SWEBok 或 CMMI (约200字)

    CMMI 即能力成熟度模型集成,是一个过程改进方法,它的目的是帮助组织改进他们的绩效。它可以被用于引导横贯一个项目、一个部门或一个完整的组织的过程改进。其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其中,CMMI 中存在5个评级,由低到高分别为:初始级、可管理级、已定义级、量化管理级、优化管理级。CMMI 为企业带来价值主要体现在以下几个方面:能保证软件开发的质量与进度,能对“杂乱无章、无序管理”的项目开发过程进行规范;有利于成本控制;有助于提高软件开发者的职业素养;能够解决人员流动所带来的问题;有利于提升公司和员工绩效管理水平,以持续改进效益。


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

  • 阅读《现代软件工程》的 PSP: Personal Software Process 章节。
  • 按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?

根据表格PSP 2.1上的说明,一个软件工程师在接到一个任务之后需要按顺序完成下列工作:计划、开发、记录时间花费、测试报告、计算工作量、事后总结、提出过程改进计划。其中,计划即估计这个任务所需的时间,而开发又可以具体细分为:分析需求、生成设计文档、设计复审、代码规范、具体设计、具体编码、代码复审和测试。
文章中也介绍了软件工程师需要具备的技能,这些技能分别是:对具体技术的掌握与动手能力、对问题领域的知识和经验的积累、通用的软件设计思想、职业技能。其中,职业技能又包括自我管理的能力、表达和交流的能力、与人合作的能力、把任务按质按量完成的执行力等。
若想统计上述与PSP相关的数据,在数据统计方面,我们最主要考量的应是计划完成时间、实际花费时间与总工作量,其余内容多为文档。计划耗时应在接到任务的最开始就制定下来,这是结合了对自身能力的认知或者是以往项目的经验而得出的一个预测值。同时,计划耗时的制定也要考虑到任务的交付期限。而在我的认知里,实际花费时间可以有以下两种解释:一是项目从开始到交付所耗费的时间;二是在实际执行上述 PSP 工作时的耗时。第一种耗时的统计是相对比较方便的,只需要计算日期差即可得出结果。而第二种耗时则较第一种要难于统计,所以为了简化这一过程,可在完成任务的过程中规定一个固定的每日工作时间。至于总工作量,我们只需简单地将其量化为完成代码的行数或实现的功能点即可。