【备份】系统与分析作业1

因为博客网站服务器经常抽风,所以重新将作业备份并提交。以下截图证明作业完成时间。

源地址:

http://www.chensh236.net/2019/03/02/%E7%B3%BB%E7%BB%9F%E5%88%86%E6%9E%90%E4%B8%8E%E8%AE%BE%E8%AE%A1/

【备份】系统与分析作业1

16340028 陈思航

软件工程的定义

Software engineering is “(1) the application of a systematic, disciplined, quantifiable, approach to the development, operation, and maintenance of software, that is, the application of engineering to software,” and “(2) the study of approaches as in (1).” –– IEEE Standard 610.12

软件工程是对软件进行系统性的、有纪律性的、可量化的开发、运行和维护的应用。也就是说,对软件进行工程应用以及方法研究。

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

软件危机的原因:

  • 软件危机的根源有两个:
  • 软件的大量需求与软件生产力效率之间的矛盾。
  • 软件系统的复杂性与软件开发方法之间的矛盾。
  • 软件危机的表现:
  • 项目运行超预算
  • 项目运行超时
  • 软件低效
  • 软件质量差
  • 软件经常不符合既定的要求
  • 项目无法管理以及代码维护困难
  • 软件无法被交付使用
  • 克服软件危机的方法:
  • 需要正确认识计算机软件的内涵。
  • 采用工程项目管理的方法进行软件开发的组织管理;
  • 这是因为软件开发是组织良好、管理严密、协同配合的工程活动。
  • 采用成熟的软件开发技术和方法,开发和使用适当的软件工具。

软件生命周期

在时间维度,对软件项目任务进行划分,称为软件生命周期(Life Cycle),也称软件过程。常见的模型有瀑布模型、螺旋模型、敏捷模型等等。

软件的瀑布流程开发 Waterfall development,可以分为如下几个过程:

  • Requirements analysis resulting in a software requirements specification 需求分析与软件需求说明
  • 根据客户的需求,清楚地了解客户需求中的产品功能、特性、性能、界面以及具体规格等,分析确定软件产品所能达到的目标。
  • software design 软件设计
  • 根据前面需求分析的结果,考虑如何在逻辑上实现所定义的产品功能以及特性。设计可以分为概要设计以及详细设计两个实施阶段,也可以分为数据结构设计、软件体系结构设计、应用接口设计、模块设计以及界面设计等部分。
  • implementation实现
  • 编写程序将设计结果转换为计算机可读形式并获得运行
  • testing测试
  • 确认用户需求,对设计和实现的结果进行验证的过程
  • integration, if there are multiple subsystems
  • 如果有多个子系统,则进行集成
  • deployment部署
  • maintenance维护
  • 维持软件运行,修改软件缺陷,增强已有的功能,增加新的功能,升级等。

软件的敏捷开发

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。

敏捷开发将项目分为分别进行开发的子项目,迭代较快。敏捷开发适合于无法一开始便完整确定需求或者需求变动较大的项目。

软件的敏捷开发方法:

  • 动态系统开发方法(DSDM)
  • 看板法(kanban)
  • Scrum流程

SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)

  • 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 软件工程职业实践
  • 软件工程专业实践关注软件工程师在软件工程中具有的软件工程知识,技能和态度。软件工程专业实践KA包括专业性、道德准则、动态小组协作以及沟通技巧。
  • Software Engineering Economics软件工程经济学
  • 软件工程经济学关注的是在业务环境中做出决策,使得技术决策与组织的业务目标保持一致。包含的内容有软件工程经济学的基本原理、非营利性决策与估计、经济风险和不确定性与多属性决策。
  • Computing Foundations 计算基础
  • 计算基础包括提供软件工程实践所需的计算背景基础。包括内容有包括问题解决能力、抽象思维、算法设计、编程基础、并行和分布式计算的基础知识、计算机组织、操作系统和网络通信。
  • Mathematical Foundations 数学基础
  • 数学基础包括提供软件工程实践所必需的数学背景基础。包括集合、关系和函数、基本命题和谓词逻辑、证明能力、图和树、离散概率、语法和有限状态机以及数论。
  • Engineering Foundations 工程基础
  • 工程基础包括提供软件工程实践所必需的工程背景基础。包括经验方法和实验技术、统计分析、测量和指标、工程设计、仿真与建模以及根本原因分析。

简单解释 CMMI 的五个级别。例如:Level 1 – Initial:无序,自发生产模式。

  • Level 1 – Initial:无序,自发生产模式
  • 软件开发的过程是无法预料的,很少能够被控制和反应。
  • Processes unpredictable, poorly controlled and reactive
  • 软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
  • Level 2 – Managed:管理
  • 软件开发的过程以项目为特征,而且常常都是反应的。
  • Processes characterized for projects and is often reactive
  • 建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
  • Level 3 – Defined 定义
  • 软件开发的过程以组织和积极主动为特征的(项目使得软件过程符合组织的标准)
  • Processes characterized for the organization and is proactive(Projects tailor their processes from organization’s standards)
  • 已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
  • Level 4 – Quantitatively Managed 量化管理
  • 软件过程的度量和控制
  • Processes measured and controlled
  • 分析对软件过程与产品质量的详细度量数据,从而对软件过程与产品都有定量的控制。
  • Level 5 – Optimizing 优化
  • 注重软件过程的改进
  • Focus on process improvement
  • 通过过程量化与反馈新思想、新技术使得软件过程不断改进

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

CMMI即软件能力成熟度模型(Capability Maturity Model for software)。它的提出是因为SWEBoK不适合去度量一个企业的软件工程能力。因为出于成本的因素,企业在不同的阶段难以完全遵循软件工程的规范去做事情。而CMMI是一个过程的模型,定义组织应该采用什么样的方式来改善企业绩效的行为。它保证产品的质量,而且是一种软件过程改善的路径。CMMI同时也是公认的进入国际市场的资格证,这是因为如果企业通过CMMI评估认证,这家企业在软件工程质量管理的能力已经上升到一定的高度。CMMI通过使用知识或能力的不同,用不同级别表示开发企业的成熟程度。这个模型给企业能力提升的路径,页给出企业能力评估的事实和标准。