引言
敲完《机房收费系统》,紧接着而来的就是软件工程的学习,那么,什么是软件工程,也就是说,它是什么,做什么用的。
初识软件工程,很多人都一头雾水,不知道它讲的是什么,其实说简单点,就是一个软件在生存期内的经历,从开发到软件不再使用期间,需要做的事情,更加规范软件的开发过程以及使用过程。
软件
首先介绍一下,什么是软件,软件有哪些特点,有哪些分类,
定义
软件:是计算机中与硬件相互依存的另一部分,包括程序,数据及相关文档的完整集合。
程序:按事先设计的功能和性能要求执行的指令序列。
数据:使程序能正常操纵信息的数据结构。
文档:与程序开发,维护和使用有关的图文材料。
特点
1、逻辑实体,抽象性。
2、开发过程没有明显制造过程。
3、没有机械磨损老化问题。
4、受硬件限制,对计算机系统的依赖性。
5、未完全摆脱手工艺开发方式。
6、复杂(①实际问题,②逻辑结构)。
7、成本昂贵。
8、涉及社会因素(知识产权等)。
分类
1、系统软件(操作系统,数据库管理系统,设备驱动系统,通信处理程序)。
2、支撑软件(文本编辑程序,文件格式程序,数据传输程序,程序库程序,支持需求分析,涉及,实现,测试和支持管理的软件)。
3、应用软件(数据处理,计算,辅助设计制造,仿真,智能嵌入,自动化,辅助教学等)
分类标准
按软件规模划分(小型,中型,大型,甚大型,极大型)
按软件工作方式划分(实时处理,分时,交互,批处理)
按软件服务对象划分(项目,产品)
按使用频度划分(一次性,频繁)
按软件失效影响划分(高可靠性,一般可靠性)
危机
开发和维护中遇到的严重问题。
表现
1、产品不符合实际需要
2、生产速率低
3、质量差
4、开发成本和进度估计不准
5、可维护性差
6、文档不完整不合格
7、价格昂贵
原因
1、难检验
2、规模庞大
3、开发人员重视开发轻视问题
4、无软件质量管理规范
5、开发与维护关系问题上存在错误概念
解决办法
1、分阶段的生存周期计划严格管理
2、阶段评审
3、产品控制
4、现代程序设计技术
5、结果易审查
6、合理安排人员(少而精)
7、承认不断改进软件工程实践的必要性
软件工程
介绍完软件,现在来介绍一下软工。
定义
1、运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文件资料。(Boehm)
2、软件工程是开发、运行、维护和修复软件的系统方法。(IEEE)
3、建立并使用完善的工程化原则,以较少经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。(Fritz Bauer)
内容
理论,结构,方法,工具,环境,管理,规范等。
三要素
方法(如何做)
工具(提供软件支撑环境)
过程(方法顺序,文档,管理,完成的里程碑)
目标
1、较低成本
2、达到要求
3、较好性能
4、易于移植
5、较低维护费用
6、按时完成
最终目标——最低的价格最优秀的软件,以较少投资获得易维护,易理解,可靠,高效率的软件产品。
过程
1、软件规格说明(功能及运行限制)P
2、软件开发D
3、软件确认(测试调试运行)C
4、软件演进(维护)A
文档
计划阶段:理解工作范围——产生计划任务书
需求分析:定义用户需求——产生软件需求规格说明书
设计阶段:建立软件结构——设计说明书(总体,详细)
编码阶段:编写程序——交付用户的程序,程序清单
测试阶段:发现和排除错误——可运行的程序
维护阶段:运行和管理——改进的系统
特点
1、易理解性
2、可见性
3、可支持性
4、可接受性
5、可靠性
6、健壮性
7、可维护性
8、速度
原则
1、分解(降低复杂性,模块化和抽象)
2、独立性(模块的独立性)
3、一致性(标准一致,接口一致)开发过程的标准化。
4.确定性(每个模块都要有明确标准)
5、信息隐蔽
6、信息局部化
7、完整性
软件生存期
软件生存期 life cycle:孕育,诞生,成长,成熟,衰亡(不用)的过程。
软工,就是解决在软件生存期各个阶段中需要完成哪些工作。
孕育
一、制定计划(总目标;要求;可行性研究)
二、需求分析(可行性报告认可之后)和定义
三、软件设计(概要设计;详细设计;设计说明书)
四、程序编写(结构化程序设计;三种基本结构)
诞生
五、软件测试
静态(查阅代码)和动态(上机实践)
单元测试(功能和结构),开发者完成。个人测试。
组装测试又叫集成测试(检查模块接口和全局变量)。测试组。
成长/成熟
六、运行和维护(改正性维护,适应性维护,完善性维护)
衰亡
软件废弃或者有新的软件替代它。
模型
瀑布模型,演化模型,螺旋模型,喷泉模型,智能模型等。(范围和优缺点总结)。
瀑布模型
一、思想:
从制作时间上按工序把问题化简;将功能实现与制作分开便于分工协作。
二、三个阶段:
定义;开发;维护(发现问题越晚,代价越高)。
三、优点:
1、奠定了软件工程方法的基础。
2、流水依赖,便于分工协作。
3、推迟物理实现,易于修改文档,有复审质量保证。
四、不足:
与用户见面晚,成功率低,一般为25%。
五、适用范围:
系统要求明确的系统;各种应用软件的开发均可适用。
六、开发方法:
遵循软件生命期的划分,明确规定每个阶段的任务,上一阶段完成确定的任务后就产生一定格式的文档给下一阶段,不同阶段的任务一般有不同级别的软件人员承担。
原型(渐增型)
一、思想:
允许从部分需求出发,先建立一个不全面的系统,通过测试这个系统,进一步使系统扩充和完善。
二、优点:
开发的始终开发人员和用户都共同参与,有问题可以随时更改,从而很好的满足了用户的需求。
三、适用范围:
知识型软件系统的开发。
四、特点:
1、从整体结构上不如瀑布模型清晰。
2、软件的文档不如瀑布型的划分严格。
3、周期长,成本高。
4、与用户见面快,开发效率高。
变换型
一、思想:
从软件需求的形式规格说明出发,经过一系列的程序变化,得到最终结果。
二、特点:
有严格的数学理论和形式化的技术支持,但目前在研究和实验阶段,不能使用。
演化模型
适用于对项目需求不清晰,很难一次开发成功,第一次为试验开发,用于探索可行性)
螺旋模型
制定计划;风险分析;实施工程;客户评估。
适用于大型项目的开发。
喷泉模型
迭代(重复演进)
无间隙(各阶段无明显界限)