网站首页 > 实习报告> 文章内容

软件工程认识实习报告

※发布时间:2018-1-13 18:19:32   ※发布作者:habao   ※出自何处: 

  软件工程认识实习报告_实习总结_总结/汇报_实用文档。2010 年中国软件产业发展现状概况2010 年,我国软件业实现新的突破,产业增速稳步回升,业务 结构调整加快,企业发展和区域布局出现新的特点,在国民经济中的 地位不断提升。 2010 年,实现软件

  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) 对 中各种方法的研究”。 (参见: IEEE Standard Glossary of Software Engineering Terminology。IEEE, Piscataway, NJ std 610.12-1990, 1990)软件工程知识域软件需求 软件设计 软件构造 软件测试 软件 软件配置管理 软件工程管理 软件工程过程 软件工程工具和方法 Methods 软件质量 Software Quality Software Requirements Software Design Software Construction Software Testing Software Maintenance Software Configuration Management Software Engineering Management Software Engineering Process Software Engineering Tools and软件工程职业的乐趣首先是一种创建事物的纯粹快乐; 其次,快乐来自于开发对其他人有用的东西; 第三是整个过程体现出魔术般的力量——将相互啮合的零部件 组装在一起,看到它们精妙地运行,得到预先所希望的结果; 第四是学习的乐趣,来自于这项工作的非重复特性; 最后,乐趣还来自于工作在如此易于驾驭的介质上软件工程职业的苦恼 首先,必须追求完美; 其次,是由他人来设定目标,供给资源,提供信息; 概念性设计是有趣的,但寻找琐碎的 bug 却只是一项重复性的 活动; 最后一个苦恼, 有时也是一种无奈——当投入了大量辛苦的劳动, 产品在即将完成或者终于完成的时候,却已显得陈旧过时;软件工程职业发展线从程序员到软件设计师软件技术发展到今天,分工越来越细。程序员作为一个通用称谓 已经无法确切定义各种工作的性质和特点。 因为软件开发中各种职责 区分不清,无论是刚刚写代码的新手还是具有多年经验的老手,一概 被扣上程序员的通用名称, 这也使得很多进入这个领域的软件开发人 员无法制订自己未来的职业发展之。 实际上, 软件公司也认识到了对程序员分类的重要性开始将各种 职位定义得更加准确。对于从事软件开发的程序员来说,更需要尽快 明确自己的发展方向,并在此方向上将专业知识积累得更深厚,这才 能尽快摆脱对未来发展方向的迷茫。 从程序员的技术方向发展来看, 软件设计师无疑是职业生涯的顶 峰。拿破仑说过“不想当元帅的士兵不是好士兵” ,借用这句话,不 想当软件设计师的程序员也不是好程序员。 不过首先要了解什么是软 件设计师,如何才能成为软件设计师。明了这些,才有可能向软件设 计师发展,创造更辉煌的程序人生。软件设计师的定义软件设计师包括软件系统设计师(System Designer)和软件架 构设计师(Architect) 。 系统设计师应对“系统结构”所使用的软件技术非常了解,自身 具备良好编程技巧,才能成为优秀的系统设计师。系统设计师的职责 是把结构模型对应到实现模型上, 从概念到实现期间规划和组合模型 的优劣是决定软件系统设计师好坏的标准。 软件架构设计师是程序员技术方向的最终归属, 也是成长链中最 神圣的一环,架构设计师的贡献最大。架构设计师彻底摆脱了语言的 ,知道软件发展趋势。他们会开发新一代产品或者制定新一代产 品的方案。软件架构设计是面向未来的。全球大规模的软件公司并不 多,很重要的一个原因是软件产品的发展都滞后于市场需求,即有需 求后再研发产品,而不是预见需求,预先设计,因此往往软件设计局 部是合理的,但从整体的角度看却不合理。要解决这些问题就要看的 能力了。软件设计的三个层次软件设计可以分三个层次。 第一层属于标准层,像 J2EE、的框架设计; 第二种属于系统层的设计,比如 Delphi 这样的开发工具就是工 具系统级的设计; 而应用最广泛的是第三层:应用软件设计。基于中国软件产业发 展的现状,大部分设计都是这个层次上的基于应用的架构设计,本文 非特殊标明,提到的软件设计师泛指应用软件系统设计师,当然有些 也是架构设计师的能力所在。 //*从软件开发历史看,软件设计经历了很多阶段。最早是结构 化设计,只是把复杂的问题逐层分解,通过流程图形式将任务标明, 提到的软件设计师泛指应用软件系统设逐级细化; 后来出现面向对象 设计,从底层进行对象封装、继承、多态,这时更多的是考虑代码重 用,面向的主要是类和对象。接下来出现组件设计,这主要是面向应 用方面。这三种都是面向功能的设计。 从 EJB、COBRA 技术出现之后,人们开始基于框架进行设计,也 就是架构设计。继续发展,就是基于规则的设计了,比如基于模块和 工作流的设计,这时主要将客户化做的更详细以及考虑性、可扩 展性、可靠性、效率方面的问题。 *// 软件设计师的工作随着大型软件开发越来越多, 整体把握软件架构变的越来越重要。 尤其当用户需求并不明确的情况下,就要开始做软件,如何防止交付 的软件产品与用户的要求距离很远, 这就需要软件系统设计师进行恰 当的设计。 在应用软件开发中, 软件设计师担当承上启下的角色也就是把用 户的需求,基于应用的问题变成计算机系统中可以解决的问题。设计 可以分为功能上的设计和技术体系上的设计,但在实际工作中,这两 者很难区分清晰。软件设计师的要求做为应用软件开发中最顶层的角色, 软件设计师需要各方面的能 力更强,除了具备更强的编程技巧能力外,还需要了解系统结构、主 流软件技术和软件趋势,同时要具备相当的专业知识。 多年编程经验: 既包括在专业领域的经验,也包括在软件工程领域的经验。对于 一个构架团队,这些素质要求可由各团队分别承担,但其中至少 要有一名构架设计师能够把握项目的全局。和任何行业一样,经验是 最重要的。软件设计不是纸上谈兵,一个软件设计师首先要常好 的程序员。软件设计师在编程的时候,用的工具和普通程序员没有任 何差别,但使用深度是绝对不一样的。 抽象能力: 一个程序员刚写程序的时候, 无非就是为了解决某个功能而进行 代码编写。随着程序编写越来越多,他对自己所做的应用方面的理解 也越来越多。 不同的企业有不同的需求, 但把这些企业放在一起来看, 就会发现他们的一些共性。 将这些共性提炼出来, 这就是抽象的过程。 抽象出来的共性形成的模型可以把这些企业的需求都包含进去, 这是 做通用软件必须要走的一步。 面向对象的思想: 面向对象是软件开发出现以来最伟大的创新之一, 这是每个程序 员都追求的,但是否真正掌握了面向对象的思想,这是需要探讨的, 面向对象并不受开发工具和语言的。很多程序员在用 C++写面向 对象代码时,实际上还是在写 C 代码。甚至使用 C#这种完全面向对 象的语言写出来的还是流程化的程序。 面向对象可以应用的领域非常 广泛。不仅在写代码的过程中要考虑到面向对象,在设计和分析阶段 也要用到面向对象的方法。 舍得抛弃: 软件设计是一个渐进过程,是通过不断碰壁,不断调整提高的。 要想取得突破,就需要舍得抛弃。 很多人舍不得扔掉自己的代码,往往是不断的修改,最后进入一个恶 性的循环。当然,这种抛弃也是有继承的抛弃,不同时期产品的架构 之间也有连续性,不是一个架构就会完全取代前面的架构,好的东西 还是可以继承的,像微软的.NET 架构就是从 DNA 架构上发展来的。 和突破: 程序员技术的成长可以通过学习技巧而成长, 也可以通过思想而 得到成长,后者更为重要。如果不能开发的思想,仅仅掌握了技 巧,一旦改换了平台和语言,又要从头学起,所以很多人在转型过程 中失败了。而掌握了编程的思想,自动就移过去了。 即便是很小的软件,也可以锻炼突破性的编程思维。一种基本的设计 原则和思就是程序设计千万不要回溯,否则就会崩溃,这是多少人 脑袋碰墙多少次之后才明白的。 非软件知识: 提起软件设计师,人们很喜欢拿建筑师做比较,的确这两个行业有很 多相似之处。古罗马建筑师维特鲁威说“理想的建筑师应该既是文学 家又是数学家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得 医药知识,具有造诣,深谙天文学及天文计算。 ”软件设计同样 如此。从程序员到测试工程师软件测试是一门非常重要的学科,目前研究的内容还很不深入。 软件测试需要什么样的专业基础还没有, 而且目前还没有一种很 好的标准来衡量测试人员。但无可置疑,软件测试越来越受到软件公 司的重视,软件测试工程师的作用也逐渐被人们所认可。这已经在像 微软这样的国外大型软件企业中所, 微软的一个开发人员会对应 一至两个测试人员。 2002 年 4 月份,微软公司董事长兼首席软件设计师比尔·盖茨 让微软研发部门将所有手头正在进行的工作暂停, 彻底检查了每一个 微软的软件,将所有存在的漏洞全部,所有的开发人员全部成为 了测试人员,为的是“可信赖的计算”。 国内软件公司对软件测试的态度令人担忧。软件测试不足,开发 测试人员比例不合理。据调查,最好的企业中测试人员和开发人员的 比例是 1:8, 有的是 1: 大部分公司甚至没有专职的测试工程师。 20 重视测试首先需要有性的软件文化,而在很多公司中,测试 工程师只是绝对服从的角色,没有发挥他们的积极性和创造性。 一些管理人员对软件开发的流程管理经验不足, 仍然用传统企业的方 法进行管理,再加上对软件质量的控制理解不对,认为让程序员编完 程序后经过简单的功能测试就可以发布了, 而没有认识到软件测试是 控制质量最好的方法。不过,国内还是有一些大型公司和专业公司已 经在软件测试方面正规 IBM 软件测试项目, 已经成为公司主体软 件外包业务之一。 一提到软件测试工程师,很多人会想到那些反复使用软件,试图 在频繁操作中寻找到错误发生的低层次人员或者软件用户。 其实这是 一种错误的概念, 软件测试早已超越了用户使用来发现 Bug 的基本测 试阶段。 现在软件测试工程师普遍分为三种: 测试执行者 (BasicSoftware Tester ) 测 试 工 具 软 件 开 发 工 程 师 ( SoftwareDevelopment 、 Engineer in Test)和高级软件测试工程师(Ad_hoc Tester) 。 测试执行者负责理解产品的功能要求, 然后根据测试规范和测试 案例对其进行测试, 检查软件有没有错误, 决定软件是否具有稳定性, 属于最低级的执行角色。 测试工具软件开发工程师负责写测试工具代码, 并利用测试工具 对软件进行测试;或者开发测试工具为软件测试工程师服务。产品开 发后的性能测试、 提交测试等过程, 都有可能要用到开发的测试工具。 对技术要求最强的是这些人因为他们要具备写程序的技术。 “不同产 品的特性不一样,对测试工具要求也是不同的,就像 Windows 的测试 工具不能用于 office,office 的测试工具也不能用于 SQLserver 现 在很多测试工程师就是负责专门为某个产品写测试程序的。 ”软件测试工程师的素质:因为软件测试仍然处在发展阶段,还没有上升到理论层次。对人 员的评测,包括微软在内,都还没有一个统一标准,因此评定软件测 试工程师只能根据工作实践进行自然淘汰了。 软件测试对逻辑思维、学习能力、反应要求很高,是否有严密的 思维和逆向思维也非常重要。 做测试还要考虑到所有出错的可能性,做一些不按常规、非常奇 怪的事。除了漏洞检测,测试还应该考虑性能问题,也就是要软 件运行得很好,没有内存泄漏,不会出现运行越来越慢的情况;在不 同的使用下,考虑软件的兼容性同样重要。软件测试同产品的规 模也有很大的关系,因为软件的 bug 往往出在大型软件的连接处。 做软件测试工程师需要对软件抱有怀疑态度。 这是因为开发人员 喜欢想当然,总是找一些有利于自己程序执行的数据,有些开发人员 甚至认为不利于程序执行的数据是对代码的和。 而软件测试 却要策略性的准备各种数据,从每个细节上设计不同的应用场景,不 去想当然的假定任何一个数据是可行的。 在职业素质和交际方面方面, 并不是测试工程师爱挑别人毛病才 好, 反而这个工作要求很强的沟通能力。 要经常和开发人员进行沟通, 说话办事要很得当,不能别人,否则会事倍功半。软件测试工程 师在工作中,对人和对事是完全不同的两个问题。测试设计中需要考虑的 22 种测试类型:1. 黑盒测试: 不基于内部设计和代码的任何知识,而是基于需求和功能性。 2.白盒测试: 基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、 分支、径、条件。 3.单元测试: 最微小规模的测试; 以测试某个功能或代码块典型地由程序员而 非测试员来做,因为它需要知道内部程序设计和编码的细节知识。 4.累积综合测试: 当一个新功能增加后,对应用系统所做的连续测试。它要求应用 系统的不同形态的功能能够足够以便在全部系统完成前能分别 工作,这种测试可由程序员或测试员来做。 5.集成测试: 一个应用系统的各个部件的联合测试, 以决定他们能否在一起共 同工作。部件可以是代码块、的应用、网络上的客户端或服务器 端程序。这种类型的测试主要与客户服务器和分布式系统有关。 6.功能测试: 用于测试应用系统的功能需求的黑盒测试方法。 7.系统测试: 基于系统整体需求说明书的黑盒类测试; 应覆盖系统所有联合的 部件。 8.端到端测试: 类似于系统测试;测试级的“宏大”的端点;涉及整个应用系统 在一个现实世界使用时的模拟情形的所有测试。 例如与数据库对 话,用网络通讯,或与外部硬件、应用系统或适当的系统对线.健全测试: 典型的是指一个初始化的测试工作, 以决定一个新的软件版本测 试是否足以执行下一步的测试。 10.衰竭测试: 软件或的修复或更正后的“再测试” 。可能很难确定需要多 少遍再次测试。尤其在接近开发周期结束时。自动测试工具对这类测 试尤其有用。 11.接受测试: 基于客户或最终用户的规格书的最终测试, 或基于用户一段时间 的使用后,看软件是否满足客户要求。 12.负载测试: 测试一个应用在重负荷下的表现,例如测试一个 Web 站点在大 量的负荷下,何时系统的响应会退化或失败。 13.测试: 在交替进行负荷和性能测试时常用的术语。 也用于描述象在异乎 寻常的重载下的系统功能测试之类的测试, 如某个动作或输入大量的 重复,大量数据的输入,对一个数据库系统大量的复杂查询等。 14.性能测试: 在交替进行负荷和测试时常用的术语。 “性能测试” (和其他 类型的测试)应在需求文档或质量、测试计划中定义。 15.可用性测试: 对“用户友好性”的测试。显然这是主观的,且将取决于目标最 终用户或客户。用户面谈、调查用户对话的和其他一些技术都可 使用。程序员和测试员通常都不宜作可用性测试员。 16.安装/卸载测试: 对软件的全部、部分或升级安装/卸载处理过程的测试。 17.恢复测试: 测试一个系统从如下灾难中能否很好地恢复如遇到系统崩溃、 硬 件损坏或其他灾难性问题。 18.安全测试: 测试系统在防止非授权的内部或外部用户的访问或故意等 情况时怎么样。这可能需要复杂的测试技术。 19.兼容测试: 测试软件在一个特定的硬件/软件/操作系统/网络等下 的性能如何。 20.比较测试: 与竞争伙伴的产品的比较测试,如软件的弱点、优点或实力。 21.Alpha 测试: 在系统开发接近完成时对应用系统的测试测试后, 仍然会有少量 的设计变更。 这种测试一般由最终用户或其他人员员完成不能由程序 员或测试员完成。 22.Beta 测试:当开发和测试根本完成时所做的测试, 最终的错误和问题需要在 最终发行前找到。 这种测试一般由最终用户或其他人员完成不能由程 序员或测试员完成。如何成为优秀的软件人才专业知识技能软件人员的专业知识技能 大学的计算机专业知识技能 软件工程知识与实践 项目管理知识与实践 企业研发管理 本科学历是必需的,硕士学历是受欢迎的,博士学历是可有可无 的 IT 人才要珍惜青春,切勿沉沦于纸上谈兵、的“学问” 打好专业基础最重要,做学生不要急功近利。 学习时“扬长补短” ,工作时“扬长避短” 。 至关重要的综合才能表达能力:说和写 业界通病:软件人员的表达能力远远低于其开发能力(例如不会 写文档) 错误的思想根源:认为表达能力是可有可无的,技术才能才是最 重要的 大学教育失误:培养优秀的工程师而不是领导人。 无论那个领域的风云人物,都是“能说会写”之人 如果一个人不在乎自己的文才与口才, 实际上他已经选择了平庸 之。 不要怨“英雄无用武之地” ,因为别人不知道你能成为英雄! 如果你想干一番事业,必须练好你的文才和口才。 管理能力 管理能力决定你的“”! 误区:没有机会锻炼管理能力 不同行业有不同的管理方法。先从软件项目管理入手(麻雀虽小 五脏具全) 。 搞技术要用脑子,搞管理要用心。职业和工作态度职业 上班时间不干与工作无关的事情 不损害集体利益 不干危害社会的事情 工作态度 认真负责 服务意识如何高效率地工作观念 在有生之时,为个人、家庭、集体、国家多做贡献 但是不要天天辛苦的工作,辛苦地生活。 应该愉快地工作,愉快地生活。 上班族的经验 合理安排一天的时间:上午,中午,下午,晚上 减少上花费的时间:时间比钱更值钱,前者浪费了无法追回! 正确地开会:明确会议目的,限定人员与时间,不要把上班时间 切割得很零碎 处理电子邮件:不要即时响应电子邮件,早中晚三次收发邮件就 够了。 随时记录问题与灵感:因为我们大部分人不是天才,靠日积月累 才能产生!总结通过这次认识实习, 我了解了一些关于软件工程的职业以及怎样 做好它们,使我明确了以后的发展方向。

  

相关阅读
  • 没有资料