如何快速理清大型项目业务逻辑

引言

本篇文章为了探讨如何快速上手一个大型项目。针对经验尚浅需要快速接手一个项目的开发人员。

当他们拿到一个大型程序后,他们便开始一句一句的阅读分析,夜以继日,悬梁刺股。可结果依然不理想,往往进入以下状态:

1、花费了很长时间,也没有多大进展,与当时预计的日期相差甚远。

2、由于周期较长,他们往往在重复阅读分析最初的极小部分。就像有的童鞋读书一样,几个月前读的是前两章,几个月后还是那两章,原地踏步。

3、他们没法弄清程序的结构,云里雾里,看不清前方的路,也记不住走过的路。久而久之便形成胆怯心理,当接手一个新功能后,在士气上已经失败了,渐渐地丢了那股初出茅庐时的勇气。

这样的状态对他们产生极负面的影响:

其一,任务不能如期完成,导致成本一再飙升;其二,不便于他们能力的提升,因为要能力提升往往需要去更多的研究他们实现的系统或优秀的开源项目。

解决办法

以下是如何快速理清程序脉络,业务流程的方法建议:

1、搭环境、跑代码

当你拿到一个程序后,即使你不看代码,通过交接人的介绍、项目经理的介绍、其他同事的介绍,也应该知道它是干什么的。然后,知道了大致功能后,把环境建立起来,想办法让程序运行一遍。在一般情况下,要做到这一点不难。

为什么推荐首先运行程序呢?因为建立好的运行环境,一方面可以初步验证一下此程序的功能,以及正确性完整性;另一方面方便接下来的分析调试,为断电调试和日志调试提供了可能。

2、掌握程序的结构

如果是开源项目,那就想办法找到作者提供的WiKi设计说明等。

如果是企业内部开发项目,则一般都会有完整的文档,不要舍弃文档阅读代码,这样一定没有什么好果子吃,其实程序都是在试图对业务流程进行“代码解释”,即将业务流程转化为if-else,尊重文档的作用至关重要。

3、先整体,再局部

整体是相对的,所以,我们以相对的整体来说,将大致的整体逻辑理清,再去研究细节实现。

不要一开始便逐字逐句的阅读代码,这种方法是最低效。这些童鞋往往是先了解各个点,再将点串也线,线串也面。他们直到最后也不一定看清楚程序的真面目,或经过几个月才豁然开朗。整个过程如地狱般煎熬。

而推荐的方法是:先整体再局部,先平面再线点。这样不仅更高效,而且轻松。

4、大胆猜想,小心求证

在阅读程序的过程中,我们往往对某一处或几处逻辑不肯定,可能是这样,也可能是那样。

当处在这种状态下,我们往往不知道如何选择,停滞不前。

其实这个时候不需要顾虑太多,大胆猜想,将自己的假设带入到逻辑分析中去,看看是否可以得到验证。那么需要注意的就是,需要保持一个客观的角度去验证我们的猜想,此时也需要小心谨慎避免过度猜想,以免走偏。

5、调试程序

我们可以通过断电调试和日志调试来进行代码逻辑的追踪,或日志分析。

关于日志分析,我需要多说两句,如果一上来就看日志的话,我认为是非常糟糕的方式,如果在测试的情况下日志会变得非常混乱。建议先掌握业务逻辑,根据业务逻辑文档,慢慢的把实现与业务逻辑对应起来,顺便通过日志分析来完成理清业务逻辑的目的

6、熟悉关键表

数据的存储是应用程序的根本,不论什么项目,都需要与数据库打交道。

对于关键表的结构、字段含义、业务流程中涉及到的相关表操作等等,都应该在前期快速掌握,建议先刻意的记忆,能达到比较熟练的查询业务中需要的数据的效果。这在加速熟练业务方面大有裨益

7、适当的背一背关键业务流程

如果项目比较正规,且有相关的UML流程图,一定要打印出来,在进行实现-需求对照过程的时候,一定要手拿流程图去熟悉业务流程。把关键的流程,或者分配给你的业务流程记在心里。

有人可能会疑惑,为什么要背业务流程?这是因为,从个人的经验来看,前期如果能够快速的记住流程和步骤,能够对后期熟悉业务有非常大的好处。不要抵触记忆流程的方法,因为代码的实现者在实现的过程中一定是不断的去思考业务流程的,所以实现者一定能够清楚的记忆流程中的每个细节。所以,看别人的代码一定要先做到流程在心中、代码似亲生。花点时间背一背流程图,绝对有好处!

终极奥义:百度

如果进入一个新的业务领域,相关的知识不懂就百度百度。

鸣谢

《如何快速看懂一个大型程序》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

权限验证框架Shiro

权限验证框架Shiro: Shiro简介 什么是Shiro: shiro是一个强大易用的Java安全框架,提供了认证,授权,加密,回话管理等功能; 认证(Authentication):用户身份识别…

Linux——less指令常用操作

引言 对于生产环境、测试环境中的日志文件,我们可以通过less指令来进行查看并通过关键字进行查找。less命令的含义是:分屏查看文件内容。 它要比more命令更加强大,less在显示文件内容时,并不是一次将整个文件加载之后才显示&…

