《代码大全(第二版)》阅读笔记03

个人感受部分:

之前写程序都是,拿到老师给的题目直接就开始做,没有先在脑子中打好程序框架,以至于最后一团糟。

书中所讲:做任何事情都需要前期准备,在软件开发中更是如此,尽管如此,还是有很多程序员接到任务后就是想着尽快编码,很多老板不重视软件开发的前期准备。要想保证一个软件的质量,在前期准备,需求分析,架构设计,编码,测试,维护等每一个环节都要重视质量。

解决办法:以后再写程序前线分析好功能,打好框架在开始着手搭建工程。

读书笔记:

第三章 三思而后行:前期准备
  做任何事情都需要前期准备,在软件开发中更是如此,尽管如此,还是有很多程序员接到任务后就是想着尽快编码,很多老板不重视软件开发的前期准备。要想保证一个软件的质量,在前期准备,需求分析,架构设计,编码,测试,维护等每一个环节都要重视质量。具体程序员接到任务的时候要检查一下在你之前的那些软件活动有没有准备好,如果需求中有好多没有说明的地方,架构设计也不明确,你不知道需要和其它模块之间如何通信,基础组件啥也没有,这种情况下进行详细设计和编码会很受罪。
  和同事老板达成前期准备重要性的共识之后,就是如何做前期准备以及如何判断前期准备已经做好的技巧,这些是更实用的地方。如何做前期准备基本上是需求分析人员,产品经理和架构师的关心的问题,而判断前期准备是否已准备好则是具体程序员也需要具备的能力。首先要判断你做的软件的类型和规模,如果你做的是一个长期的项目,一期一期的做,就更适合敏捷开发和迭代式开发,做一些基本的前期准备就可以开工了,先把最核心的功能实现,每隔一段时间把一些新需求加入设计和编码中来,设计和编码可以结合起来,需求也不用一下子就写的特别全面,先写出最基本的需求。如果你要做一个性命攸关的系统,如航天软件,医疗软件等,前期准备就应该更严格,需求规格说明书要尽量详细,设计也要花很长时间来做,尽量防止以后改动。根据你的项目的性质来选择更迭代化还是更瀑布式的开发。
  问题定义应该是前期准备的第一个环节,用短短的几句话来说明你做的软件解决什么问题?商业意义是什么?如果这个都不明确,那你做这个软件干啥?
  明确的需求在前期准备也很重要,需求要明确,全面,至少在接下来的一次开发迭代中需要的信息都要明确,而且不矛盾。没有明确的需求,测试人员就没法写测试用例,客户也没法理解如何使用系统,程序员也不知道如何设计编码。需求是不可能完全不变的,所以要针对需求变化制定一系列措施,比如每隔两周响应一次客户提出的需求变化,而不是无规律的频繁的接受用户需求变更;做一套需求管理系统;让老板,客户每个人都了解到频繁需求变化带来的后果;尽早的识别出可能的需求变化,以在架构设计的时候就提前考虑进去等。书中有一个检查需求质量的check list,写的很具体,很有指导作用,这本书的信息量很大,很难压缩在几篇读书笔记里,具体大家看书吧。
  架构设计要做到什么程度呢?架构设计包括好多个组成部分,程序如何组织,每个模块间如何通信,每个模块都负责什么?主要的类有没有定义出来,主要的数据是哪些?结构是怎样的,有哪些表?需要遵循哪些业务规则?大体的用户界面有没有设计出来?有哪些稀缺资源需要管理?如何管理?软件的安全需要什么样的级别,进行威胁建模了吗,都有可能面临哪些安全问题?哪些部分需要着重考虑性能问题?如果软件的使用者增大后,如何扩展软件满足用户需求?这个软件和其他已有软件或者系统的交互性如何?是否需要支持国际化?软件应该在哪个模块输入用户数据,哪个模块输出,在那一层检测IO错误?系统的错误处理策略是怎样的,检测到错误是否需要传递给调用者,还是只记录日志就可以了,是所有模块都要对数据有效性进行验证呢,还是有些模块可以假设输入的数据是干净的?系统的容错性是怎么考虑的,都需要容哪些错?系统架构的可行性如何,有没有先做出一些原型进行验证?有没有考虑过系统的健壮性,在考虑健壮性的时候是否进行了过度设计,对一些基本不会出现的情况进行了设计?有些模块或者功能是否直接买一套比自己做更划算?哪些模块可以重用,或者已经有可重用的模块?架构是否足够灵活,以很容易的面对需求的变化,是否对几乎以后肯定会有的需求进行了考虑?优秀的架构都是经过多次决策最终选定的比较靠谱的一个,在你具体进行详细设计和编码之前先针对架构师设计出来的架构问一下上面这些问题,判断一下架构是否已经准备好。
  前期准备所花费的时间是不容易把握的,也没有个固定的衡量标准,但前期准备是必须要做的,前期准备的根本目的是降低风险,提高项目质量。

原文地址:https://www.cnblogs.com/hang-hang/p/13031472.html