浅谈软件工程
何为软件工程?它是为研究和克服软件危机而生,本质上则是:用工程化方法去规范软件开发,让项目可以按时完成、成本可控、质量有保证。开发软件本质上就像盖房子,是从无到有创造的过程。工程化的方式,就是分步骤,采用科学的方法,借助工具来做产品。
软件工程它不是单一的学科,而是一门交叉性的工程学科。它是将计算机科学、数学、工程学和管理学等基本原理应用于软件的开发与维护中,其重点在于大型软件的分析与评价、规格说明、设计和演化,同时涉及管理、质量、创新、标准、个人技能、团队协作和专业实践等。从这个意义上看,软件工程可以看作由下列3部分组成。
计算机科学和数学用于构造软件的模型与算法;
工程科学用于制定规范、设计范型、评估成本以及确定权衡等;
管理科学用于计划、资源、质量、成本等管理。
例如,计算机辅助软件工程是一组工具和方法的集合,可以辅助软件生命周期各阶段进行的软件开发活动。CASE吸收了CAD(计算机辅助设计)、软件工程、操作系统、数据库、网络和许多其他计算机领域的原理和技术。这个例子也体现了这一点——软件工程是学科交叉的、集成和综合的领域。
如果从知识领域看,软件工程学科是以软件方法和技术为核心,涉及计算机的硬件体系、系统基础平台等相关领域,同时还要涉及一些应用领域和通用的管理学科、组织行为学科。例如,通过应用领域的知识帮助我们理解用户的需求,从而可以根据需求来设计软件的功能。 在软件工程中必然要涉及组织中应用系统的部署和配置所面临的实际问题,同时又必须不断促进知识的更新和理论的创新。为了真正解决实际问题,需要在理论和应用上获得最佳平衡。
互联网的普及应用催生了很多技术的发展与更新,如果仔细深究,你会发现软件技术的发展趋势将主要体现在以下四个方面:客户端软件开发(其中包括客户端软件、游戏、中间件和嵌入式开发等)、Web 开发(包括传统的Web技术、Web游戏以及一些在线应用)、移动设备软件开发(主要涉及到手机等移动设备)、云计算开发(公有云、私有云、混合云会逐渐界限清晰,云厂商以及云平台也会逐渐整合和成熟起来)。就微软来说,这四个方面主要如下:
◆ 客户端软件开发
目前微软主要有Win32 应用程序、MFC 应用程序、WinForm应用程序和WPF 应用程序作为开发选择,目前这四种技术还会共存,因为不同的需求以及不同的人群都有不同的需要。当然WPF借助于其强大的功能和迅猛的发展速度很快会成为首选,这个是值得肯定的。
◆ Web 开发
在WEB方面微软主要有ASP.NET、ASP.NET MVC、Silverlight三种技术,ASP.NET技术已经发展了多年,在未来的很长一段时间内还会是主流,同时结合Silverlight作为局部和整体应用效果都还很不错,所以这也是很多企业的首选。ASP.NET MVC在目前来说应用还不是特别广泛,不过用过之后感觉也还不错,只是还需要一段时间的适应过程而已。Silverlight在构建局部应用和整站应用都发挥了不错的优势,在Windows Phone中也表现得不错,所以这个技术将会一直热下去。
◆ 移动设备软件开发
移动设备方面可谓是现在众厂商竞争最激烈的市场之一,也是传统技术和新型技术的主要战场之一。微软现在主推的Windows Phone开发主要包括Silverlight和XNA两种技术,Windows Phone开发逐渐变得和ASP.NET开发一样简单,这也是微软的一个目标。
◆ 云计算开发
云计算现在基本上成了互联网的第一大热门词,不管是软件为主导的企业,还是以硬件为主导的企业,都卷入了这场纷争与革命。微软的云平台——Windows Azure Platform,它是微软完整的云计算平台,目前包含了如下三大部分(Windows Azure:运行在云中的操作系统,对于用户来说是虚拟且透明的,其中提供了Compute(计算),Storage(存储),以及Manage(管理)这三个主要功能及其底层服务,使用起来相当的便捷。SQL Azure:运行于云中的一个关系数据库,和SQL Server 2008类似,但是在功能上还没有那么强大。AppFabric:全名是Windows Azure platform AppFabric,提供了访问控制、服务总线等服务,主要用于把基础应用连接到云中)。
从二十一世纪头十年的软件技术发展历程来看,其存在两个主要的趋势:开源与Web化。虽然软件技术从一开始就是开放源代码的。但上世纪最后二十年,是属于闭源软件开发商的“黄金年代”。从那个时代中走出了Microsoft等一系列商业软件公司,而这些公司的核心竞争力在于其源代码。但近十年的发展,这样的趋势已经被打破。开源软件越来越重要,并逐步成为商务业务中的主流软件技术。开源软件将成为软件发展的主流之一,而现在软件技术学习的主要目标在于增强自己在开源软件中的开发能力。
个人认为软件工程的定位,它是更偏向于技术而不是管理的,或者说软件工程的管理是基于技术的.以为软件工程是更偏向于管理的想法,把软件工程理想化了。传统的工程有产品的大量复制,并且复制的周期长,一般不会有新技术的加入,软件工程没有复制,软件工程有的只是开发,正在努力追求制造——事实上达到这个目标也很遥远,而且软件工程不断地有新技术的加入.软件技术在软件工程中的作用如同硬件制造技术(无论轮胎还是发动机)在提高汽车性能时的作用!