软件的本质与软件工程科学

系统分析与设计 Homework 1

Posted by Heng on March 13, 2019

软件工程的定义

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 本质原因、表现,述说克服软件危机的方法

  • 软件危机的本质原因:
    • 落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致了软件开发与维护过程中出现一系列严重的问题。
  • 软件危机的表现:
    • 项目运行超出预算
    • 项目运行超过时间
    • 软件质量低落
    • 软件通常不匹配需求
    • 项目无法管理、代码难以维护
  • 克服软件危机的方法:
    • 研究应用软件工程,主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。
    • 研制和使用软件工具,用以辅助进行软件项目管理与技术生产,人们还将软件生命周期各阶段使用的软件工具有机地集合成为一个整体,形成能够连续支持软件开发与维护全过程的集成化软件支援环境,以期从管理和技术两方面解决软件危机问题。
    • 基于程序变换、自动生成和可重用软件等软件新技术,把程序设计自动化的进程向前推进一步。

软件生命周期

  • 软件生命周期 是软件的产生直到报废或停止使用的生命周期。结合当下的发展,定义软件生命周期包含问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,也有将以上阶段的活动组合在内的迭代阶段,即迭代作为生命周期的阶段。

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

  • Software Requirements 软件需求:关注软件需求的协商、分析、规范和有效;陈述了对软件产品的需求和限制。其知识域包括软件的获取、协商、分析、验证和规范
  • Software Design 软件设计:定义软件框架、组件、组件间接口;定义系统或组件的特点;定义过程结果;描述软件框架,说明软件的分解,组件的组织,以及组件间组织使用的接口。这些定义和描述必须足够详细,使得软件构建变得可能。其知识域包括:设计过程和最终产品
  • Software Construction 软件构造:是细节设计、编程、单元测试、积分测试、调试和验证等软件工作的结合。软件构建必须符合和遵守软件需求和设计。涉及了软件构建的基础、管理、技术和工具等。其知识域包括:软件建设的基本原理;管理软件建设;构建技术;实际考虑;软件构建工具
  • Software Testing 软件测试:一种评估产品质量以及通过识别缺陷来改进产品质量的活动。其知识域包括:软件测试的基本原理;测试技术;人机用户界面测试和评估;测试相关方法;实际考虑
  • Software Maintenance 软件维护:增强现有的功能,使得软件在新的环境中运行以及修正缺陷。其知识域包括:软件维护的基本原理:维护的性质的需求、维护类别、维护成本;软件维护的关键问题:技术问题、管理问题、维护成本估算、软件维护的量度;维护过程;维护技术;灾难恢复技术;软件维护工具
  • Software Configuration Management 软件配置管理:包括项目或程序的计划、写作、度量、报告和控制,为了确保项目或程序需的发展并且维护软件的系统性,规范性和质量。涉及了项目的启动,规范定义,项目计划,项目设定和验收。负责项目性能的评价和分析等。其知识域包括:SCM过程的管理;软件配置识别、控制、状态解释、审计;软件发布管理和交付;软件配置管理工具
  • 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 工程基础:涵盖了为软件工程实践提供必要工程背景的基本主题, 包括统计分析、测量、建模。

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

  • Level 1 - Initial 初始级:软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。

  • Level 2 - Managed 可管理级:建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。

  • Level 3 - Defined 已定义级:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。

  • Level 4 - Quantitatively Managed 量化管理级:分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

  • Level 5 - Optimizing 优化级:过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。

用自己语言简述CMMI

答:

CMMI (Capability Maturity Model Integration),全称为能力成熟度模型集成,将软件工程的成熟度划分为五个级别,这五个成熟度级别分别是:

  1. 初始级
  2. 已管理级
  3. 已定义级
  4. 量化管理级
  5. 优化级

CMMI对于软件工程的管理规范随着级别提升是越来越严格的,越高的成熟度等级代表着越强的综合软件能力。CMMI可以帮助企业确认当前软件工程所处于的级别从而对其进行管理和改进,增强企业的软件的开发和改进能力,指导企业一步步地对软件进行改进。其目的主要在于使得软件可以在预期时间和不超预算地完成开发,并且还可以保证开发出的软件的高质量。CMMI不仅给出了评估企业能力的事实标准,也为企业能力的提升开辟了路径,而且还促进了软件公司之间的一个良性竞争,让企业在发展路上更加具有活力和生机。