热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

项目管理和质量控制之编码控制(第一天,发布以前写的测试观点文章)

编码过程的争议大多数软件工程文章都没有对编码过程做很多的描述,几乎所有的观点都认为软件重心在开发前期(需求分析阶段和设计阶段),毫无疑问,这是正确的。为了保证后期工作的正确性,有些公司提高了
  编码过程的争议

大多数软件工程文章都没有对编码过程做很多的描述,几乎所有的观点都认为软件重心在开发前期(需求分析阶段和设计阶段),毫无疑问,这是正确的。为了保证后期工作的正确性,有些公司提高了开发前期的时间比重,于是近年出现了一个新的名词“过度设计”,这种“过度设计”勿视了实际编码与设计的差异,浪费了大量的人力物力,给软件开发带来反效果。编码过程到底该占整个软件开发过程多大比重,谁也说不清楚。近年来还有一个观点认为编码过程就是设计过程的一部分,程序员在这个过程中不停地编写修改代码,调整软件结构,如果盲目的修改和调整,又会造成“永不完工”,软件开发时间失去控制。

设计与实现编码的差异控制

一个好的软件设计知道该实现哪些功能(需求),这些功能由哪些对象完成(现实),这些对象可以归纳为哪些类(设计),对象之间如何进行交流(接口),这些类能够进行哪些操作(方法),操作过程如何(实现方法)。

不管设计如何完美,实际编码总是与设计有一些差异,差异越小,说明编码后期的改动越小,代表设计水平越高,项目控制可预见性相对越好,反之,编码后期的改动就会很大,项目控制可预见性相对变坏,项目成员就会无所适从,无法保证自己的编码质量和进度。

设计的粒度控制

项目经理必须控制好设计的粒度,保证设计的效率和质量,防止在错误的设计上越走越远,浪费时间。

一般来说,总体设计需要清楚有那些子系统,概要设计需要清楚子系统之间的相关接口和内部对象之间的关系,详细设计需要清楚所有对象和对象必须的操作方法。

假设一个项目有3个子系统,每有子系统有5个基本对象,每个对象有大概5个公共方法,每个方法大概需要编码300行。可以得知,如果估计错误一个方法只会影响进度一两天(可以通过加班的方式进行弥补),如果估计错误一个对象就会影响进度五到八天,如果估计错误一个子系统,可能就需要增加额外的人员,项目进度将很难控制。

设计的水平的提高不是一朝一昔而成的,这依赖于项目成员的长期开发经验,以及对系统的把握程度。需要根据项目组内的现实情况,控制好设计的粒度和进度,在适当的情况下,可以进行回归设计,重新调整项目开发。

总之,认识设计过程的风险,做好预防工作是没有错的。在设计风险比较大的情况下,可以适度提前进行编码,把一些设计放在编码中进行。

编码过程控制

在设计无误的正常情况下,编码过程会很顺畅,项目完工指日可待。但往往实际过程会出现很多问题,需要调整程序结构,修改设计,这些修改必须是有的放矢,尽量减少盲目的重复修改。

在修改代码之前,尽量考虑以下因素:

1.方法是否功能单一化。

类的每一个方法的功能应尽量保持清晰,功能不清晰的方法应尽量拆分为几个子方法。从维护的角度来看,功能清晰的方法远比功能庞大不清晰的方法容易维护,在局部功能发生变化时能够收窄修改范围。

2.类管辖的范围是否太大,有没有拆分可能。

一个类如果方法众多,通常需要考虑有没有拆分的可能,一个功能强大包罗万象的类总是令人头痛,远没有几个简单类组合实现简单灵活。

3.类有没有扩展的可能性。

一个具有功能扩展的类,应该考虑使用基类,把原始的固定的功能放在基类中实现,把可变化的功能通过重载在表现类中实现。

一个项目的可扩展的类越多通常意味着该项目的可持续开发性越好,生命周期长。

4.大而复杂的孤岛函数是否有封装成类的可能。

项目经理关注项目的开发进度,这个进度不光是完成了百分之几,而是做了哪些东西,增加了哪些东西,返回修改了哪些东西,还有哪些没有做。在增加和修改了很多额外的代码后,项目经理应该反省是否该暂时停止编码,整理已经完成的代码,重新设计程序,保证后期开发正常进行。

工作流程参考

一般原则:

1.       公共类和方法的修改需要得到大家的认可。

2.       代码与文档需要同步修改。

3.       文档修改需要及时入库并通告。

4.       代码和文档需要定期审查。

5.       bug的修改需要及时得到审查。

 

 


推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
菲呀菲呀飞呀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有