SWSAD-hw1

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

1、软件工程的定义

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 engineering is the application of engineering to the development of software in a systematic method. – Wikipedia

软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。 – 百度百科

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

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 – 百度百科

  • 本质原因有两个方面:
    • 一是软件本身的特性。软件的复杂性、一致性、可变性、不可视性是导致软件危机的四大本质特性。
    • 二是软件开发与维护的方法不够正确。存在着许多错误认识和做法,也经常低估需求分析和文档撰写的重要性。
  • 其典型表现有:
    • 对软件的开发成本和进度估计不准确;
    • 软件产品的常常质量不可靠、低效;
    • 用户对开发出来的软件不满意,没有很好的满足客观需求;
    • 软件和相关代码常常是不可维护的;
    • 软件没有合适的文档资料;
    • 软件的成本在公司的总成本中逐年上升;
    • 软件开发生产率提高的速度跟不上计算机应用的发展速度;
  • 解决方案主要有以下几种:
    • 对软件要有一个正确的认识。软件是程序、数据及相关文档的完整集合。
    • 充分认识软件开发不是某种个体劳动的神秘技巧,而是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
    • 推广并使用在实践中总结出来的有价值的经验,成功的技术和方法,尽快消除早期形成的一些错误概念和做法。
    • 更加重视用户的需求,尽量开发和使用令大多数用户满意的软件。

3、软件的生命周期

  • 问题定义。 确定要解决的问题是什么。

  • 可行性研究。 判断问题是否值得去解决,方案是否可行。

  • 需求分析。 对用户需求进行分析、提炼、验证,包括文档撰写。

  • 软件设计。 从宏观到微观逐渐深入地设计:概要设计(系统设计、结构设计等)=>详细设计(过程设计、接口设计等)。

  • 开发阶段。 实现设计的功能。

  • 软件测试。 进行大量的测试。

  • 运行维护。 改正错误、提升性能、扩展功能等。

  • (废弃)。 进入软件天国。

  • 参考

4、SWEBoK 的 15 个知识域(KA),请中文翻译其名称与简短说明。参考

  • 软件需求(Software Requirements)。 软件需求表达了对软件产品的需求和约束。软件需求KA涉及软件需求的引出、协商、分析、规范和验证。

  • 软件设计(Software Design)。 设计被定义为定义系统或组件的体系结构、组件、接口和其他特征的过程,以及该过程的结果(IEEE 1991)。软件设计KA包括设计过程和最终产品。

  • 软件构建(Software Construction)。 软件构建是指通过详细设计、编码、单元测试、集成测试、调试和验证相结合,对工作软件进行详细创建。软件构建KA包括与满足其需求和设计约束的软件程序开发相关的主题。

  • 软件测试(Software Testing)。 测试是对产品质量进行评估并通过识别缺陷来改进产品质量的活动。软件测试KA包括软件测试的基础知识、测试技术、人机界面测试与评价、任何跟考试有关的措施和实际的考虑。

  • 软件维护(Software Maintenance)。 软件维护包括增强现有的功能,使软件适应新的和修改的操作环境,以及纠正缺陷。软件维修KA包括软件维修的基本知识、软件维护中的关键问题、维护过程、软件维护技术、灾难恢复技术和软件维护工具。

  • 软件配置管理(Software Configuration Management)。 软件配置管理(SCM)是在不同的时间点识别系统配置的规程,以便系统地控制配置的更改,并在整个软件生命周期中维护配置的完整性和可追溯性。软件配置管理KA包括SCM过程的管理;软件配置识别、控制、状态核算、审计;软件发布管理和交付;以及软件配置管理工具。

  • 软件工程管理(Software Engineering Management)。 软件工程管理包括计划、协调、测量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理KA包括初始化和范围定义、软件项目规划、软件项目制定、产品验收、项目绩效的评审与分析、项目关闭以及软件管理工具。

  • 软件工程过程(Software Engineering Process)。 软件工程KA涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。所涵盖的主题包括过程实现和变更、过程定义、过程评估模型和方法、测量以及软件过程工具。

  • 软件工程模型和方法(Software Engineering Models and Methods)。 软件工程模型和方法KA解决了包含多个生命周期阶段的方法;针对特定生命周期阶段的方法由其他KA覆盖。所涵盖的主题包括建模、模型的类型、分析、以及软件开发方法。

  • 软件质量(Software Quality)。 软件质量KA包括软件质量的基础、软件质量管理过程以及实际的考虑,是一个普遍存在的软件生命周期问题。

  • 软件工程专业实践(Software Engineering Professional Practice)。 软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以一种专业、负责和道德的方式来实践软件工程。软件工程专业实践KA涵盖专业、伦理准则、团队动态和沟通能力。

  • 软件工程经济学(Software Engineering Economics)。 软件工程经济学KA关注于在业务上下文中做出决策,以使技术决策与组织的业务目标保持一致。所涵盖的主题包括软件工程经济学的基本原理;非营利性决策;评估、经济风险和不确定性;以及多属性决策。

  • 计算基础(Computing Foundations)。 计算基础KA涵盖了为软件工程实践提供必要的计算背景的基本主题。主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。

  • 数学基础(Mathematical Foundations)。 数学基础KA涵盖了为软件工程实践提供必要数学背景的基本主题。主题包括集合、关系和函数、基本命题逻辑和谓词逻辑、证明技术、图表和树木、离散型概率、语法和有限状态机和数论。

  • 工程基础(Engineering Foundations)。 工程基础KA涵盖了为软件工程实践提供必要的工程背景的基本主题。所涵盖的主题包括实证方法和实验技术、统计分析、测量和度量、工程设计、仿真和建模以及根本原因分析。

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

  • Level 1 - Initial: 过程不可预测、缺乏管控、被动,无序,自发生产模式。

  • Level 2 - Managed: 相对地更有有计划、有管理,但仍然常常被动。

  • Level 3 - Defined: 更有组织性,且积极主动。

  • Level 4 - Quantitatively Managed: 有量化管理和控制。

  • Level 5 - Optimizing: 关注性能提升、功能扩展等后续优化。

figure for five level

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

SWEBoK(Software Engineering Body of Knowledge),即软件工程知识体,是由IEEE Computer Society构建的用于指导软件工程人才培养与学科建设的软件生产最佳实践与相关知识框架。

它分为软件工程实践和基础教育两个部分,共15个知识域(Knowledge Area),其中以软件需求(Software Requirements)和软件设计(Software Design)为核心。

简单说,就是一本从时间维度给出在项目过程中,什么时刻应该做什么、应该有什么成果的最佳实践指南。SWEBoK也定义了一个软件工程本科生在毕业四年内应具备的软件工程知识。