时间:2023-02-23 22:55:42
本文结合笔者实际工作经验,分析了国内给排水专业CAD软件开发及应用现状,探讨了给排水CAD软件开发的原则、思路、方法及步骤等,并给出了开发实例。
一、给排水专业CAD开发应用现状
在工程设计行业,CAD技术的应用大大提高了设计及绘图效率。CAD应用软件的开发也越来越重要。
在给排水设计领域,CAD开发应用起步较晚。有些设计院从八十年代末开始尝试进行CAD开发,但进展比较慢,多数是图块和小型实用程序,在深度和广度上都存在着差距。从1993年以后给排水CAD开发步伐开始加快。1994年底全国给排水学会和给排水技术情报网组织召开了“计算机技术在给排水专业应用研讨会”,对给排水软件开发起了积极的促进作用。
目前在给排水CAD开发方面已经取得了可喜的成绩,尤其是建筑室内给排水方面涌现出一些比较优秀的给排水CAD软件,如洛阳的一家软件和北京的几家软件。这些软件都具有计算机辅助设计建筑给排水平面图、自动生成系统图、自动统计材料表;进行室外给排水管网计算、自动生成图形等功能,其中个别软件已在室外设计和泵房设计等方面有了新的进展。
现有软件都偏重于民用建筑给排水方面,而且也有待于继续完善、发展。在给排水的其它领域,由于难度大,投资回报较低,软件公司还不愿涉足,所以进展缓慢。应用CAD进行给排水及水处理系统的优化设计更是少有人涉足。此外,目前还没有专业设计CAD软件的标准和规范。商业化软件多数都不经过权威部门严谨的技术测试和鉴定,所以其数据库、计算方法、设计方法和生成图形的准确性还没有严格保障,这一点还可能成为工程设计质量的隐患。
现在设计部门的给排水CAD应用水平也参差不齐。有的购买或自行开发了给排水专业软件,提高了设计绘图效率。有的只是在用AutoCAD的简单命令绘图,虽提高了CAD出图率,却根本谈不上利用CAD提高效率。给排水专业CAD应用水平还有待于进一步提高。
目前许多有精力的设计院及研究部门都在研究开发本单位适用的专业软件及应用程序,但由于开发经验不足,成绩不明显。本文将结合笔者的工作经验,着重论述有关给排水软件开发的原则、思路、方法及步骤,旨在抛砖引玉,促进给排水CAD软件开发工作。
二、给排水软件包开发思路及原则
由于现有建筑给排水软件已经比较成熟,且仍在继续开发、升级。一般开发者在水平和起点上均与这些软件开发有一定差距,所以应该购买此类软件,而着重开发适合本单位使用的实用程序、应用软件或优化设计软件。高起点开发者则应在深度及广度上向更高层次冲击。
1.给排水CAD软件开发依据及原则
(1)设计依据为有关设计规范、制图标准以及设计手册等;保证数据库、计算方法和设计方法的准确性。
(2)软件包开发设计首先要突出专业水平,把专业设计思想转化为计算机语言是专业软件包的关键所在。
(3)符合设计人员思维习惯及设计习惯,人机界面友好,操作简单,易掌握。
(4)适用性强,容易修改,容易扩充,容易发展。
(5)尽量使用效率高、功能强的计算机语言及开发工具。
(6)严格执行标准化及规范化。
(7)通过自动绘图以及建立标准图库,提高图纸复用率等途径,提高设计绘图速度,真正发挥计算机的优势,把设计人员从图板上解脱出来。
2.设计开发步骤
(1)开发适合于给排水专业应用的CAD软件环境,包括AutoCAD的优化配置及常用专业图块及绘图工具。
(2)开发一些独立的专业绘图软件,发展标准图形库,由浅到深,从易到难,逐步提高自动成图及图纸复用比例,使软件包成为覆盖面广,功能齐全的专业绘图软件包。
(3)开发给排水专业高阶段设计方案优化软件,以及设计、绘图一体化软件,逐步成为智能化、自动化程度较高的专家系统软件包。
3.开发人员配备软件开发是一项较复杂的脑力劳动,对开发人员要求也较高,专业软件开发人员大致可分为以下几个档次:
(1)初级水平:专业人员掌握一些基本计算机知识及开发工具可以进行一些专业图块制作,简单的实用程序开发。
(2)中等水平:较高专业水平加上较高计算机水平。熟悉专业设计习惯,有较丰富的设计经验的专业人员,如果掌握先进的CAD开发技术,可以开发出较高水平的CAD应用软件,可以提高设计效率,特别是可以大大提高绘图效率。
(3)高级水平:高深的专业水平加上先进的计算机开发技术。在专业方面应该熟练掌握专业基础知识,有丰富的工程设计经验,善于总结专业设计思路,发现规律,具有较强的系统工程及方案优化水平。在计算机方面要掌握LSP、ADS、DCL等开发工具(或其它高级开发工具)。这类人员开发专业CAD软件是最理想的。
由于给排水专业涉及面广,而且不同行业给排水设计习惯也不尽相同,不可能有软件可以覆盖所有给排水领域,适用于所有设计院,所以目前仍然需要分行业、分类进行开发。前述的个别建筑给排水软件包及开发人员属于较高水平,其开发设计思路非常值得向给排水其它领域延伸。
4.开发工具(软件方面)
目前较常用的CAD开发工具主要有AutoLISP语言、ADS、DCL语言以及数据库处理,也有的开发者使用BASIC、FORTRAN等高级语言与AutoCAD的图形数据交换接口进行开发;还有用C++开发或用VB等在Windows界面下开发的;此外,网络技术也越来越重要。
开发CAD软件,需要非常熟悉AutoCAD命令,以及其中的各参数、系统变量、图层、图块、线形等,这样才能方便灵活地在程序中执行各种命令,掌握CAD开发技巧,例如图块的属性可以带许多信息,一条LINE线的厚度可以存入管道的管径等。此外现在有些软件使用数据的后处理方式,使软件和AutoCAD结合得更好,这些技术还需要对AutoCAD图元数据库和数据图形交换等有更深的了解。
AutoLISP是在AutoCAD内部使用的语言,用AutoLISP编辑的程序可以定义变量,对数据进行处理和作出图形,并可能自定义函数,比较适合搞人工智能工作,特别是它的表处理功能以及递归等功能比较独特,在CAD工作中它可以独立工作,也可能与DXF图形交换文件互相配合。其不足之处是速度慢,且程序代码几乎无法保护。
ADS是AutoCAD11.0版以后新增加的用来开发应用的一个C语言编程环境。它运行速度快,代码保护性好,能更有效地利用内存空间以及访问设备与系统,具有更强大的开发功能。但掌握ADS要比LISP困难,要求开发人员具备C语言编程经验并熟悉ADS库中各函数用法。一般商业软件应该用ADS。
AutoCAD还提供了可编程对话框(PDB)工具,使用户可以结合自身专业特点,用DCL语言构造自己的对话框,从而改善界面,提高CAD软件效率。
目前最流行、最实用的专业CAD开发工具是ADS、DCL,加上少量AutoLISP。
三、开发过程1.专业绘图环境的开发
(1)AutoCAD的配置及改善
a.选择AutoCAD版本。目前最常用的是汉化AutoCAD12.0版。但其汉字输入不太方便,应配上较先进的汉字系统,或用12.0版forWindows(中文)。
b.对AutoCAD系统变量进行重新优化配置及设定,主要包括系统变量及尺寸变量设置,层、线形设置等,使acad.dwg成为理想的样板图。
c.对acad.mnu进行优化,将许多常用命令放在最容易拾取的位置或固定位置。专业菜单部分可加入acad.mnu,也可以独立编写。
d.利用acad.pgp做简化命令(10.0版以前的版本可在acad.lsp中用defun函数设定),编写acad.lsp。
(2)专业绘图功能
a.专业图框绘制:可由菜单点取或用屏幕幻灯菜单点取,自动生成各种图框。
b.专业常用图块:由菜单点取生成,自动插入断线。
c.开发实用的专业绘图工具程序:如标注标高、管径、坐标、管道立管、代号、各种管件等的程序,绘制单、双线管道的程序,生成专业设计说明、图例、专业词组的程序,以及文字、线形、线宽编辑和表格操作等实用程序。
d.开发或引进建筑图绘图程序。
专业CAD软件包都应具有高效的绘图环境,否则一旦自动生成等功能出现故障或不能适用时,用户就只能用AutoCAD简单命令来画图了。
2.专业绘图软件的开发
在专业绘图环境的基础上逐步开发一些相对独立的专业绘图软件,逐步形成功能强,覆盖面广的给排水综合软件包。
目前已开发的较成熟的软件有:民用建筑给排水CAD软件包、室外给排水管网计算软件、给排水管道纵断面图绘图软件、给排水外部管网设计软件等。
正在开发,初见成效的软件有泵房设计软件、平流沉淀池软件、机械加速澄清池软件、和市政管网CAD软件等。
尚未深入开发,开发难度大,但预期效果好的软件包括:辐射沉淀池、旋流沉淀池、水塔、综合管沟、架空管网、过滤间、软水站、污泥脱水间设计等项目。
给排水软件开发的另一条思路是发展给排水设备和构筑物的标准CAD图形库,从而提高图纸复用率,这比编制自动成图的软件要容易得多。标准CAD图形库还可以由权威部门编制后,作为标准图出版。此外,标准图还可作为软件包的一部分,即软件包可以交互式自动生成图形,也可以通过自动计算直接调用相应的标准图。
3.高阶段设计及方案优化设计软件的开发在
利用CAD进行高阶段设计及方案优化设计方面,除在民用建筑给排水领域有个别公司研究外,在其它给排水领域中的研究国内还未见到报道。方案优化软件的难点在于系统化的设计思路和设计经验向计算机程序的转化,其中给排水及循环水流程的方案优化模型的建立本身就是给排水设计的一个难题。目前这方面进展缓慢的原因首先是它对开发人员要求高,这一领域的理想人选稀少;其次是给排水专业行业多,领域广,需开发的软件工作量巨大,具备这方面精力的研究部门或公司还很少。
总之,给排水专业绘图软件包开发是一项艰苦的工作,需要创造一个规模生产,流水线开发的环境,投入一大批高层次的人才。各部门的研究人员既要知难而进,又要避免重复劳动,在各行业、各领域开发出各有特色的实用专业软件。
四、给排水CAD软件包开发实例———BYWAT
1.软件包结构
专业绘图环境-CAAutoCAD12.0汉化版
AutoCAD配置及改-系统配置
参数设置
菜单优化
命令简化
专业绘图功能-
专业图框绘制
专业图块绘制
专业工具程序
绘建筑图程序
BYWAT-(2.0)b.
专业绘图软件-IS泵及S泵基础绘图软件
水泵底座绘图软件
材料表等填充软件
给水管纵断面图绘图软件
排水管纵断面图绘图软件等多常
2.软件包主要技术特点
(1)符合设计人员设计习惯,简便易学。
(2)速度快,可提高设计绘图速度3到5倍。
(3)可由用户幻灯菜单自动点取专业图框。
(4)有丰富的专业图形符号,插入时管道自动断线。
(5)可方便地绘制建筑图。
(6)具有各种类型的标高、管径、坐标等标注功能以及一些方便实用的程序。
(7)绘材料表只需在屏幕菜单中点取材料名称即可将名称、材料、单位、标准图号等填入材料表中的合适位置,序号、数量也特别方便,速度快,辅助功能及提示功能强。如果需要,还可以自动填入单重,自动计算并填入总重。
(8)各型号水泵基础自动绘制,半自动生成水泵底座图形,自动计算和生成材料表。
(9)给排水管道纵断面图软件交互式、参数化绘图,可自动计算,并有辅助功能。
3.专业软件实例———排水纵断面图绘图软件
给排水纵断面图在冶金给排水设计中约占施工图总量的近10%,规律性也较强,较适合开发专业绘图软件。本软件原采用LISP语言编写,由主程序及辅助功能组成,包括程序600多句和几个图块、幻灯等。其中主程序结构较复杂,多处使用循环语句及LISP语言擅长的表处理语句。软件完全按照冶金设计院设计绘图习惯及顺序设计,操作特别简单,用户只需交互式输入简单的参数,即可完成完整理想的纵断面图。
输入比例尺后,程序自动绘制排水纵断面图表头。此后按顺序输入节点,节点平面距离、管径、地面标高、管内底标高、坡度、管材代号、平面示意图种类后,程序即可画出这段管及有关的全部文字、图形,并计算出下一点的管内底标高。以后每输入一段管的参数,即可画一段管,与前段管相同不必重新输入。每个井均可有跌水,软件还可自动画出各种平面示意图。同一表头内可结束一条管,再给起点画下一条管。软件的辅助功能可进行交叉等处理。此外软件还有较强的容错功能。
改进以后,加入可编程对话框,每确认一个对话框即可画一段管,使输入更加简洁。软件还可以从已编写的数据文件中提取数据自动生成图形,这也为从外网平面图直接提取信息生成纵断面图打下基础。
关键词:Java;数据结构;算法;程序设计;测试
中图分类号:TP312 文献标识码:A文章编号:1007-9599(2012)02-0000-02
Java Software Development
Chen Bin
(Hangzhou Normal University,Qianjiang College,Hangzhou310000,China)
Abstract:This paper briefly describes the type of abstract data conversion algorithms in Java software development,programming methodology,software development life cycle,software development phase of the test,and Java security.
Keywords:Java;Data structures;Algorithm;Programming;Test
一、Java数据结构和算法类型
(一)Java数据结构
线性表,链表,哈希表是Java常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。线性表是最基本、最简单、也是最常用的一种数据结构,它的数据元素是一对一的,逻辑结构较简单,便于实现和操作。链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,相比于线性表顺序结构,链表比较方便插入和删除操作,熟悉了链表结构对Java的描述也就轻而易举了。哈希表也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。
(二)算法类型
为实现抽象数据类型的有效转换,需要利用合适的设计策略对它们进行分析,当前最常见的算法有贪婪算法、分治算法、回溯算法。
1.贪婪算法
贪婪算法的原理是所有过程都选择最容易的,它首先考虑的是当前每个步骤的最有利性,没有进行过多的考虑对于将来的影响,贪婪算法虽然比较简易,但往往不能够达到目的。如:从一个城市到另外一个城市,在每个分岔口都选择最容易走的路,如果两个城市间的路程都是由所有最容易走的路组成,那么贪婪算法是一个正确的选择,但如果两个城市之间不能够通过这些最容易走的路到达时,贪婪算法就没有起到原先的目的。
2.分治算法
分治算法的原理是将整个大问题分类为若干个小问题,然后对这些小问题进行单个的解决,使所有小问题的处理结果合成对整个大问题的解决方案,使用这种算法的前提规则是各个小问题的类型需要与大问题相一致。
3.回溯算法
回溯算法实质上就是一种试错法,在数据转换过程中如果存在多种可供选择方法时,随机挑选一种方法进行解决问题,当该种选择无法解决问题时再选择另外一种,以此类推。该种方法不适用于选择性比较多的问题,过于繁杂。
虽然当前实现抽象数据转换的算法类型有很多种,但不是每一种方法都适用,判断某种方法是否适用的主要依据是使用时的简单性,清晰性,时间和空间上的效率性等。
二、程序设计方法
(一)过程式程序设计
过程式程序设计方法就是将整个软件系统分解成多个子层次结构,这些子层次结构由多个子程序组成。它的规则是各个下层子系统为上层子系统提供服务,同时也要为同级的其他子系统提供服务,以此类推,进行逐个解决整个大问题的小方向问题。过程式程序结构的缺点是每个过程的相互依赖性过大,在有一部分出现问题时会涉及到其他的部分,不容易检测出错误,在实际操作中难以维护,容易产生意外的难题。
(二)函数式程序设计
函数式程序设计方法和过程式设计方法的相似之处是同样是将整个软件系统分解为多个子程序,但它的运作过程与过程式设计方法不同,它的各个子程序间是分层工作的,子程序之间不需要相互作用。由此,当面对大型的程序设计时,由于各子程序之间相互的联系和依赖性不强,有利于日常维护和错误检测。
(三)面对对象程序设计
面对对象程序设计方法的原理是将整个软件系统分解成一系列相互通信的对象,对这些对象都包含数据及数据操作方法,而且各个对象之间能够很好的隐藏数据,做到保密性,进而避免产生不必要的失误。而且各个对象的相互作用及影响都不大,在设计和维护中都比较容易进行,当出现内部失误时可以及时的查到问题所在。
面向对象程序在运行时,是各个对象之间相互发送信息,然后各个对象通过自身的执行方法进行响应,在操作运行过程中,各个对象不仅需要包含数据还需要数据操作的方法,发送消息的对象称作客户端,接受消息的对象称作服务器。在发送消息的过程中,客户端对象不需要了解服务器的具体内部细节,只需要对其发送特定的消息就行。
在计算机系统的世界里,是不允许程序中存在任何差错的,计算机能够精确的执行程序中各个任务,细微的错误都有可能造成巨大的灾难,所以程序设计方法的运用是至关重要的。在Java语言和其他语言对字符的描述不同,Java基本的char类型和的是十六位的无符号整数,为使Java能够支持特定语言的字符串显示,在Java的程序设计中需采用不同的程序设计方法相互辅助,当前使用最普遍的程序设计方法就是过程式程序设计,函数式程序设计和面对对象程序设计。
三、软件开发生命周期
软件开发过程一般包括用户需求、分析、设计、实现、集成、维护。
(一)用户需求。软件开发的前提是程序员需要确定用户的需求是什么,即需要明白用户对软件开发的期望是什么。
(二)分析。在分析阶段,程序员需要将各个系统的操作进行精确的描述,让用户能够清晰的了解到整个系统的过程与结果,必要时需要开发出系统原型,易于用户理解,让用户去确认是否与其期望相一致。
(三)设计。在设计阶段,需要确定每个类的变量和方法,在执行Java程序时,计算机必须保存所有用到的类的执行代码和制定的对象。当对象出现时,java会自动跟踪并对对象进行判断,判断其是否被引用。
(四)实现。根据分析和设计的结果进行编写程序,进而完成系统的实现。
(五)集成。把分散的各个部分集合到整个软件中。
(六)维护。在程序的使用年限里,需要进行定期的变更,进而实现程序更好地应用。
Java开发的生命周期与传统的生命周期有些不同,它不是在应用程序开发的时候创建对象,而是在程序的运行过程中根据需求进行建立的,在Java语言的开发中,刚开始的时候无法确定对象及生命周期时间等问题,它存在自身的动态机制,但它最大的缺陷就是会影响到应用程序的执行效率,这需要采取相应的措施进行优化。
四、测试
测试在软件开发的各个阶段都是必需的,而并不单单存在于编码阶段。对程序进行测试时,判断的依据是程序的友好性,健壮性及可靠性等因素。
(一)测试数据的设计:
1.随机测试
随机测试是对程序进行各个测试,直到程序崩溃,确定可用程序,这种方法效率不高。
2.黑箱测试
黑箱测试不是把全部的程序进行测试,而是把整体的程序进行分类,然后有组织的选择输入的数据,这种方法在实际的操作中比较简易,但是在数据比较大的情况下很容易造成忽视一些数据。
3.白箱测试
白箱测试是指在测试中尽量对程序中的所有数据都进行测试,这个测试方法因为需要对程序中的所有代码进行查看,所以这个测试方法运行比较困难,指适用于对小数据程序的测试,当前最好的测试方法是将白箱测试和黑箱测试进行结合。
(二)编码阶段的测试
在编码阶段需要对三个时刻进行数据测试:
1.单元测试
根据目标类型编写一个实例化对象,然后对该对象发送消息,对其进行彻底的测试。
2.集成测试
当把所有的类都单独测试完毕后,然后确认他们是否能够在一起正常工作,在分别单次向测试环境中添加一个类,发现出错的根本来源,使测试达到最完善的程度。
3.验收测试
验收测试也是系统完成后的最后一关测试,需要通过该测试确认系统的功能是否能够在实际环境中运行。
(三)分析和设计阶段的测试
在分析阶段的测试是对分析工作的复查,将所有现实存在的因素都考虑在内,测试是否满足用户的要求。设计阶段的测试是不断的验证是否按照了分析阶段的结论进行工作,是否是根据客户的要求。
(四)代码测试
在测试代码时可采用预排法,虽然比较浪费时间,但是能够有效的发现缺陷获得高质量的软件。
五、Java的安全性
由于Java是面向对象的程序设计语言,信息流的安全性控制需要得到重视,Java虽然利用封装和隐藏机制,在一定程度上保证了信息的安全性,但是仍然不能保证信息流的保密性,可通过以下方法对Java的安全性进行改进,首先对Java中的主要语言成分进行改造,对package语句、类声明语句、变量成员声明及方法声明语句等进行修改。Java平台提供的原始安全模式是沙箱模型,对用户的访问权限进行限制,它由字节码检测器、类装载器和安全管理器三部分组成,它的原理是只信息本地代码,可以完全访问沙箱内的重要信息,对于下载的远程代码,只能访问沙箱内的有限资源。Java平台通过使用认证器查看类文件句法的正确性,防止病毒的侵犯。但由于Java是可以从网络上下载运行的,这造成了Java面对很多不安全的因素,如一些恶意程序对Java用户进行攻击,Java虚拟机提供的安全管理器和Java类文件认证器担任了防卫本地用户被攻击的任务。
小结:
Java是当前计算机软件开发中不可缺少的一种程序设计语言,很多软件开发工作者对Java进行了多方面的研究与探讨,本文只是通过一些小的方面对Java进行了浅显的概述。
参考文献:
[1]王宏,曹家庆,黄斌,陈琪.基于Java的数据结构算法演示系统[J].南昌航空工业学院学报(自然科学版),2006,2
[2]曹爱增,张慧芬,段春笋,张忠杰.JAVA程序设计方法研究[J].山东轻工业学院学报,2004,1
[3]张雪萍,鲍丹,王家耀.Java多线程测试策略及测试方法探讨[J].计算机应用研究,2006,11
[4]艾丽蓉,赵庆兰,刘西洋等.面向Java语言的进化测试中分支依赖图的构建[J].计算机科学.2006,7
甲方(委托人):_________
法定住址:_________
法定代表人:_________
职务:_________
委托人:_________
身份证号码:_________
通讯地址:_________
邮政编码:_________
联系人:_________
电话:_________
传真:_________
帐号:_________
电子信箱:_________
乙方(受托人):_________
法定住址:_________
法定代表人:_________
职务:_________
委托人:_________
身份证号码:_________
通讯地址:_________
邮政编码:_________
联系人:_________
电话:_________
传真:_________
帐号:_________
电子信箱:_________
鉴于甲方有意委托乙方开发用于_________(财务、经营管理等业务)的计算机信息化系统软件,双方特依据《中华人民共和国合同法》及相关的法律法规之规定,在自愿、平等、互利互惠、协商一致的基础上,双方达成如下协议:
第一条 定义
1、“软件”包括“软件系统”,除另有指明外,指描述于本合同附件_________中的在本合同履行期内所开发和提供的当前和将来的软件版本,包括乙方为履行本合同所开发和提供的软件版本和相关的文件。
2、“可交付件”指附件中指定的由乙方所交付的软件,包括源代码、安装盘、技术文档、用户指南、操作手册、安装指南和测试报告等。
3、“交付”指乙方在双方规定的日期内交付约定开发的软件的行为。但是乙方完成交付行为,并不意味着乙方已经完成了本合同项下所规定的所有义务。
4、“规格”是指在技术或其他开发任务上所设定的技术标准、规范。
5、“里程碑”是指附件_________中所规定的由乙方在本软件开发过程中阶段性完成的,并具有相对独立性的部分软件或模块。
6、“源代码”指用于该软件的源代码。其必须可为熟练的程序员理解和使用,可打印以及被机器阅读或具备其他合理而必要的形式,包括对该软件的评估、测试或其它技术文件。
7、“商业秘密”指甲、乙方各自所拥有的,不为公众所知的管理信息、方式方法、顾客名单、商业数据、产品信息、销售渠道、技术诀窍、源代码、计算机文档等,或由甲、乙方在履行本合同过程中明确指明为商业秘密的、法律所认可的任何信息。
8、“工作日”指国家所规定的节假日之外的所有工作日,未指明为工作日的日期指自然顺延的日期。
第二条 开发目的
本软件是甲方为_________(公司经营的业务)而开发的软件。该软件处理的对象是甲方的_________(财务、人力资源管理、业务交易数据处理、游戏软件等);该软件的主要功能和目标为_________。
软件整体功能符合甲方所描述的_________(经营、管理等)系统的要求,应达到_________(正确性、效率、安全性、可靠性、开放性、实用性等)的技术指标。
第三条 甲方原有信息系统描述(如开发软件在甲方原系统中运行,可选择本条)
甲方原有的相关计算机信息系统为_________,其主要功能是_________。乙方将结合甲方的计算机信息系统进行软件开发,使开发软件的能同现有系统中已有的设备和相关软件相匹配。已有系统的设备和软件见附件_________。
第四条 软件系统
1、乙方所开发的软件系统为_________(系统名称);其中:
(1)属于第三方的软件为_________;
(2)属于乙方所拥有的软件为_________;
(3)甲方委托乙方开发的软件为_________;
(4)乙方可以委托具有相应开发能力的第三方开发的软件为_________。
2、乙方为甲方开发的软件系统分为_________个子系统,包括_________子系统、_________子系统和_________子系统,与_________(甲方原有系统)共同构成本合同所规定的软件系统。该软件所构建的系统的主要功能为_________。该软件系统的名称、里程碑、模块、功能、规格、版本、价格、检测标准等相关情况见附件_________。
第五条 软件开发的交付进度和时间
1、本开发软件交付的时间为_________年_________月_________日;
2、软件开发分为_________个里程碑阶段,每个里程碑阶段的项目完成后,均应该依据本合同附件_________所列的检测标准进行检测和交付。甲方将按照本合同的第_________条规定进行付款。乙方开发软件或引用的检测标准不得低于_________(国家/行业/企业)的标准。其具体规格、检测标准、阶段和进度、付款方式等见附件_________。
第六条 质量要求
自本合同签订之日起,乙方应尽力履行其在开发计划中所规定的义务,按时完成并交付每一项里程碑,其质量标准应符合附件_________的规
定。 第七条 分包
本合同项下的项目禁止转包。如双方同意,乙方可以将本合同项下的_________(项目名称)等非主体项目分包给具有相应资质的第三方实施。违反本条规定的,乙方应依据本合同的相关规定承担违约责任。
第八条 项目管理(供选择)
合同各方指派代表组成本信息系统开发管理小组,管理本软件的开发。管理小组成员名单和通讯方式见附件_________。合同各方可以根据具体情况重新指定本方的管理小组的成员,但应当以书面方式通知另一方;如一方重新指定的小组成员涉及到本项目的重要方面,更换方应事先征得对方的书面同意。另一方应及时审查更换方提出的书面建议,双方在合理、善意、维护双方利益的基础上讨论更换事宜。
第九条 信息与资料
乙方有权根据本合同的规定和项目需要,向甲方了解有关情况,调阅有关资料,向有关职能人员调查、了解甲方现有的相关数据和资料,以对该软件进行全面的研究和设计。甲方应予以积极配合,向乙方提供有关信息与资料,特别是有关甲方对开发软件的功能和目标需求方面的信息和资料。如甲方对乙方完成本合同所需的甲方所有的信息和资料不予提供,则由甲方承担不予提供的损害后果。
第十条 资料提供
1、甲、乙双方将根据上述第_________条中甲方为其业务开发软件及其所需功能的描述和甲方所提供的资料与信息共同制作需求分析。甲方在提交有关需求说明、资料和信息时,可以就其中所涉及的软件功能、目标、需求构成及相关技术问题向乙方咨询或征求意见,乙方应当及时予以解释和答复。
2、乙方在获取上述需求信息和资料后,应及时完成需求分析书。该需求分析书经甲方认可,并由甲、乙双方签字后作为本合同的附件。
第十一条 受托人的提交
1、乙方在取得了甲方提供的必要的信息和资料后,将依据本合同所约定的软件的功能、目标与需求分析书,在_________年_________月_________日之前完成需求说明书,
2、在乙方在取得了甲方提供的必要的信息和资料后,将依据本合同所约定的软件的功能、目标与需求分析书,在_________年_________月_________日之前完成概要设计说明书,
3、在乙方在取得了甲方提供的必要的信息和资料后,将依据本合同所约定的软件的功能、目标与需求分析书,在_________年_________月_________日之前完成详细设计说明书。
以上三项完成后,均应提交甲方审核。
第十二条 委托人的审核
1、甲方在收到上述文件后,对其中所描述软件的适用性、需求性和应用性等进行审核。
(1)甲方应在乙方在取得了甲方提供的必要的信息和资料后,将依据本合同所约定的软件的功能、目标与需求分析书,在_________年_________月_________日之前完成需求说明书的审核,
(2)在乙方在取得了甲方提供的必要的信息和资料后,将依据本合同所约定的软件的功能、目标与需求分析书,在_________年_________月_________日之前完成概要设计说明书的审核,
(3)在乙方在取得了甲方提供的必要的信息和资料后,将依据本合同所约定的软件的功能、目标与需求分析书,在_________年_________月_________日之前完成详细设计说明书的审核。
2、如甲方认可上述文件后的,则在上述文件中签字。如有异议,则以书面方式说明理由并提交乙方复审。如乙方认为不构成问题,则应向甲方予以解释。确有问题的,乙方应及时予以修改并再次提交甲方审核。甲乙双方将重复此程序,直至双方一致认可签字。
3、甲方对上述说明书的签字认可,仅代表对上述说明书中开发软件的适用性、需求性、可用性、等的审核。甲方并不对说明书中的技术问题进行审核。如说明书中出现任何与乙方设计相关的技术问题或技术调整,仍由乙方承担责任。
4、如甲方未在约定的时间内完成本条款所规定的义务,乙方则可以相应顺延交付时间。如该延时对乙方造成损失,甲方还应赔偿乙方的损失。
第十三条 进度报告
1、乙方应于每月/季度终了的_________工作日内,以书面形式向甲方提供项目阶段进度报告,内容包括项目进度或里程碑计划执行情况,已完成的软件开发项目,有无遇到的困难和障碍,本项目的预期效果,人员配置情况,有无项目变更及变更情况或其它与本项目有关的甲方应该知道或甲方要求知道的情况。
2、如有重大的问题或重要的变更发生,乙方应当在变更发生之日起_________工作日内向甲方做出书面报告。乙方应当在_________工作日内回复甲方在其它时间内提出的与本项目相关的询问。
3、如乙方违反本条的规定,应该承担由此而引起的项目迟延和甲方不能及时付款或配合项目进行的后果。甲方在收到乙方的书面报告后,应当在_________工作日内回复乙方。
第十四条 第三方监理
甲方有权聘请第三方作为本软件开发的监理。如甲方指定了第三方作为甲方的监理,依甲方的授权,该监理享有与本合同中所约定的甲方同等的权利,以监理本项目的进行。监理方应拥有相应的资质并依法行使其监理职责,否则乙方有权拒绝接受监理。
第十五条 项目变更
为了维护和兼顾各方的利益,确保开发软件的质量,在本合同签署后,甲、乙双方均有权在履行本合同的过程中合理地提出变更、扩展、替换或修改本项目的某些部分的请求,包括增加或减少软件的相应功能/提高或提升有关技术参数/变更交付或安装的时间与地点。
为此,双方同意:
(1)若甲方提出部分项目的变更建议,甲方应该将变更请求以书面形式提交给乙方。乙方应当在_________个工作日内对此作出书面回复,其内容包括该变更对合同价格、项目交付日期、软件的系统性能、项目技术参数的影响和变化以及对合同条款的影响等;
(2)甲方在收到乙方的上述回复后,应在_________工作日内以书面方式通知乙方是否接受上述回复。如果甲方接受乙方的上述回复,则双方应对此变更以书面形式确认,并按变更后的约定履行本合同。
(3)如果甲方不同意乙方有关合同价格变化和项目交付日期变更的回复,但上述变更如不执行,将会影响开发软件的正常使用或主要功能,则乙方应执行变更要求。同时,甲、乙双方均有权按照第十三条的规定解决争议。在争议解决之前,甲方应按照乙方在回复中的价格变化和项目交付日期变更的要求执行。(本条款供选择)
(4)鉴于合同标的总量与合同总价相关,因此双方同意,如甲方提出的变更导致合同总价下降,则合同总价每下降_________%,甲方应补贴乙方相当于变更前合同总价款_________%的金额。
(5)如乙方提出部分项目的变更建议,乙方应同时详细阐明该变更对合同价格、项目交付日期、软件性能、项目技术参数的影响以及对合同条款的影响等情况。
(6)甲方在收到乙方的上述变更建议后,应在_________工作日内以书面形式通知乙方是否同意和接受乙方的上述变更建议。如果甲方接受乙方的上述回复,则双方对此变更建议以书面形式确认,双方按变更后的约定履行本合同。如甲方不同意乙方的上述建议,双方仍按原合同执行。
第十六条 交付时间
1、乙方应在进行每项交付前_________个工作日内,以书面方式通知甲方。甲方应当在接到通知后的_________个工作日内安排接受交付。乙方在交付前应根据附件_________所列的检测标准对该交付件进行测试,以确认其符合本合同的规定。
2、如由于甲方的原因而导致交付不能按照规定的时间进行,乙方将按延期时间顺延交付。如因延期交付而导致乙方损失,甲方应赔偿乙方的实际损失。如甲方能接受而不接受交付,则视为乙方已经交付,甲方应当
按照约定付款,甲、乙双方对此另有约定的除外。 第十七条 交付内容
1、乙方应按照合同及其附件所约定的内容进行交付,所交付的文档与文件应当是电子版式和可供人阅读的。具体交付内容见附件_________。
2、如由于甲方运行、检测不当或其它原因而导致所交付项目存在故障或问题,经甲方要求,乙方应在_________个工作日内帮助处理此项故障或问题,由此而发生的费用由甲方承担。
第十八条 领受
甲方在领受了上述交付件后,应立即对该交付件进行测试和评估,以确认其是否符合开发软件的功能和规格。甲方应在_________个工作日内,向乙方提交书面说明以表示接受该交付件。如有缺陷,应递交缺陷说明及指明应改进的部分,乙方应立即纠正该缺陷,并再次进行测试和评估。甲方应于_________个工作日内再次检验并向乙方出具书面领受文件或递交缺陷报告。甲、乙双方将重复此项程序直至甲方领受,或由甲方依法或依约终止本合同为止。
第十九条 软件系统试运行
1、自软件交付通过之日起,甲方拥有_________天的试运行权利。
2、如由于乙方原因,软件在试运行期间出现故障或问题,乙方应及时排除该方面的故障或问题,所引起的相关费用由乙方承担。
3、乙方应在合理的期限内排除故障或处理问题。如以上故障或问题影响软件基本功能和目标的实现,且排除故障或处理问题的时间超过_________个工作日,则视为乙方交付违约,除非上述故障和问题是由甲方引起的。
第二十条 系统验收
1、软件试运行完成后,甲方应及时按规定对该软件进行系统验收。乙方应以书面形式向甲方递交验收通知书,甲方在收到验收通知书的_________个工作日内,安排具体日期,由甲、乙双方按照本合同的规定完成软件系统验收。
2、如属于乙方原因致使软件未通过系统验收,乙方应排除故障,并承担相关费用,同时延长试运行期限_________个工作日,直至软件系统完全符合验收标准。
3、如属于甲方原因致使软件未通过系统验收,如属甲方原有计算机系统故障原因,甲方应在合理时间内排除故障,再进行验收。如系上述故障之外的原因,除因本合同规定的不可抗力外,甲方未能在规定的时间内完成验收,乙方有权以其认为合理的方式进行单方面验收,并将验收报告提交甲方,即视为软件系统验收已经通过。乙方在进行单方面验收时,甲方应提供验收便利。如甲方在乙方提出单方面验收后的_________个工作日内不提供验收便利,则视为该系统已经通过验收。
第二十一条 知识产权和使用权
1、知识产权:甲、乙双方共同拥有开发软件的知识产权。另一方非经对方同意,不得以任何方式向第三方披露、转让和许可有关的技术成果、计算机软件、技术诀窍、秘密信息、技术资料和文件。除本研发工作需要之外,未得到甲方/乙方的书面许可,甲方/乙方不得以任何方式商业性地利用上述资料和技术。如甲方/乙方违反本条的规定,除立即停止违约行为外,还应支付违约金_________以及赔偿甲方/乙方的损失。
2、使用权:(如知识产权归一方所有,需订立本款)甲方/乙方对软件具有使用权。本使用权的使用范围为:_________(总公司、分支机构)。
3、甲方对乙方所许可的使用权软件没有/有向第三方分许可的权利。除本合同另有规定外,乙方许可甲方使用软件或相关任何知识产权,并不表示甲方已经从乙方获得其向第三人许可使用该项权利的权利。
4、甲方在使用乙方提供的属于第三方软件时,应当依照乙方与第三方对该软件使用的约定进行。乙方应将该约定的书面文件的复印件交甲方参阅。
5、本合同项下双方的任何权利和义务不因合同双方发生收购、兼并、重组、分立而发生变化。如发生上述情形之一,则本合同项下的权利和义务随之转移至收购、兼并、重组或分立之单位。如甲、乙双方在本合同项下的各项权利和义务由甲、乙双方之分立单位分别承受的,则甲、乙双方与甲、乙双方之分立单位分别享有和承担相关权利和义务。
6、甲方在领受本合同项下的软件后,应严格遵守相关的知识产权及软件版权保护的法律、法规,并在本合同所规定的范围内使用本软件。甲方因非经授权而实施的商业性复制行为构成违约或侵权责任造成对方损失的,由其承但相关责任。
第二十二条 软件的维护和支持
乙方同意在本合同规定的期限内按照附件_________的规定,向甲方提供软件维护和支持服务。除双方另有书面约定,如甲方依法或依据本合同将软件用于商业性销售,乙方将负责为所有的与本软件相关的最终用户提供维护和支持服务。维护和支持服务期满后,如甲方继续聘请乙方提供上述服务,甲、乙双方将依据附件另行签订维护和支持协议。
第二十三条 项目培训
乙方应及时对甲方的相关人员进行培训,培训目标为受训者能够独立、熟练地完成操作,实现依据本合同所规定的软件的目标和功能。培训计划详见附件_________。
第二十四条 价格与付款方式
1、价格本开发软件总价款为_________,除非另有书面约定,付款方式见附件_________。各部分价格组成见附件_________。
2、项目增减定价在本项目进展过程中,甲、乙双方依据本合同对项目作出任何变更或经双方同意的功能变化或软件模块的增减等,一方或双方将以上述规定的价格为原则,商定变更后的具体价格。
第二十五条 保证
1、委托人保证
(1)甲方具有合法的权利缔结本合同。甲方是一家根据法律设立的合法经营,并具有良好信誉的公司,具有合法的权利能力签署并履行本合同项下的义务。
(2)利益冲突。甲方签署和履行本合同或与本合同相关的文件将不会
a、与甲方的章程或其他适用于甲方的法律法规或判决等相冲突;
b、与甲方同第三人所签署的任何法律文件如保证协议、承诺、合同等中的义务相冲突或导致任何违约,或使乙方的权利受到约束。
2、受托人保证
(1)法人地位:乙方是一家根据_________法律设立的合法经营并具有良好信誉的公司,具有合法的权利能力签署和履行本合同项下的义务。
(2)利益冲突:乙方签署和履行本合同或与本合同相关的文件将不会
a、与乙方的章程或其他适用于乙方的法律法规或判决相冲突;
b、与乙方同第三人所签署的任何法律文件如保证协议、承诺、合同等规定的义务相冲突或导致任何违约,或使乙方的权利受到约束。
(3)乙方保证:乙方履行本合同项下的义务。授予甲方的许可权没有受到任何第三方的约束或限制,也没有承担任何约束或限制性义务。
(4)侵权与被诉:乙方保证本软件或其授予的权利不会侵犯任何第三人的知识产权或其他权利,也没有其他针对乙方拥有本软件权利的未决诉讼,或甲方行使乙方所授予的软件权利会侵犯任何第三人的合法权利。
(5)合法软件:乙方所开发的软件必须符合国家有关软件产品方面的规定和软件标准规范。
(6)在乙方所交付的软件系统中,不含任何可以自动终止或妨碍系统运作的软件。
(7)如乙方所交付和许可甲方使用的软件需经国家有关部门登记、备案、审批或许可的,乙方应保证所提供的软件已完成了上述手续。
第二十六条 侵权赔偿
1、乙方同意,如有第三方声称甲方或甲方所分许可的顾客使用本软件侵犯了第三方的知识产权或其它财产权利,乙方将对由此而引起的任何诉讼或法律请求进行抗辩。乙方同意支付有关判决或和解所确定的赔偿金额。甲方同意,一旦发生此类诉讼或请求,甲方将及时通知乙方并对乙方处理该诉讼或请求提供合理的帮助,以便乙方获得应有的权利,并在征得乙方书面同意的情况下处理与此相关的应诉、抗辩或进行和解。甲方有权自费参与针对该项诉请的应诉抗辩或和解。如乙方由于经济或其他原因不能针对该项诉请进行应诉或和解,甲方有权应诉或进行和解,其发生的费用由乙方承担。
2、如本软件或其任何部分被依法认定为侵犯第三人的合法权利,或任何依约定使
用或分销该软件或行使任何由乙方授予的权利被认定为侵权,乙方应尽力用相等功能的且非侵权的软件替换本软件,或取得相关授权,以使甲方能够继续享有本合同所规定的各项权利。 3、如果乙方经合理和具有事实根据的判断,认为本软件或其任何部分可能被依法认定为侵犯第三人合法权利的,或使用或分销该软件或甲方行使由乙方授予的权利可能被认定为侵权的,乙方可以用相类似的具有相同功能的非侵权软件替换本软件,或尽力取得必要的相关授权,以使甲方能够继续享有本合同所规定的各项权利。但乙方对甲方由于使用了相关的非法软件系统,或在本软件中使用了非乙方提供的软件,或该软件中非乙方对本软件的修改而导致的侵权不承担责任。
第二十七条 保密
1、信息传递在本合同的履行期内,任何一方可以获得与本项目相关的对方的商业秘密,对此双方皆应谨慎地进行披露和接受。
2、保密获取对方商业秘密的一方仅可将该商业秘密用于履行其在本合同项下的义务,且只能由相关的工程技术人员使用。获取对方商业秘密的一方应当采取适当有效的方式保护所获取的商业秘密,不得未经授权使用、传播或公开商业秘密。除非有对方的书面许可,或该信息已被拥有方认为不再是商业秘密,或已在社会上公开,该商业秘密应当在_________年内不得对外披露。
3、非竞争甲、乙双方同意,在本合同实施过程中以及本合同履行完毕后的年内,双方均不得使用在履行本项目过程中得到的对方商业秘密,从事与对方有竞争性的业务,也不得采取任何方式聘用本开发项目中的对方相关技术或管理人员。
4、上述保密义务不适用以下情况
(1)获取该信息一方在对方披露之前,已经知晓该信息;
(2)获取该信息一方可以通过合法渠道获取该信息;
(3)获取该信息一方从第三人处合法获取,并且不承担保密义务;
(4)向第三人披露过的,且第三人不承担保密义务;
(5)独立开发或获取的信息;
(6)法律强制披露;
(7)经披露方书面许可。
5、信息安全:甲、乙双方同意采取相应的安全措施以遵守和履行上述条款所规定的义务。经一方的合理请求,该方可以检查对方所采取的安全措施是否符合上述规定的义务。
第二十八条 违约责任
1、交付违约。乙方应在合同所规定的时间内完成和交付本合同规定的项目。如开发工作延时,甲方同意给予乙方_________日的宽限期,宽限期内不追究乙方的违约责任。如乙方在宽限期内仍未依据本合同的规定完成和交付本合同所规定的项目,除依约支付违约金_________外,甲方有权要求乙方作出补偿和采取补救措施,并继续履行本合同所规定的义务。
(1)每延期_________天,乙方应向甲方支付合同总价_________%的违约金,但违约金的总数不超过合同总价的_________%;
(2)如延期时间超过_________天,甲方有权终止合同,除前款所约定的违约金外,并要求乙方支付合同总价的_________%作为对甲方的赔偿。如甲方由此终止本合同,乙方应在两个星期内返还甲方所支付的费用和报酬并依甲方的指示退还或销毁所有的基础性文件和原始资料,并赔偿甲方由此而引起的直接/直接和间接损失。
2、付款违约
(1)如甲方未按合同规定的期限付款,每延期_________天,甲方应向乙方支付合同总价_________%的违约金,但违约金的总数不超过合同总价的_________%;
(2)如延期时间超过_________天,乙方有权终止合同,除前款所约定的违约金外,乙方还可要求甲方支付合同总价的_________%作为对乙方的赔偿;
(3)如合同继续履行,甲方除支付上述违约金外,仍应按照合同规定的金额付款,乙方履行本合同的日期相应顺延;
(4)如乙方选择终止合同,甲方应按已交付和已完成的软件的价格向乙方付款。甲方付款后,乙方应向甲方交付已付款的软件。甲方如要在以后使用所接受的软件,仍应按照本合同的规定使用。
3、保密违约:任何一方违反本合同所规定的保密义务,违约方应按本合同总价的_________%支付违约金。如包括利润在内的实际损失超过该违约金的,受损失一方有权要求对方赔偿超过部分。
4、其它条款违约:任何一方违反本合同所规定的义务,除本合同另有规定外,违约方应按合同总价_________%的金额向对方支付违约金。
5、如发生违约事件,守约方要求违约方支付违约金时,应以书面方式通知违约方,内容包括违约事件、违约金、支付时间和方式等。违约方在收到上述通知后,应于_________天内答复对方,并支付违约金。如双方不能就此达成一致意见,将按照本合同所规定的争议解决条款解决双方的纠纷,但任何一方不得采取非法手段或以损害本项目的方式实现违约金。
第二十九条 通知
1、根据本合同需要一方向另一方发出的全部通知以及双方的文件往来及与本合同有关的通知和要求等,必须用书面形式,可采用_________(书信、传真、电报、当面送交等)方式传递。以上方式无法送达的,方可采取公告送达的方式。
2、各方通讯地址如下:_________。
3、一方变更通知或通讯地址,应自变更之日起_________日内,以书面形式通知对方;否则,由未通知方承担由此而引起的相关责任。
第三十条 合同的变更
本合同履行期间,发生特殊情况时,甲、乙任何一方需变更本合同的,要求变更一方应及时书面通知对方,征得对方同意后,双方在规定的时限内(书面通知发出_________天内)签订书面变更协议,该协议将成为合同不可分割的部分。未经双方签署书面文件,任何一方无权变更本合同,否则,由此造成对方的经济损失,由责任方承担。
第三十一条 合同的转让
除合同中另有规定外或经双方协商同意外,本合同所规定双方的任何权利和义务,任何一方在未经征得另一方书面同意之前,不得转让给第三者。任何转让,未经另一方书面明确同意,均属无效。
第三十二条 争议的处理
1、本合同受中华人民共和国法律管辖并按其进行解释。
2、本合同在履行过程中发生的争议,由双方当事人协商解决,也可由有关部门调解;协商或调解不成的,按下列第_________种方式解决:
(1)提交_________仲裁委员会仲裁;
(2)依法向人民法院。
第三十三条 不可抗力
1、如果本合同任何一方因受不可抗力事件影响而未能履行其在本合同下的全部或部分义务,该义务的履行在不可抗力事件妨碍其履行期间应予中止。
2、声称受到不可抗力事件影响的一方应尽可能在最短的时间内通过书面形式将不可抗力事件的发生通知另一方,并在该不可抗力事件发生后_________日内向另一方提供关于此种不可抗力事件及其持续时间的适当证据及合同不能履行或者需要延期履行的书面资料。声称不可抗力事件导致其对本合同的履行在客观上成为不可能或不实际的一方,有责任尽一切合理的努力消除或减轻此等不可抗力事件的影响。
3、不可抗力事件发生时,双方应立即通过友好协商决定如何执行本合同。不可抗力事件或其影响终止或消除后,双方须立即恢复履行各自在本合同项下的各项义务。如不可抗力及其影响无法终止或消除而致使合同任何一方丧失继续履行合同的能力,则双方可协商解除合同或暂时延迟合同的履行,且遭遇不可抗力一方无须为此承担责任。当事人迟延履行后发生不可抗力的,不能免除责任。
4、本合
同所称"不可抗力"是指受影响一方不能合理控制的,无法预料或即使可预料到也不可避免且无法克服,并于本合同签订日之后出现的,使该方对本合同全部或部分的履行在客观上成为不可能或不实际的任何事件。此等事件包括但不限于自然灾害如水灾、火灾、旱灾、台风、地震,以及社会事件如战争(不论曾否宣战)、动乱、罢工,政府行为或法律规定等。 第三十四条 合同的解释
本合同未尽事宜或条款内容不明确,合同双方当事人可以根据本合同的原则、合同的目的、交易习惯及关联条款的内容,按照通常理解对本合同作出合理解释。该解释具有约束力,除非解释与法律或本合同相抵触。
第三十五条 补充与附件
本合同未尽事宜,依照有关法律、法规执行,法律、法规未作规定的,甲乙双方可以达成书面补充合同。本合同的附件和补充合同均为本合同不可分割的组成部分,与本合同具有同等的法律效力。
第三十六条 合同的效力
1、本合同自双方或双方法定代表人或其授权代表人签字并加盖单位公章或合同专用章之日起生效。
2、本协议一式_________份,甲方、乙方各_________份,具有同等法律效力。
3、本合同的附件和补充合同均为本合同不可分割的组成部分,与本合同具有同等的法律效力。
甲方(盖章):_________ 乙方(盖章):_________
法定代表人(签字):_________ 法定代表人(签字):_________
委托人(签字):_________ 委托人(签字):_________
签订地点:_________ 签订地点:_________
_________年____月____日 _________年____月____日
1.1什么是软件开发软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。软件开发平台源于繁琐的实践开发过程中。开发人员在实践中将常用的函数、类、抽象、接口等进行总结、封装,成为了可以重复使用的“中间件”,而随着“中间件”的成熟和通用,功能更强大、更能满足企业级客户需求的———软件开平台应运而生。
1.2软件开发平台的种类目前国内的软件开发平台,除国际品牌如IBM,国内平台商比较成熟的有Justep、普元、昕友亿方、创恒信、北京百特安茂信息技术有限公司提供的VisualSet开发平台,以及山东金现代信息技术有限公司出品的轻骑兵软件开发平台等,部分管理软件企业也开始借平台提升企业竞争力,如用友。
2如何选择软件开发平台
2.1软件开发中需要用的工具项目管理:Project,TeamLab,Trello;建模:Rose,Dia,StarUML;项目构建:Maven,Ant;IDE:VisualStudio,Ecliplse。
2.2软件开发平台PC软件开发平台和移动软件开发平台。
2.3选择软件开发平台的想法“后台硬”的,主流的市场占有率高的,免费的,持续推出新版本的软件平台。PC软件开发平台有.JavaEE,.Net以及网络应用开发。NET全称Framework,来自于微软,是一套全能的框架平台,支持C++、C#、J++、VB、ASP等语言,能够解决C/S、B/S和单机等结构的软件开发需求。.NET平台将这些语言编译成CLR语言,使它们可以无差别的运行在.NET-Framework上,是2000年以后微软最为重要的软件开发套件产品。.NET框架入门门槛较低、使用方便,并且微软对其提供了良好的文档支持和在线服务。.NET框架平台的目标是“多种语言共享一种平台”,把所有的企业开发应用统一到一个架框里来。
JavaEE是基于各个软件组件的企业服务应用平台。需要专业成熟的软件公司花费大量的精力和时间去布署才能发挥JavaEE架构的企业级应用组件功能。以JAVA语言为主要的开法平台。Net平台技术来自于一家公司,所有标准统一,支持多种语言,目前主流的有C#,,Delphi等等各个开发程序都加入这个开发语言陈容,支持多种操作平台,多种移动设备。可以充分利用Windows技术资源,Mobile移动设备智能平台,WINCE等PDA系统。它的框架开发门槛很低,使用方便,学习成本较低。此外还有强大的公司团队技术的更新。.Net比Java出来晚,微软公司吸取了了Java所有的优点,并且体现了更优质的开发软件性能。.NET侧重于软件的实际应用。
JavaEE技术来自于多家公司,各个公司标准不统一,配置复杂,需求高成本配置,对用户要求高,支持一种语言Java语言并且开源产品众多,免费框架居多,各个中间件都由不同的供应商提供,需求付费。整个平台构成由若干的公司产品组成。但是它的平台移植性比较好,能够支持多种操作系统,但支持Windows系统平台需要性降低性能访问。无法与Win-dows系列平台实现美完结合。显然它的门槛较高,系统复杂,需要开发人员花费很长时间才能熟悉整个体系。该技术更新很快,新技术新标准层出不穷,适合技术爱好者。此外软件布署时间长,需要开发人员写出各种配置清单。
3软件开发平台的应用
程序员利用软件开发平台设计出各种满足客户需求的应用软件。应用软件(ApplicationSoftware)是为满足用户不同领域、不同问题的应用需求而提供的那部分软件。它可以拓宽计算机系统的应用领域,放大硬件的功能。应用软件是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合,分为应用软件包和用户程序。例如学校做一个考生查询成绩登录系统,我们可以利用.Net技术开发编程,这就是.Net技术的应用。
关键词:金融软件;开发;难题
中图分类号:TP311
在我国金融软件的开发作为一种独立存在的商务活动和工程项目的时间并不长,在金融软件开发活动中,有主要的两个参与主体即:金融机构(软件的使用者)和软件开发商。近些年,越来越多的人士认识到,这两个金融软件开发的参与者的相互关系,特别是它们之间的矛盾、合作、互动才是当今金融软件开发的最大难题。
1 软件开发费用的问题分析
金融软件的开发已经成为了一种正常的商务活动,这意味着软件开发的参与双方都存在着正常的商务交流,存在着正常的贸易方式,使用方给开发方提出需求并支付开发费用,而开发方承接任务研发软件,进而接受开发费用的模式深入人心。这也意味着双方存在着经费上的矛盾,双方都在为了经费展开了各种的手段,这对开发方而言却是一个真正意义上的难题。
通常在计算经费时,双方都会根据所需的工作量来计算,然而双方对同一个软件的项目计算出的所需“人月”数量却各不相同,甚至会出现数倍的差距,为了合理的技术工作量,双方都面临着专业和心理的挑战[1]。
部分软件开发商为了保证开发权的竞争,常常在竞标时压低报价,不然根本无法中标。但是压低报价却有两个危害:一是中标的开发商往往实力不强,这意味着软件使用方的软件质量相当难以保证;二是开发经费的不足会导致开发商不敢高薪聘用专业人才,也无法进行有效的奖励机制,进而会影响软件的开发质量。
2 软件使用方的问题研究
软件使用方某种角度可以称为是开发商的衣食父母,这意味着使用方对开发方的要求会各种各样,这也一定程度促进了软件开发工作的进行,但是也一定程度的阻碍了软件开发工作。并不是所有的软件使用方都有相关的专业知识,但是使用方的监督干扰却一直贯穿整个的软件开发过程,这就意味着软件的开发工作很大程度将被影响。
例如在开发过程中,使用方会派出人员进行进度的视察,并且给出相对的建议,但是这个建议在使用方看来合理有据,但是大多情况下这些建议对已经成型的系统而言就是漏洞。且使用方视察的人员不同对相关的建议也不同,虽然一定程度会保证开发方的工作进程,但是更多的是影响开发的整体进度[2]。还有一些银行用户在进行软件开发方的工作监督时,依据旧式的银行工作理念,在和开发方交流时,一种高姿态俯视整个开发进程,对工程进程指手画脚。一旦出现问题则百般推却,忽视自身的责任,只要求开发方如何,却不考虑自身的相关责任。
部分使用方字项目最后结尾阶段延缓系统的验收工作,迟迟不支付尾款,一个几个月的工程生生变成了数年的“胡子工程”,在出现这样的情况时,就算通过法律途径解决,但对开发方而言也是极大的人力物力的浪费。
3 软件的产品和版本的分析
软件因不同金融单位的需求而各不相同,但是究其根本业务范围,其实软件的大范围还是一致的。但是目前各软件开发方自身各自为政,开发出的软件产品各不相同,这使得软件市场一定程度上存在版本的重复和资源的浪费,无法推出一款通用型的软件。
以银行业务需求软件为例,银行业务的大范围包括存取款、转账、刷卡等,这是所有银行共通的,如果有一款通用的软件系统,这样所有银行都可以使用,可以大量的节约成本,省时省力。部分银行存在特殊的业务范围,这就需要借助于设备软件产品参数及接口模块等相关技术。但是目前的现状告诉我们,这种软件没有出现过,各种银行依旧是关门开发,相互不存在任何的交流。银行各自开发的结果就是软件作品一堆,但是系统的产品则没有一件。
在银行的内部也存在着软件版本的问题,总行开发出一个新的业务软件,下发到各处分行,希望将整个银行的业务进行规范化管理。但是一段时间之后,各地区的分行纷纷根据自身要求对母软件进行修改,这使得各自的版本不一,规范化的管理无法实施。
4 使用方的需求难以把握
每个使用方都有自身单位特点,这就需要开发方进行细致的分析,整理出最合乎情况的设计方案。但是很多情况下使用方的具体需求并不明显,或者其描述不准确,这使得这点在实际实施时很难把握。
软件开发的出发点是使用方的金融业务需求,但是在实际的操作过程中,对使用方的需求并不意味着全盘的接受或者过分的强调具体业务的操作习惯和个别的特例需求,在新的经济形势下,这是不可行的。
在程序开发的初期,其根本目的是为了代替人力进行相关数据的统计计算,一定程度上就是人工处理方式的模仿。随着信息技术的推广,这种工作模式逐渐的不合时宜,根本满足不了现状的经济现状。金融软件的设计源于金融行业的需求,但是不应该停留在原有的需求上。当大部分的金融机构使用同一种软件时,并将其各自的需求反映到这个软件中,然后加以改良,最后形成一个适应于大部分金融行业的软件产品。这可以统一、自动、规范的进行业务的展开,目前比较通用的SWIFT系统就是其中的一个较成功的案例[3]。
这需要在实际的软件开发过程中,进行仔细的研究,积极采用先进的信息处理技术,对一些较为落后的技术、方式和习惯进行摒弃。积极的引进外来的先进技术和设备,规范和改进自身的业务流程。
5 协同开发平台分析
软件的开发是一个整体的过程,这个整体不但包括项目工程的整体,还包括了开发方和使用方的统一整体,甚至包含了整个开发行业的整体。软件技术的发展带来了使用方也就是金融企业对软件的管理上的发展,对软件的需求管理、变更管理、测试管理、维护管理等项目开发不同阶段进行有机的联系,保证开发方工作的顺利进行,保证软件的适用性。以往的开发工作一般都只在于开发方的自身的控制中,不同的开发方、不同的使用需求使得软件产品的生命周期和版本各不相同,产品与产品相互割裂,无法进行统一的分析和度量。
建立一个统一的管理交流平台,保证开发方行业内部的联系以及开发方与使用方的联系,对提高软件的性能和适用范围有积极的意义。统一的交流平台的建立还有利于全面的项目的成本和绩效的评估,也有利于使用方的统一管理[4]。
6 结论
在金融软件开发过程中,积极的处理使用方和开发方的双方关系,合理平等的进行沟通和矛盾的处理。软件使用方在进行经费和相关要求的提出时,要合理有据,并且要进行相关专业性具体要求的提出,保证软件设计的合理性和与自身金融机构的需求的匹配性。对于开发方而言,在项目竞标时要根据自身情况合理的报价,在软件设计的过程中,保证经费和所接项目的匹配性,不能盲目的进行投标,积极与使用方进行沟通,细致了解客户的需求,进行相关的设计和解释,树立自身的服务形象。积极构建统一性和行业适应性的软件系统,积极引进先进技术,保证软件技术的先进性。
参考文献:
[1]蔡立晶.金融软件的质量特性分析和优先等级划分[J].中国金融电脑,2009(04).
[2]张俐.科学实现共赢——万维易化“软件开发监控管理平台”在北京电信的应用方案[J].互联网天地,2004(12).
[3]王昭娟.浅谈金融软件项目的需求变更控制[J].现代经济信息,2009(18).
[4]张伟,李会芳.浅谈我国保险制度的现状与发展对策[J].中小企业管理与科技(上旬刊),2009(11).
【关键词】软件开发 范式 选用
在进行软件开发的过程中,针对软件使用系统的不同,软件开发的原则也不相同,而且使用的程序设计语言等也有所区别。软件开发范式是一种结构框架,包括软件开发的整个过程,针对不同的软件开发需求,选择不同的软件开发范式类型,进而有效的完成软件开发工作,保证软件开发具有较高的质量,使得软件在相应的系统中运行时,真正的发挥软件的作用。
1 软件的生命周期
1.1 软件生命周期的含义
所谓软件生命周期,也被成为软件生存周期,是指软件来产生到生命终结的整个过程,在软件的生命周期中,包含很多的阶段,比如问题定义、总体描述、系统设计、调试与测试等,这些阶段的划分依据为时间段,通过逐步推进的方式来保证软件的正常运行。此外,为了提高软件的质量,在不同的阶段中,都需要开展审查工作、定义工作等,同时,还要建立相应的文档保存下来,以便于交流和备查。不过,随着科学技术的发展,在进行软件设计时直接面向对象,这样一来,在生命周期的每个子周期中,都具有固定的任务,在执行任务的过程中会形成相关的资料,上一个周期的资料作为下一个周期任务的依据。基于此,在进行软件开发的过程中,软件的生命周期不再局限于编码阶段,而是整个开发的过程。在软件生命周期中,当下一个阶段的任务想展开时,必须要保证上一个阶段的任务已经圆满的完成,因此,对于任何一个周期阶段的工作来说,工作的模式都是“活动――结果――审核――再活动――直至结果正确”。
1.2 软件生命周期的阶段
任何的事物都具有一定的生命周期,都要经历孕育、诞生、成长、成熟、衰亡的阶段,软件也属于一种事物,同样具有生命周期,也需要经历多个发展的阶段,最终走向衰亡,通常来说,软件的生命周期主要包含六个阶段:第一阶段:问题的定义与规划,在进行软件开发之前,需要与用户进行深入的交流,明确用户利用软件解决的问题类型,从而根据问题的类型来确定软件开发的目标与范围,最终,用户同意之后,才能进行下一阶段的工作;第二阶段,需求分析,上一阶段工作的主要目的就是确定软件开发的可行性,当具有较强的可行性之后,就需要对分析软件所需具备的各项功能,要保证分析的详细性,在软件生命周期的所有阶段中,需求分析阶段是一个比较重要的阶段,对下面阶段起着基础性的作用,为了更好的满足软件开发过程中不断变化的实际,需求分析阶段要制定需求变更计划,这样才能保证软件开发的顺利进行;第三阶段,软件设计,需求分析完成之后,软件所具备的的各项功能就确定下来,以此为依据,对整个软件系统进行设计,一般来说,在软件设计阶段,包含两种设计,一种为总体设计,一种为详细设计,通过合理的软件设计,为程序编码打下良好的基础;第四阶段,程序编码,软件设计完成之后,计算机是无法直接运行的,只有通过程序编码工作,才能将软件转化为计算机可识别的程序代码,在进行程序编码工作时,要严格的按照编写规范来进行,这样开发出来的软件才能具有良好的性能,同时也便于维护;第五阶段,软件测试,进行软件测试的目的是检查软件设计是否存在问题,如果有,及时的进行改正,软件测试包含三个阶段,分别为单元测试、组装测试、系统测试,测试时,可以采取白盒测试或者黑盒测试;第六阶段,运行维护,软件经过测试保证无任何问题之后,就会投入使用,在软件运行的过程中,要对其运行状态进行维护,以便于延长软件的使用寿命,同时,更好的满足用户的要求。
2 软件开发范式类型
2.1 瀑布模型
在软件开发范式类型中,瀑布模型是最为经典的模型,早在1970年,该模型就已经被提出,随后,瀑布模型得到了广泛的应用,在进行软件开发时,该模型起到了很重要的作用。对于软件的生命周期,瀑布模型将其划分为六个阶段,分别为制定计划、需求分析、软件设计、程序编写、软件测试以及运行维护,对于这六个阶段的前后衔接顺序,瀑布模型进行了严格的规定,就好似瀑布流水一般,自上而上的降落,这也是瀑布模型名字的由来。在利用瀑布模型开发软件时,采取的方式为线性方式,也就是说,在进行当前阶段的工作时,上一阶段的工作结果也会被接受,不过,在接受时需要进行验证,只有验证通过之后,当前阶段的输入工作才会开始,如果结果未通过验证,需要返回到上一阶段,将不符合要求的地方进行合理的修改。不过,随着软件开发技术的发展,瀑布模型的理想化线性过程已经无法满足软件开发的要求,其落后的地方主要体现在三个方面,一是各个阶段的划分过于固定,工作量也比较大;二是软件开发的过程中,用户无法看见开发的成果,只有全部阶段的开发完成之后,用户才能看见,这使得开发过程中蕴含的风险过大,很容易发生用户不满意的情况;三是无法及时的发现早期存在的开发错误。
2.2 螺旋模型
螺旋模型是在1988年出现的,由Barry Boehm发表,螺旋模型建立在瀑布模型及快速原型模型的基础上,通过二者的有效结合,将二者的优点集于一身,同时,在螺旋模型中,还增加了风险分析,这是其他模型都不具备的,因此,在一些大型的,比较复杂的系统中,实行软件开发时,可以利用螺旋模型。在螺旋模型中,拥有四个象限,不同的象限具有不同的功能,沿着螺线进行若干次迭代。四个象限为制定计划象限,主要完成软件开发目标确定、实施方案制定等工作;风险分析象限,分析和评估方案中存在的风险,并考虑识别风险及消除风险的措施;实施工程象限,实施软件开发和验证;客户评估象限,客户针对软件开发提出相关的建议和意见,保证软件开发的正确性。通过螺旋模型,软件开发的质量可以得到有效的提高,不过螺旋模型尚还存在一定的缺陷,模型具有风险分析的功能,在执行风险分析的过程中,需要花费一定的成本,如果成本过高,就会使得软件开发的利润受到影响,因此,只有大型系统才能应用此种模型,限制了应用范围的扩大。
2.3 增量模型
增量模型又被称为演化模型,是一层一层建造起来的。在增量模型中,包含多个增量构件,每个构件是由多种相互作用的模块所形成的提供特定功能的代码片段工程。在增量模型的各个阶段中,用户可以直接查看每个阶段的开发成果,开发人员在交付软件开发产品时,并不交付整个产品,而是将增量构件分别交付。实际上,用户的需求是不断变化的,利用增量模型进行软件开发可以比较好的适应用户实际的需求,降低了软件开发过程中所具备的风险。然而,在利用增量模型开发软件时,还是会存在着一定的缺陷,一是增量模型中包含大量的增量构件,当构件开发完成时需要并入到软件的总结构中,在并入的过程中,必须要保证软件原有的系统不被破坏,因此,并入的难度比较大;二是在实际软件开发的过程中,软件开发过程比较不易控制,模型很容易发生退化。
2.4 喷泉模型
喷泉模型,又被称为面向对象的生存期模型,与传统的结构化生存期相比,喷泉模型中所蕴含的增量比较多,同时,所具有的迭代性质更加的优化,喷泉模型中具备五个阶段,分别为分析、设计、实现、维护以及演化,在各个阶段中,可以实现相互重叠及多次反复,而且,利用喷泉模型开发软件时,软件的整个生命周期中还可以嵌入子生存期。喷泉模型之所以取名为“喷泉”,利用的是喷泉的特点,喷泉喷出来的水在落下时,可以落在中间,也可以落在底部,喷泉模型的命名就是以此为依据,并具备喷泉的此项特点。在喷泉模型中,各个阶段的界限比较模糊,因此,并没有严格意义上的前后阶段的承接顺序,各个阶段的开发与设计工作可以同时进行,这使得软件开发的时间大大缩短,不过,在软件开发的过程中,所需要用到的设计人员数量比较多,管理起来比较困难。
2.5 智能模型
在智能模型中,拥有专家系统,并且在建立的过程中,充分的结合了瀑布模型的优点,通过二者的结合,软件开发的质量得到了显著的提高。在实际的应用中,基于规则的系统应用智能模型比较多,在进行软件开发时,具有一定的系统规格。在一些特定的领域中,软件开发会遇到大量的专业知识,由于开发人员并非专业人员,就会导致开发受到一定的限制,而智能模型中的专家系统可以为开发人员提供指导及帮助,从而顺利的完成软件开发工作。
3 软件开发范式选用原则
3.1 软件架构设计有利性原则
软件开发并不是盲目进行的,而是要根据用户的具体需求,进行有针对性的设计,因此,在选择软件开发范式模型时,就需要充分的考虑软件的架构,只有有利于软件架构设计的模型才是最为合理的选择。软件架构设计是软件开发中比较重要的部分,架构设计的合理才能保证软件功能的合理,因此,一定要合理的选择软件开发范式,提高软件架构设计的科学性。
3.2 风险控制原则
软件开发的最终目的是满足用户的所有需求,因此,软件开发与设计的基础就是用户要求,由于软件开发需要一定的周期,在这个周期中,用户的需求存在发生变化的可能,这时,软件开发过程就会存在一定的风险,需要对风险进行合理的控制,在选择软件开发范式时,如果模型选择的合理,就可以对风险进行良好的控制,因此,选择模型时要充分的考虑风险的控制因素。
3.3 软件的可维护性原则
软件在运行的过程中,用户的需求可能会发生变化,或者软件发生运行故障,这都需要软件能够具备可修改及可维护性。在选用软件开发范式时,要根据实际软件的需求,充分的考虑软件运行后的维护工作,科学的选择相应的软件开发范式,保证最终开发出来的软件具有较高的可维护性,从而有效地提升软件运行的效率以及使用寿命。
随着软件开发范式的发展,当前比较常见的软件开发范式主要有五种,分别为瀑布模型、螺旋模型、增量模型、喷泉模型、智能模型,不过,除了提及的这几种之外,还有许多其他的范式类型。在进行软件开发时,范式类型的选择非常重要,合理的选用能够有效地提升软件开发的质量,提高软件的运行效率,延长软件的使用寿命。
参考文献
[1]赵传霖,吴文传,张伯明等.在线暂态安全预警软件开发范式的研究与实现[J].电力系统自动化,2013(22):6-10+35.
[2]薄宏.基于P_PROCE模型的软件开发项目组织学习力的研究[J].项目管理技术,2013(11):94-97.
[3]伍永豪,尹朝庆.工程哲学在软件工程教学中的应用[J].计算机教育,2014(09):90-93.
[4]马于涛,何克清,李兵等.网络化软件的复杂网络特性实证[J].软件学报,2011(03):381-407.
[5]陈翔,鞠小林,文万志等.基于程序频谱的动态缺陷定位方法研究[J].软件学报,2015(02):390-412.
[6]杨顺祥,葛科,高仲仪.基于UML和组件技术的软件开发环境IUMLSE的研究与实现[J].计算机工程与应用,2011(12):31-35.
[7]邵兰洁,马睿,鲁小利等.软件开发类课程群CDIO模式教学改革研究与实践[J].计算机时代,2014(12):64-66.
[8]刘慧.软件开发项目管理信息系统研究[J].电子制作,2014(23):104-105.
作者简介
张经瑜(1982-),男,江西省广昌市人,硕士学位。现为上海核工程研究设计院工程师。研究方向为核电安全、软件工程、信息管理和信息系统。
徐军(1980-),男,陕西省西安市人,硕士学位。现为西安理工大学讲师。研究方向为软件工程、大型系统软件、网络与信息软件。
作者单位
1.上海核工程研究设计院 上海市 200233
1.WebServicesWeb服务是XML后的产物。XML可以进行描述数据和对象,其可以保证XML文档数据的有效性。其文档非常适用于一种实现跨平台服务标准基本的格式。
2.面向对象的编程过去十年里,面向对象OOP技术在领域中占据过统治的地位,OOP理念是从Smalltalk开始的,然后慢慢到C++和Pascal,到Java成为真正的主流。VB.NET和C++是OOP发展的最高层次。
3.Java、C++、C语言、VB.NET这些高级编程语言都得到了迅速的发展,但每种语言都能独立地进行计算机软件的开发。
4.JavaScriptJavaScript作为非常重要的脚本语言,被所有主流的浏览器所使用。在编写Web应用程序时,JavaScript是不可缺少的。JavaScript也可以作为一种服务器端脚本语言,其极可能会成为将来设备的脚本语言和主流应用程序的语言。VBScript虽然得到了很好的应用,但连微软都倾向使用JavaScript来编写其脚本代码。
5.RegularExpressions虽然很多人认为正则表达式太过于繁琐,而且很难读写,但是其功能非常强大,在很多领域都需要使用它。在搜索纯文本数据,其表现出了强大的功能。
6.DesignPatterns其作用是用来通过创建和分类对象,从而简化编程。设计一个模式将一些对象进行分类成为制定的模型,OOP使用得越多,其作用就越明显。
7.FlashMX当需要更多的客户端图形以及编程能力时,HTML与CSS就不能满足此刻的需求,Flash才是最好的选择。在Flash里编程将会非常容易,并且其速度也明显比Java快。
8.Linux/Windows这是PC机两大操作软件,需要学会对其进行配置、安装。当今的软件开发程序都基于这两大操作软件平台上,对这两大软件要有一定的了解。
9.SQL对数据库的查询,SQL虽然只是一种基本操作技能,但是其却起到了非常重要的作用。也许在未来,图形界面会取代人们对SQL的使用,但是数据的查询永远也不会离开SQL,掌握SQL的基本语法,对将来编程数据的使用有很大的帮助。
二、计算机软件开发基础
1.基本原理
(1)对生命周期进行管理
(2)对阶段进行审理
(3)对产品进行严格控制
(4)对设计进行适当的抉择
(5)认真审查计算机软件
(6)对计算机软件开发的小组进行培训
(7)对计算软件进行实践
2.计算机软件的生命周期
(1)进行需求分析
(2)对要开发的软件进行总体设计
(3)编程
(4)测试
(5)维护
3.计算机软件开发管理的任务根据其需求,定制其计划与开发进度的安排。可以保证满足需求的质量标准进行成本估算与风险分析。
4.计算机软件开发的需求分析
计算机软件开发的需求应该从软件配置的环境入手,从而建立良好的、稳定的开发环境。收集开发的需求,精确完整地对其进行描述。描述软件所处理的所有信息以及变化状态所需的处理,详细地描述软件对外接口与界面。
5.计算机软件开发所需要解决的问题
(1)准确地找出所开发软件的全部功能与性能
(2)找出输入流与输出流
(3)产生完整分层,并对其描述
6.用结构化对软件需求的分析
(1)通过了解软件具体工作的流程,来获得软件物理的模型。经过对软件详细的调查,来了解软件工作的过程,从中收集到资料、文件与数据等,将所收集到信息和情况以图形的形式进行描述。就是通过用一个模型的方式来反映出对软件的理解,如画流程图。
(2)抽象描述出软件逻辑的模型。用物理模型来反映计算机软件开发的具体实现过程,通过去掉物理模型内非本质因素,来提取本质因素,从而构造出软件逻辑的模型。以此反映出计算机软件的开发技术。
(3)创建目标软件逻辑的模型。通过分析与比较目标软件与当前软件在逻辑上差别,通过明确目标软件到底需要什么,来分析出当前软件逻辑的模型,导出目标软件逻辑的模型。
(4)对开发的软件做补充与优化。要对目标软件做出一个完整描述,要先通过对所得到的逻辑模型做补充。标明还未详细进行考虑的所有细节。分析结束后,必须同客户认真审查软件文件,要在软件开发设计前,发现其所存在一些错误且及时对其纠正,直到客户确定了这个模型,表达他们的需求后,软件开发的文件才能够成为客户与软件开发人员间的“合同”。
7.结构化分析的使用工具通过利用图形等形式来描述,从而表达出软件开发的需求,用其来标明其中规格需求的部分。描述的工具:
(1)数据流程图:描述出开发的软件是由哪些部分组成,显示出各个部分间的联系。
(2)数据字典:用来定义数据流程图之中的每个图形的元素。
(3)描述其加工逻辑结构化分析:用来描述数据流程图之中不能够再分解的每个加工。因为在分析过程中,主要的依据是数据变换时形成的数据流和数据的传递,所以在结构化分析中,一般会采用使用数据流程图的方法进行分析,最后的结果将是产生其需求说明书的规格,文档中会包括一套数据的流程图和数据字典以及加工逻辑结构的描述。
三、计算机软件开发嵌入式应用
1.嵌入式软件与桌面应用软件比较
嵌入式软件和桌面应用软件进行比较,可以把嵌入式软件当作对数学函数实现,而这些数据是被函数处理后所产生的数据。嵌入式的软件核心就是这些函数本身所包含的意义,不是要用计算机实现这些数学函数。嵌入式软件与桌面应用软件不同,其最为重要的功能不是对数据进行处理,我们发现最早的运用嵌入式软件的机器并不是计算机,而是飞机、汽车等。嵌入式软件必备的特性:实时性与持续性。这两个特性使其和桌面应用软件有很大不同。
2.嵌入式软件开发的方法
(1)面向过程与面相对象
(2)面向组件嵌入式开发方法具有局限性,如果将现在桌面计算机上的应用软件开发技术用于嵌入式软件里,将会得到不好的结果。
3.面向对象嵌入式开发存在的问题与对策
根据嵌入式软件开发的一些特性,用组件技术能很好设计出非常复杂的嵌入式的软件。其设计需要能够支持并开发计算模式,并使软件设计复杂化。目前还没有任何统一的计算模式能用于所有并发控制。对软件的非功能性要求实现往往都要操作软件来支持,在嵌入式软件的开发中,必须关注嵌入式的操作软件。软件和软件、硬件结合得非常紧密,这种情况下怎样才能继续使用组件的开发方法?我们必须将组件进行分层,把与硬件相关的用一个组件进行封装。嵌入式软件在当今社会具广阔的领域,具有与现实环境交互,小巧灵活等优点,具有很大的潜力,也受到关注与研究.正是因为这些优点,使其与硬件能够紧密地连接。
提高软件开发效率和质量, 降低软件开发运营成本, 是提升软件创造力和产业竞争力的关键。云无疑是一种高效的方式。随着企业上云越发普及,软件开发也在加速向云端迁移。
软件开发模式正由早期的瀑布式流程向敏捷性开发模式转变,并开始向下游延伸至IT运营领域,出现DevOps开发与运维相结合的模式。
现在,软件开发过程也被搬上云端,从受限于开发环境、地点到现在开发者可轻资产运行,基于云端进行开发,无痛协作、专注创新,软件开发云的需求急剧攀升。
实际上,传统软件开发模式确实存在流程繁琐复杂、部署维护低效、团队协作壁垒等诸多问题,制约了软件交付的效率和质量。
例如,传统软件交付的是软件包,首先,开发周期L,大部分软件产品周期都在半年以上;其次,交付成本高,传统软件从代码提交到成功部署,通过至少需要1~6个月时间,而复杂大型代码部署至生产环境,也给系统整合、运维带来巨大挑战,如兼容性问题,而且复杂的调试过程往往会导致开发与运维的相互指责。
软件开发时如果在测试中发现问题,开发者须找出根源并修复这些问题。在某些情况下,特别是涉及非功能特性如安全、性能、可用性等方面的缺陷,可能需要做出架构上的调整,付出巨大代价。此外,国际化、跨地域团队沟通协作多,项目可见性、同步性要求高,新技术、新语言学习曲线长,也会使得工具部署和维护低效、复杂。
这些问题带来较大不可预期性,往往容易导致软件交付延期。
相比传统模式,采用DevOps开发的高效能IT企业产品频率则更为领先。Puppet调查数据显示,采用DevOps开发的企业产品次数是传统企业的200倍,交付时间缩短2555倍,故障恢复时间缩短24倍,变更失败率降低3倍,计划外工作比传统企业少了22%,而投入在创新上的时间比后者多了29%。这份数据在突显DevOps价值的同时,传统软件开发模式的低效也被揭露得淋漓尽致。
因此,解决传统开发模式遇到的一系列问题,向DevOps、敏捷、精益等软件模式转型,提升企业IT部门的总体运作效率,快速响应用户需求,提升竞争力,成为当前大多数企业最为迫切的需求。
但DevOps虽好,落地并不容易,尤其离不开相应工具平台的支撑。目前,网上DevOps工具很多,但大多分散单一,缺乏统一的一站式解决方案。由于大型企业往往都有自己的工具研发部门,专门提供DevOps工具。因此,对大多数中小企业而言,他们对轻量化、服务化、社交化、智能化的一站式开发平台的需求更为迫切。
目前,云厂商已经开始提供相关工具集,以AWS开发工具集、华为软件开发云(DevCloud)、微软VSTS(Visual Studio Team Services)、IBM Bluemix、百度效率云等为代表的一系列平台也为企业践行DevOps开发模式提供了更多选择。例如华为软件开发云,它是一款轻量级DevOps工具,面向中小企业、初创公司、个人开发者提供包括项目管理、配置管理、代码检查、编译构建、测试、部署、等端到端地覆盖软件生命周期的相关服务,采用按需计费。
这一新型软件生产工具与平台因为着力构建生产配套、产业协同、共生共荣的产业生态系统,正成为软件产业提质增效的重要基础和方式。
关键词:XP SCRUM DSDM Crystal FDD ASD
中图分类号:TP2 文献标识码:A 文章编号:1007-9416(2014)05-0188-01
1 引言
自从软件工程产生以来,我们在降低软件开发项目的风险过程中尝试过多种方法,虽然面向对象、结构化、CMM等技术有利于帮助软件危机的解决,然而其复杂的过程使软件行业陷入低效泥沼中。2001年Kent beck Martin Fowler Robert Martin等经验论阵营的头领发起了敏捷联盟向全世界了他们的宣言:个体和交互胜过过程和工具;工作软件高于理解文档;客户合作胜过合同谈判;响应变化胜过遵循计划。宣言体现了软件开发方法必须去适应软件变化的特征,在宣言的基础上就提出了敏捷软件开发方法。
2 敏捷方法概述
截止现在敏捷软件开发方法还没有一个确定的定义。但它的特点是重视软件生产效率的,适用于软件需求不确定、用户易沟通并且能参与开发、开发人员有责任感并且积极向上、十个人以下的小项目的开发,是以保证软件开发有成功产出为前提的,尽可能减少在开发过程中制成品的方法,体现“刚刚够”(Just enough)的观点。
人作为核心、循序渐进和迭代算法是敏捷软件开发的宗旨。在敏捷软件开发过程中,软件项目被分解成很多个小项目,每个小项目的成果都经过测试,再把他们集成起来。它的灵活性、协作性和软件的商业价值上作出的贡献是敏捷软件开发方法的优势。这都在“敏捷宣言”的核心原则中得到了体现:交互和独立工作是建立在工具和过程基础上的、软件使用是建立在文档基础上的、客户的协作是建立在合同谈判基础上的、对变更做出的响应是建立在遵循计划基础上的。
3 几种常用的敏捷方法比较
3.1 极限编程(XP)
极限编程(简称XP)是由KentBeck于1996年提出的,极限编程要求把它列出的每一个思想和方法都做到极限、做到最好。
极限编程的核心价值是我们在开发中必须注意的:Communication(沟通)、Simplicity(简单)、Feedback(反馈)、Courage(勇气)、此外还有第五个价值: Modesty(谦虚)。因为计划赶不上变化,使用极限编程的软件开发人员只需要在开发的初期做出一些文档。极限编程把软件测试放在首位,这样以后出现漏洞的几率就会降到最低。
极限编程是一种近螺旋式的开发方法,它把复杂的开发分解为相对比较简单的小软件;通过沟通、反馈和其它的方法,客户和开发人员就可以清楚的了解到开发进度、变化、困难和急需解决的问题等,并及时地调整开发过程。
3.2 SCRUM
SCRUM的宗旨是发挥构件技术和面向对象的开发方法,对迭代式面向对象方法进行改进,适用于需求不确定的产品的开发。是迭代的增量化过程,便于工作管理和产品研发。更综合了各种开发的经验。
SCRUM把项目分成N个为期15-30天的迭代阶段,称之为“冲刺”(sprint)。每个“冲刺”之前,你明确这一个“冲刺”需要实现的功能,然后让开发人员去完成。但是,在“冲刺”时,SCRUM的核心是所有开发都围绕着迭代,需求是固定的。SCRUM方法中只有3中角色:SCRUM主管、开发团队、产品负责人。
3.3 动态系统开发方法(DSDM)
开发一种面向领域的快速开发方法是产生动态系统开发方法的原因,动态系统开发方法在技术支持、应用推广、研究改进培训认证和培训认证等方面都比其他方法要完善,适用于对时间要求很紧的开发项目,动态系统开发方法应用范围不再仅仅局限于IT行业。
DSDM方法提倡以业务为核心,快速而有效地进行系统开发,并提出了探索式开发方法的概念。强调软件使用者一开始就预见所有需求是不可能的。该方法中,只要进能入下一步,当前的算法就是可行的。
3.4 水晶方法(Crystal)
水晶方法是Alistair Cockburn于上世纪90年代末提出的,水晶方法目的是发展一种提倡“机动性的”方法。
Crystal是根据项目重要性和规模来区别项目的,并给出相应的办法。所以,crystal是多种方法的组合.它阐明了要把对话和交流放在第一位的观点。Crystal方法中有两条准则:(1)应用反思工作室促使方法学的自适应,(2)使用的增量式循环不超过4个月。
3.5 特性驱动开发(FDD)
特性驱动开发是一个强调快速迭代、特性驱动的软件开发方法,适用于周期短的开发。它既能保证文档和质量,又能保证软件的快速开发,并提出划分的每一个功能开发时间不超过两星期,要求两星期内生产出可见的、能运行的代码。
特性驱动开发方法认为简单的过程和良好的定义就能很好地被执行,它强调的是实用、简化、易于被开发人员接受,是一个特性驱动快速迭代的过程,适用的项目为软件需求经常变动。
3.6 自适应软件开发(ASD)
自适应软件开发方法的理论来源是复杂自适应系统理论,目的是通过提高自适应性用来应对互联网时代下的软件需求难于预测并高速变化的软件开发,它与水晶方法正在相互借鉴和融合。
在一个环境中,结果是不可预测的,把计划看成是一个自相矛盾的。在计划中,偏离计划就是错误的,要纠正。而在一个适配性环境里,偏离计划恰恰是在引导开发人员走向正确的目标。在不可预测的环境中,需要我们用各式各样的方法来应对不确定性。在管理中,重点在于鼓励大家交流沟通,而不是告诉大家需要做什么,从而使开发人员能自己提出具有创造性的解决方案。
4 结语
不同的开发方法对于不同的开发人员来说,意义是不同。不同的项目规模,不同的开发环境,也决定了开发团队采用哪种开发方法,本文仅仅对敏捷开发方法做了一个简单介绍,相信能为开发团队在实践中选择方法提供一个比较客观的参考。
参考文献
[1]杨帆,徐俊刚.一种改进的Scrum敏捷软件开发方法[J].电子技术,2011.
许多企业的绩效考核工作常常会面临这样的问题:相对其他部门,软件开发部门的考核指标提取、考核方式等都有一定的难度。这也是软件开发部门管理者和人力资源部门困惑的难题。
有些企业试图对软件开发人员实行完全的定量考核,甚至提出以编写软件代码的行数作为一个重要考核指标,结果员工开始将一行代码可以解决的问题,拆分为几行来写,于是出现了"大家每天都忙于写程序,工作结果完全超过了预期目标,但是软件的功能却没有很好地实现",完全背离了绩效考核设计的初衷,考核不得不紧急叫停。虽然这种方式停止了,但如何客观公正地评价软件开发人员工作业绩的问题却依然摆在管理者面前。
软件开发人员考核难在哪里?
软件开发人员考核的困难主要集中在以下几点:
考核指标提取困难,由于软件开发人员工作本身的独特性以及工作成果不易衡量,因此难以提炼直观量化的数字性指标;
工作内容界定困难,一部分成果仅仅是证明某种试验或测试方法是否可行,证实与证伪具有同样的价值,难以在任务下达之前予以明确;
定性内容较多,影响考核的公正性;
考核方式的选取问题,很多企业的软件开发管理者为了回避考核的难题,而采取背后打分、不沟通的方式。
面临如此多的问题,如何对软件开发人员进行业绩评价呢?其实,考核中最为关键的是指标和评价方式,这两者是员工工作的导向和公司的价值取向,由不得偏差,否则就可能事倍功半,甚至劳而无功了。本文也从这两点出发,分析软件开发人员的指标提炼和评价方式。
如何提炼绩效指标
任何一项工作的展开必然是这样的思路:"正确的行为,沿着正确的道路,达成正确的结果",提炼绩效指标也需要沿着这样的逻辑关系,从软件开发成果向前推出成功的路径以及正确的行为要求,具体见下图。
软件开发人员的考核指标可以界定为两个方面:一个是效益指标,一个是效率指标。效益指标是软件开发的成果在市场中产生的价值反映,如产品销售额、市场占有率等。效率指标则是指公司内部的软件开发效率和阶段成果完成情况,包括路径指标和行为指标,具体如产品开发周期、软件开发费用、产品规划符合度、批次整改率、产品数据准确率等等。绩效指标提炼的过程实际上就是管理程序和工作流程的分析过程。
路径指标
路径指标是衡量软件开发过程是否符合总体软件开发规划的过程检测指标。从软件开发的整体流程环节看,虽然软件开发的成果不同,但是他们所遵循的程序是一致的,明确每一环节的关键监控点,也就可以形成考核的路径指标。这些路径指标的达成保证了最终结果的实现。
路径指标统计方法:
1.路标和0级计划、1级计划基本数据和经过更改认可后的数据。
2.在进行决策点评审(主要是概念决策评审)时,对照路标和0级计划、1级计划,检查是否在规划范围内以及时间偏差,在会议纪要中说明:
(1)本版本是否计入非正常增删版本数;
(2)本版本是否计入未按路标执行的版本数;
(3)本版本启动时间与规划的时间偏差(天);
(4)本版本与路标偏差的情况分析(包括情况说明、反映出的问题、改进措施等)。
行为指标
行为指标是软件开发过程中对正确职业行为的评价指标。
正确的路径还需要有正确的行为方式,许多公司重视软件开发过程性内容的积累和知识共享平台的搭建,这些内容就要求员工在软件开发的过程中关注文档的积累、数据的准确、程序的明晰记录等等。因此,可以设置文档完整率、项目报告完整性、数据差错分析等指标,以提出对软件开发人员具体行为的要求,这些也是许多职业化通道方案设计时需要分析的内容。如果公司已经建立了软件开发人员的职业发展路径标准,许多行为指标是可以从中提炼的。
效益指标
作为经济性的组织,任何一个软件开发成果都必须在市场上实现价值,效益指标就是用来评价产品对公司带来的价值和客户对其的认同度,例如产品销售额、市场占有率、客户满意度、产品故障率等等。由于这些指标具有明显的滞后性,不能及时反映软件开发的成果,因此,这种指标的使用更多要和公司的中期激励方案相结合,具有明显的项目制考核指标的特点。
同时,效益指标不适用于软件开发部门的个人考核,因为软件开发成果往往是团队合作的产物,作为部门、项目开发团队的考核更为合适。
如何选择考核方式
软件开发工作由于贡献特点和侧重点不同,在考核方式上可重点区分部门团队考核与员工个人考核两种。
部门团队考核
在软件开发工作中,部门、团队为基本的业务单元,对直接产品和最终产品的市场价值负有责任。因此,对部门、团队考核侧重的要素为效益指标和路径指标。但因为效益指标的滞后性问题,在整体的考核周期的设计上需要认真考虑以下两点:
对于效益指标,采取按项目周期进行考核的方式。许多软件开发成果的好坏是在项目结束之后一段时间体现出来,这部分指标的考核要在这个周期之后进行。
对于路径指标,采取按固定时间段进行考核的方式,多数为季度,以保证产品的软件开发过程符合公司预定的目标。
其中,路径指标占整体考核成绩的50%~70%,甚至更高,以体现公司的业绩导向和市场导向。为此,公司在奖金分配制度上也需要做相应的考虑,以配合这样的考核方式。
员工个人
由于软件开发成果更多属于团队合作的结果,每位软件开发人员只是负责最终成果的某个功能模块或某个环节,甚至有的软件开发人员不清楚自己的工作输出在最终产品中所起到的作用。他们的考核主要侧重点在于行为指标和路径指标。因此,结合这种工作特点和考核侧重点,可以采用PBC(PersonalBusinessCommitment个人业绩承诺)评价方式。PBC的程序是:设定清晰的目标,并承诺为实现目标采取的具体策略和措施,以及对团队建设的贡献,并通过对这些承诺进行评价来考核软件开发人员。
PBC的重要特点就是将目标与实现的行为要素紧密结合起来,更像是一种计划考核,强调了行为和团队合作的重要性。其具体操作方式如下:
建立PBC目标
考核周期(一般为季度)之初,直接主管或是项目组长交流部门或是项目组的工作目标,然后员工根据团队目标制定个人的工作目标。这些目标应该是简洁、易于考核、基于结果的,一般通过WIN、EXECUTE、TEAM三个层次来表达:
赢的承诺:为了支持部门或是项目组工作目标的完成,你必须做些什么。指标主要是行为指标和路径指标的结合。
执行的承诺:通过什么方法完成你赢的承诺呢?必须分析为了达成目标,需要采取的策略、方法以及对工具的需求,形成清晰的执行方案,并且有明确的时间限制和规定,若承诺按照计划按时执行,就能保证实现赢的承诺。
团队的承诺:为了同团队成员更好地合作,更加高效地完成赢和执行的承诺,员工应该做些什么。高效的团队工作需要有好的交流、参与、理解和相互支持,以一个整体去完成工作,保证团队成果的实现。PBC的举例见【表一PBC评价方式】。
表一PBC评价方式
过程辅导
任何绩效考核工作都不是秋后算账的评判,在工作的执行过程中,主管要即时给予员工支持和辅导,帮助员工解决问题和提升能力,这一点在一般的考核评价方式中都有介绍,在此不再赘述。
考核评价
依据考核周期之初确定的业绩承诺,主管对员工的整个工作情况进行评价,员工的绩效考核以目标完成结果为依据,考核的等级将影响员工的价值回报。
部门团队与个人考核的关系