软件工程的定义
软件工程是软件开发领域里对工程方法的系统应用
解释导致 software crisis 本质原因、表现, 述说克服软件危机的方法
软件危机
Software Crisis是早期计算机科学的一个术语, 是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短、甚至夭折. 软件开发是一项高难度、高风险的活动, 由于它的高失败率, 故有所谓“软件危机”之说. 软件危机的本源是复杂、期望和改变. 这个术语用来描述正急遽增加之计算机的力量带来的冲击和可能要处理的问题的复杂性. 从本质上来说, 它谈到了写出正确、可理解、可验证的计算机程序的困难.
本质原因
中大型软件系统与小型软件的设计与实现有着本质性差异, 它们的复杂性已远超出人脑能直接控制的程度
表现
软件危机其原因, 衔接到硬件的整体复杂度, 与软件开发流程. 危机表现在几个方面:
- 项目运行超出预算
- 项目运行超过时间
- 软件质量低落
- 软件通常不匹配需求
- 项目无法管理, 且代码难以维护
方法
- 对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究
- 对软件的编制、测试、维护和管理的方法进行研究
- 对开发人员提出更大的要求, 不单单是个人专业知识的增长, 还应该善于发现问题, 注重团队协作与效率
软件生命周期
- 问题的定义及规划 此阶段是软件开发方与需求方共同讨论, 主要确定软件的开发目标及其可行性.
- 需求分析 在确定软件开发可行的情况下, 对软件需要实现的各个功能进行详细分析, 制定PRD文档. 并提交各部评审. 同样需求也是在整个软件开发过程中不断变化和深入的, 因此我们必须制定需求变更计划来应付这种变化, 以保护整个项目的顺利进行.
- 软件工程开发 此阶段主要根据需求分析的结果, 对整个软件系统进行设计, 如系统框架设计, 数据库设计等等. 软件设计一般分为总体设计和详细设计.
- 程序编码 此阶段是将软件设计的结果转换成计算机可运行的程序代码. 在程序编码中必须要制定统一, 符合标准的编写规范. 以保证程序的可读性, 易维护性, 提高程序的运行效率. 完成模块的编程后提测.
- 软件测试 在软件设计完成后要经过严密的测试, 以发现软件在整个设计过程中存在的问题并加以纠正. 整个测试过程分单元测试、集成测试以及系统测试三个阶段进行. 测试的方法主要有白盒测试和黑盒测试两种. 在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试, 以减少测试的随意性.
- 运行维护 软件维护是软件生命周期中持续时间最长的阶段. 在软件开发完成并投入使用后, 由于多方面的原因, 软件不能继续适应用户的要求. 要延续软件的使用寿命, 就必须对软件进行维护. 软件的维护包括纠错性维护和改进性维护两个方面.
SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)
- 软件需求
软件需求知识领域涉及软件需求的启发, 协商, 分析, 规范和验证.
在软件行业中, 人们普遍认为, 当这些活动表现不佳时, 软件工程项目非常容易受到攻击.
软件需求表达了对软件产品的需求和限制, 这些需求和约束有助于解决一些现实问题. - 软件设计
设计被定义为定义系统或组件的体系结构, 组件, 接口和其他特征的过程以及该过程的结果(IEEE 1991).
软件设计知识领域涵盖了设计过程和最终产品. 软件设计过程是软件工程生命周期活动, 其中分析软件需求以产生软件内部结构及其行为的描述, 其将作为其构造的基础.
软件设计(结果)必须描述软件体系结构 - 即软件如何分解和组织成组件以及这些组件之间的接口. 它还必须描述能够构建它们的详细程度的组件. - 软件构造
软件构建是指通过结合详细设计, 编码, 单元测试, 集成测试, 调试和验证来详细创建工作软件.
软件构建知识领域包括与满足其要求和设计约束的软件程序开发相关的主题.
该知识领域涵盖了软件构建基础;管理软件建设;建筑技术;实际考虑;和软件构建工具. - 软件测试
测试是一项旨在评估产品质量并通过识别缺陷来改进产品质量的活动.
软件测试涉及在有限的测试用例集上针对预期行为动态验证程序的行为. 这些测试用例是从(通常非常大的)执行域中选择的.
软件测试知识领域包括软件测试的基础知识;测试技术;人机界面测试与评估;与测试有关的措施;和实际考虑. - 软件维护
软件维护包括增强现有功能, 调整软件以在新的和修改的操作环境中运行, 以及纠正缺陷.
这些类别称为完善, 自适应和纠正性软件维护.
软件维护知识领域包括软件维护的基础知识(维护的性质和需求, 维护类别, 维护成本);软件维护中的关键问题(技术问题, 管理问题, 维护成本估算, 软件维护测量);维护过程;软件维护技术(程序理解, 重新设计, 逆向工程, 重构, 软件退役);灾难恢复技术和软件维护工具. - 软件配置管理
系统的配置是硬件, 固件, 软件或这些的组合的功能和/或物理特征.
它还可以被视为根据特定构建过程组合的特定版本的硬件, 固件或软件项的集合, 以满足特定目的. 因此, 软件配置管理(SCM)是在不同时间点识别系统配置的规则, 用于系统地控制配置的改变, 以及在整个软件生命周期中维持配置的完整性和可追溯性.
软件配置管理知识领域涵盖SCM过程的管理;软件配置识别, 控制, 状态核算, 审计;软件发布管理和交付;和软件配置管理工具. - 软件工程管理
软件工程管理涉及规划, 协调, 测量, 报告和控制项目或程序, 以确保软件的开发和维护是系统化的, 规范化的和量化的.
软件工程管理知识领域涵盖了启动和范围定义(确定和协商要求, 可行性分析以及要求的审查和修订);软件项目计划(过程计划, 工作量估算, 成本和进度, 资源分配, 风险分析, 质量计划);软件项目制定(计量, 报告和控制;收购和供应商合同管理);产品验收;审查和分析项目绩效;项目结束;和软件管理工具. - 软件工程过程
软件工程知识领域关注软件生命周期过程的定义, 实施, 评估, 测量, 管理和改进.
涵盖的主题包括流程实施和变更(流程基础架构, 流程实施和变更模型以及软件流程管理);流程定义(软件生命周期模型和流程, 流程定义, 流程适应和流程自动化的符号);过程评估模型和方法;测量(过程测量, 产品测量, 测量技术和测量结果的质量);和软件处理工具. - 软件工程模型和方法
软件工程模型和方法知识领域解决了涵盖多个生命周期阶段的方法;其他知识领域s涵盖特定生命周期阶段的特定方法.
涵盖的主题包括建模(软件工程模型的原理和属性;语法与语义与不变量;前置条件, 后置条件和不变量);模型类型(信息, 结构和行为模型);分析(分析正确性, 完整性, 一致性, 质量和相互作用;可追溯性;以及权衡分析);和软件开发方法(启发式方法, 形式方法, 原型方法和敏捷方法). - 软件质量
软件质量是许多知识领域中普遍存在的软件生命周期问题.
此外, 软件质量知识领域还包括软件质量的基础知识(软件工程文化, 软件质量特性, 软件质量的价值和成本以及软件质量改进);软件质量管理流程(软件质量保证, 验证和确认, 审核和审核);和实际考虑(缺陷表征, 软件质量测量和软件质量工具). - 软件工程专业实践
软件工程专业实践关注软件工程师必须具备的专业, 负责和道德的软件工程知识, 技能和态度.
软件工程专业实践知识领域涵盖专业性(专业行为, 专业协会, 软件工程标准, 雇佣合同和法律问题); 道德准则; 小组动态(团队合作, 认知问题复杂性, 与利益相关者互动, 处理不确定性和模糊性, 处理多元文化环境); 和沟通技巧. - 软件工程经济学
软件工程经济学知识领域关注的是在业务环境中做出决策, 以使技术决策与组织的业务目标保持一致.
涵盖的主题包括软件工程经济学的基本原理(提案, 现金流量, 货币时间价值, 计划视野, 通货膨胀, 折旧, 替代和退休决策);非营利性决策(成本效益分析, 优化分析);估计, 经济风险和不确定性(估算技术, 风险决策和不确定性);和多属性决策(价值和衡量尺度, 补偿和非补偿技术). - 计算基础
计算基础知识领域涵盖了提供软件工程实践所需的计算背景的基础主题.
涵盖的主题包括问题解决技术, 抽象, 算法和复杂性, 编程基础, 并行和分布式计算的基础知识, 计算机组织, 操作系统和网络通信. - 数学基础
数学基础知识领域涵盖了提供软件工程实践所必需的数学背景的基础主题.
涵盖的主题包括集合, 关系和功能;基本命题和谓词逻辑;证明技术;图形和树木;离散概率;语法和有限状态机;和数论. - 工程基础
工程基础知识领域涵盖了提供软件工程实践所必需的工程背景的基础主题.
涵盖的主题包括经验方法和实验技术;统计分析;测量和指标;工程设计;仿真与建模;和根本原因分析.
简单解释 CMMI 的五个级别
Level 1 - Initial: 无序, 自发生产模式.
Level 2 - Managed: 管理, 对整个开发生产流程有监测与控制
Level 3 - Defined: 定义, 管理体系在不同类的项目上一样能够得到成功的实施
Level 4 - Q-Managed: 量化管理, 对管理流程要做到量化与数字化, 实现控制管理的精度
Level 5 - Optimizing: 优化, 利用信息资料, 能够主动地改善流程, 运用新技术, 优化流程
用自己语言简述 SWEBok 或 CMMI
CMMI
的全称为: Capability Maturity Model Integration
, 即能力成熟度模型集成. 实现 CMMI
的意义在于可以提高企业的管理水平, 降低企业的工程成本. 事实表明, 企业实施CMMI技术的投入都会得到丰厚的回报.CMMI
有两种不同的实施方法, 一种是连续式, 主要是主要是衡量一个企业的项目能力; 另一种则是阶段式, 它主要是衡量一个企业的成熟度, 亦即是企业在项目实施上的综合实力. 虽然, CMMI的表述方式不同, 但其实质内容是完全一样的, 获得的收益也差别不大.
最后说一点, CMMI
级别高的企业在赢得项目的竞标中具有一定的优势. 因此, 如果没有CMMI的等级评估, 企业就会失去很多商机.