软件工程认识实习报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2010年中国软件产业发展现状概况2010年,我国软件业实现新的突破,产业增速稳步回升,业务结构调整加快,企业发展和区域布局出现新的特点,在国民经济中的地位不断提升。2010年,实现软件业务收入13364亿元,产业规模比2001年扩大十几倍,年均增长38%,占电子信息产业的比重由2001年的6%上升到18%。在全球软件与信息服务业中,所占份额由不足5%,上升到超过15%。软件业从业人数由2001年不足30万人提高到超过200万人。2010年,信息技术咨询服务和信息技术增值服务收入分别为1233和2178亿元,同比增长37.2%和44.6%。软件产品收入4208亿元,同比增长28.6%;嵌入式系统软件受通信类产品增长放缓影响,完成收入2242亿元,同比增长15.1%。受集成电路行业复苏和软件外包市场增长带动,设计开发实现收入593亿元,同比增长73.1%;系统集成和支持服务实现收入2910亿元,同比增长31.8%。2010年全国计算机软件著作权登记量突破了8万件。软件产业发展聚集趋势从过去主要集中在京粤地区转向沿海地区。2010年,江苏、辽宁、福建、山东四省软件收入增长超过35%,占全国比重合计达35%,逐步打破过去京粤两地占全国一半以上的集中局面(两地占比下降为35.5%)。中心城市成为软件产业发展的主要聚集地,2010年全国4个直辖市和15个副省级城市软件收入10643亿元,占全国的比重为80%。在中西部地,成都、西安、重庆三个城市占西部地区的90%,武汉、长沙二个城市占中部地区30%以上。软件产业面临的形势从国际上看,全球软件产业格局充分洗牌,为后发国家实现追赶和跨越带来更大的机遇,软件技术和产业的格局正在孕育新一轮的重大调整,一方面跨国公司原有的技术垄断受到了挑战,对后发国家的技术锁定效应大大降低,所谓的技术锁定就是垄断,技术封锁效应。另一方面是云计算为代表的模式的创新对产业发展的影响日益突出,在这种背景下,软件技术创新速度将明显加快,服务的新业态新模式将不断的涌现。从国内看,推进两化深度融合和培育战略性新兴产业给软件产业带来巨大的发展空间,我国作为后发国家,拥有大国优势,有庞大的潜在的消费市场。商务部统计,我国的消费是每年15%的速度在增长,其中有很大一部分是电子消费,满足不同层次和年龄的需要,推动两化深度融合,培育发展战略性新兴产业为我国新一轮信息技术发展提供了广阔的创新和应用空间,从云计算、物联网新兴业态的发展情况来看,我国和美国有一段距离,但是国际上物联网是这两年刚刚有的新的概念,我们觉得和日本韩国相比处在同一个起跑线上。软件产业发展趋势分析未来软件产业发展的趋势可以归纳为“五化”,分别是网络化、服务化、智能化、平台化、融合化。网络化将成为信息技术发展的一个基本方向,互联网已经成为了软件开发部署和运行的一个平台,推动了整个产业的全面的转型,三代网、物联网和移动互联网云计算都是软件网络化趋势的具体体现。服务化是网络转型的本质和特点,软件开发技术和应用模式正在向以用户为中心转变,云计算是软件服务化的模式,可以按照用户需要,动态的来提供计算、存储、应用等各类资源,具有可动态的伸缩性,使用成本比较低,可管理性好,节约能耗,安全便捷等优点,在服务化的大趋势下,向用户提供软件服务的体验,将来成为竞争的重要因素。智能化是软件技术发展的永恒的主题,软件能够从复杂多样的海量的数据当中,自动高效的提取所需要的知识、信息进行加工处理,软件开发语言更加的高级化,开发工具也更加的集成化。平台化是软件技术和产品发展的新引擎,操作系统、数据库、中间件和应用软件相互的渗透,向一体化的软件平台进行演变,平台化的趋势下,软件的竞争从单一产品的竞争发展为平台间的竞争,未来软件产业将围绕主流软件平台构造整个软件产业链。融合化是软件技术和产业发展的新空间,软硬结合,软件与网络的结合,产品与业务的融合,软件产业与其他产业之间的相互渗透、相互融合不断深化,融合化趋势创造了巨大的市场需求。什么是“软件工程”?IEEE计算机学会将“软件工程”定义为:“(1)应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。(2)对(1)中各种方法的研究”。(参见:IEEEStandardGlossaryofSoftwareEngineeringTerminology。IEEE,Piscataway,NJstd610.12-1990,1990)软件工程知识域软件需求SoftwareRequirements软件设计SoftwareDesign软件构造SoftwareConstruction软件测试SoftwareTesting软件维护SoftwareMaintenance软件配置管理SoftwareConfigurationManagement软件工程管理SoftwareEngineeringManagement软件工程过程SoftwareEngineeringProcess软件工程工具和方法SoftwareEngineeringToolsandMethods软件质量SoftwareQuality软件工程职业的乐趣首先是一种创建事物的纯粹快乐;其次,快乐来自于开发对其他人有用的东西;第三是整个过程体现出魔术般的力量——将相互啮合的零部件组装在一起,看到它们精妙地运行,得到预先所希望的结果;第四是学习的乐趣,来自于这项工作的非重复特性;最后,乐趣还来自于工作在如此易于驾驭的介质上软件工程职业的苦恼首先,必须追求完美;其次,是由他人来设定目标,供给资源,提供信息;概念性设计是有趣的,但寻找琐碎的bug却只是一项重复性的活动;最后一个苦恼,有时也是一种无奈——当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时;软件工程职业发展路线从程序员到软件设计师软件技术发展到今天,分工越来越细。程序员作为一个通用称谓已经无法确切定义各种工作的性质和特点。因为软件开发中各种职责区分不清,无论是刚刚写代码的新手还是具有多年经验的老手,一概被扣上程序员的通用名称,这也使得很多进入这个领域的软件开发人员无法制订自己未来的职业发展之路。实际上,软件公司也认识到了对程序员分类的重要性开始将各种职位定义得更加准确。对于从事软件开发的程序员来说,更需要尽快明确自己的发展方向,并在此方向上将专业知识积累得更深厚,这才能尽快摆脱对未来发展方向的迷茫。从程序员的技术方向发展来看,软件设计师无疑是职业生涯的顶峰。拿破仑说过“不想当元帅的士兵不是好士兵”,借用这句话,不想当软件设计师的程序员也不是好程序员。不过首先要了解什么是软件设计师,如何才能成为软件设计师。明了这些,才有可能向软件设计师发展,创造更辉煌的程序人生。软件设计师的定义软件设计师包括软件系统设计师(SystemDesigner)和软件架构设计师(Architect)。系统设计师应对“系统结构”所使用的软件技术非常了解,自身具备良好编程技巧,才能成为优秀的系统设计师。系统设计师的职责是把结构模型对应到实现模型上,从概念到实现期间规划和组合模型的优劣是决定软件系统设计师好坏的标准。软件架构设计师是程序员技术方向的最终归属,也是成长链中最神圣的一环,架构设计师的贡献最大。架构设计师彻底摆脱了语言的束缚,知道软件发展趋势。他们会开发新一代产品或者制定新一代产品的方案。软件架构设计是面向未来的。全球大规模的软件公司并不多,很重要的一个原因是软件产品的发展都滞后于市场需求,即有需求后再研发产品,而不是预见需求,预先设计,因此往往软件设计局部是合理的,但从整体的角度看却不合理。要解决这些问题就要看的能力了。软件设计的三个层次软件设计可以分三个层次。第一层属于标准层,像J2EE、.NET的框架设计;第二种属于系统层的设计,比如Delphi这样的开发工具就是工具系统级的设计;而应用最广泛的是第三层:应用软件设计。基于中国软件产业发展的现状,大部分设计都是这个层次上的基于应用的架构设计,本文非特殊标明,提到的软件设计师泛指应用软件系统设计师,当然有些也是架构设计师的能力所在。//*从软件开发历史看,软件设计经历了很多阶段。最早是结构化设计,只是把复杂的问题逐层分解,通过流程图形式将任务标明,提到的软件设计师泛指应用软件系统设逐级细化;后来出现面向对象设计,从底层进行对象封装、继承、多态,这时更多的是考虑代码重用,面向的主要是类和对象。接下来出现组件设计,这主要是面向应用方面。这三种都是面向功能的设计。从EJB、COBRA技术出现之后,人们开始基于框架进行设计,也就是架构设计。继续发展,就是基于规则的设计了,比如基于模块和工作流的设计,这时主要将客户化做的更详细以及考虑开放性、可扩展性、可靠性、效率方面的问题。*//软件设计师的工作随着大型软件开发越来越多,整体把握软件架构变的越来越重要。尤其当用户需求并不明确的情况下,就要开始做软件,如何防止交付的软件产品与用户的要求距离很远,这就需要软件系统设计师进行恰当的设计。在应用软件开发中,软件设计师担当承上启下的角色也就是把用户的需求,基于应用的问题变成计算机系统中可以解决的问题。设计可以分为功能上的设计和技术体系上的设计,但在实际工作中,这两者很难区分清晰。软件设计师的要求做为应用软件开发中最顶层的角色,软件设计师需要各方面的能力更强,除了具备更强的编程技巧能力外,还需要了解系统结构、主流软件技术和软件趋势,同时要具备相当的专业知识。多年编程经验:既包括在专业领域的经验,也包括在软件工程领域的经验。对于一个构架团队,这些素质要求可由各团队成员分别承担,但其中至少要有一名构架设计师能够把握项目的全局。和任何行业一样,经验是最重要的。软件设计不是纸上谈兵,一个软件设计师首先要是非常好的程序员。软件设计师在编程的时候,用的工具和普通程序员没有任何差别,但使用深度是绝对不一样的。抽象能力:一个程序员刚写程序的时候,无非就是为了解决某个功能而进行代码编写。随着程序编写越来越多,他对自己所做的应用方面的理解也越来越多。不同的企业有不同的需求,但把这些企业放在一起来看,就会发现他们的一些共性。将这些共性提炼出来,这就是抽象的过程。抽象出来的共性形成的模型可以把这些企业的需求都包含进去,这是做通用软件必须要走的一步。面向对象的思想:面向对象是软件开发出现以来最伟大的创新之一,这是每个程序员都追求的,但是否真正掌握了面向对象的思想,这是需要探讨的,面向对象并不受开发工具和语言的限制。很多程序员在用C++写面向对象代码时,实际上还是在写C代码。甚至使用C#这种完全面向对象的语言写出来的还是流程化的程序。面向对象可以应用的领域非常广泛。不仅在写代码的过程中要考虑到面向对象,在设计和分析阶段也要用到面向对象的方法。舍得抛弃:软件设计是一个渐进过程,是通过不断碰壁,不断调整提高的。要想取得突破,就需要舍得抛弃。很多人舍不得扔掉自己的代码,往往是不断的修改,最后进入一个恶性的循环。当然,这种抛弃也是有继承的抛弃,不同时期产品的架构之间也有连续性,不是一个架构就会完全取代前面的架构,好的东西还是可以继承的,像微软的.NET架构就是从DNA架构上发展来的。领悟和突破:程序员技术的成长可以通过学习技巧而成长,也可以通过思想领悟而得到成长,后者更为重要。如果不能领悟开发的思想,仅仅掌握了技巧,一旦改换了平台和语言,又要从头学起,所以很多人在转型过程中失败了。而掌握了编程的思想,自动就移过去了。即便是很小的软件,也可以锻炼突破性的编程思维。一种基本的设计原则和思路就是程序设计千万不要回溯,否则就会崩溃,这是多少人脑袋碰墙多少次之后才明白的。非软件知识:提起软件设计师,人们很喜欢拿建筑师做比较,的确这两个行业有很多相似之处。古罗马建筑师维特鲁威说“理想的建筑师应该既是文学家又是数学家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算。”软件设计同样如此。从程序员到测试工程师软件测试是一门非常重要的学科,目前研究的内容还很不深入。软件测试需要什么样的专业基础还没

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功