时间管理的重点放在那些站用大部分时间的少数几项活动上。 作出时间安排。时间安排表是如何使用时间的计划,根据以前如何使用时间的数据,就可以作出计划,分配以后活动所需要的时间,如表3.3所示。
找出更多的时间。管理好时间的关键是逐步对使用时间的方式进行反复平衡,因为时间每天24小时是固定的。如果希望以后在某些任务多用一些时间,除非能够在另外一些任务中少用一些时间,否则,这常常只是一个愿望而已。
表3.4——每天时间安排表 制定基本规则。我们在做许多事情是都是按照一定的规则去做的。为了对时间进行有效管理,也需要有规则可循。不同的是前些规则是别人制作的,而时间管理必须自己制定这些规则。实际上,时间管理的安排就是为管理自己的时间而制定的规则。时间管理的基本规则:已经决定如何使用时间,就必须切实的按照预定的方式去做;为了切实按照预定的安排去做,就必须有非常具体的计划。表3.4就是位置到每天活动制定的每天时间安排表。设定时间分配的优先级。有些时间是固定不点的,如每周例会,可以把这些时间称为固定时间。进行其他活动的时间就是可变动的时间,只要有时间就可以去做这些活动。可变时间又分成需要完成的任务和自行斟酌的任务。需要的活动如编程、读书,虽然是需要的活动,但它们的时间是可变动的,因为无论如何找出时间都可做这些事情,并且每周在这些活动上所用的时间是不同的。自行斟酌的活动就是要做的所有其他的事情:吃饭、睡觉、社交、观看电视及其其他的娱乐活动。
当作出全面的时间安排时,固定时间的安排是没有什么问题,最常见的问题是分配可变动的时间。列出需要尽快做的事情,首先努力完成最重要的任务。重要的任务推此时,你会不自觉的为这些任务担心,立刻处理这些事情常常是更有效的,并且也将给人们带来一种完成任务的成就感。此外,记住一旦开始了一项令人生畏的任务,就很少会感到象你想象中的那么困难。
可以考虑从自行斟酌的活动中抽出那些额外的时间,但是这需要合理的安排,对个人是否真愿意按照这时间安排来执行。没有休息的时间会导致人们将管理好时间的想法推翻。做时间安排以及跟踪时间是重要的,但是时间安排一定要是自己实际愿意接受的。
执行时间安排表。按照时间安排表工作的能力很大程度上取决于个人的自觉性,但是它还取决于要做的工作的数量和它们的优先次序。预料不到的时间是生活中很自然并且是很正常的一部分,特别是在软件工程中。危机常常会打破人们的计划,因此不得不作出调整。
在第一次使用时间安排表时,可能会感到它不是很有用,这是正常的,不要因为第一次没有起作用就放弃对时间安排的过程,而是要考虑所发生的事情,看看是否存在一些不可能再发生的反常时间、或者存在对有正常事件引起人而意外花费了很多时间?如果是紧急的情况,不必对时间安排做大的调整,下一周再试着用它,然后复查结果。如果一些经常发生的事情扰乱了安排,应考虑对安排进行改动,为以后类似事情提前做好准备。
最后,按照时间安排表跟踪实施的性能,要继续收集时间数据。根据经验复查时间安排表,在根据需要和经验修改安排,要逐步的作出改变。在改变时间安排表时,要保存以前的版本。
时间管理的目标。收集时间是为了帮助自己管理时间。如果收集的数据被证明是没有用的,就需要重新考虑自己收集时间数据的方法。但是,只有在已经实践了安排的时间之后再这样做。记事作了时间安排表,如果由于一些原因对时间安排变化很大,那么也应该收集更多的数据,知道自己明白当前是如何使用时间为止。 为了减小缺陷,就必须进行缺陷管理,研究已经引入的缺陷,确定引起这些缺陷的原因,并学会在将来如何避免重复同样的错误。 表4.1——缺陷分类 缺陷分类。在分析缺陷时,将缺陷进行分类是有帮助的。通过缺陷分类,可以迅速找出哪一类缺陷的问题最大,然后集中精力预防和排除这一类缺陷,这就是缺陷管理的关键。把精力集中到最容易引起问题的几类缺陷上,一旦这几类缺陷得到控制,在进一步找到新的容易引起问题的几类缺陷上。表4.1是Chillarege和他的IBM研究院的工作成果。不要急于把10种类型的每一类细分出若干子类,直到你已经搜集到大量程序的缺陷数据。那时,才能够看出哪里需要更详细以及补充什么样的信息才是最有用的。
统计缺陷个数。采用缺陷记录日志,记录那些当你完成初始设计或编码后仍然留在产品中的缺陷。人们很容易对缺陷辩解,但是要管理好缺陷,就必须收集有关缺陷的准确数据。如果原谅缺陷,那只会自欺欺人。如果你这样做的话,就别指望有所提高。
单元测试;单元测试后,多个模块组成一些大组件进行集成测试;经过各种级别的组件测试后,这些组件集成为产品进行产品设计;最后,将产品集成到系统中进行系统测试。随着系统的规模和复杂程度不同,单元测试、集成测试、组件测试、产品测试、系统测试的类型、持续时间、复杂程度有所不同,但几乎所有规模的软件产品,都需要这个过程。 研究证明,开发过程每前进一步,发现和修复缺陷的平均代价要增长10倍。尽管缺陷的修复时间变化很大,但平均时间总是遵循这样的规律,而与缺陷的类型无关。
发现和修复缺陷的方法。尽管没有办法不引入缺陷,但是在开发过程中尽早发现和修复缺陷还是可能的。有多种发现程序中的缺陷的方法,基本上都包括以下步骤:表示缺陷征兆;从征兆中推断出缺陷的位置;确定程序中的错误;决定如何修复缺陷;修复缺陷;验证这个修复是否已经解决了这个问题。
有多种工具和辅助手段来帮助完成这些步骤,工程师最常用的工具是编译器,它能够表示出大部分语法缺陷。但是编译器最基本的任务是生成目标代码,并且可能会在源程序有缺陷的情况下生成代码。因此,不能检查出所有的拼写、标点符号或其他不符合语法的缺陷。一般编译器仅提供了缺陷的征兆,你必须自己对问题定位,并确定是什么问题,通常很快能够做到这一点,但偶尔也需要较长的时间 另外一种常用方法就是上面讲述的测试。测试的质量是由测试用例覆盖所有程序功能的程度决定的。测试可以用来验证程序几乎所有的功能,但有自己的缺点:同编译器一样只能满足缺陷派出的第一个步骤,你仍必须从缺陷征兆找出问题的根源,然后才能修复;随着项目规模的扩大,全面的测试会花费大量的时间,要进行完全测试几乎不可能的。 最有效的发现和修复缺陷的方法是个人复查源程序清单。这种方法是负很难彻底清除程序中的缺陷,但事实证明,这是最快而且最有效的方法。
源代码,并从中发现错误。代码复查更有效的原因是:在复查时看到的是问题本身而不是征兆。从头到尾复查代码时,考虑的是程序应该做什么。因此,当看到某些地方不正确时,就可以看到可能的问题是什么,并立即去验证代码。复查的缺点是:非常耗时,而且很难恰当的进行;复查时一种技能,当然可以通过学习和实践来提高。 代码复查的第一步是了解自己引入的缺陷的种类,这是收集缺陷数据的主要原因。因为在下一个程序中引入的缺陷种类一般会与前面的基本类似,只要采用同样的软件开发方法,情况会一直如此。另一方面来说,当你有了技能和经验或改变了过程,缺陷的类型和数目会随之变化。但是到了一定程度后,改进就变得非常困难了。这是,就必须研究缺陷,这可以帮助你找到更好的发现和修复缺陷的方法。
表4.3——代码复查 如何进行代码复查。代码复查的目标是在软件过程中尽可能早和尽可能多的发现缺陷,缺陷发现时间越少越好。采用表4.3描述的一个有序的检查方法,在编译之前进行代码复查,是完成目标最好的方法。编译之前进行复查。有几个原因说明应在编译之前进行代码复查:不论编译前或编译后,进行完整的代码复查的时间大约相同;不论编译前或编译后,对检查语法有效性的效果是一样的;先做复查将节省大量编译时间,若不做代码复查,一般要花12%~15%的开发时间进行编译,一旦使用代码复查后,编译时间可以缩短至3%或更少;编译程序后,代码一般复查很难彻底的进行; 经验证明,在编译阶段有大量的缺陷时,一般在测试阶段也有许多缺陷。
建立个人代码复查检查表。如果想发现和改正程序中的每一个缺陷,就必须遵照一个精确的规程。检查表可以确保遵循这个规程,它包括一系列程式的步骤。按照检查表去作时,就知道如何进行代码复查。
如果能够正确使用检查表,还能知道每个步骤发现了多少缺陷。这样就能测量出复查过程的效率,并进一步改进检查表。检查表包括了个人的经验。通过不断的使用和改进个人检查表,就可以帮助你用较少的时间发现这些缺陷。表4.4是一个C++程序代码复查表的范例。
定期更新检查表。随着时间的推移,检查表自然的要变大。但是,检查表的主要作用是帮助你把注意力集中在关键的方面。太大以后,你将失去重点。所以要定期复查缺陷数据,删除那些不能找到问题的表项。
从个人检查表的方法可以认识到,每个工程师都有各自的特点,某个工程师的实践经验对别人不一定适用。因而要设计出适合自己的检查表,并定期的对它进行检查以保证检查表更有效。只要你在代码复查中还遗漏缺陷,就要不断寻找改进检查表的方法。 进展是很缓慢的。最初,你发现缺陷的能力随着每次复查都有所提高。此后,提高将变得很困难。要坚持收集和分析缺陷数据,并坚持思考如何才能预防缺陷的产生或怎样更好的找到缺陷。只要坚持不断的做下去,就能在代码复查中不断进步,不断提高自己编写程序的质量。
编码标准。编码标准是被广泛接受的、能够作为工作样板的编码实践集。良好的编码标准将有效地帮助您避免开发有潜在危险的代码,有助于预防缺陷。例如,可以在编码标准中列出那些应该避免使用的方法,规定号循环入口或在说明是初始化变量,避免不良的变量命名等。编码标准还能有效地统一和规范整体开发活动。当其他开发人员加入到项目中来时,他们能够很好地适应这一切。代码也将变得更规范更易维护。
其他种类的代码复查。在软件组织中,一种常用的方法是同行评审,就是几个工程师彼此复查程序。组织良好的同行评审一般会发现程序中50%~70%的缺陷。互查虽然需要很多时间,但是可以有效发现缺陷,因为工程师往往难于发现自己的设计错误。他们创作这个设计,直到程序应该完整什么,即使概念有瑕疵、作了错误的设计或实现假定,他们往往很难发现。检查这可以帮助他们克服这些问题。对一个大的项目,最佳检查策略是,先做个人代码复查再进行编译,然后在任何测试前进时行同行检查。 细心工作是有回报的。当工程师觉得对自己开发的程序附有质量责任时,他就不会依赖于编译器或其他工具来发现缺陷。全面的代码复查要花费时间,但是他们节省出来的时间比花费的时间多得多,并能够生产出更好的产品。