20162317袁逸灏 第十二周实验报告:实验三

时间:2021-04-18 08:03:38

20162317袁逸灏 第十二周实验报告:实验三 敏捷开发与XP实践

实验内容

  • 敏捷开发与XP基础
  • 实验二的回顾:Junit测试类
  • 重构
  • Java中的密码学算法

实验要求

  • (1)了解与认识XP
  • (2)根据搭档的Complex代码建立进行不少于三项的Junit测试
  • (3)学会重构并对搭档的代码进行重构
  • (4)学习在Java中的密码学算法

实验过程

(1)了解与认识XP

    老师给我们关于敏捷开发与XP基础的链接,根据链接来学习敏捷开发以及XP基础。其中还包括了规范代码的要求。

(2)Junit测试

    根据搭档的Complex代码建立进行不少于三项的Junit测试。我搭档20162315马军的复数类中包括对复数的建立,复数的四则运算。我根据他现有的方法对代码的复数四则运算进行了测试,并提交了实验成果。

(3)学会重构

    学会重构并尝试链接中提供的重构功能,其后对搭档的代码进行重构,在一方面简化、通用化搭档的代码,另一方面自己去挖掘重构的更多功能并能够熟悉使用。

(4)密码学算法

    与搭档结队去学习其中的密码学算法,并提交学习成果。

    在这次的实验中,我们并没有被要求深究其算法以及原理,只是简单体验一下,经过学习大概的工作流程是这样:

生成密钥:获取密钥生成器--->初始化密钥生成器--->生成密钥
--->通过对象序列化方式将密钥保存在文件中

获取密钥:获取密钥(读取)--->获取主要编码格式---> 保存密钥编码格式

加密:从文件中获取密钥--->创建密码器--->初始化密码器--->获取等待加密的明文---> 执行加密--->处理加密结果

解密:获取密文---> 获取密钥--->创建密码器--->初始化密码器--->执行解密

实验知识点

  • 敏捷开发

    敏捷开发:是一种以人为核心、迭代、循序渐进的开发方法。通俗地说就是首先要为客户的需求着想,程序的设计目的在于实现使用者的需求,实现了使用者的需求才能算得上是一个成功的程序。因此,这也要求了我们开发的程序要能够顺利运行,灵活运行。然而,光是满足不够,我们还要学会与客户合作,造就双赢的局面。此外,开发程序是一个过程,难免会出现一些变化赶不上计划,那就要求程序员学会灵活变通,将计划给细化,在限定的短期内达到预期的效果的一部分,这样可以==提高工作的质量以及效率==。

  • XP

    XP即极限编程,是一种全新而快捷的软件开发方法。使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流,相当于开一个==小型发布会==,将未能完全完善的程序提供给当场的客户试用,是合作的一种形式。客户通过试用能够发现程序不足的地方,而程序员也能够更好地理解客户对产品程序的需求或自己的程序不够完善的地方,这样一来,能够提高程序的含金量,实现客户和程序员双赢的局面。

  • 如何规范代码的格式。

    有关规范代码格式的参考资料

    Junit测试类是实验二中TDD开发模式中提及的一种有效测试代码的办法。测试者会对要测试的类新建一个测试类,若测试者假设的条件与结果能够实现,则IDEA中会有绿条出现如:【截图1】

反则出现红条【截图2】

  • 重构

    重构就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 其中包括重命名、生成setter与getter、生成toString方法等一系列有用的方法,是在编程中经常用到的功能,用重构能够大大减少重复代码,它一键生成方法以及一键修改变量等效果更加能够提高编程的效率。

  • 密码学算法

    密码学与我们的专业息息相关。鉴于我们是信息管理与信息系统专业,今后很大几率为电子政务系统,所以传统的密码学我们在Java中也要进行学习。

    Java中KeyGenerator类中提供了创建对称密钥的方法。Java中的类一般使用new操作符通过构造器创建对象,但KeyGenerator类不是这样,它预定义了一个静态方法getInstance( ),通过它获得KeyGenerator类型的对象。该方法还能实现当今电子密码中“Blowfish”、“DES”、“DESede”、“HmacMD5”或“HmacSHA1”等算法。通过这些方法能够实现==对称密码==(在加密和解密时使用同一密钥的方式)以及==公钥密码==(在加密和解密时使用不同密钥的方式),更厉害的能够实现当今的主流加解密方式——==混合密码系统==(将对称密码和公钥密码结合起来的密码方式称为混合密码系统)

  • 序列化

    序列化就是将一个对象的各个属性保存起来。

    序列化分两大部分:序列化反序列化。序列化就是将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流重构对象。

实验感悟

    这次实验的专业性高了很多,从而提高了实验的难度。但是,老师让我们的结队可以说使得编程的过程轻松了不少。结队可以分工合作,遇到意见相左还能两个人思维碰撞,从而得到性价比更高的解决方案。除了结队外,难度逐渐提高的实验也让我认识到了成为一名程序员要面对的困难,更能看出专业知识的重要性,除了认识专业知识的重要性外还要认识到对专业知识的灵活应用。在做的过程中,很多学过的方法要不就是忘了,要不就是不知该怎么用。问题是提出来了,当然就要去解决,正如平常我在博客里写的,还得是课下多练习,多实践,在做中学到方法,学到技巧,这样水平才能有所提升。