根据软件工程的过程理论并结合实际情况,制定以下工作流程:
1、立项:项目立项申请表、项目风险分析清单。
2、需求分析:软件需求报告或设计方案、需求规格说明书。
3、总体设计:概要设计说明书或功能模块描述。
4、详细设计:详细设计说明书,包括软件接口说明、单元测试计划。
5、软件实现:软件功能说明、源代码、源代码说明或者注释
6、产品测试:测试报告
7、产品发布:产品说明书、使用手册
8、产品维护:问题反馈记录
9、项目总结:项目总结性报告
岗位设置
根据公司目前的开发过程主要分为分析、开发、测试三个阶段。分析阶段完成用户需求文档的编写,系统总体设计的编写;开发阶段完成设计文档的编写,代码的编写、代码的维护。测试阶段完成系统的测试,测试文档及其他材料。设置岗位包括:项目经理,需求分析工程师,软件架构师,开发经理,高级软件开发工程师,软件开发工程师,测试工程师等。所有岗位人员应为专职人员。
岗位 | 工作内容 | 责任 |
---|---|---|
项目经理 | 1.配合立项工作,成立项目组,安排项目任务分工。 2.估计项目开发费用。 3.制定小组开发进度表,对组内人员工作进度监控。 4.对文档的质量进行检查、把关。 4.对组内成员的工作进行指导。 5.定期召开项目会议,把控项目风险和进度。 |
1.对客户的沟通协调工作负责。 2.对软件的开发效率、质量、费用负责。 3.对系统总体设计、详细设计文档质量负责。 4.对整个项目的进度、质量、成本、风险等负责。 |
需求分析师 | 1.负责需求调研工作,汇总需求分析文档,并编写业务总体设计方案。 2.绘制界面原型demo等,设计功能使用的具体描述、行为者、前置条件、后置条件、UI描述、业务流程/子流程/分支流程、界面说明等。 3.遇见需求变更时,分析需求变更内容,负责对需求变更进行评估。 4.与高级软件开发工程师一起完成详细设计文档的编写。 |
1.对用户的需求分析的质量负责。 2.对项目组所有成员正确理解项目需求负责 |
软件架构师 | 1.负责系统的功能性概要设计,编写功能性概要设计文档。 2.负责系统的非功能性概要设计,编写非功能性概要设计文档。 3.负责协协调项目相关人员达成项目目标共识。 |
1.对整体项目架构负责。 2.对项目整体阶段性目标及整体目标负责。 |
开发经理 | 1.负责团队内系统详细设计的质量把控。 2.负责帮助或协调团队内开发过程遇到的问题。 3.负责协调开发过程的跨团队合作任务。 |
1.对团队内的开发过程负责。 2.对跨团队的合作开发过程负责。 |
高级软件开发工程师 | 1.负责系统的模块设计,详细设计文档。 2.负责技术难度大的模块的代码或者公用模块代码的编写、维护。 3.对自己负责模块的详细设计、代码编写。 4.对小组内人员进行技术指导。 |
1.对组内人员的开发效率负责。 2.对产品整体风格负责。 3.对项目整体设计流程负责。 4.对自己模块的开发效率和质量负责。 |
软件开发工程师 | 1.与项目经理沟通和确认某个模块的需求和实现方法。 2.负责某个模块的代码编写、维护。 3.对其他模块的代码的维护。 4.负责与测试人员的交互,处理测试人员的问题。 |
对自己模块的开发效率和质量负责。 |
测试工程师 | 1.根据用户需求分析和系统总体设计,编写测试文档和测试用例。 2.对软件系统的功能及非功能要求进行测试。 3.编写测试文档。 |
1.对测试的质量负责。 2.对测试文档质量负责。 |
代码安全编写规范
1、不要信任外部的用户输入或系统。
应用程序应该彻底验证所有用户输入,然后再根据用户输入执行操作。验证可能包括筛选特殊字符。针对用户意外地错误使用和某些人通过在系统中注入恶意命令蓄意进行攻击的情况,这种预防性措施对应用程序起到了保护作用。常见的例子包括 SQL 注入攻击、脚本注入和缓冲区溢出。此外,对于任何非受控的外部系统,都不要假定其安全性。
2、不要通过隐藏来保障安全。
尝试使用让人迷惑的变量名来隐藏机密信息或将它们存储在不常用的文件位置,这些方法都不能提供安全保障,最好使用平台功能或使用已被证实可行的技术来保护数据。
3、以安全的方式处理失效
如果应用程序失效(如发生严重错误等),要恰当的进行处理,一定要保护好机密数据。同时,在向最终用户返回错误消息时,不要公开任何不需要公开的信息。也就是不要提供任何有助于攻击者发现应用程序漏洞的详细信息。
4、不得设置后门或恶意代码程序
开发人员不得超越其规定权限进行开发,不得在程序中设置后门或恶意代码程序。
3.2 防范常见安全编码问题
在实现应用软件的编码阶段,也较容易因缺乏严谨思考或不好的编程习惯而引入安全问题,而且这些安全问题产生的危害作用非常大,因其产生的漏洞常常会造成应用程序中其他部分构筑的安全控制措施完全失效.目前存在的相当数量系统漏洞都是由编码问题造成的.因此要想保证应用软件的安全性,必须在编码阶段继续高度贯彻安全性原则.
在编码阶段,避免安全问题的基本原则如下:
1、 程序只实现指定的功能
2、 永远不要信任用户输入,对用户输入数据做有效性检查
3、 必须考虑意外情况并进行处理
4、 不要试图在关键业务流程发生错误并无法修复的情况下继续执行业务
5、 尽可能使用安全函数进行编程
6、 小心、认真、细致地编程
3.3 针对性防范
1、缓冲区溢出
如果对输入参数(字符串、整数等)处理时长度检查不严格,或对指针和数组越界访问不进行保护,就容易产生缓冲区溢出(Buffer Overflow)问题。
要避免此问题,则必须对系统输入数据进行严格的长度检查,废弃或截断超长的越界数据,同时利用基础库函数中的一些更为安全的字符串处理函数来处理数据,也可以利用编译器或代码复查工具提供的检查功能来尽早发现可能会产生问题的程序。
2、输入非法数据
恶意的攻击者会尝试在用户界面或接口中向系统输入恶意数据,以便期望绕过系统的安全限制,致使系统出甚至崩溃或其他非法目的,因此在编码时,须要对所有输入数据 (包括用户在界面中输入的数据和其他应用系统通过接口传递的数据)进行严格的合法性检查。
3、SQL 注入式攻击
预防 SQL注入式攻击的手段就是严格检查用户输入的数据,要使用基础系统提供的参数化查询接口,避免使用字符串来构造动态 SQL查询。同时对于数
据库对象的访问权限进行严格限制,避免恶意 SQL语句破坏数据或系统。
4、拒绝服务攻击
拒绝服务攻击(Denial of Services -DoS)是指通过大量并发访问,使得服务器的有限特定资源(如网络、处理器、内存等)接近枯竭,使得服务器或操作系统失效的攻击行为。
在编码时要注意防范可能的 DoS攻击,具体措施包括提高软件行为的可管理性、主动拒绝异常连接、自动锁定攻击源、提供实时监控界面,能够有效甄别攻击源、具有(异常)事件报警机制、具有审核日志等。通过这些主动或被动的防御手段,能够将 DoS/DDoS攻击行为带来的破坏和危害降到较低水平。
5、敏感信息泄露
在处理敏感数据时,必须利用以密码技术为主的安全技术来进行强有力的机密性保护。在使用密码技术时,一般要利用公开的、经过广泛验证的可靠加密算法,同时加强密钥的管理和保护。
软件设计使用指南
软件设计主要包含架构设计,概要设计和详细设计;
4.1 架构设计文档
软件架构设计文档描述系统级设计与体系结构设计,是指导整个软件开发的技术纲领性文档,是从宏观全局视角进行系统高层设计,包含逻辑架构,物理架构,系统架构等。概要设计和详细设计文档应该遵守架构设计的总体原则和设计目标,设计规范。
5.2 概要设计文档
概要设计是描述计算机软件系统的设计,是系统级的设计决策和系统体系结构设计,主要进行系统服务边界划分,确定服务的层次结构和调用关系,设计系统的安全性,高可用,高性能,高并发的非功能设计指标。遵守总体架构设计的设计原则和设计目标,实现系统功能。
5.3 详细设计文档
详细设计是描述计算机系统的设计,描述子系统级的设计决策、系统体系结构设计和实现功能所需要的详细设计,包含流程设计,服务设计,用户界面设计,API接口设计,数据库详细设计和代码核心3函数算法设计。
文档和使用指南专人保管
5.1 概要
软件设计通常由架构组完成,并完成后续的更新和维护。软件设计的相关文档和使用指南由专人负责保管。如果有人需要使用该文档的,应该先向指定人员申请并获得批复后才可以阅读。
5.2保管人制度
保管人员应该保证文档的有序保管和索引查找,并保证文档的安全性,避免被非法阅读。文档查阅申请必须包含查阅人,查阅文档名称,查阅理由,查阅时间,授权人等信息。对于不符合要求的查阅请求,保管人员有权拒绝查阅。保管人员需要对文档的查阅记录做保存。
修改授权和批准
6.1 授权范围
程序资源库按程序模块和功能在资源仓库中分开存放。不同的程序资源库对应不同的访问授权。
所有对程序资源库的访问和修改提交都需要进行授权和批准。
6.2 授权形式
程序资源库授权和批准人员须由专人担任。
开发人员如果需要对程序进行修改,必须先提出授权申请。
经过指定资源库和指定开发人员的授权和批准后,程序修改可以提交。
程序修改提交后,应由指定开发人员进行审查和批准。
对于没有获得授权和批准的提交,一律无法通过。
该授权可以随时进行撤回。
6.3 风险控制
获得程序资源库修改授权的人员应该谨慎使用提交权限,以免对程序资源库造成影响。
程序资源库具备分支管理功能,获得授权的人员应该仅在对应的分支上进行修改提交。
对于已经授权提交的修改,应该具备恢复和撤销机制。保证程序资源库的可恢复性。
6.4 更新授权和批准
1、应严格控制程序资源库,对程序资源库的修改都需要项目经理和相关软件开发部门主管进行授权。
2、授权和审批需要有完整流程管控,授权发起者需要有变更请求发起授权,审批完成后,签名发起正式流程完成后,进行执行阶段;
3、对更新授权和批准后执行的结果进行跟踪,制定准入准出原则,执行不通过需要进行重新发起更新授权批准流程;
4、更新授权和批准流程进行全方位管理,所有过程需要进行文档化归档管理,可追溯。需要跟踪更新人,更新时间,更新事项等。
6.5 发布授权和批准
1、应严格控制程序资源库,对程序资源库的发布需要执行软件发布流程,需要项目经理和相关软件开发部门主管进行授权,审批后方可进行执行。
2、授权和审批需要有完整流程管控,授权发起者需要发布请求发起授权,审批完成后,签名发起正式发布流程完成后,进行执行阶段;
3、对发布授权和批准后执行的结果进行跟踪,制定准入准出原则,执行不通过需要进行重新发起发布授权批准流程;
4、发布授权和批准流程进行全方位管理,所有过程需要进行文档化归档管理,可追溯。需要跟踪发布人,发布时间,发布项目等;
6.6 同步文档手册编写
1、软件开发整个生命周期文档需要保证文档更新,是最新文档;
2、所有开发过程结束都要检查相应开发设计文档是否更新完整,否则开发过程不应结束,文档需要有更新修改历史和修改内容标注;
3、所有文档修改都应有归档和保存策略,需要版本化,可追溯,文档不能删除;
4、文档应该有文档规范,包含名字规范,模版文件,修订规范等,保证文档规范化,标准化;
5、发布流程,测试流程, 变更修复流程都应该检查验收文件的准确性完整性