什么是软件工程,概括来说,就是用工程化的方法对软件进行定义、开发、维护。而所谓工程化的方法,则是包括了计算机科学、工程科学、管理学、数学等领域的一种综合方法。
一、软件生命周期
有时也叫软件生存周期,是指软件从提出开发到软件产品 废的整个周期。
通常分为以下几个周期:
1、项目立项
有的地方也把这个周期叫做可行性分析,因为可行性分析是项目立项过程中的一个重要事务和依据;
2、需要开发与管理
有的地方也把这个周期叫做需求分析,这种叫法比较片面,对于需求,通常包括获取、分析、定义、确认、跟踪(即变更)这一连串的事务;
3、系统设计
这个周期可能会被误认为是编码,其实不然,在这里,我们需要对软件系统的架构、基于该种架构的技术实现、功能模块、数据库进行规划与设计。
该周期包括我们所熟悉的概要设计(即系统架构设计)和详细设计;
4、编码
这个周期所要做的是,将系统设计周期中,我们的设计思路“翻译”成计算机所能认识的程序代码;
5、测试
对程序代码进行测试,以保证软件产品的质量;
6、发布与实施
这时一个成功的软件产品已经出现在我们眼前,我们所要做的就是将它发布出来以投放市场,同时还需要负责将产品实施上线,此时就可以进行项目结项了;
7、维护
软件正式投入使用后,可能还会出现各种隐藏的错误,或软件运行环境发生变化而需要做出变更,或客户需求发生变化而需要对软件产品进行扩展等等,这时我们对软件产品进行维护。
现实当中,不同的软件规模、种类、开发方式、开发环境等因素,都可能影响到软件生命周期的构成,也就是说,并不是所有的软件产品都必须独立存在以上各个生命周期,比如实施类的项目就没有设计、编码和测试生命周期。
二、软件生命周期模型
望文生义,我们知道它是一种模型。它用来组织每个软件生命周期的活动如何执行,这就类似于,我们在编写PPT文档的时候使用的模板。
在现实当中,根据公司开发规范、习惯、业务需要等的不同,往往不是拘泥于某种模型,而通常是以某个模型为基础,结合自身的各种状况,从而形成某种适合自己的复合的软件生命周期模型。
以下是一些常见的软件生命周期模型:
1、瀑布模型
有时也叫线性模型,它将软件生命周期由前至后按顺序串联起来,以文档作为驱动,如同瀑布流水一般。
适合于需求比较明确无二义性的软件开发,比如:进销存管理、操作系统开发,每一个生命周期工作的完成都作为一个里程牌,后一周期以前一周期的输出文档作为输入,逐层推进。
但对于需求变化较晚或风险不明显的软件开发,到了软件生命周期的后期,就可能出现从头开始的局面。
2、原型模型
有时也叫快速原型模型,它要求在短时间内快速构造一个可运行的程序,以向用户演示并得到用户确认,进而明确需求,以进行系统设计。根据软件开发的规模,有时可能需要分批做多次原型构造,迭代进行。
适用于用户需求不明确的软件开发,通过原型可以明确用户需求。
但可能设计初期没有作远景规划,最终的软件质量无法得到保证,或者设计初期规划太过详细,但得到的原型并不是用户想要的,最终只是浪费资源。
3、螺旋模型
将瀑布模型与原型模型相结合,并加入了风险分析,以风险驱动,并决定是否继续推进项目,它以瀑布模型推进,以原型模型进行演示配合风险分析。
适用于大型项目,由于在生命周期的每个阶段加入了风险分析,软件质量有保证,项目风险降低,同时也减轻了后期测试的负担。
但对于风险分析的依赖太高,往往需要有相当丰富的风险评估经验和知识积累。
4、增量模型
有时也叫渐增模型,它将软件分成若干个构件或模块,先完成一部分功能模块的开发并得到确认,进而逐步完成所有模块的开发,增量推进。
适用于需求逐渐清晰的项目,它能够在短时间内向用户提交部分功能产品,并得到用户接受,最终完成用户所需的所有功能的开发。
但难点在于,新增的功能模块不可以影响或破坏已提交的功能产品,对于软件功能模块的独立性,及软件体系架构的开放性要求较高。
5、其他模型
喷泉模型、变换模型等,在此不一一介绍。
三、软件开发方法
软件开发方法,就是在每个软件生命同期中,使用某种约定好的技术集和符 ,来表达分析问题、解决问题的思路或方法。
常见的软件开发方法如下:
1、结构化方法
有时也叫传统软件开发方法,这是相对于目前主流的面向对象方法而言的。
结构化分析(SA):使用系统流程图、数据流图来建立系统的功能模型,从而完成需求分析;
结构化设计(SD):根据模块的独立性,将数据流图转化为软件结构图来建立系统的物理模型,从而完成概要设计;
结构化程序设计(SP):将软件结构图中的每个功能模块以控制流的形式表示出来,可以配合使用流程图,从而完成详细设计。
结构化方法特别适合用于数据处理领域,但对于大型项目不太适用,因为它难于解决软件重用性问题、难于适应需求变化等。
2、面向对象方法
面向对象方法中,使用UML作为我们交流的符 。
面向对象分析(OOA):使用用例图来描述用户需求,可分为业务用例、系统用例;
面向对象设计(OOD):使用包图、类图、对象图等来表达系统静态模型,使用顺序图(序列图)、合作图、状态图、活动图等来表达系统动态模型;
面向对象编程(OOP):使用构件图、配置图等来表达系统代码结构。
面向对象方法特别适用于大型项目,它用人类习惯的思维方法来分析问题、软件的可重用性和可维护性都较高。是目前主流的软件开发方法。
3、其他方法
Jackson方法、面向对象的Booch方法、面向对象的Coad方法、面向对象的OMT方法等,这些开发方法由于种种历史原因,目前基本都被抛弃,此不一一赘述。
四、软件开发工具
1、软件开发环境
比如:操作系统、数据库管理系统、所使用的语言体系等。
2、软件工具
主要分为以下几类:
(1)系统模拟工具:用于界面原型、数据流、算法模拟等;
(2)需求开发与管理工具:用于需求分析、需求跟踪;
(3)系统设计工具:用于画图、代码生成等;
(4)编码和单元测试工具:用于程序编译、单元测试;
(5)测试和集成工具:用于产品集成及各种测试;
(6)文档工具:用于编写文档;
(7)配置管理工具:用于访问和版本控制等;
(8)质量保证及度量工具:主要指各种图表、表格等;
(9)项目管理工具:用于制定项目计划、进度跟踪、状态 告、估算与统计等;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!