上海西门子模块授权总代理
浔之漫智控技术(上海)有限公司(xzm-wqy-sqw)是中国西门子的合作伙伴,公司主要从事工业自动化产品的集成,销售和维修,是全国的自动化设备公司。公司坐落于中国城市上海市,我们真诚的希望在器件的销售和工程项目承接、系统开发上能和贵司开展多方面合作。以下是我司主要代理西门子产品,欢迎您来电来函咨询,我们将为您提供优惠的价格及快捷细致的服务!
软件工程几十年的发展,已经积累了许多开发方法。但是仅有好的战术是不够的,还需要在实践中运用良好的开发策略。软件复用、分而治之、逐步演进和优化折中,是软件开发的四个基本策略。
(1)软件复用。构造一个新的系统,不必都从零开始。可以将已有的软件制品,直接组装或者合理修改形成新的软件系统,从而提高开发效率和产品质量,降低维护成本。软件复用也不仅仅是代码的复用,还包括对系统类库、模板、设计模式、组件和框架等的复用。
(2)分而治之。是人们处理复杂性的一个基本策略。通过对问题进行研究分析,将一个复杂的问题分解成若干个可以理解并能够处理的小问题,然后逐个予以解决。
(3)逐步演进。软件更像是一个活着的植物,其生长是一个逐步有序的过程。软件开发应该遵循软件的客观规律,不断进行迭代式增量开发,终交付符合客户价值的产品。
(4)优化折中。软件工程师应当把优化当成一种责任自从1968年提出“软件工程”这一术语以来,研究软件工程的专家学者们陆续提出了许多关于软件工程的准则或信条。美国的软件工程专家 Boehm 综合这些专家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。
Boehm认为,这七条基本原理是确保软件产品质量和开发效率的原理的小集合。它们是相互独立的,是缺一不可的小集合;同时,它们又是相当完备的。下面简要介绍软件工程的七条基本原理。
1.用分阶段的生命周期计划严格管理
这一条是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。Boehm 认为,在整个软件生命周期中应指定并严格执行项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划六类计划。
2.坚持进行阶段评审
大部分错误是设计错误,大约占63%;错误发现得越晚,改正它要付出的代价就越大,相差大约2到3个数量级。因此,软件的工作不能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。
3.实行严格的产品控制
开发人员痛恨的事情之一就是改动需求。但是实践告诉我们,需求的改动往往是不可避免的。这就要求我们要采用科学的产品控制技术来顺应这种要求,也就是要采用变动控制,又叫基准配置管理。当需求变动时,其他各个阶段的文档或代码随之相应变动,以保证软件的一致性。
4.采纳现代程序设计技术不断改进软件工程实践的必要性作为软件工程的第七条基本原理。根据这条原理,不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题及应该优先进行研究的工具和技术。
1.4 软件工程的现状与发展趋势
1.4.1 敏捷开发
敏捷软件开发(agile software development),又称敏捷开发,是从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法,它是一类轻量级的软件开发方法,提供了一组思想和策略来指导软件系统的快速开发并响应用户需求的变化。
随着软件交付周期的日益加快,迭代式敏捷开发方法渐成标准,已经成为大多数软件开发团队的必选项。迭代对整个团队的需求、架构、协同及测试能力都提出了更高的要求,敏
代化开发更大一些。
简单地说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷方法有很多,包括 Scrum、极限编程、功能驱动开发以及统一过程(RUP)等。这些方法本质上是一样的。敏捷开发小组主要的工作方式可以归纳为以下5种。
1.敏捷小组作为一个整体工作
项目取得成功的关键在于,所有项目参与者都把自己看成朝向一个共同目标前进的团队的一员。一个成功的敏捷开发小组应该具有“我们一起参与其中”的思想,“帮助他人完成目标”这个理念是敏捷开发的根本管理文化。当然,尽管强调一个整体,小组中应该有一定的角色分配布的全部工作,因为迭代的结果并不是真正发布产品。
4.敏捷小组关注业务优先级
敏捷开发小组从两个方面显示出它们对业务优先级的关注。首先,它们按照产品所有者制定的顺序交付功能,而产品所有者一般会按照组织在项目上的投资回报大化的方式来确定优先级,并且把它组织到产品发布中去。要达到这个目的,需要综合考虑开发小组的能力以及所需功能的优先级来建立发布计划。在编写功能的时候,需要使功能的依赖性小化。功能之间完全没有依赖是不太可能的,但把功能依赖性控制在低程度还是相当可行的。
5.敏捷小组检查与调
都会结合上一次迭代中获得的新知识做出相应调整。如果认为一些因素可能会影响计划的准确性,也可能更改计划。迭代开发是在变与不变中寻求平衡,在迭代开始的时候寻求变,而在迭代开发期间不能改变,以期集中精力完成已经确定的工作。由于一次迭代的时间并不长,所以使得稳定性和易变性能够得到很好的平衡。在两次迭代期间改变优先级甚至功能本身,对于项目投资大化是有益处的。从这个观点来看,迭代周期的长度选择就比较重要了,因为两次迭代之间是提供变更的机会,周期太长,变更机会就可能失去;周期太短,则会发生频繁变更,而且分析、设计、编码、测试这些工作都不容易做到位。综合考虑,对于一个复杂项目,迭代周期选择4周还是有道理的。
1.4.2 开放计算
随着互联网的不断发展和普及,软件工程开放式计算有了技术基础,更多的开放式资源使得软件工程有效地集成,在软件开发标准上形成了互联互通,对于文化、语言来说有所打破,真正地实现了软件开发的协作交流。Linux、Jazz、Android 等软件的开源,对于开)消费类电子产品与人们的生活更加息息相关,小的免费软件、小型桌面游戏的出现等,使得需要的软件开发人员数量急剧增长(组织形态是大量的小规模开发团队)。在这一因素以及降低成本的压力下,开发外包变得非常普及。
(4)项目构建工具,资源依赖更加自动化,系统开发也不需要从零开始,而是利用业内的免费框架进行二次开发。
1.4.3 云计算
云计算(cloud computing)被称为继个人