1.1软件工程概述
软件工程概述
什么是软件?
软件 = 程序 + 数据 + 文档
程序按事先设计的功能和性能需求执行的指令序列
数据是程序能正常操纵信息的数据结构
文档与程序开发、维护和使用有关的图文材料
。程序是指一系列按照事先设定的功能和性能需求执行的指令序列;数据是程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文资料。
三者之中,程序是软件的可执行部分,而数据与文档是不可执行部分,他们三者之间共同协作才能构成一个完整的软件。
特征
第一,软件是由人来开发或者工程化的,并不像桌子椅子一样用机器能制造出来;
第二,软件的生产,可以只是计算机上的一个简单的复制粘贴过程;
第三,软件产品更易于被多次修改,而你买的茶杯想从方的变成圆的则没那么容易;
第四,软件开发的环境对产品影响较大,因为开发者在开发过程中易于受到各种环境因素干扰,而生产线上的家具则不管周边噪音再大出来的也是同样的东西;
第五,软件开发的时间和工作量难以估计,而不像生成机器的速率那样容易度量;
第六,与工业产品不同,软件的开发进度几乎没有客观衡量标准;
第七,软件的测试非常困难,测试一辆自行车能不能骑,总是比从成千上万行代码中找错误容易得多;
第八,软件不会磨损和老化,哪怕用上十年八年,也不会像轮胎一样需要报废,只要你不嫌弃就可以一直用下去;
第九,与家具家电的售后维护不同,软件维护不是简单的更换元器件,由于代码之间更为复杂的逻辑结构,变更容易产生新的问题。
软件双重作用
软件它是一种产品,为用户提供计算能力,产生、管理、获取、修改、显示或传输信息,比如我们经常用到的word、excel、photoshop等等。
另一方面也是开发工具,用于开发其他软件产品,支持或直接提供系统所需的功能、控制其他程序、改善通信、帮助开发其它软件等,比如windows操作系统、苹各类编程语言的集成开发环境等等。
软件的分类(按软件功能)
按照软件的功能,可以将软件分为三类。
类别 | 包含 | 举例 |
---|---|---|
系统软件 | 操作系统、数据库管理系统、设备驱动程序、通信处理程序等 | windows、oracle等等; |
支撑软件 | 文本编辑程序、文件格式化程序、磁盘或磁带间数据传输的程序、程序库系统、支持需求分析、设计、实现、测试和支持管理的软件 | word、pqmagic、rational rose |
应用软件 | 商业数据处理软件、工程与科学计算软件、计算机辅助设计/制造软件、系统仿真软件、智能产品嵌入软件、医疗/制药软件、事务管理/办公自动化软件、计算机辅助教学软件 | 如MATLAB、AutoCAD、腾讯QQ |
软件的分类(按服务对象)
两类
项目软件的服务对象:来自于一个具体项目范围内的客户集合,比如某高校的教务管理系统;
产品软件的服务对象:客户数量庞大,如各类互联网软件,它们的目标服务对象都是全国乃至全世界的网民。
软件的发展阶段
四个阶段。
个体化发展阶段:软件往往只是为解决某个实际问题而专门编写的程序,开发者即使用者。
作坊式发展阶段:早期软件作坊缺乏组织管理,程序编写结合了一定的说明。
工程化发展阶段:软件公司化运作,更加产品化、系列化、标准化、工程化,文档被引入软件的内涵。
产业化特点:市场更加广阔,品类更加丰富,产品生态链愈加完整。
软件规模越来越大
知名的谷歌软件迄今已包含了20亿行代码。
所以可以想象这样的软件产品的设计开发与维护难度,不是普通的工业产品所能比拟的。
为什么软件发展如此之快?
1、计算需求,软件必须不断的发展以适应新的计算环境或者技术的变化,比如从单机计算到现在的云计算;
2、业务需求,软件必须不断改善以实现新的业务需求,比如从小微企业单机OA软件到集团互联网OA软件;
3、嵌入需求,软件必须不断扩展,以满足和新一代系统或数据库之间的互操作性,比如从access单机数据库到HBASE云数据库;
4、架构需求,软件必须重新设计以使其在新的网络环境中是可用的,比如从互联网软件再到移动互联网软件等。