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

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

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

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

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

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

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

设计的粒度控制

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

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

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

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

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

编码过程控制

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

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

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

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

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

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

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

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

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

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

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

工作流程参考

一般原则:

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

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

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

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

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

 

 


推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
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社区 版权所有