想系统地学习一下软件工程,便在Google上搜了一下,发现强文一篇《软件工程》,读后感触颇深,想必作者应在软件业摸爬滚打了多年,在此方面已颇有心得,比较全面的介绍了软件工程的相关知识,使我受益匪浅。其实只要有过多年开发经验的人都或多或少的接触并使用了软件工程的方法,只不过没有进行总结和归纳,没有把实践上升为理论。得此文帮助犹如醍醐灌顶使我对软件工程的理解逐渐的深刻起来。总结如下:
1、什么是软件工程?
软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。
软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
我的理解: 软件工程是一个很广泛的概念,它包含了我们进行软件系统开发的整个过程。从最初的可行性分析开始到系统交付使用后的培训与维护都被列入软件工程研究的范畴之中。在系统开发的各个阶段,都会有和这个阶段相关的理论、技术、软件与之对应,这些都是前辈高人在自己的软件开发过程中积累的经验的总结,其目的是保证整个系统开发的工作能高质量、高效率的完成。我们在进行系统开发的过程中,特别是很多开发经验不足的朋友往往会感到系统方向无法把握、开发进度难以控制、系统结束遥遥无期,有时候往往由于一个小小的需求改变而使得整个系统面临崩盘危险,或则由于众多新需求的产生使得系统变得错综复杂,对一个简单功能的扩展都无从下手,这些最终会导致系统的失败。而软件工程正是为了解决这些问题而发展起来的一门学科、一个研究方向。在对前人的经验总结中提炼出一些实用的方法,如果我们能按照这些方法去进行系统的开发,将会使我们系统失败的风险降低,当然它不可能保证我们的系统一定成功。而且个人意见认为要学习软件工程,在没有一定的系统开发经验、一定的技术积累的情况下,只可能是纸上谈兵,根本不可能在此方面有深刻的体会,更谈不上去应用。而如果你有一定的经验了再来看这些东西,你会发觉——为什么他说的正是我需要的?在这一点上我深有体会!
2、软件工程的四项基本原则
第一,选取适宜开发范型。该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其他因素之间是相互制约、相互影响的,经常需要权衡。因此,必须认识需求定义的易变性,采用适宜的开发范型予以控制,以保证软件产品满足用户的要求。
第二,采用合适的设计方法。在软件设计中,通常要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。
第三,提供高质量的工程支持。“工欲善其事,必先利其器”。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。
第四,重视开发过程的管理。软件工程的管理,直接影响可用资源的有效利用,生产满足目标的软件产品,提高软件组织的生产能力等问题。因此,仅当软件过程得以有效管理时,才能实现有效的软件工程。
举个例子,有一次和一个小工厂的Boss一起吃饭,他说他想比较容易的、详实的了解他们工厂的财务情况(无财务软件),问我有什么建议没有。相信大家都会推荐他上一套财务软件。没错我也是这样说的。他就问我要花多少钱,给给他大概估了一下,加上一些定制开发一共2W左右,他想了想说了一句2W可以请一个出纳干2年了(我们这边本科毕业生的价格在800~1200左右),多请一个人我可以让他按我的意思做出所有的报表,你的软件可以吗?而且你这个软件用多久就会被淘汰?如果需要升级还要另外付款吧。。。。。。我无语。这是一个很现实的例子,虽然有点极端和片面,但是它也能说明可行性分析的重要。只有项目切实可行了,才有去做需求分析的必要,否则对人力资源将是一种极大的浪费。