代码评审

《软件工程与计算(卷二)》-Chapter17-18-软件构造与代码设计

人走茶凉 提交于 2020-02-16 20:23:52
A级: 重构 :修改软件系统的严谨方法,它在 不改变 代码的 外部表现 的情况下 改进 其 内部结构 。 测试驱动开发 :编写代码之前 优先完成该段代码的测试代码 。 结对编程 : 两个程序员挨着坐 在一起 共同协作 进行 软件构造活动 。分为Driver(驾驶员)负责输入代码和Observer(观察员)进行评审。 软件构造 的主要活动: 详细设计 编程 测试 调试 代码 评审 :评审会议 集成 与 构建 构造管理 代码设计:(给定代码段示例,对其进行改进或者发现其中的问题) 易读性: 1)格式:使用缩进和对齐、将相关逻辑组织在一起、使用空行分割逻辑、语句分行。 2)变量命名:惯例和规则。 3)注释:文档注释,内部注释 易维护性: 1)小型任务:分解为多个高内聚、低耦合的小型任务。 2)复杂决策:使用布尔变量决策、有意义的名称来封装决策、表驱动编程。 3)数据使用:遍历与目的对应 4)明确依赖关系。 设计可靠的代码: 契约式设计 (断言式设计):前置条件满足,后置条件满足 异常 :代码开始执行判断前置条件,结束执行后判断后置条件,不符合抛出异常(throw)。 断言 :代码开始执行检查前置条件,结束执行后检查后置条件,不符合抛出异常(assert)。 防御式编程 : 外界发生错误,内部不受损害 。会增加复杂度降低易读性和性能,但是增加了可靠性。 使用辅助模型:决策表、伪代码、流程图

程序员十个糟糕的行为

*爱你&永不变心* 提交于 2020-02-16 05:02:20
字号: 大 中 小 1) 情绪化的思维 如果你开始使用不同颜色的眼光来看待这个世界的话,那么你可能会成为一个很糟糕的程序员。情绪化的思维或态度很有可能会把自己变成一个怪物。相信你经常可以看到很多很糟糕的程序会使用下面的这些语句: 我的程序不可能有这种问题。 Java就是shit。 我最恨的就是使用UML做设计。 需求怎么老在变,没办干了。 受不了这些人,他们到底懂不懂啊。 …… …… 这些带着情绪化的思维和态度,不但可以让你成为一个很糟糕的程序员,甚至可以影响你的前途。因为,情绪化通常都是魔鬼,会让你做出错误的判断和决定,错误码率的判断和决定直接决定了你的人生。 2) 怀疑别人 糟糕的程序总是说:“我的代码一定是正确的,我怀疑编译器有问题”,“我这应该没有问题吧,STL库怎么这么难用啊”。我曾经见过有程序员这样使用 STL类:map<char*, char*>,当他发现这样放入字符串后却取不出来,觉得那是STL库的BUG,然后自己写了一个map!我的天啊! 某些时候,过早的下结论是一个很不好的习惯,任何事情都有其原因,只有知道了原因,你才能知道是谁的问题。一般来说,总是自己出的问题。 3) 过多关注实现,陷入问题细节 有些时候,当我们面对一个问题或是一个需求的时候,糟糕的程序员总是会马上去找一个解决方案或是实现,这是一个很不好的习惯。设计模式告诉我们,“喜欢接口,而不是实现

结对编程-神奇的力量

末鹿安然 提交于 2020-02-14 17:40:04
《敏捷软件开发实践》之结对编程 还记得入职之前,HR跟我说,你面试的时候是.NET,不过根据现在公司项目的状况,你很可能会去做Java,你愿意么?我想了想,从来没写过实际的Java项目啊,Hello world也是好几年之前了,这能行么?但是我又很想得到这份工作,然后就说:Let me try。就这样,我这么一个.NET程序员就跑到Java Team打酱油去了。现在,半年快过去了,做了半年的基于SH架构的Java开发。从开始的经常用”==”比较Long,使用首字母大写命名package,到现在我甚至可以解答其他团队成员的Spring问题。Ok,这一切都是拜结对编程所赐,多么神奇的力量。 ThoughtWorks是一家完全贯彻敏捷实践的公司,除了给那些想采用敏捷软件开发的公司提供咨询外,公司自身的所有项目也都是采用敏捷实践的,即我们通过亲身实践,并指导大家实践。在公司,几乎所有的代码都是结对编写出来的,刚开始我一直质疑这种做法:用两个人去开发一个功能,这不是浪费客户的钱么?因为刚开始的时候自己挺小白,一直是作为一个旁观者(在结对编程里这个旁观者称为observer或navigator,不过这里很显然,我不是一个称职的navigator)看别人写代码(在结对编程里,这个写代码的人称为driver),所以也不好提出质疑,就想看看结对编程真的如书上所说那么神奇么。 经过一个迭代之后

远程办公避雷指南,提高工作效率就靠它了