Mybatis从入门到精通上篇

Mybatis从入门到精通上篇: 学习过的持久层框架:DBUtils , Hibernate Mybatis就是类似于hibernate的orm持久层框架。 Mybatis介绍: Mybatis是面向sql的持久层框架,他封装了jdbc访问数据库的过程,我们开发,只…

Eclipse使用————Working Set工作集

引言 经常看到在设置项目的时候,如导入项目,新建项目等看到对话框的下方有一个“add to working set”复选框,为了弄清这个working set,我们就来好好了解一下Eclipse 的working set功能。 Working Set? Eclipse中通…

Mybatis从入门到精通下篇

Mybatis从入门到精通下篇: 输入类型: 输出类型: ResultMap: 动态sql: if标签: where标签: sql片段: foreach标签: 关联查询: 以订单作为主体: 一…

爱上进制转换练习

引言 对于可能接触到通讯行业或是物联网的开发工作者,一般会面对十进制、二进制、十六进制的转换工作,不仅仅是体现在代码上,有时候也需要用肉眼来进行快速的转化,以获取协议指令中的信息。 今天通过简单的整理,特此…

Sprint Boot————@Qualifier、@Primary

引言 使用Autowired自动注入时: 如果注入的接口有多个实现类,如下所示: 那么如果不指定具体是哪个实现类的Bean,在Spring Boot启动时就会发生异常(下图请点击查看): 异常的描述信息非常简单&am…

SpringMVC教程上篇

SpringMVC教程上篇 SpringMVC优势: SpringMVC代码执行流程: 框架结构: 架构流程: 组件说明: SpringMVC与Mybatis整合 ! 效果: 开发流程:

Eclipse使用————生成Get/Set、toString快捷键(不使用鼠标)

引言 除了鼠标右键空白处—>source选择我们需要的操作之外是否还有更快捷的不需要鼠标的操作呢? 如何快速的通过键盘来生成get、set方法?如何快速的通过键盘生成toString方法?如何快速的通过键盘生成需要实现的父类方法呢? …

SpringMVC教程下篇

SpringMVC教程下篇 内容包括: 绑定数组: 将表单数据绑定到list: RequestMapping注解的三种用法: Controller方法返回值: 乱码问题总结 异常处理: 照片上传: RESTFUL支持&#xff…

Spring Boot面试杀手锏————自动配置原理

引言 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框架。 当然,作为Spring Boot的精髓…

为什么要坚持写博客

引言 断断续续地写博客已经有一段时间了,作为一个Java中级开发工程师,工作了三年多也算渐渐入了门。不得不说,博客给我的改变是非常大的,那么作为一个技术人员,为什么我觉得必须要坚持写博客?下面&#xf…

Spring Boot——@ConfigurationProperties与@Value的区别

引言 Spring Boot从配置文件中取值的方式有两种,一种是批量注入ConfigurationProperties,另一种是单独注入Value。 它们之间除了批量与单独取值的区别之外,还存在着其他一些使用方式,本篇博客将详细讲解这两种注解之间的区别和使…

Spring Boot —— YAML配置文件

引言 首先,YAML并不是仅仅可以使用在Java项目中,它是一种类似于json结构的标记语言,可以为所有的编程语言服务。它强调更直观的层级表示,比较适合描述配置文件中的层级关系。 Spring Boot可以识别后缀名为".properties&quo…

centos7下docker启动失败解决

centos7下docker启动失败解决 docker安装成功却启动失败,查看docker服务,systemctl status docker.service, 服务日志提示Failed to start Docker Application Container Engine.如下图所示: 解决方法,修改docker文件&#xff0…

Java并发编程实战————Semaphore信号量的使用浅析

引言 本篇博客讲解《Java并发编程实战》中的同步工具类:信号量 的使用和理解。 从概念、含义入手,突出重点,配以代码实例及讲解,并以生活中的案例做类比加强记忆。 什么是信号量 Java中的同步工具类信号量即计数信号量&#x…

Effective Java(一)———— 代替构造器和Setter的构建器模式

引言 Java语言中的一部经典著作《Effective Java》,里面涵盖了78条我们应该熟练的Java编程技巧。 本篇博客是该书学习的系列笔记第一篇。本系列博客不会与书中的78条建议完全匹配。只是以一种读者的身份来记录和总结从书中得到的好的编程建议,博客中会…

LeetCode算法入门- Palindrome Number-day2

LeetCode算法入门- Palindrome Number-day2 Palindrome Number Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward. Example 1: Input: 121 Output: true Example 2: Input: -121 Output: false Ex…

JavaCard概述

什么是JavaCard JavaCard,即Java智能卡。以智能卡硬件系统为基础,通过软件的方式构造一个支持Java程序下载、安装、运行的软/硬件系统。由于引入了虚拟机技术,JavaCard具备硬件无关性,即智能卡应用程序开发与智能卡硬件系统相分离…

LeetCode算法入门- Add Two Numbers-day3

LeetCode算法入门- Add Two Numbers-day3 Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return …