简答题
1.软件工程的定义
软件工程是对软件的开发、运行和维护过程中的一种系统的、有纪律的、可量化的方法的应用,以及对这些方法的研究。
2.解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
软件危机的本质原因是大量需求与软件生产力效率之间的矛盾,以及系统的复杂性与软件开发方法之间的矛盾。
软件危机的表现有:
- 项目运行超出预算
- 项目运行时间过长
- 软件效率低
- 软件质量差
- 软件通常不符合要求
- 软件难以管理,代码难以维护
- 软件从未交付过
克服软件危机需要正确认识计算机软件的内涵,并且需要对软件工程项目具有科学的管理,此外还需要使用成熟的软件开发技术和方法,以及适当的软件工具。
3.软件生命周期
软件生命周期是软件项目任务在时间维度上的划分,也即软件的开发过程。常见的有瀑布模型、螺旋模型、敏捷模型等。
瀑布模型中,开发过程被视为通过几个阶段稳步向下流动,包括:
- 由需求分析得到软件需求规范
- 软件设计
- 实现
- 测试
- 集成(有多个子系统的情况)
- 部署
- 维护
螺旋模型包括四个象限:制定计划、风险分析、实施工程和客户评估。该模型会沿着螺旋线经历这四个阶段,进行若干次迭代,它强调风险分析,适用于大规模的软件项目。
敏捷开发模型则是一种以人为核心、迭代、循序渐进的开发方法,在该模型中软件项目被划分为多个既相互联系又能独立运行的子项目,各子项目分别完成,迭代速度较快。该模型适用于需求和范围不能在一开始完整地确定或是需求变化较快的软件项目。
4.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 软件工程专业实践:主要涉及软件工程师必备的专业能力、道德准则、软件工程知识等。
- Software Engineering 软件工程经济学:包括软件工程经济学基本原理(提案、现金流量、货币时间价值、通货膨胀等),非营利性决策(成本效益分析、优化分析),风险评估和不确定性(评估技术和风险决策等)以及多属性决策(价值和衡量尺度、补偿和非补偿技术)。该知识域注重的是在业务环境中做出决策并使该决策与业务目标保持一致。
- Computing Foundations 计算基础:指软件工程实践所需的计算机背景的基础主题,包括问题解决技术、算法及复杂性、编程基础、并行和分布式计算、计算机组成、操作系统和网络通信等。
- Mathematical Foundations 数学基础:指软件工程实践所需的数学背景的基础主题,包括关系和函数、命题和逻辑运算、证明技术、图和树、离散概率、有限自动机、数论等。
- Engineering Foundations 工程基础:指软件工程实践所需的工程背景的基础主题包括经验方法和实践技术、统计分析、测量和指标、工程设计、仿真建模等。
5.简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
- Level 1 - Initial:无序。软件能够完成客户对软件的需求,但软件的开发过程有序性程度低,软件能否成功主要取决于开发人员自身的实力和努力,任务的完成具有一定偶然性,无法保证在实施同类项目的时候仍然能够完成任务。
- Level 2 - Managed:管理。企业具备了一定的管理能力,在项目实施上能够遵守既定的计划与流程,并且随着流程的进行可以对此实施监控和控制。Level2排除了Level1中任务完成的随机性。
- Level 3 - Defined:定义。企业能对项目有一套完整的管理措施,整个软件产品的生产过程都是可见可控的。并且企业能够根据自身的情况和流程建立一套规范制度和管理体系,保证能够在同类或不同类的项目上都能成功实施。
- Level 4 - Quantitatively Managed:量化管理。企业的管理已形成了完善的制度,对项目流程的管理能够做到量化、数字化、具体化,对软件的生产过程和产品精度都有定量的控制,能够保证产品和项目的高质量和稳定性。
- Level 5 - Optimizing:优化。企业能够主动对项目流程进行改善,将更先进的技术运用到其中,实现流程的优化,并且能够充分利用信息资料,对企业在项目实施的过程中可能出现的次品予以预防。
6.用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI指能力成熟度模型集成,它将现存的和即将发展出来的各种北部港口成熟度模型都集中到一个框架之中,是度量一个企业的软件能力的重要资质认证,主要关注成本效益、明确重点、过程集中和灵活性等方面。CMMI分为五个能力级别:初始级、管理级、定义级、量化管理级、优化级,对应的企业能力由从够完成客户对软件的需求,到能够主动改善整个项目流程,从无序的生产过程,到定制完整的管理制度规范逐步递增。CMMI能够帮助企业度量自身的软件水平,提升科学管理的能力。