软件工程软件工程概述软件工程基础知识概念
【软件工程】软件工程概述——软件工程基础知识概念
halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点
软件工程概述——软件工程基础知识概念
【更新日志】
最近更新:
- 更新内容——补充完善个别知识概念(2020.10.24)
- 持续更新中……
软件及软件危机与软件工程
软件: (一种公认的传统定义为)软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及其相关文档的完整集合
【简单说,即 软件 = 程序及其数据 + 相关文档】
在结构化程序设计时代,程序的最小单位是函数及子程序,程序与数据是分离的;
在面向对象程序设计时代,程序的最小单位是类和接口,在类中封装了相关的数据及指令代码
软件的特点:非实体性、不会老化、维护困难复杂、生产只需复制、开发性质(如成本、进度等)难以估计、开发更依赖于开发人员的业务素质、智力、人员的合作、组织和管理等【即软件复杂性易变性较明显】
软件的分类: (按照作用分类)
- 系统软件——能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。如操作系统、数据库管理系统、设备驱动程序以及通信和网络处理程序等
- 支撑软件——也称工具软件,是协助用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发进程的工具
- 应用软件——是在系统软件的支持下,在特定领域内开发,为特定目的服务的一类软件
- 可复用软件——最初的典型的可复用软件是各种标准函数库,通常是计算机厂商提供的系统软件的一部分,后来可复用的范围扩展到算法之外,数据结构也可以复用
软件危机: 软件的发展速度远远滞后于硬件的发展速度,软件开发周期长、成本高、质量差、维护困难等导致软件危机的爆发
软件危机发生的原因:
- 开发经验不足而主观盲目制定计划,与实际情况相差太远,导致常常突破经费预算、工期一拖再拖等问题的出现
- 软件人员与用户的交流存在障碍,使得获取的需求往往不充分或存在错误,存在的问题在后期爆发出来使得开发周期延长,成本增高
- 软件开发过程不规范,缺少方法论和规范的指导,开发人员各自为战,缺少整体的规划和配合,不重视文字资料工作,软件难以维护
- 随着软件规模的增大,其复杂性往往呈指数级升高
- 缺少有效的软件评测手段,提交的软件质量差,在运行中暴露大量问题
软件工程: 是指导软件开发和维护的工程性学科,以计算机科学理论和其它相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经过时间考验且证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以较少的代价获得高质量的软件并维护它
【简单说,即 软件工程 = 软件开发 + 软件管理】
软件工程目标: 运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要以较短的周期、较低的成本生产出高质量的软件产品,并最终实现软件的工业化生产
软件工程基本原理:
- 按软件生存周期分阶段制订计划并认真实施
- 坚持进行阶段评审
- 坚持严格的产品控制
- 使用现代软件开发技术
- 明确责任
- 用人少而精
- 不断改进开发过程
软件生存期(生命周期)
软件生存期: 即软件从项目需求定义直至软件运行维护为止的整个生存过程。概括地说,软件生存期由软件定义、软件开发和运行维护三个时期组成,每个时期又可划分为若干个阶段
通常软件生存期中这些活动对应某些要交付的产品,如开发文档、源程序代码、用户手册等
里程碑指可以用来标识项目进展状态的事件,如完成用户手册等。由于管理人员用里程碑来评价软件开发的进展情况,因此里程碑对于软件开发的管理非常重要
开发过程中的典型文档
- 软件需求规格说明书:描述将要开发的软件做什么【功能、性能、概念模型(功能、行为、数据)等】
- 项目计划书:描述将要完成的任务及其顺序,并估计所需要的时间及工作量【团队、分工、成本、时间进程等】
- 软件设计说明书:描述软件的结构,包括概要设计及详细设计【结构(B/S、C/S等)、功能、算法等】
- 软件测试计划书:描述如何测试软件,使之确保软件应实现规定的功能,并达到预期的性能【编程/测试用例(数据+流程 )】
- 用户手册:描述如何使用软件
软件生存期模型
概念: 软件生存期模型,也称为软件过程模型,是从软件项目需求定义直至软件运行维护为止,跨越整个生命周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架
典型的生存期模型: 瀑布模型、原型模型、增量模型、螺旋模型、统一过程、敏捷过程等
各个阶段过程要完成的基本任务:
- 问题定义与可行性研究:此阶段要回答的关键问题是“到底要解决什么问题、在成本和时间的限制条件下能否解决问题、是否值得做”等
- 需求分析:此阶段要回答的关键问题是“目标系统应当做什么”
- 软件设计:设计是软件工程的技术核心,此阶段要回答的关键问题是“如何实现目标系统”
- 程序编码和单元测试:此阶段要解决的问题是“正确地实现已做的设计”,即“如何编写正确的、可维护的程序代码”
- 集成和系统测试:此阶段主要任务是做集成测试和系统测试以控制软件质量
- 软件运行和维护:已交付的软件投入正式使用,便进入运行阶段。这一阶段可能持续若干年。软件在运行中可能由于多方面的原因,需要对它进行修改
【典型模型详细内容后续更新……】
软件工程方法论
概念: 通常把软件开发生命周期全过程中使用的一整套技术的集合称为方法学/方法论,也称为范型
三要素: 方法、工具、过程
目前使用最广泛的软件工程方法是结构化方法和面向对象方法
【方法详细内容后续更新……】
软件工具概述与介绍
概述: 软件工具指能支持生存期中某一阶段的需要而使用的软件,涉及软件开发、维护、管理过程中的各项活动,并辅助这些活动高质量地进行,因此软件工具也称为CASE(Computer Aided Software Engineering,计算机辅助软件工程)工具
分类: (按软件过程的活动分类)
- 支持软件开发过程的工具,如需求分析工具、设计工具、编码工具、排错工具、测试工具等
- 支持软件维护过程的工具,如版本控制工具、文档分析工具、信息库开发工具、逆向工程工具、再工程工具等
- 支持软件管理过程和支持过程的工具,如项目管理工具、配置管理工具、软件评价工具等
【PS:与上文提及的按作用分类中的支撑工具(即工具软件)相对应,支撑软件可分为纵向支撑软件和横向支撑软件】
- 纵向支撑工具:指支持软件生存期某阶段特定软件工程活动所使用的软件工具,如需求分析工具、设计工具、编码工具、测试工具、维护工具等
- 横向支撑工具:指支持整个软件生存期各个活动所使用的软件工具,如项目管理工具、配置管理工具等
软件工程知识体系及知识域
持续更新中……
我是桐小白,一个摸爬滚打的计算机小白