西门子WINCC软件总代理
浔之漫智控技术(上海)有限公司(w)
是中国西门子的佳合作伙伴,公司主要从事工业自动化产品的集成,销售和维修,是全国的自动化设备公司之一。
公司坐落于中国城市上海市,我们真诚的希望在器件的销售和工程项目承接、系统开发上能和贵司开展多方面合作。
以下是我司主要代理西门子产品,欢迎您来电来函咨询,我们将为您提供优惠的价格及快捷细致的服务!
尽管“软件危机”并未被彻底解决,但软件工程已经成为现代软件产业一个关键的技术,并且正在向成熟发展,在未来对网络时代的软件开发将有更大的推动力。现在以下4个方面。
(1)客户不满意。软件产品的交付质量难以保证,许多功能不是用户所需要的,用户在使用的过程中遭遇很多Bug。
(2)项目过程失控。由于客户需求的不确定性和持续的变化,给整个开发过程带来了不可控性。
(3)风险与成本问题。开发团队专注于技术,忽视对风险的管理,从而造成整个开发成本的超支。
(4)无力管理团队。无法评估开发人员的能力以及工作进度。如何提升团队的能力和效率,一直是软件开发中存在的难题。
之所以出现软件危机,其主要原因一方面是与软件本身的特点有关,另一方面是与软件开发和维护的方法不正确有关。
软件的特点前面已经有一个简单介绍。软件开发和维护的不正确方法主要表现为:忽视软件开发前期的需求分析;开发过程没有统一、规范的方法论的指导,文档资料不齐全,忽视人与人的交流;忽视测试阶段的工作,提交给用户的软件质量差;轻视软件的维护。与程序开发维护和使软件的一致性。软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)。因此,软软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。一个软件过程定义了软件开发中采用的方法以及该过程中应用的技术方法和自动化工具。
通常使用生命周期模型简洁地描述软件过程。软件生命周期模型规定了把软件生命周期划分成的阶段及各个阶段的顺序,因此也称为过程模型。
2.1 软件过程概述
过程是一个广义的概念,它是通过一系列相互关联的活动,将输入转化为输出。对于软件开发来说,用户需求是软件开发的基础,也是整个开发过程的一个输入;开发人员通过一系列软件开发活动,终交付出用户需要的产品。
要实现对软件开发过程的有效控制,首先,要规定过程实现的方法和步骤。把整个开发过程进行细分,详细地定义出过程里面的每一个环节以及各个环节之间的执行顺序。其次,要对过程进行监控。但是这个监控并不只是对终产品进行质量检验,而是要对过程的开始、每一个活动的执行、一直到结束,进行全方位的监测,以保证每一个活动能够达到应有的质量。
从某个待开发软件的目的被提出并着手实现,直到后停止使用的这个过程,一般称为软件生存期。软件工程采用的生命周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。
把软件生存周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而可以降低整个软件开发工程的困难程度;在软件生存周么。即软件开发人员必须确定处理的是什么信息,要达到哪些功能和性能,建立什么样的界面,存在什么样的设计限制,以及要求一个什么样的标准来确定系统开发是否成功;还要弄清系统的关键需求;然后确定该软件。软件定义阶段大致分三个步骤。
(1)系统分析
在这个步骤,系统分析员通过对实际用户的调查,提出关于软件系统的性质、工程目标和规模的书面报告,同用户协商,达成共识。
(2)制定软件项目计划
软件项目计划包括确定工作域、风险分析、资源规定、成本核算以及工作任务和进度安排等。
(3)需求分析
对待开发的软件提出的需求进行分析并给出详细的定义。开发人员与用户共同讨论决定哪些需求是可以满足的,并对其加以确切的描述。首先要收集用户的需求,对所收集的需求进行分析、整理和提炼,来理解和建模系统的行为。在这个过程,可能还要返回去继续收集更多的需求。在对系统的行为进行明确之后,还要使用文档的形式,把待开发系统的行为定义出来,并且检查和确认这个文档是否满足用户的要求。在确认的过程中,还要反复收集、分析、再补充这样的一个过程。确认通过之后,形成一个正式的软件需求规格说明书。这个需求规格说明将作为后续开发的一个基础。
2.开发阶段
主要是要确定待开发的软件应怎样做,即软件开发人员必须确定对所开发的软件采用怎样的数据结构和体系结构、怎样的过程细节、怎样把设计语言转换成编程语言以及怎样进行测试等。开发阶段大致分为三个步骤。
(1)软件设计
有了需求规格说明之后,需要对软件进行设计以形成软件设计说明书。软件设计主要是把软件的需求翻译为一系列的表达式(如图形、表格、伪码等)来描述数据结构、体系结构、算法过程以及界面特征等。软件设计一般又可分为总体设计和详细设计。其中总体设计主要进行软件体系结构的设计,详细设计主要进行算法过程的实现。具体的设计活动包括:首先要对软件的整体结构进行设计;然后定义出每个模块的接口,并且进一步地设计每一个组件的实现算法和数据结构;同时,还要对整个系统的数据库进行设计。
(2)编码成测试和验收测试等。测试需在不同的层次上进行,以保证每一个模块、整个系统和终产品的质量。
3.维护阶段
测试通过以后,产品就可以发布了。但是系统投入使用后还会进行不断的修改,以适应不断变化的需求。维护阶段主要是进行各种修改,使系统能持久地满足用户的需要。
维护阶段还要进行再定义和再开发,所不同的是在软件已经存在的基础上进行。应该说,完全从头开发的系统是很少的,整个开发和维护其实是一个连续交叉的过程。当新的需求出现之后,需要首先定义这个需求,然后查看现有的系统是不是能够满足当前这个新的需求。如果现有的系统不能满足需求,就要进行进一步的开发,提出系统的变更;针对这个系统的变更,对现有的系统进行修改,形成一个新的系统。整个过程是一个循环往复的过程。
通常有四类维护活动。改正性维护,即诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件使之能适应环境的变化;完善性维护,即根据用户的新要求扩充功能和改进性能;预防性维护,即修改软件为将来的维护活动进行准备。
4.软件开发管理
为了保证软件开发过程能够按照预定的成本、进度、质量顺利完成,还需要进行诸如项目管理、配置管理、等一系列开发管理活动,通过建立整个组织的质量管理体系,实现对软件开发活动的有效控制和。
(1)软件项目管理
是为了软件项目能够按照预定的成本、进度和质量顺利地完成,对人员、进度、质量、成本、风险进行控制和管理的活动。项目管理主要体现在以下四个方面。
首先,要明确项目的目标,制定项目的计划,明确项目需要的资源。
其次,要组建开发团队,要明确每一个成员的分工和责任。软件过程模型就是对软件过程的一个抽象描述,是软件开发的全部过程、活动和任务的结构框架。软件过程模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,是用来作为软件项目开发的基础。常见的软件过程模型包括瀑布模型、原型法模型、迭代式开发和可转换模型。
(1)瀑布模型将软件开发的基本活动看成是一系列界利用瀑布模型开发软件系统时,每一阶段完成确定的任务后,如果工作得到确认,就将产生的文档及成果交给下一个阶段;否则返回前一阶段甚至更前面的阶段进行返工。而不同阶段的任务,一般来说是由不同级别的软件开发人员承担的。
这种软件开发方法的特点是:阶段间具有顺序性和依赖性,便于分工合作;强调软件文档的作用,要求每个阶段都要仔细地进行验证;文档便于修改,并有复审。
瀑布模型看似美丽,却不现实,目前已经很少在业界使用。它的主要问题在于:各个阶段的划分完全固定,阶段之间产生大量的文档,增加了开发工作量;由于开发过程是线性的,用户只有在整个过程结束时,才能看到开发成果;开发过程中间,很难响应用户的变更要求;早期的错误,也要等到开发后期的测试阶段才能发现,这样会产生严重的后果。
因此,瀑布模型仅适合于在软件需求比较明确、开发技术比较成熟、工程管理比较严格的场合下使用。
2.2.2 原型法模型
一般来说,软件需要解决以前从未解决的问题,或者当前的解决方案需要不断更新,以适应业务环境的不断变化。因此,软件开发具有迭代性,需要不断地反复尝试,通过比较和选择不同的设计,终确定令人满意的问题解决方案。
从瀑布模型的起源来看,它借鉴了硬件领域的做法,是从制造业的角度看待软件开发。制造业是重复生产某一特定的产品,但是软件开发却不是这样的。随着人们对待解决问题的逐步理解以及对可选方案的评估,软件是在不断地演化的。因此,软件开发是一个创造的过程,而不是一个制造的过程。
原型法模型(prototype model)是针对瀑布模型提出来的一种改进。它的基本思想是从用户需求出发,快速建立一个原型,使用户通过这个原型初步表达出自己的要求,并通过反复修改、完善,逐步靠近用户的全部需求,终形成一个完全满足用户要求的新体系。
一般又把原型分为三类:抛弃式,目的达到即被抛弃,原型不作为终产品。演化式,系统的形成和发展是逐步完成的,它是高度动态迭代和高度动态的,每次迭代都要对系统重新进行规格说明、重新设计、重新实现和重新评价,所以是对付变化为有效的方法,这也是与下半部分说明了一个迭代开发的三个发布。实际上,许多
相对于过程和工具,他们更强调个人和交互的价值。这种观点包括给开发人员提供他们所需的资源,并相信他们能够做好自己的工作。开发团队将他们组织起来,让他们进行面对面交互式的沟通,而不是通过文档进行沟通。
(2)“可以工作的软件”胜过“面面俱到的文档”。
他们更喜欢在生产运行的软件上花费时间,而不是将时间花费在编写各种文档上。也就是说,对成功的主要测量指标是软件正确工作的程度。
(3)“客户合作”胜过“合同谈判”。
他们将精力集中在与客户的合作上,而不是在合同谈判上,从而客户成为软件开发过程的一个关键方面。
(4)“响应变化”胜过“遵循计划”。
他们专注于对变化的反应,而不是创建一个计划而后遵循这个计划,因为他们相信不可能在开发的初始就预测到所有的需求。
“敏捷宣言”提出的十二条基本原则已经应用于管理大量的业务以及IT相关项目中,包括商业智能。这十二条基本原则如下所示。
(1)我们的高目标是,通过尽早和持续地交付有价值的软件来使客户满意。
(2)欢迎对需求提出变更,即使到了项目开发的后期,也要善于利用需求变更,帮助客户创造竞争优势。快速地推出产品,就能够的先机。在互联网时代,用户的变化和对创新的要求是非常高的,软件的产品要追求创新,要快速地响应用户的变化。
敏捷开发就是一种有效应对快速变化需求、快速交付高质量软件的迭代和增量的新型开发方法。它强调更紧密地团队协作,关注可工作的软件产品。这是一种基于实践而非理论的开发方法。
敏捷方法强调适应而非预测。由于软件需求很难预测,那么按照预测产生的结果,往往不是用户需要的产品,所以软件开发应该是一个自适应的跟踪过程,通过适应和逼近,终产生用户满意的产品。
2.3.1 敏捷方法的由来
从20世纪70年代到90年代提出并使用的许多软件开发方法都试图在软件构思、文档化、开发和测试的过程中强加某种形式的严格性。在20世纪90年代后期,一些抵制这种严格性的开发人员系统地阐述了他们的原则,试图强调灵活性在快速有效的软件生产中所发挥的作用。
2001年,这群关注迭代和敏捷方法的人(铸就了“敏捷”这一术语)为寻求共识汇聚一
尽管迭代开发有很多优点,但也不是没有问题。从管理的角度来看,增量方法存在两个问题:
(1)过程不可见。管理者需要通过经常性的可交付文档来把握进度,如果系统开发速度太快,要产生反映系统每个版本的文档就很不划算。
(2)伴随着新的增量的添加,系统结构在逐步退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐步上升。瀑布开发的主早期迭代过程的思想是螺旋式开发和进化式开发。螺旋模型将瀑布模型与原型法模型结合起来,并且加入风险分析,构成具有特色的模式,弥补了前两种模型的不足。螺旋模型将工程划分为制定计划、风险分析、实施工程、用户评价四个主要活动。这四个活动螺旋式地重复执行,直到终得到用户认可的产品要不同点。增量式,系统是一次一段地增量构造,与演化式原型的大区别在于增量式开发是在软件总体设计基础上进行的。很显对于大型系统及软件的开发,螺旋模型是一种很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。但需要相当的风险分析评估的专门技术,且成功与否依赖于这种技术。很明显,一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。然,增量式对付变化比演化式差。
2.2.3 迭代式开发
在早期的软件开发中,客户愿意为软件系统的后完成等待很长时间。有时,从编写需求文档到系统交付使用会经过若干年,这段时间称为循环周期(cycle time)。但是,的商业环境不会再容许长时间的拖延。软件使产品在市场上引人注目,而客户总是期待着更好的质量和新的功能。
一种缩短循环周期的方法是使用迭代式开发。在这种生命周期方法中,开发被组织成一系列固定的短期(如三个星期)小项目,称为一次迭代(iteration);每次迭代都产生经过测试、集成并可执行的局部系统。每次迭代都包括各自的需求分析、设计、实现和测试活限分明的独立阶段,这些活动以线性的方式顺序执行。这是一种计划驱动的软件过程,有利于规范软件开发活动。
(2)原型法模型主要用于解决需求不确定等问题。原型是一个部分开发的产品,通过原型实现对系统的理解,有助于明确需求和选择可行的设计策略。
(3)迭代式开发是将描述、开发和验证等不同活动交织在一起,通过在开发过程中建立一系列版本,将系统进行逐步的交付和演化,从而实现软件的快速交付。
(4)可转换模型是利用自动化的手段,通过一系列的转换将需求规格说明转化为一个可交付使用的系统。
这些模型相互并不排斥,而且经常一起使用,尤其是对大型系统的开发。对于大型系统,综合瀑布和迭代开发模型的优点是有意义的。系统核心需求的获取以及设计系统的软件体系结构以支持需求,这些是不能迭代式开发的。在更大的系统中,子系统的开发可以使用不同的开发方法。对于那些理解得很好的系统部分可以用基于瀑布模型的过程来描述与开发;而对于那些很难提取描述清楚的系统部分,如用户界面,就总是会用迭代式开发方法。
再次,在项目实施过程中,要检查和评价项目的总体进展情况。
后,控制整个项目范围的变更,监控项目进展过程中出现的问题,并及时地纠正这些问题。
(2)软件配置管理
是通过版本的控制、变更的控制并使用合适的配置管理软件,来保证整个开发过程的所有产品配置项(例如代码、文档等)的完整性和可跟踪性。它主要包括四个基本活动。
① 版本管理是跟踪系统中每一个组件的多个版本,来保证开发者对组件的修改不会产生混乱。
② 系统的构建是把不同的组件进行编译、链接,组成了一个可执行的系统。
③ 变更管理是对开发过程中来自用户和开发者的开发请求进行分析和评估,做出适当的决策,决定是否变更和何时变更。
组织将迭代开发和增量开发方法结合起来使用。
与瀑布模型相比,迭代开发有以下三个重要优点。
(1)降低了适应用户需求变更的成本。重新分析和修改文档的工作量比瀑布模型要少很多。
(2)在开发过程中更容易得到用户对于已完成的开发工作的反馈。用户可以评价软件的现实版本,并可以看到已经实现了多少。这比让用户从软件设计文档中判断工程进度要好很多。
(3)使得更快地交付和部署有用的软件到客户方变成了可能,虽然不是所有的功能都已经包含在内。但与瀑布模型相比,用户可以更早地使用软件并创造商业价值。随着互联网技术和应用的迅速发展,软件开发面临着需求频繁变化和快速交付的挑战。在这种情况下,人们开始尝试一种新型的敏捷开发方法。敏捷方法采用增量和迭代的开发过程,强调团队紧密的协作。这种方法已经取代了传统的瀑布模型,被众多的软件企业广泛地应用。
传统的瀑布模型,是典型的预见性开发方法。它要求需求在开发初期就完全确定,并且在整个过程中很少变化,整个开发过程是计划驱动的,严格按照需求、设计、编码、测试、维护的步骤顺序展开。然而,实际上软件开发更专注于交付的价值。也就是说,高质量的交付产品是重要的,而这个产品不是一次构建形成,是需要经过迭代演进来形成的。
互联网时代,是一个快鱼吃慢鱼的时代。堂。该会议的成果就是创建了敏捷联盟并发表了代表敏捷精神原则的“敏捷宣言”。敏捷宣言可以概括为四种核心价值和十二条原则,用于指导迭代的以人为中心的软件开发方法。“敏捷宣言”强调的敏捷软件开发的四种核心价值。
(1)“个体和交互”胜过“过程和工具”。