还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
软件开辟编程规范中译语通(青岛)科技有限公司根据我们对软件企业的了解,超过估算工作量经验值的一半,已是不可接受,所以我们确定“L5”为极限值固然这既要看企业的能力,也要看用户能接受的程度
1.13期系数(以二来新)估算工作量经验值是软件企业承担普通项目来估算的,但如果软件企业已经采用“基于构件的开辟方法”,并己建立起能够复用的构件库(核心资产库),或者已有一些软件产品,仅作二次开辟,从而使软件开辟工作量减少因此
0.25W复用系数根据国内外软件企业在实施基于构件开辟方法(软件产品线)的经验数据,提高工作效率达到25%(最高值)12开辟费用/人•月软件企业的商务成本、国家税收、企业利润、管理成本和质量成本均可摊分到各个软件开辟人员头上开辟费用/人•月=(P+Q+R)xSxT121P(人头费)人头费主要是员工的工资、奖金和国家规定的各项按人计算的费用其总量在软件企业中的商务成本占70%-80%0P=Bx
1.476国家规定的公积金7%医疗保险金12%养老金22%失业金2%(即通常所说的四金),此外还有按工资总额计征的工伤保证金
0.5%生育保证金
0.5%残疾基金
1.6%工会基金2%累计为
47.6%B为平均工资,即企业支付给员工的工资、奖金、物质奖励等多项总和,除以企业员工数,分摊到每一个月122Q(办公费)办公费包括企业办公房屋租赁费和物业管理费、通信费、办公消耗品、水电空调费、设备折旧、差旅费,此外也包括企业对员工的在职培训所支付的费用其总量在软件企业中的商务成本占20%-30%oQ=B/3此处办公费用按商务成本的25%计算
1.
2.3R(国家税收和企业利润)由于国家实施发展软件产业的优惠政策,故不单独列出计算,但软件企业仍需承担缴纳国家税收的义务,可一并与企业利润一起考虑止匕外,软件企业的员工不可能全年满负荷地工作,即使一年十二个月都安排工作,但也需抽出时间进行在职培训和提职的岗前培训据我们的了解,软件企业的员工一年能有10个月到11个月的工作也是正常的R=B/3此处为我们的建议方案,各软件企业可视情况加以变更s(管理^数)通常每一个机构的管理人员都会有一定的比例,参考一些机构的做法,按每十个软件人员配备两个管理人员即管理成本1S
1.2T(颇系数)提高软件质量,必然有所开支,即质量成本,对于不同的软件企业来说,其质量成本不尽相同软件企业与其他企业一样,也有诚信和品牌等诸多因素,从而增加企业的开支今后建议可对软件企业的资质分为四级由软件行业协会根据CMMI的认证、品牌、诚信程度等各种因素加以确定此体系建设还有待进一步探索据此,我们综合上述各点开辟费用/人月=bx
1.476+B/3+B/3x
1.2xT=Bx
1.476+2/3x12xT=Bx2575xT=Bx九当T=LQ5时,入=27当T=12时,=
3.09因此,
2.7c
3.09对于承接国外软件外包业务,一方面员工的工资较高,此外工作的安排也较难满负荷工作,用此建议R=B/2因此开辟费用/人•月=B
1.476+1/3+1/2xl.2xT=Bx
2.767xT=Bx入当T=LQ5时,入=2906当T=L2时九二332因此
2.9X332结论软件开辟价格=Ax/txBx为A估算工作量经验值B软件企业的平均工资/人•月Q风险系数1SQSL5T复用系数O25W1X综合系数
2.70W
3.
092.软件(系统)维护收费价格估算方法在完成信心工程项目的系统集成和应用软件开辟,并交付用户正式运行的一年内,对软件(系统)实行免费维护服务一年在正式运行一年后,软件企业应与用户签定软件(系统)维护合同该合同属技术转让合同,也可属技术开辟合同根据不同的用户要求,可分四种级别进行软件(系统)维护21A级软件企业派出技术人员常驻用户,解决日常运行中发生的问题
2.
1.1U(系统建设投资额)用户需要软件企业维护的系统,该系统建设的投资额如用户只需要软件企业维护其所开辟的应用软件,U就是该应用软件开辟费;如用户需要软件企业维护整个系统,包括计算机硬件、软件、网络和应用软件,则U就是该信息工程项目的总投资额212N(技术人员数)软件企业派出N个技术人员,常驻用户,因此软件(系统)维护费/年=Ux15%或者Bx入xNx12B、入参见
1.22B级软件企业每周七天,每天24小时(即7x24小时)响应,2小时到现场,且每天派技术人员到现场进行软件(系统)性能调试,使之运行处于良好状态软件(系统)维护费/年=Ux10%23c级软件企业7x24小时响应,2小时到场软件(系统)维护费/年=13x5%24D级用户的信息工程系统或者应用软件发生问题,由原承担的软件企业派人维护
2.
4.1B这种维护方式要求软件企业需要保存所有的技术档案,更需要软件企业抽出专人来不断熟悉和全面掌握该软件(系统)的各项技术细节因此,软件企业的这项支出必然要在维护费用收入中得到回报以
1.13节中的B作为参数,将其人•月单位改为人•天,以表示
2.42软件企业如果采用基于构件开辟方法,并建立起构件库,则会大大提高软件维护的效率止匕外,如果有多家用户运行的系统大致类似,也可有所提高效率以
1.13节中的t作为参数,以寸来表示因此软件(系统)维护费/次=8xt5xn此次n表示所需要的人•天数T的取值是02士三
1.系统集成价格的估算方法将整个系统所涉及到的设备、软件、网络整和起来,并能正常地运行,其运行的结果能达到用户建立该系统的目标这就是系统集成的含义因此,可以理解为单纯的设备采购和供应并不涉及系统集成,以及单纯的应用软件开辟也并不涉及系统集成系统集成费应与整个系统的规模、整个系统的复杂程度等项有关系统规模往往与系统建设费用密切相关为了简便计算,以系统建设费用(以U来表示)为参考坐标复杂程度(以a来表示)可分四种级别来区分系统集成费=UxaxTT参见125节A级整个系统涉及到计算机硬件、软件、局域网络,且体系结构在三层次以下(含三层次)5%a8%32B级整个系统涉及到计算机硬件、软件、局域网络、互联网,且体系结构在三层以上(含三层次)7%a10%33c级整个系统涉及到计算机硬件、软件、局域网络、互联网以及多种网络接口8%a12%整个系统涉及到计算机硬件、软件、网络、通信以及各种数据采集设备接口或者与用主系统有接口10%a15%.系统解决方案费用估算方法根据用户所提出的初步需求,软件企业根据以往的经验为之提供整个系统建设的方案,包括需购买的计算机硬件、软件、网络设备和应用软件开辟的大体设想、费用估算、进度初步安排、信息化所涉及到的规章制度的一些规划,有时还会涉及信息中心的建设等等这就是系统解决方案所要完成的工作目前国内市场对于系统解决方案是一种智力劳动成果的认识不足,以及国内多数招标公司并不熟悉信息技术,从而更加使得系统解决方案收费变得艰难因此,目前的收费处于过渡阶段系统解决方案费用与整个系统的规模、复杂程度等项有关系统规模往往与系统建设费用密切相关,为了简便计算,以系统建设的总投资(以U来表示)为参考坐标复杂程度就是用户的功能、性能要求复杂性、信息接口的类型和数量有关,以来表示解决方案费用=uXpxTT参见
1.
2.5节关于P我们参照第3节所列各级A级
0.7%p12%C级
1.5%p
2.2%D级2%p3%软件开辟项目工作量估算
1.击办理按钮后,在“人员选择窗口”中选择办理人时提供全选功能2系统管理员在配置流程时配置默认的待阅人员
3.在列表中显示流程实例编号,并提供查询功能
4.委托授权前可填写意见并在流转过程中显示
5.汇总类流程的实现方案,并提供例子流程
6.提供导出流程表单内容及流转内容
7.提供统计分析可以查看具体流程实例8流程设计器中的部门等,以部门ID为主键
9.流程设计器中的变迁规则,支持innotin算法
10.自定义表单支持dieckboxlistnidioboxlist1)增加流程实例标识,提供用户查询2)提供统计分析可以查看具体流程实例3)流程管理中提供导出流程表单内容及流转内容(如审批意见,审批人,审批时间,超时时间等流程履历显示的内容)流程查看、申请、管理权限软件安全开辟编码规范L代码编写1)开辟人员应保证工程中不存在无用的资源(如代码、图片文件等)2)代码中每一个类名上的注释必须留下创建者和修改者的名字3)每一个需要import的类都应使用一行import声明,不得使用importxxx.*4)System.out.println()仅在调试时使用,正式代码里不应浮现5)开辟人员编写代码时应遵循以下命名规则Package名称应该都是由一组小写字母组成;Class名称中的每一个单词的首字母必须大写;StaticFinal变量的名称全用大写,并且名称后加注释;参数的名称必须和变量的命名规范一致;使用故意义的参数命名,如果可能的话,使用和要赋值的字段一样的名称)代码应该用unix的格式,而不是windows的exit除了在main中可以被调用外,其他的地方不应被调用8)代码中应尽量使用interfaces不要使用abstract类9)在需耍换行的情况下,尽量使用printin来代替在字符串中使用的“\n10)涉及HTML的文档,尽量使用XHTML
1.0transitional文件类型,其中所有HTML标签都应关闭11)在HTML、JavaScript^XML代码中,缩进应为两个空格,不得使用TabHTML标签的name和id属性的命名方式应与Java变量名相同13)在需要时常创建开消较大的对象时,开辟人员应考虑使用对象池14)在进行log的获取时开辟人员应尽量使用isXXXEnabled15)log的生成环境上尽量避免输出文件名和行号16)产品中不要包含后门代码,隔离系统中的后门代码,确保其不能浮现在产品中作为一种特殊的调试代码,后门访问代码是为了使开辟者和测试工程师访问一部份终端用户不能访问的程序代码但是,如果后门代码被留到产品中,对攻击者来说,它就是一条不需要通过正常安全手段来攻陷系统的通路
2.JAVA安全小计平均单价(元/天)¥898最终报价遵循下面列出的准则有利于编写更加安全的代码但是总体来说,这些准则不能对安全性做出任何保证遵循这些准则可能好的实践,但是即使遵循了这些准则,写出的代码仍然可能是不安全的风险永远存在,不管在编写代码时是如何的警觉这些准则的目标,不是为了保证代码的安全性,而是为了消除若干特定类型攻击带来的风险遵循这些准则,某些特定类型的攻击将无法实现;但是其它类型的攻击仍然可能成功因此遵循这些准则仅仅是安全的第一步当书写可能和非守信链接或者混用的代码时,应当仔细的考虑如下准则匕静态字段忆缩小作用域匕公共方法和字段匕7保护包七尽可能使对象不可变immutable忆序列化匕清除敏感信息1静态字段避免使用非final的公共静态变量,应尽可能地避免使用非final公共静态变量,因为无法判断代码有无权限改变这些静态变量的值普通地,应谨慎使用可变的静态状态,因为这可能导致设想中应该相互独立的子系统之间发生不曾经预期的交互2缩小作用域作为一个惯例,尽可能缩小成员方法和成员变量的作用域检查包访问权限成员package-private能否改成私有成员private保护访问成员protected可否改成包访问权限成员package-private/私有成员private等等3公共方法/字段公共变量应当避免使用,访问这些变量时应当通过getter/setter法在这种方式下,必要时可以增加集中的安全检查任何能够访问或者修改任何敏感内部状态的公共方法,务必包含安全检查参考如下代码段,该代码段中不可信任代码可能修改TimeZone的值privatestaticTimeZonedefoultZone=null;publicstaticsynchronizedvoidsetDeftiultTimeZonezonedefeultZone=zone;4保护包有时需要整体上保护一个包以避免不可信任代码的访问,本节描述了一些防护技术令防止包注入如果不可信任代码想要访问类的包保护成员,可能通过在被攻击的包内定义自己的新类用以获取这些成员的访问权的方式防止这种攻击的方式有两种a.通过向javAsecuritypupeni68文件中加入如下文字防止包内被注入恶意类packagedefinition=Package#lfPackage#
2...JPackage#n]当检测到代码试图在包内定义新类时,类装载器的defineClass方法会抛出异常,除非代码被赋予以下权限RuntimePeirnissionCyefineGassInPackageJ+packageb.另一种方式是通过将包放到封闭的JARsealedJar文件里参看http://java.sun.com/j2se/sdk/
1.2/docs/guide/extensions/spec.html通过使用这种技巧,代码无法获得扩展包的权限,因此也无须修改javasecurity.pn邛erties文件令防止包访问可以通过限制包访问但同时仅赋予特定代码访问权限防止不可信任代码对包成员的访问通过向javasecurity.properties文件中加入如下文字可以达到这一目的packageaccess=Package#lLJackage#
2...Jackage#nJ当检测到代码试图访问上述包中的类时,类加载器的10adelass方法会抛出异常,除非代码被赋予以下权限RuntimePermissionCyefineClassInPackageJ+package5尽可能使对象不可变immutable尽可能使对象不可变如果对象必须改变,使得它们可以克隆并在方法调用时返回副本如果方法调用的返回对象是数组、向量或者哈希表等,牢记这些对象并非不可变,调用者可以修改这些对象的内容并导致安全漏洞止匕外,不可变的对象因为不用上锁所以能够提高并发性不耍返回包含敏感数据的内部数组引用这个不可变惯例的变型,在这儿提出是因为是个常见错误即使数组中包含不可变的对象比如说是字符串,也要返回一个副本,这样调用者不能修改数组中包含的到底是哪个字符串在方法调用返回时,返回数据的拷贝而不要返回数组6)不要直接在用户提供的数组里存储这是不可变惯例的另一个变型构造器和方法可以接受对象数组,比如说PubicKey数组,这个数据存储到内部之前应当克隆,并保存克隆后的数据,而不是直接将数组引用赋给同样类型的内部变量如果缺少这个步骤,在使用了有问题的构造器创建了对象后,用户对外部数组所作的任何修改都将更改对象的内部状态,尽管对象应该是不可变的7)序列化对象在序列化后、反序列化之前,都不在Java运行时环境的控制之下,也因此不在Java平台提供的安全控制范围内在实现接口Serializable时务势必以下事宜牢记在心令transient直接引用系统资源的句柄和包含了地址空间相关信息的字段应当使用关键字transient修饰资源,如文件句柄,如果不被声明为tmnsient该对象在序列化状态下可能会被修改,从而在被反序列化后获取对资源的不当访问令特定类的序列化/反序列化方法为了确保反序列化对象不包含违反一些不变量集合的状态,类应该定义自己的反序列化方法并使用接口0句ectlnputValidation验证这些变量如果一个类定义了自己的序列化方法,它就不能向任何Datalnput/DataOuput方法传递内部数组所有的Datalnput/DataOuput方法都能被重写注意默认序列化不会向Datalnput/DataOuput字节数组方法暴露私有字节数组字段如果Serializable类直接向DataOutput(write(byte口b))方法传递了一个私有数组,那末黑客可以创建ObjectOutputStream的子类并覆盖write(byte[]b)方法,这样他可以访问并修改私有数组下面示例说明了这个问题示例类publicclassYourClassimplementsSerializable{privatebyte[]intemalAn-ay;privatesynchraiizedvoidwriteOtjjectCOtjjectOu
①utStreamstrcam){stream.writeintemalAiray;•••黑客代码publicclassHackerObjectOutputStreamextendsObjectOutputStream{publicvoidwritebytefib{ModifybYouiClassyc=newYouiClassO;HackerObjectOutputStreamhoos=newHackerObjectOutputStream;hoos.writeObjectyc;令字节流加密另一种保护位于虚拟机之外的字节流的方式是对序列化产生的流进行加密字节流加密可以防止解码和读取被序列化对象的私有状态如果决定加密,需要管理好密钥,密钥的存储以及密钥交付给反序列化程序的方式,等等令需要注意的其它事宜如果不可信任代码在创建对象时受到约束,务必确保不可信任代码在反序列化对象时受到相同的约束牢记对象反序列化是创建对象的另一途径比如说,如果applet创建了frame在该frame上创建了警告标签如果该frame被应用程序序列化并被applet反序列化,务必使该frame在反序列化后标有相同的警告标签8本地方法应从以下几个方面检查本地方法返回什么1需要什么参数1是否绕过了安全检查1是否是公共的,私有的等1是否包含能绕过包边界的方法调用,从而绕过包保护9)清除敏感信息当保存敏感信息时,如信用信息,尽量保存在如数组这样的可变数据类型中,而不是保存在字符串这样的不可变对象中,这样使得敏感信息可以及早显式地被清除不要指望Java平台的自动垃圾回收来做这种清除,因为回收器可能不会清除这段内存,或者很久后才会回收及早清除信息使得来自虚拟机外部的堆检查攻击变得艰难.数据库安全1)开辟人员应尽量使用PreparedStatement并且使用占位符?来表示参数在使用set命令时,数据库驱动程序会对参数中的关键字进行转义严格禁止将参数和SQL语句做拼接2)只给数据库用户授予其需要的最小权限,以保障数据库服务器的安全3)当使用JDBC操作数据库时,涉及到的资源包括ResultSet、Statement、Connection都必须及时关闭)ResultSetPreparedStatementConnection必须挨次关闭,同时三者的close方法都应提示异常,且每一个close方法都必须用Oy、catch来实现5)数据库关闭的原则是谁创建的资源,谁负责关闭6)应在try代码块中及时关闭数据库资源,同时finally的代码块中也要关闭资源,或者者将一个try代码块拆分为多个try代码块,保证每一个资源都能在使用完以后即将关闭7)数据库表名、字段名必须大写8)对于返回较大结果集的查询,必须禁止SELECT*在其他查询中也应避免使用9)编写可以移植的SQL语句,原则如下•不得使用某个数据库专用的关键字、函数等;当必须要使用某个数据库特定的特性时,需在程序运行时,先判断当前数据库的类型,然后再根据数据的不同使用其特性;可以使用各种数据库都支持的函数包括MIN、MAX、AVG、COUNT;尽量使用简单的SQL语句,当因为特殊情况需要使用非常见SQL语句时,应该在多种数据库下测试10)优化SQL语句时开辟人员应遵循以下原则使用合适的SQL语句以避免不必要的关联;使用JDBC批量更新来优化insert和update的性能;必耍时可以使用对象缓存技术,但是技术方案需要通过讨论并且获得批准后方可执行11)不得将数据库的用户名和密码以明文形式存储在配置文件中12)对于存储于数据库中的重耍数据以密文形式存放,可以大大增强数据的安全性WEB安全1)独立、完整且集中的输入验证2)校验全部的程序输入3)校验全部的输入长度4)校验全部的输入类型5)不使用任何方式处理失败的数据6)对HTTP所有内容进行校验7)校验向用户输出的数据8)只相信服务器端校验,客户端校验只能作为补充9)使用安全、统一的编码或者转义方式10)设定有安全的权限边界11)校验被调用的后台命令12)校验被调用的文本或者配置文件13)在HTML中,一些特殊字符在页面上显示时必须转义14)用户界面须支持主流浏览器,避免因某类浏览器的安全问题或者在非IE浏览器下用户界面不能常驻15)用户界面应该包含公司或者产品标识6)尽量使用POST而不是GET方式使用HTTPPOST方法来保证Request参数的安全17)创建一个默认的错误页面对所有的异常构造统一的错误页面,包括HTTP错误和未经处理的异常18)在默认错误页面中使用通用的错误消息要确定错误提示信息不会泄露系统信息和出错原因等敏感信息精心构造错误提示信息来防止诸如用户id网络,应用程序以及服务器环境的细节等重要的敏感信息的泄漏19)使用较强的会话标识符,如使用包含至少128位安全随机数密码的会话标示符20)除了彻底公开的Web页面,对于其他所有Web页面,需要验证访问用户是否具有访问权限
5.日志安全1)对每一个重要的行为都记录日志如认证尝试、重要传输、重要数据更改、管理行为等在上述事件的日志定义行为中,要注意失败事件的关注程度至少要与成功事件一样,因为这些失败事件时常会发生在安全事件之前2)保护日志文件安全地保存日志文件,主要方法是将日志文件独立保存于应用程序目录外,同时通过严格的权限设置来控制对日志文件的访问软件开辟报价的计算方法.软件开辟价格估算方法软件开辟价格与工作量、商务成本、国家税收和企业利润等项有关为了便于计算,给出一个计算公式软件开辟价格=开辟工作量X开辟费用/人.月开辟工作量软件开辟工作量与估算工作量经验值、风险系数和复用系数等项有关软件开辟工作量=估算工作量经验值X风险系数X复用系数估算工作量经验值(以A来表示)软什开辟工作量的计算,曾经有人提出以源代码行或者功能点来计算,这些方法实施起来均有不少难度目前国际上仍旧按以往经验的方式加以计算,国内各软件企业也是采用经验的方式加以估算工作量
1.12风险系数(以来表示)估算工作量经验值亦会存在较大风险,造成软件危机的因素不少,这也是一个方面的因素特殊当软件企业对该信息工程项目的业务领域不熟悉或者不太熟悉,而且用户又无法或者不能完整明白地表达他们的真正的需求,从而造成软件企业需要不断地完善需求获取,修改设计等各项工作因此上风险系数W
1.5一序号.大类小类内容描述1需求分析需求调研与最终用户,ITC沟通,进行需求调研需求分析需求分析的主要内容是系统各个功能模块的优化方案细节要求需求方案设计编制按需求调研结果,设计需求说明书,由建设双方共同评审前确认需求说明书,依说明书提出建设方案,确定工作内容和工作量2系统设计架构设计系统架构设计及评审概要设计系统概要设计及评审详细设计系统详细设计及评审数据库设计系统数据模型设计及评审3程序开辟系统功能优化
1.通用功能项目中所有部门选择功能改为使用弹出页面方式
2.流程显示,起草和应用管理中,采用多级树,包括排序,调整所属父节点功能
3.应用管理,改进表单模板的显示及选择方式
4.部门用户管理,改进部门用户组织管理方式,增加从用户的角度可以查看所属角色,拥有的权限的功能并可对人员直接授权
5.角色类型管理;改进角色类型、角色组织管理方式,增加从角色类型的角度查看角色成员,角色类型拥有的权限
6.优化流程时限管理,可按照流程步骤不同办理人、不同条件设置相应的时限,为流程运作提供监控和优化的信息支持增加新的流程步骤类型.后台数据处理.业务处理.WebService处理步骤.业务代理.Biztalk操作
6.MOSS操作流程引擎的功能改进.流程组合的支持.流程嵌套的支持.环节参预者自定义SQL的支持.流程版本的支持流程引擎组件1)可以安装在IAP、UAP等平台,供平台应用作为流程引擎组件调用2)对调用系统提供WebService、API等接口方式基于VisualStudio的表单设计改进测试方案编写(包含测试用例)L业务表单的分离设计.业务表单的向导式创建.业务表单字段设置控件.业务表单字段校验控件.业务表单的发布管理4系统测试单元测试测试方案编写(包含测试用例)接口测试单元测试集成测试接口测试系统部署特指在用户测试环境的调测5系统部署数据初始化(包括数据迁移等)包括正式环境部署和现场支持服务部署文档编写原有设备记录、系统运行基础数据导入与生成。