软件的特点
- 复杂性。软件是一个庞大的逻辑系统,并且由于主要是依赖人的智力构造出来,使得软件难以统一。
- 一致性。软件需要与运行它的硬件保持一致,软件需要顺应硬件接口。
- 退化性。软件虽不会磨损,但会因缺陷和过时而退化。
- 易变性。软件在应用过程中,需要升级更新以满足用户需求。
- 移植性。需要考虑软件在不同系统平台上能否正常运行的问题。
- 高成本。软件开发过程复杂,需要耗费大量开发成本和管理成本。
软件开发不只是编码
软件构建分为软件过程和项目管理两个过程。而编码只是软件过程的一部分,软件开发需要经过 计划、分析、设计、编码、测试、维护几个环节
软件危机是什么、出现原因及解决手段
软件开发和维护过程中所遇到的严重问题成为软件危机。
软件技术的进步未能满足由于硬件技术进步提出的对软件技术进步的要求,导致了软件危机
- 解决手段
- 重视与客户的沟通,明确其需求,切实做好需求分析
- 做好软件定义时期的工作,重视设计和实现过程的资料
- 做好充分的测试工作、维护工作和管理工作
- 应用统一的、公认的方法论和规范指导
软件工程的要素及各自作用
方法、工具和过程是软件工程三要素
- 软件工程方法为软件开发提供了“如何做”的技术
- 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境
- 过程规定了一系列任务框架,规定了完成各项任务的工作步骤
软件过程、软件生存周期和软件过程模型三者之间概念区别
- 软件过程:包括把用户需求转变成软件产品所需的所有活动。是一个为了构造高质量软件所需完成的一系列活动的过程框架。
- 软件生存周期。即软件由生到死的过程,通常包括 问题的定义与可行性分析、项目计划、需求分析、软件设计、编码与测试、运行与维护等阶段。
- 软件过程模型。一个包括软件产品开发、运行和维护中有关过程、活动和任务的框架,覆盖了从系统的需求定义到系统的使用终止。是一种软件过程的抽象表示,也称为软件开发模型。
两个常见的软件过程模型
- 瀑布模型:是一种线性模型,文档驱动的模型。将软件生命周期划分为软件计划、需求分析和定义、设计、实现、测试、运行和维护6个阶段,开发过程通过一系列阶段顺序展开,每个阶段都会产生循环反馈。各个阶段产生的文档是维护软件产品时必不可少的,是一种文档驱动的过程模型。
- 螺旋模型。强调了风险分析,特别适用于大型复杂的系统。每个周期都包括需求分析、分线分析、工程实现和评审 四个阶段,是风险驱动的模型。
螺旋模型在瀑布模型的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直至所有的主要风险因素都被确定。与瀑布模型相比,螺旋模型支持用户需求的动态变化,降低了软件开发风险
瀑布模型和其他常见模型关联和区别
- 增量模型:在瀑布模型的基础上对所有阶段都进行增量开发,不仅是增量开发,也是增量提交,在各个阶段交付满足客户需求的可运行产品的一个子集。
- 螺旋模型:螺旋模型在瀑布模型的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直至所有的主要风险因素都被确定。与瀑布模型相比,螺旋模型支持用户需求的动态变化,降低了软件开发风险
- 构件集成模型:利用模块化方法将整个系统模块化,复用构件库中的软件构件,通过组合手段提高应用软件系统过程的效率和质量。
- 统一过程模型:包括初始、细化、构造和移交四个阶段,每个阶段包括需求、分析、设计、实现和测试5个核心工作流。5个核心工作流与瀑布模型的各个阶段类似。
软件过程就是软件开发过程么?为什么?
软件过程包括把用户需求转变成软件产品所需的所有活动。是一个为了构造高质量软件所需完成的一系列活动的过程框架。软件过程内容分为两大类:语境的过程和针对软件开发的过程。因而软件开发是软件过程的一部分,并不等同,软件过程中还包括协议签订、项目规划、软件开发前的准备工作、管理工作以及软件的运行维护工作等。