软件的本质与软件工程科学
标签:系统分析与设计 软件工程
软件工程
软件的本质:
- 复杂性
- 一致性
- 可变性
- 不可视性
SWEBoK 软件工程知识体系,将知识分为软件工程实践和基础教育两个部分。
软件工程生命周期:需求分析、系统分析与设计、系统实现、测试与维护。在时间维度,对软件项目进行划分,又称为软件开发过程。常见有瀑布模型、螺旋模型、敏捷模型等。
因此,软件工程包含过程、方法、工具三个要素
- 过程:任务实施的步骤
- 方法:每步工作的内容、标准
- 工具:使得工作半自动化、自动化的工具
作业
软件工程的定义:将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。
解释导致software crisis本质原因、表现,述说克服软件危机的方法:
- 本质原因:软件的复杂性远远超出了人脑能够直接控制的程度。
- 表现:项目运行超出预算、项目运行超过时间、软件质量低下、软件通常不匹配需求、项目无法管理且代码难以维护。
- 克服方法:构建软件生成的最佳实践与相关知识框架SWEBoK,给出了15个知识域,将知识分为了软件工程实践和基础教育两个部分。
软件工程生命周期:需求分析、系统分析与设计、系统实现、测试与维护。在时间维度,对软件项目进行划分,又称为软件开发过程。常见有瀑布模型、螺旋模型、敏捷模型等。
SWEBoK的15个知识域:
- Software Requirements:软件需求,描述了现实世界问题对于软件的需求和限制。
- Software Design:软件设计,包括了描述软件需求的设计的过程,以及搭建软件架构的最终的产品
- Software Construction:软件构造,要求构建满足需求和限制的软件,以及如何构建的问题。
- Software Testing:软件测试,通过使用测试集合对程序行为的动态检测来检验软件质量,找出漏洞。
- Software Maintenance:软件维护,包括强化已有的能力,改造软件以适应新的需求和修复漏洞。
- Software Configuration Management:软件设置文档管理,设置文档是软件、固件、硬件的特征性和物理性描述与组合,软件设置文档是在不同时间点识别系统配置的规则,在整个软件工程生命周期中维护配置的完整性和可用性。
- Software Engineering Management:软件工程管理,软件工程管理关注过程实现和改变、过程定义、过程评估模型和方法,以及过程量化
- Software Engineering Models and Methods:软件工程模型和方法,指描述软件工程生命周期不同阶段的方法,包括建模的原则、模型的种类、分析以及软件开发方法。
- Software Quality:软件工程质量检测,包括基础的质量定义、质量管理过程、质量管理的方法。
- Software Enginnering Professional Practice:软件工程开发实践,关注相关的知识,技能,以及工程师在实践中所必有的态度
- Software Engineering Economics:软件工程经济,注重如何在公司环境下进行软件工程的决策,来实现组织的商业目标。
- Computing Foundations:计算基础,提供软件工程实践的计算背景。
- Mathematical Foundations:数学基础。给出了软件工程实际中的数学基础,离散数学、基本逻辑学、证明方法和编译原理。
- Engineering Foundations:工程基础,包括工程方法和技术,统计学方法和量化方法,模拟和建模方法,系统分析技术。
CMMI,能力成熟度模型集成
- level1 initial:初始级,软件工程是无序的,甚至是混乱的。
- level2 managed:已管理级,已经建立了基本的项目管理过程来跟踪费用、进度和功能特性,制定了必要的纪律。
- level3 defined:已定义级,将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。
- level4 quantitatively managed:量化管理级,分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解和控制。
- level5 optimizing:优化管理级,过程的量化反馈和先进的新思想、新技术促进过程持续不断地改进。
用自己的语言简述SWEBok或CMMI,200字
因为我自己并没有大型软件开发的经验,所以对于SWEBoK的理解很多都只是浮于概念上。SWEBok将软件工程知识体系分为15个知识域,其中,软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理(软件发布)这些在很多模型中都是有出现的,比如瀑布模型、原型模型、螺旋模型等,它们基本上就是软件工程所认为开发的需要有的基本流程。通过这些流程,工程可以得到更好地实现,而不是像软件危机时的那些软件那样,因为各种问题最终失败。
软件工程管理、软件工程模型和方法、软件工程质量检测、软件工程开发实践、软件工程经济,如果说前面的知识域要求公司怎么去完成软件工程产品,这些知识域更多的是要求公司如何去制定这个能够完成软件工程产品的框架。
计算基础、数学基础和工程基础,这三个知识域则是全局的基础知识需求,也是最不起眼,但最有可能成为短板的地方。我个人的一些经验是,工程管理会决定项目能否做出来,知识基础则是能够决定这个软件的下限。
总体而言,SWEBok囊括了开发软件时所需要的知识的方方面面,十分值得我们去学习。