【软件】
概述
软件是计算机中与硬件相互依存的部分,其是程序、数据、相关文档的集合
- 程序:按事先设计的功能和性能要求执行的指令序列
- 数据:使程序能正确处理信息的数据结构
- 文档:与程序开发、维护、使用有关的图文资料
软件是一个逻辑实体,依赖于硬件和 OS,在运行维护期间,不会像硬件一样出现磨损与老化,只会出现退化问题
软件的开发以人工开发为主,不仅成本高、风险高,还受到社会因素的影响,在生产过程中,软件开发与硬件流水线式开发不同
分类
软件的分类有以下几种方式:
- 按功能:系统软件、支撑软件、应用软件
- 按服务对象:通用软件、定制软件
- 按规模:小型软件、中型软件、大型软件
- 按工作方式:实时软件、分时软件、交互式软件、批处理软件
其中,系统软件是指控制计算机与外设并支撑应用软件开发和运行的系统,支撑软件是指支持其他软件开发和维护的一种工具性的软件,应用软件是指与系统软件相对应的用各种程序设计语言编制的应用程序
软件危机
随着应用软件的规模越来越大,越来越复杂,动辄数百万行代码已是常见现象,不可避免地就出现了软件危机
软件危机是指在开发和维护软件过程中遇到的一系列的问题,常见的表现有:开发过程中无法按时完成、产品质量无法保证、开发经费严重超支、开发完成后软件表现强差人意,软件无法维护等等
对软件产品认识不足与对软件开发的内在规律存在理解偏差是出现软件危机的根本原因
开发者在开发过程中存在的不当开发方法,是软件危机的主观原因,其通过正确的引导即可解决,常见的主观原因有:
- 忽视软件开发前提调研与需求分析
- 缺乏软件开发经验与有关数据积累,忽视与用户的有效沟通
- 开发过程缺乏统一规范的方法论指导,没有完善的质量保证体系
- 文档资料不规范、不准确,开发者失去工作基础,管理者失去管理依据
- 忽视了软件测试重要性,同时不重视软件维护
【软件工程】
概述
IEEE 对软件工程定义为:将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件
软件工程研究的内容分为两部分:
- 软件开发技术:主要研究软件开发方法、过程、工具以及环境
- 软件开发过程管理:主要研究软件工程经济学和软件管理学
具体来说,软件工程,是借鉴传统工程的原则、方法,以提高质量,降低成本为目的的指导计算机软件开发和维护的工程学科
软件工程的发展经历了四个重要的阶段:
- 传统软件工程:将软件开发纳入工程化轨道,基本形成了软件工程的概念、框架、技术与方法
- 对象工程:随着面向对象技术的出现,衍化出了完整的软件开发方法和系统的技术体系
- 过程工程:为提高软件生产率、保证软件质量,提出了软件开发和维护要有管理和支持的能力
- 构件工程:基于构件的开发方法,利用可重用的构件来进行开发
层次
软件工程是层次化的技术,具体可分为以下三个层次:
- 工具层:在软件开发过程中,工具提供了自动或半自动化的支持,例如:建模工具 Rational Rose
- 方法层:方法提供了开发软件在技术上需要的一系列的任务,包括需求分析、编程、测试等
- 过程层:过程提供了开发的框架,使得软件能够合理、及时的被开发
【软件开发方法】
软件开发方法是一种使用定义好的技术集与符号来表示组织软件生产的过程,其目标是在规定时间与成本内,开发出符合用户需求的高质量软件
常见的方法有:
- 结构化方法:采用 “自顶向下,逐步求精” 的思维,将软件开发分为若干阶段,每个阶段相对独立且复杂性不高,可便于不同的开发人员进行开发
- 面向数据结构方法:从输入输出的数据入手,导出程序框架结构,再补充程序细节,即可得到一个完整的程序结构图
- 面向对象方法:以对象建模为基础,将数据和对数据的操作结合起来,是一种可以反复迭代的开发方法
- 形式化方法:是基于形式化数学变换的软件开发方法,偏向于严密的理论
【软件工程工具】
软件工程工具为软件工程中的过程与方法提供自动或半自动的支持,可以帮助软件开发人员进行软件分析、设计、开发、测试、维护、管理等工作
其具有以下三种分类标准:
- 按功能:可视化建模工具、程序开发工具、自动测试工具、文档编辑工具、配置管理工具、项目管理工具
- 按支持过程:设计工程、编程工具、维护工具
- 按支持范围:窄支持工具、宽支持工作台、一般支持环境