Fork me on GitHub

software_analysis_hw_1

Software Analysis and Design Homework - 1

软件工程

软件工程是将工程应用于软件设计,开发,实现,测试和维护的一种系统方法,同时,它也包含对于这种方法的研究。

导致 software crisis 的本质原因、表现,述说克服软件危机的方法

  • 本质原因
    硬件快速发展带来的强大计算能力超过了开发软件有效利用它的能力。可以归结为以下两个方面:
    1. 软件的大量需求和软件生产力效率的矛盾
    2. 软件系统的复杂性和软件开发方法的矛盾(没有一种通用的方法可以解决软件开发问题)
  • 表现
    • 软件超出预算
    • 软件运行时间过长
    • 软件效率低
    • 软件质量低
    • 软件无法达到预期要求
    • 软件难以管理且代码难以维护
    • 软件没有交付
  • 克服方法
    导致问题的根源有两个,第二条是无法解决的,因为软件开发没有通用适配的方法,所以从第一条原因下手,我们可以提高软件生成效率:
    1. 采用工程项目管理方法实施软件开发的组织管理
    2. 采用成熟的软件开发技术和方法,开发和使用适当的软件工具

软件生命周期

软件生命周期,又可称为软件开发过程,它抽象地描述了软件从需求分析至废弃使用的所有阶段。其各个阶段实现了软件的需求定义与分析、设计、实现、测试、交付和维护,是软件开发时应该遵循的步骤。

