系统设计与规划--一点总结
有感于目前公司的一个项目产品中遇到的一些问题结合着自己的设计与开发经历总结一下系统设计与规划的必要性和知识点作为将来设计的参考也与大家一同探讨系统设计中要注意的各方面。产品简介该产品是一个WebGIS系统历经2-3年的开发与实施目前准备从项目升级为产品但是在项目实施中暴露出大量问题使得实施人员和开发人员狼狈不堪离产品要求还有较大差距所以领导层意识到问题的严重性要求进行改造并让我做一些技术指导和设计上的把关。作为一个未曾参与开发的其它小组成员以旁观者的身份进行观察发现目前存在的一些问题1. 系统功能不稳定很多基本功能都会偶尔冒出问题搞得实施人员提心吊胆对产品没信心。2. 系统中出现一些低级错误比如分页功能出错上传文件的功能没有文件类型过滤...诸如此类有失专业水准。3. 只支持IE浏览器但对IE6和IE8不支持只能强迫用户安装IE7并且要用兼容模式浏览使用很不方便。4. 因为不同项目的需求不同客户的界面风格喜好不一样所以为各个项目的修改和定制花费大量精力。5. 在修正客户所提的bug过程中时常引入另外的bug把原本好的功能弄出错误。6. 对运行环境的测试不充分遇到64位操作系统或者英文版操作系统就会出一些问题。7. 数据库限定太死目前只支持ORACLE且限定在特定的版本如果使用ORACLE的RAC还会很麻烦。8. 部署太麻烦手动执行数据库脚本配置文件有好几个每次换IP或者数据库发生变动要手动替换好些字符串最让人郁闷的是居然把URL地址记录在数据库表里。9. 没有运行日志记录所以很难由客户提供运行的异常信息只能自己调试。这样的问题其实一直都存在只是以前我不知道罢了但实施人员多次反映客户也一直提出问题依然得不到彻底的解决使我更加迷惑。于是通过与开发人员和实施人员的交流了解到造成困局的一些原因1.前期需求不完整造成后期的变更频繁开发人员难以应付。2.数据库访问存在多种方式JDBC,Hibernate和公司研发的访问组件。3.最初的项目是在ORACLE上实施所以一直以此为目标数据库没有兼顾到其它数据库也没有测试过RAC环境。4.由于考虑到一些界面效果使用了IE7上的特性造成浏览器不兼容。5.各功能模块之间的耦合度太高相互依赖所以牵一发而动全身不敢轻易改动。6.由于缺少测试人员开发人员只能自己测试但没有使用单元测试和自动化测试工具也没有压力测试和运行环境的测试。7.各个项目同时实施开发人员身兼各个项目的技术支持和维护版本维护和代码修改难免出现混乱。出现这样的局面其实是多方面的因素需求分析、过程管理、架构设计、代码质量等。但个人觉得最主要的还是没有做好系统设计缺乏整体规划过早进入编码阶段使得系统僵化扩展能力不足无法灵活应变。所以我才想到了系统设计规划这样一个主题这个主题也没有什么明确的定义个人理解是对软件产品和项目的一个分析和评估考虑系统所涉及的几个重要方面并做好相应的准备但不涉及解决方案的细节。同时系统设计规划也不同于架构设计和详细设计个人认为后两者更偏向于业务逻辑的分层和模块组织以及核心类设计着重于接口定义与封装。根据个人的设计经验对系统进行分析和评估应该考虑以下几个因素1.技术选型2.分层设计3.数据库设计4.技术难点5.技术标准与行业规范6.性能设计7.测试设计8.调试设计9.安全设计10.部署设计在这所列的10个因素中前5个是经常涉及的也是考虑的较多的但后5个可能考虑的不多。这些因素每个都是一个很大的主题背后都有很深的理论知识和丰富的实践素材没有人能给出一个统一的解决方案。所以我这里只是用图表的形式进行划分并列举出每个主题的相关内容和关注点。每个关注点背后也都涉及到很多知识在系统设计时需要结合着自身的开发实际和需求进行取舍并找到适当的应对策略。总之我的目的是希望在系统设计之初做好宏观的分析和把握制定出合适的解决方案使得系统从容应对后期的需求变更和代码维护。