限于喜欢 提交于 2020-02-13 01:58:29
转眼,大多数互联网企业远程办公已经一周半的时间了,很多互联网人发出了由衷的感叹:我要回公司上班。按照疫情发展,远程办公应该是接下来一个月内互联网公司的主要工作方式。那么。这一周半的远程办公大家踩了多少雷,是什么坚定了大家离开家的决心。下面,我们就围绕远程办公的几个问题,探讨一下如何避雷。 问题1、内网崩溃 远程办公第一天,公司内网连了10086 次,还是失败,最终研发团队第一天工作内容变成了寻找成功连上内网的方法。 问题2、办公工具满天飞 远程办公之后,相信大家都下载了各种功能不一的远程办公工具,许多产品研发团队本身的管理平台就非常分散,不同团队和个人使用工具不同,在项目管理和代码管理上耗费很多精力,效率较低。而远程办公时期,多种多样的工具使得信息同步也成了难题,工作效率再创新低。 问题3、成员工作量难统计 远程办公给了员工一定的自由,但随之而来的问题就是工作量无法考量,因此许多公司全程视频监控工作状态,早打卡,晚汇报,每小时汇报工作,远程办公变远程监控。开发人员的思路不断被这些繁琐的杂事打断,效果往往适得其反。 问题4、线上沟通,任务分配混乱 一些研发团队远程办公后,团队的任务分发、确认和实施都通过聊天群来进行。在聊天群中指派任务,每个成员的任务进度无法把控,全部靠自觉。办公室办公可以组织开会,现在只能疯狂@所有人,聊天群组中信息无法汇总即,很多关键信息被错过。 针对这些问题

Jenkins in OpenCASCADE

梦想的初衷 提交于 2020-02-11 23:06:52
Jenkins in OpenCASCADE eryar@163.com Abstract. Jenkins是一个开源软件项目,是基于Java开发的一个持续集成工具,用于监控持续复制的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 Key Words. OpenCASCADE, Jenkins 1.Introduction OpenCASCADE的开发代码量较大,如何确保程序的持续集成开发,保证质量,必须借助于工具了。像源码的管理使用了Git,Bug管理使用了Mantis Bug Tracker, 还使用了Jenkins: https://tracker.dev.opencascade.org/view.php?id=25609 关于Jenkins的功能介绍,以下内容转换自: http://www.cnblogs.com/clsn/p/7944116.html Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。 Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache

git+jenkins

老子叫甜甜 提交于 2020-02-11 22:51:48
开发写代码的演变 一个开发单打独斗,撸代码,开发网站,自由自在 多个开发同时开发一个网站,同时改一份代码。但是同时改一个文件会导致冲突 分支结构,每天上班第一件事克隆代码,下班前最后一件事合并代码 好景不长,开发越来越多,代码文件越来越多。每天下班前合并代码时,发现很多合并失败的文件。最后每天加班三小时人工合并代码。 解决方法:将合并代码的周期缩短,以前一天,现在一小时,半小时。。。 随时随地将代码合并,这种方法叫做持续集成。 持续集成 持续集成(CONTINUOUS INTEGRATION,简称CI) 持续集成指的是:频繁地(一天多次)将代码集成到主干。 它的处理好处主要有两个 快速发现错误。每完成一点更新,就集成到主干。可以快速发现错误,定位错误也比较容易。 防止分支大幅度偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,升值难以集成。 运维上线代码的演变 初级运维很苦逼,刚开始开发每天合并一次代码,然后运维把代码pull下来测试就可以了。 但是,后来开发引进了持续集成的方法论,开发们都“弹冠相庆”。 运维同学感觉好苦逼,一天到晚不停的测试代码 每天下班之后,运维拖着疲倦的身子回到宿舍,就想,有没有办法自动化? 初级运维请教了传说中的大神,知道了一种方法。 借助一个自动化的部署工具,叫JENKINS 开发上传自己的代码到gitlab

什么是验证?

荒凉一梦 提交于 2020-02-10 17:21:50
一、什么是验证? 比如,我们设计了一件shirt,我么要确认它的袖子是否一样长、尺寸和颜色是否是客户所需、扣子是否有缺损等,若都满足,则判定合格,这个过程就是验证。 二、我们进行验证,除了有验证计划,还需要构建测试平台。(DUT:被测器件) 三、为了直观的看到芯片验证在整个项目中的地位和作用,下面直接给出 芯片完整开发流程 。 1、新的芯片项目都是首先从市场人员与目标客户沟通开始的。这中间,市场人员会收集客户对于芯片的要求(主要包括功能、尺寸、功耗、性能),这些指标会被记录在 设计结构和产品文档 中去。 2、客户关心的系统层面的功能要求会被系统设计人员按照功能进一步划分为各个独立的子系统模块,这些子系统如果本身过于庞大,也会被进一步划分为功能模块,直到被划分的尺寸可以被小的设计团队进行硬件设计,并交付设计 功能描述文档 。 3、硬件工作人员将模块初步完成RTL级(寄存器级别,Register Transfer Level)的 硬件描述语言文件 。硬件设计人员一般会按照芯片的功能模块划分来分成不同的功能小组,同时系统设计人员的数目也会随着系统复杂程度的升高而增加。在硬件设计过程中,硬件设计工程师会将具体的功能描述文本通过逻辑翻译成为硬件描述语言(HDL,Hardware Description Language),目前使用广泛的HDL语言VHDL和Verilog均被各个大的EDA

