编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至能够保证其中的错误更少。编程标准包含:具备说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。 编码标准中的版式就是一个很好的例子,版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要因素。html
--娄老师《敏捷开发与XP实践》java
咱们常见的是这样的代码:git
public class CodeStandard { public static void main(String [] args){ StringBuffer buffer = new StringBuffer(); buffer.append('S'); buffer.append("tringBuffer"); System.out.println(buffer.charAt(1)); System.out.println(buffer.capacity()); System.out.println(buffer.indexOf("tring")); System.out.println("buffer = " + buffer.toString()); if(buffer.capacity()<20) buffer.append("1234567"); for(int i=0; i<buffer.length();i++) System.out.println(buffer.charAt(i)); } }
程序没有最基本的缩进,让人读起来很费劲,可是在IDEA中利用插件能够轻松解决:程序员
Settings
->Plugins
-> Browse repositories...
alibaba
便可看到Alibaba Java Code Guidelines
插件,点击Install
进行安装,而后重启IDE生效:代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可让本身的代码立立刻升一个档次。Java中的通常的命名规则有:算法
io
,awt
HelloWorldApp
userName
setName
Code
选项,选择Reformate Code
功能,便可格式化代码Code
菜单,现将基本功能总结以下:
Override Methods(Ctrl+O)
:重载基本类的方法;Implement Methods(Ctrl+I)
:完成当前类接口或者抽象基本类的接口的方法;Generate(Alt+Insert)
:建立类里面任何字段的 getter 与 setter 方法;Surround With(Ctrl+Alt+T)
:使用if-else
、try-catch
、do-while
等包装代码段;Insert Live Template(Ctrl+J)
:执行一些记不起来的 Live Template
缩写;Comment with Line Comment(Ctrl+斜杠)
:注释(或反注释)当前行或者选择地代码块;Comment with Block Comment(Ctrl+Shift+斜杠)
:用块注释标记(“ /* */”)把所选块包围起来Reformat Code(Ctrl+Alt+L)
:将代码按标准格式缩进;Move Statement Up/Down
:向上/向下移动代码语句;Move Line Up/Down
:向上/向下移动光标所在行结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工做。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一块儿工做。他们一块儿分析,一块儿设计,一块儿写测试用例,一块儿编码,一块儿作单元测试,一块儿作集成测试,一块儿写文档等。 结对编程中有两个角色:编程
- 驾驶员(Driver)是控制键盘输入的人。
- 领航员(Navigator)起到领航、提醒的做用。
如何结对编程,为什么要结对编程,你们参考一下结对编程和两人合做 ,重点是:安全
- 驾驶员:写设计文档,进行编码和单元测试等XP开发流程;
- 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否须要和如何重构;帮助驾驶员解决具体的技术问题;
- 驾驶员和领航员不断轮换角色,不要连续工做超过一小时,每工做一小时休息15分钟。领航员要控制时间;
- 主动参与。任何一个任务都首先是两我的的责任,也是全部人的责任。没有“个人代码”、“你的代码”或“他/她的代码”,只有“咱们的代码”;
- 只有水平上的差距,没有级别上的差别。两人结对,尽管可能你们的级别资历不一样,但无论在分析、设计或编码上,双方都拥有平等的决策权利。
--娄老师《敏捷开发与XP实践》网络
管理
,进入后选择项目成员管理
,将搭档加入本身的项目Complex
代码以下:Git
选项选择链接搭档的代码,下载后对照Complex
代码写出很多于三个Junit测试类getRealPart()
、getImagePart()
、Add()
、Sub()
、Multi()
、Div()
,将测试代码上传到搭档码云上重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变动 。app
--娄老师《敏捷开发与XP实践》框架
重构中一个很是关键的前提就是“不改变软件外部行为”,它保证了咱们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。
咱们要修改软件,万变不离其宗,无非就是四种动机:
须要重构的代码有哪些呢?
IDEA提供的重构功能在Refactor
选项中:
一个完整的重构流程包括:
Check out code
bad smell
Refactoring
Unit Tests
Check in code
Rational
代码Java安全体系结构总共分为4个部分:
Java密码学算法:
和搭档对各类算法进行学习研究后,咱们选择了MD5
算法:
使用Java计算指定字符串的消息摘要,java.security
包中的MessageDigest
类提供了计算消息摘要的方法
首先生成对象,执行其update()
方法能够将原始数据传递给该对象,而后执行其digest( )
方法便可获得消息摘要。具体步骤以下:
MessageDigest
对象:MessageDigest m=MessageDigest.getInstance("MD5");
m.update(x.getBytes("UTF8" ));
byte s[ ]=m.digest( );
String result=""; for (int i=0; i<s.length; i++){ result+=Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6); }
编写代码以下:
产品代码:
import java.io.UnsupportedEncodingException; import java.security.*; public class MD5Encrypt { public static void main(String args[]) throws Exception { String originalStr = args[0]; MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } try { m.update(originalStr.getBytes("UTF8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } byte byteStr[] = m.digest(); GetResult getResult = new GetResult(); for (int i = 0; i < byteStr.length; i++) { getResult.result += Integer.toHexString((0x000000ff & byteStr[i]) | 0xffffff00).substring(6); } } public static class GetResult { String result = ""; } }
/*测试输入输出*/ String str = new String(originalStr); System.out.println("明文:" + str); System.out.println("密文:" + getResult.result);
解决过程: 通过询问同窗,知道了应该在本身项目的管理中邀请搭档成为该项目成员的开发者:
解决过程: 通过对重构的仔细学习和对搭档代码的认真检查,仍是找到了几处须要重构的地方:
我经过本次实验学会了如何规范、格式化代码,如何将搭档加入本身的码云项目并进行合做编写代码,如何重构以及Java密码学相关知识。
在本身上手实践操做过程当中,加深了对平时不清楚的知识点的理解,也掌握了重构等新知识点。此次实验是第一次真正意义上的“结对编程”,让我深入体会到了“众人拾柴火焰高”这句真理,实时观测搭档的代码使得编程效率大大提升。
步骤 | 耗时 | 百分比 |
---|---|---|
步骤 | 耗时 | 百分比 |
需求分析 | 30min | 19% |
设计 | 30min | 19% |
代码实现 | 60min | 38% |
测试 | 10min | 6% |
分析总结 | 30min | 18% |