要开发一个软件应该考虑哪些方面

软件是一个系统工程,业界有软件工程一说 。软件工程也是各校计算机系必修科目 。开发一个软件应该考虑哪些方面,我们将引入软件工程中的一些概念和元素进行描述 。
同时,作为企业,客户或者个人而言在进行软件开发时,除了要考虑软件工程外,还需要考虑到相关的资源 。这里的资源包括人,预算,开销,时间等等 。而这些包含进去,就涉及到项目管理的范畴 。
接下来我就从 软件工程和项目管理的角度进行描述软件开发需要注意的方面 。
从软件工程的角度看,软件开发包括了前期的需求分析,系统设计,详细设计,然后才到大家通常认为的编码实施阶段,接下来时测试培训,交付上线 。最后还有一个不能忽略的阶段,那就是系统维护阶段 。

要开发一个软件应该考虑哪些方面

文章插图
  • 需求分析阶段:通常采取访谈(interview),workshop,调查表等多种方式,由资深的应用/业务顾问 (Application Consultant/Business Consultant),向客户了解需求并进行确认 。初始阶段的需求分析非常重要,稍有偏差,便有失之毫厘,谬以千里的风险 。相信广大程序员朋友们都经历过变更,尤其是项目后期 。当你的代码测试了一遍又一遍,自信满满确定几乎没有bug了,这时候leader告诉你不好意思,变更来了,你做的那一块要改成这样,改成那样 : (。当然项目前期需求收集,分析阶段不确定性比较大,所以我这里强调需要有自身的应用/业务顾问进行把关 。当然有些变更是不可避免的 。
  • 系统设计:需求分析好了,需要做Solution Design了,这时候Solution Architect进场(资深方案架构师) 。要想后期编码实施轻松,系统设计阶段,如果有资深大牛把关后面的日子就会好过很多 。包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等 。有时候要用到新的技术,还需要进行快速的新技术调研 。当今技术蓬勃发展的年代,有时候客户的需求必须使用到新的技术,也许是整个团队之前都没有接触过的,这时候就需要架构师总体把关了 。通常会有技术天分的小组成员进行技术可行性调研 。
  • 详细设计:大的框架结构,技术方向在系统设计阶段完成,确定了以后,对于各个模块而言进行详细设计 。好的详细设计文档包含了模块内所有用例(use case)的逻辑处理,以及逻辑处理涉及到的算法 。通常需要资深的程序员进行这部分文档的书写 。好的文档写出来,后面coding的同学就会一身轻松 。
  • 编码实施:如果前面详细设计做的好,到了这个阶段就相对轻松 。但是对于程序员的基本功还是很有要求的 。另外有一点就是自己的单元测试一定要做好 。
  • 测试培训:这个阶段其实分两个小阶段 。一个是测试,一个是对用户的培训 。测试包括集合测试,压力测试等,最后是UAT(User Acceptance Test) 。如果都没有问题,就择良辰吉日上线了 。用户培训这个环节相当重要,千万不可忽视,直接关系到最终用户对整个系统的接受程度 。一般会选取种子用户先进行功能培训,并和种子用户一起对所有用户进行整个软件的使用培训 。
  • 交付上线:前面这么多的阶段都完成了,所有的测试也通过了,是不是上线就一帆风顺了 。呵呵,根据笔者的经验,未必 。上线的时候或多或少都有一些幺蛾子 。新系统上线还算好,对于旧系统升级,如果系统相当庞大,国内一般也就只能是国庆/春节进行了 。为啥,有7天假期,也就是说有7天的时间用户不使用系统,这7天过程中如果出现问题也不影响用户的操作 。但是如果7天时间无法上线,不好意思,只能回退,等待下一个7天的假期 。
  • 维护:上线了,该庆祝了,一般软件公司上线后都有庆功会 。庆祝后,不要忘了还有软件系统的维护 。首先,任何系统都无法保证不出bug 。其次,对于实际的应用来讲,对于复杂的系统,每天产生的数据量巨大,对于性能方面,是需要有相关监控以及相应的 。在用户使用了一段时间以后,会发现一些问题也会产生一些需求 。所以,软件系统的维护也是相当重要的 。
上面说了这么多,都是从软件工程的角度,也都是提到了资深架构师,资深顾问,好的详细设计等等 。这些都是资源,都是需要争取的,如果争取不到,不好意思,项目经理就要多辛苦了 。
【要开发一个软件应该考虑哪些方面】接下来就从软件开发这个项目的角度出发,站在项目管理的角度上,有哪些需要注意的 。
项目管理方面我是用PMP的体系来进行描述,笔者之前通过PMP认证,觉得PMP的体系在整个项目管理过程中也是行之有效的 。PMP中涉及到项目的范围管理,时间管理,成本管理,质量管理,人力资源管理,沟通管理,风险管理,采购管理,干系人管理等 。对于软件开发尤为重要的几个环节,我这边会进行描述 。
  • 时间管理:做软件开发,一定会有schedule,什么时候开始,什么时候结束 。那么这里的进度计划就显得尤为重要了 。一定需要在规定的时间进行交付 。
  • 成本管理:无论今天是一个公司,或者一个客户,或者一个独立的自然人所拥有的资源和时间都是有限的,能投入到软件开发中的资源也是有限的,如何能够在给定的资源中完成软件开发,是对项目经理一个要求 。很有可能我上面提到的那些资深顾问,资深架构师项目经理根本要不到,或者公司也提供不了,这时候就要另想方法 。
  • 风险管理:进行早期的风险识别,以及相应的定性,定量分析,来制定应对的计划,从而能够达到对风险的控制 。
  • 实施整体变更控制:绝大部分项目都会有变更,软件开发也不会例外 。笔者对此就很有体验 。对于变更的管控,也是对项目经理而言很有挑战的一项任务 。

要开发一个软件应该考虑哪些方面

文章插图

上述的都考虑到,基本整个软件开发也不会有什么大问题了 。

    推荐阅读