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

软件工程

a) 软件工程是指将系统化、规范化、可度量的方法应用于软件的开发、运行和维护中,即,将工程化的方法应用于软件。
b) 同时,针对上述行为的相关方法的研究也是软件工程。


软件危机

a) 本质原因:是计算机的发展导致了软件危机,软件具有复杂性、一致性、不可变性、可视性的本质特点,落后的软件生产方式无法满足计算机的迅速发展

b) 表现:开发和维护软件的过程中出现一系列的问题,如:开发进度难以预测、开发成本难以预测、因前期规划不善从而影响软件质量、软件产品缺少相应的文档、难以维护等

c) 克服软件危机的方法:软件工程构建了生产软件的方法与知识体系,其目标就是克服软件危机。从实践的角度,软件工程实践包括过程、方法、工具三个要素,是软件开发的最佳实践指南,当对软件开发


软件生命周期

软件生命周期是指在时间维度,对软件项目任务进行划分,又成为软件开发过程。常见有瀑布模型、螺旋模型、敏捷的模型等。

瀑布模型:按照工程次序安排开发周期,将周期分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,规定其次序并产生循环反馈

waterfallmodel

螺旋模型:该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。在每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。

spiralmodel

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

agilemodel

火车模型:发布周期固定,每个新特性启用独立的发布火车(固定的“发车”时间,特性的状态取决于该特性是否赶上最近的火车发车时间)

trainmodel


SWEBoK 的 15 个知识域

【软件工程实践】

  1. software requirements:软件需求,指软件产品的需求和约束,要对软件需求进行引出、商议、分析、规范和确认,保证产品的完整
  2. software design:软件设计,指分析软件需求后,对软件制品或系统的结构、组件、接口以及其他特性做出设计和定义
  3. software constuction:软件开发,指通过详细的设计、编码、单元测试、集成测试、调试以及验证的过程来完成开发的过程
  4. software testing:软件测试,指通过检测行为发现当前制品的缺陷并进行改进,从而提高软件质量的行为
  5. software maintenance:软件维护,指增强现有的软件功能、修复软件缺陷,以及使软件适应新的修改过的操作环境的过程,即软件产品的完善和迭代
  6. software configuration management:软件配置管理,识别系统配置,从而控制配置的更改,在整个软件生命周期中保持其配置的完整性和可追溯性,包括软件配置识别、控制、状态核算、审核、软件发布管理和交付、软件配置管理工具
  7. software engineering management:软件工程管理,指计划、协调、测量、报告和控制项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的
  8. sofeware engineering process:软件工程过程,指对软件周期过程的定义、实现、评估、测量、管理和改进,包括过程(软件生命周期模型和过程、过程定义注释、过程适应和过程自动化)、方法(过程测量、产品测量、测量技术和测量结果质量)、工具三个方面
  9. software engineering models and methods:软件工程模型和方法,指在不同生命周期阶段的方法,如建模、模型类型、分析、软件开发方法
  10. software quality:软件质量,指一种软件生命周期问题,包括软件质量基础、软件质量管理过程以及实用性考量
  11. software engineering professional practice:软件工程专业实践,指软件工程师以专业、负责和到的的方式时间软件工程所必须具备的知识、技能和态度,包括专业性、道德规范、群体动力学、沟通技巧

【软件工程基础教育】

  1. software engineering economics:软件工程经济学,指在业务环境中作出决策,以使技术决策与组织的业务目标保持一致,包括软件工程经济学基础、非盈利决策、估算经济风险和不确定性、多属性决策
  2. computing foundations:计算机基础,指软件工程实践必需的计算机能力,包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统以及网络通信
  3. mathematical foundations:数学基础,指软件工程实践必需的数学能力背景,包括集合、关系和函数、基本命题和谓词逻辑、证明技术、图和树、离散概率、语法和有限状态机、数论
  4. engineering foundations:工程基础,指软件工程实践必需的工程背景,包括经验方法和实验技术、统计分析、测量和度量、工程设计、模拟和建模、根本原因分析

CMMI 的五个级别

Level 1 - Initail:无序,自发生产模型

Level 2 - Managed:项目流程特征,反应性

Level 3 - Defined:组织标准过程,可视性

Level 4 - Quantitatively Managed:测量和控制,定量的

Level 5 - Optimizing:优化和改进


SWEBok

SWEBok(software engineering body of knowledge),软件工程知识体系,是IEEE Computer Society 建立的软件生产的最佳实践与相关知识的框架,指导了软件工程人才的培养与学科建设。SWEBok分为两个部分,分别是软件工程实践和软件工程基础教育,分别下设了11个和4个知识领域。

软件工程实践部分对于软件开发的流程规范进行了研究,对开发过程管理行为做出了方向性的指引,对软件开发过程中的专业性和完整性进行了分析,同时也对软件制品质量做出了保证。

软件工程基础教育部分对软件开发从业者的能力背景提出了要求,分别从经济学逻辑、计算机基础、数学基础以及工程基础对从业者做出了规范,对于学科建设和人才培养提出了具有建设性的意见。


CMMI

CMMI(Capability Maturity Model for Software / CMM),软件能力成熟度模型,是衡量企业能力成熟与否的模型工具。它一共分为五个层级,分别是初始级、可管理级、已定义级、量化管理级和优化管理级。

软件能力成熟度模型为企业软件工程能力的评估提出了明确的标准,根据团体能力上限的不同自底向上划分出了不同的层级,便于我们准确客观地评测企业能力。

而与此同时,CMMI的层级划分也为企业的未来发展及自身完善明确了方向,根据能力成熟度模型的层级标准,各个企业可以对自身的软件工程流程做出更加严格专业的规范,从而提高其自身能力和竞争力。


0%