目录
1、软件工程学科概念
1.软件的定义
软件是程序、数据及开发、使用和维护程序所需要的所有文档,其中
程序:计算事务的处理对象和处理规则的描述,为指令的集合;
数据:程序加工处理的对象;
文档:有关计算机程序功能、设计、编制、使用的文字或图形资料。
2.软件的特点
1)软件是一个逻辑的而不是物理的产品
2)软件是一种逻辑实体,不具有直观可见性;
3)软件是由开发或工程化而形成的,而不是传统意义上的制造产生的;
4)软件不会“磨损”
5)大多数软件是自定义的,而不是通过已有构件组装的;
6)软件的开发和运行常常受到计算机系统的限制,对计算机有着不同依赖。(软件移植);
7)软件的成本相当昂贵。
4.软件的分类
·基于软件功能划分
系统软件、支撑软件,应用软件;
·基于软件工作方式划分
实时处理、分时处理、交互式、批处理;
·基于软件规模化分
微型、小型、中型、大型...;
·基于软件服务对象的范围划分
定制软件、通用软件
·基于软件失效的影响划分
关键软件、非关键软件
5.软件的应用
系统软件、实时软件、商业软件、工程科学计算软件、嵌入式软件、个人计算计软件、人工智能软件
2、软件工程学科的产生背景
软件工程学科的产生背景是为了应对解决软件危机。
20 世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。
60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发 。
1968年,北大西洋公约组织(NATO)在联邦德国的国际学术会议创造软件危机(Software crisis)一词。而1960年代中期开始爆发众所周知的软件危机,为了解决问题,在1968、1969年连续召开两次著名的NATO会议,并同时提出软件工程的概念。
在软件开发中遇见的问题找不到解决的方法,问题积累起来,形态尖锐的矛盾,导致了软件危机。由于当时单个的程序开发技术已经不能应用到大型、复杂的软件系统。导致花费时间长、预计的费用高、不可靠、难以维护。为了更加有效的解决质疑问题,从而催生了软件工程学科。
3、软件工程学科的解决软件危机问题的策略与途径
1.软件危机
定义:软件危机是指计算机软件的开发与维护过程中出现一系列严重问题的现象。
2.软件危机包含两方面的问题:
a.如何开发软件来满足日益增长的需求;
b.如何维护数量不断膨胀的软件产品。
3.软件危机表现形式
1)软件的开发成本和开发进度的估计常常不准确;
2)用户对“已完成”软件系统的不满意现象时常发生;
3)软件产品的质量常常靠不住;
4)软件通常没有适当的文档资料;
5)软件常常是不可维护的。
4.产生软件危机的原因
·软件本身的特点:
1)逻辑部件,不具有直观可见性;
2)规模日趋庞大,开发与管理十分复杂性;
·错误的软件开发和维护方法
1)忽视软件需求分析
2)轻视文档的重要性
3)忽视软件维护等
5.解决软件危机的途径
1)对计算机软件有一个正确的认识(软件!=程序);
2)必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;
3)推广使用在实践中总结出来的开发软件的成功技术和方法;
4)开发和使用更好的软件工具;
技术设施方面:
1)推广和使用在实践中总结出的好的软件开发技术和方法,并不断探索和研究更有效的技术;
2)开发和使用更好的软件工具,包括采用好的开发工具系统分析和辅助设计工具等等,以提高工作效率。
管理措施方面:
吸收和借鉴人类长期以来从事各类工程项目所积累的行之有效的原理、概念、技术和方法。
4、软件工程学科的研究内容
根据软件工程这一框架,软件工程学科的研究内容主要包括:软件架构、软件设计方法、软件领域建模、软件工程决策支持、软件工程教育、软件测试技术、自动化的软件设计和合成、基于组件的软件工程、计算机支持的协同工作、编程语言和软件工程、计算机网络、信息与通信安全、计算机图形学与人机交互、多媒体技术应用、人工智能与识别、嵌入式软件与应用、自动控制、分布式计算与网格计算、云计算技术、存储技术、数据库技术研究、计算机辅助设计与应用技术、大数据分析与处理。
5、软件工程目标
生产具有正确性、可用性以及开销适宜的软件产品。
1)正确性:软件产品达到预期功能的程度。
2)可用性:软件基本结构、实现及文档为用户可用的程度。
3)可维护性:软件能够不断进化以满足客户的需求变化的程度。
4)合算性:软件开发、运行的整个开销满足用户要求的程度。
5)决定了软件过程、过程模型和工程方法的选择。
6、阶段划分及基本任务
阶段划分原则:各阶段的任务彼此间尽可能的相对独立,同一阶段各项任务的性质尽可能的相同,从而降低各阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件的组织管理。
·定义时期:
1)问题定义:通过访问调查,明确要解决问题性质、工程目标和规模;
2)可行性研究:画出系统的数据流图,在此基础上更加准确具体的确定工程的目标和规模,更加准确地估计系统的成本和效益;
3)需求分析:与用户密切配合交流,得到用户确认的系统逻辑模型;
·开发时期:
1)总体设计:提出几种可能的解决方案,权衡各种方案推荐出最佳方案;设计软件的结构,确定软件的模块构成模块之间的关系;
2)详细设计:把解决问题的方案具体化,设计出程序的详细规格说明,包含必要的细节信息;
3)编码和单元测试:将详细设计的结果翻译成高级程序设计语言的源程序,并且仔细测试编写的每一个模块;
4)综合测试:通过各类型的严格测试与调试,使软件达到预定的要求;
·维护时期:
1)软件维护:通过必要的维护工作使得系统永久的满足用户的需求(改正性维护、适应性维护、完善性维护、预防性维护)。