第4周小组作业:WordCount优化

拈花ヽ惹草 提交于 2020-02-06 23:35:52
1.github地址 https://github.com/muzhailong/wcPro 2.填写PSP表格 PSP阶段 预计耗时(分钟) 实际耗时(分钟) 计划 10h 15h .估计这个任务需要时间 10h 15h 开发 9h 13h .需求分析(包括学习新技术) 5 20 .生成设计文档 15 30 .设计复审 10 15 .代码规范 10 10 .具体设计 7h 10 .具体编码 10 10h .代码复审 30 15 .测试 40 80 报告 1h 2h .测试报告 25 1.5h .计算工作量 15 10 .事后总结并提出改进计划 20 20 合计 10h 15h 3.描述代码设计思路 我们小组讲这个工程分成类7大模块: param:参数解析模块 in :输入模块 core :核心处理模块 out :输出模块 ui :图形界面模块 util :工具类模块 start: 模块集成模块 我主要负责的是输入模块、核心模块以及模块集成模块,各个模块如下图所示: in(输入模块): 功能:负责从指定文件中读取内容,并且为核心模块提供单词(next方法)。 实现:思路很简单,现将指定文件的所有内容读取到内存中去(preRead方法实现,比较简单不多说,这个地方可以有优化,后面再说),然后通过next方法解析单词,重点说一下next方法的实现

【巨杉数据库SequoiaDB】巨杉数据库无人值守智能自动化测试实践

让人想犯罪 __ 提交于 2020-02-04 11:55:33
刚刚过去的春节,新型冠状病毒疫情突如其来地横扫大江南北。为了响应国家号召,许多软件公司和互联网公司也将在较长一段时间内建议员工采取远程办公的方式,同时也存在骨干工程师无法及时返岗的问题,使得生产力大受影响。 对于软件企业来说,研发与测试是两大核心命脉。研发团队保障着产品新功能新特性的及时发布,而测试团队则如同马的缰绳,确保产品不会由于迭代速度过快、设计考虑角度不周,而导致软件缺陷的产生。 巨杉数据库在9年的自研和技术创新历程中,在研发体系构建、自动化测试、团队线上线下结合等方面积累了很多经验。从2011年团队成立之初开始,巨杉数据库的整个技术研发体系就以面向流程协作的方式进行构建。其核心思想是,任何员工可以在任何地点,只要遵循正确的流程,就可以与整个团队有机地衔接在一起。 在这个非常时刻,为了帮助在远程办公期间内保质保量完成新版本的迭代与测试工作,我们也将我们自己的一些经验分享给大家,主要介绍巨杉如何在无人值守的环境下,完成产品的自动化测试与研发协作。 基础体系 网络基础设施 我们的整个开发环境分为内外网两大网络,其中外部网络可以连接到广域网Internet,而内部网络则没有广域网连接。外网包括办公室中每个员工的台式机,以及可供员工进行远程连接的***服务器与防火墙。工程师们无论使用办公室的电脑,还是通过配发的笔记本电脑从远程通过***接入,均连入公司的外网网段。

【巨杉数据库SequoiaDB】巨杉数据库无人值守智能自动化测试实践

五迷三道 提交于 2020-02-04 01:47:30
刚刚过去的春节,新型冠状病毒疫情突如其来地横扫大江南北。为了响应国家号召,许多软件公司和互联网公司也将在较长一段时间内建议员工采取远程办公的方式,同时也存在骨干工程师无法及时返岗的问题,使得生产力大受影响。 对于软件企业来说,研发与测试是两大核心命脉。研发团队保障着产品新功能新特性的及时发布,而测试团队则如同马的缰绳,确保产品不会由于迭代速度过快、设计考虑角度不周,而导致软件缺陷的产生。 巨杉数据库在9年的自研和技术创新历程中,在研发体系构建、自动化测试、团队线上线下结合等方面积累了很多经验。从2011年团队成立之初开始,巨杉数据库的整个技术研发体系就以面向流程协作的方式进行构建。其核心思想是,任何员工可以在任何地点,只要遵循正确的流程,就可以与整个团队有机地衔接在一起。 在这个非常时刻,为了帮助在远程办公期间内保质保量完成新版本的迭代与测试工作,我们也将我们自己的一些经验分享给大家,主要介绍巨杉如何在无人值守的环境下,完成产品的自动化测试与研发协作。 基础体系 网络基础设施 我们的整个开发环境分为内外网两大网络,其中外部网络可以连接到广域网Internet,而内部网络则没有广域网连接。外网包括办公室中每个员工的台式机,以及可供员工进行远程连接的VPN服务器与防火墙。工程师们无论使用办公室的电脑,还是通过配发的笔记本电脑从远程通过VPN接入,均连入公司的外网网段。