SWEBoK 的 15 个知识域

  • 软件需求
    软件需求知识领域关注自身的启发,协商,分析,规范和认证。大家都认同的是,当这些方面表现不佳时,软件工程项目将十分容易受到攻击。软件需求表达了解决现实问题的软件产品的需求与约束,

  • 软件设计
    设计包含了定义架构,组件,接口和其他系统组件特征的过程和这些过程的结果。软件设计知识领域涵盖设计过程最终产品。软件设计过程是软件工程生命周期活动中的一个阶段。这个阶段中,对软件需求进行分析并完成将来作为基础架构的软件内部结构的描述和性能要求。软件设计的记过必须描述软件架构,也就是软件如何被分解为不同的组件且组件间的接口。它还必须描述组件的细节以便能够构建这些组件。

  • 软件架构
    软件架构指通过细节设计,编码,单元测试,集成测试,调试和验证的结合创建软件的详细过程。软件架构知识领域包括可以满足需求和设计约束的软件开发的相关主题。它涵盖软件架构基础,管理软件架构,架构技术,实际考虑和软件架构工具。

  • 软件测试
    测试是一项评估产品质量和通过识别缺陷来改进产品的活动。软件测试涉及在有限测试集上动态认证程序的预期行为。这些测试集是从(通常很大的)执行域中选择的。软件测试知识领域包含其基础知识,测试技巧,人机交互测试和评估,测试方法和实际考虑。

  • 软件维护
    软件维护包含增强现有功能,调整软件已使其可以运行在新的和改动过的环境中和改正缺陷。这些类别指完善,自适应和纠正性软件维护。软件维护知识领域包含软件维护基础(维护的性质和需求,维护类别,维护成本),软件维护的关键问题(技术问题,管理问题,维护成本评估,软件维护测量),维护过程,软件维护技术(程序理解,重新设计,逆向工程,重构,软件退役),灾难恢复技术和软件维护工具。

  • 软件配置管理
    系统的配置是硬件,固件,软件的功能和/或物理特征或者这些的组合。它也可以被认为是为了满足特定的目的而根据特定构建流程组合的确定版本的硬件,固件或软件。软件配置管理因此是及时在不同点认证系统配置的原则,用于系统地控制配置变化和在整个软件生命周期维护完整性和可追溯性。软件配置管理知识领域涵盖软件配置管理的管理过程,软件配置识别,控制,状态核算,审计,软件发布管理与交付和软件配置管理工具。

  • 软件工程管理
    软件工程管理涉及规划,协调,测量,报告和项目/程序控制,以确保开发和维护软件是系统的,规范化的且量化的。软件工程管理知识领域涵盖启动和范围定义(确定和协商需求,可行性分析和需求的审查和修订),软件项目规划(进度规划,工作量评估,成本,进度,资源分配,风险评估,质量计划),软件项目制定(计量,报告,控制,收购和供应商合同管理),产品验收,项目绩效审查和分析,项目结束和软件管理工具。

  • 软件工程过程
    软件工程知识领域关注软件生命周期过程的定义,实现,评估,测量,管理和改进。主题包括过程实现和改变(过程基础设施,过程实现和改变模型,和软件过程管理),过程定义(软件生命周期模型和过程,过程定义,过程适应和自动化过程的符号),过程评估模型和方法,测量(过程测量,产品测量,技术测量和测量结果质量)和软件过程工具。

  • 软件工程模型和方法
    软件工程模型和方法知识领域包含了解决多个生命周期状态的方法,其他知识领域包含确定生命周期的特定方法。涵盖的主题包括建模(软件工程模型原理和属性,语法 vs 语义 vs 不变量,前置条件,后置条件和不变量),模型类别(信息,结构和行为模型),分析(正确性分析,完整性,一致性,质量和相互作用,可追溯性和权衡分析)和软件开发方法(启发式方法,形式方法,原型方法和敏捷方法)。

  • 软件质量
    软件质量是软件生命周期普遍关注的,存在于许多 SWEBOK V3 知识领域中。此外,软件质量知识领域包括软件质量基础(软件工程文化,软件质量特征,软件质量价值和成本和软件质量改进),软件质量管理过程(软件质量保证,认证和确认,审核和审计)和实际考量(缺陷特征,软件质量测量和软件质量工具)。

  • 软件工程专业实践
    软件工程专业实践关注软件工程师必须具备的知识,技巧和态度,以用一种专业,负责和正直的态度来时间软件工程。软件工程专业实践知识领域涵盖专业性(专业行为,专业协会,软件工程标准,雇佣合同和法律问题),道德准则,动态小组(团队合作,认知问题复杂性,与利益相关者交互,不确定性和模糊性的处理,多元环境处理)和交流技巧。

  • 软件工程经济学
    软件工程经济学知识领域关注在商业环境中做出决策,以使技术决策和商业目标达成一致。涵盖主题包括软件工程经济学基础(提案,现金流,货币时间价值,计划事业,通货膨胀,货币贬值,替代和退休决策),非营利性决策(成本效益分析,优化分析),经济风险和不确定性评估(评估技术,基于风险和不确定性的决策)和多属性决策(价值和衡量尺度,补偿和非补偿技术)。

  • 计算基础
    计算基础知识领域涵盖对于软件工程实践必须的计算背景的基础主题。涵盖主题包括问题解决技术,抽象,算法和复杂度,编程基础,并行和分布式计算基础,计算机组成,操作系统和网络通信。

  • 数学基础
    数学基础知识领域涵盖对于软件工程实践必须的数学背景的基础主题。涵盖的主题包括集合,关系和函数,基础命题和谓词逻辑,证明技术,图和树,离散概率,语法和有限状态机,数论。

  • 工程基础
    工程基础知识领域涵盖对于软件工程实践必须的工程背景的基础主题。涵盖的主题包括经验方法和实验技术,统计分析,测量和指标,工程设计,模拟和建模,根本原因分析。

简单解释 CMMI 的五个级别

  • Level 1 Initial
    无序,过程无法预测,缺少管理,被动

  • Level 2 Managed
    项目过程特征化,仍旧被动

  • Level 3 Defined
    组织过程特征化,存储与主动(项目根据组织标准裁剪过程)

  • Level 4 Quantitatively Managed
    过程经过测量和控制

  • Level 5 Optimizing
    关注过程改进

用自己语言简述 CMMI

CMMI:Capability Maturity Model Integration,即能力成熟度模型集成,旨在帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其想法依据是:只要集中精力持续地建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件开发中的困难。CMMI 为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架,从总体上改进组织的质量和效率。CMMI 主要关注成本效益、明确重点、过程集中和灵活性四个方面。