• 20155337 《Java程序设计》实验三(敏捷开发与XP实践)实验报告


    20155337 《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    实验内容

    1. XP基础

    2. XP核心实践

    3. 相关工具

    实验要求

    1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

    2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

    1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    实验步骤

    (一)敏捷开发与XP

    软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

    敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。敏捷开发包括很多模式:

    其中,极限编程(eXtreme Programming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流。

    XP是以开发符合客户需要的软件为目标而产生的一种方法论;XP是一种以实践为基础的软件工程过程和思想;XP认为代码质量的重要程度超出人们一般所认为的程度;XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件。

    一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈、假设简单性、递增更改、提倡更改、优质工作。XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。
    我们关注其中的编码标准,结对编程,代码集体所有,测试,重构等实践。上次实验已经讲过TDD,通过学习这些实践,可以形成以测试为核心的开发流程:

    敏捷可以作为一种做事的方式,掌握好的在以后的工作中也会受益无穷。

    实验一的代码截图

    (二)编码标准

    代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:

    • 要体现各自的含义
    • 包、类、变量用名词
    • 方法名用动宾
    • 包名全部小写,如:io,awt
    • 类名第一个字母要大写,如:HelloWorldApp
    • 变量名第一个字母要小写,如:userName
    • 方法名第一个字母要小写:setName
    • ...

    标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名,用词要准确例如“当前值”应该起名currentValue,写成nowValue就不准确了,但还凑合,写成dqz(dang qian zhi 首字母)就是笑话了。

    标识符的长度“min-length && max-information”的原则,比如:maxVal 比 maxValueUntilOverflow要好些,可以通过去元音法把变量名变短,如returnValue->rtnVal ,message->msg;一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。

    关于代码标准,可以遵循以下原则:

    (三)结对编程

    结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。

    结对编程中有两个角色:

    驾驶员(Driver)是控制键盘输入的人。写设计文档,进行编码和单元测试等XP开发流程。
    领航员(Navigator)起到领航、提醒的作用。审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。

    驾驶员和领航员不断轮换角色,不要连续工作超过一小时。领航员要控制时间。任何一个任务都首先是两个人的责任,也是所有人的责任。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。

    (四)版本控制

    XP的集体所有制意味着每个人都对所有的代码负责;这一点,反过来又意味着每个人都可以更改代码的任意部分。

    版本控制(Version Control)的好处:

    • 版本控制提供项目级的 undo(撤销) 功能。
    • 版本控制允许多人在同一代码上工作, -
    • 只要遵守一定的控制原则就行。
    • 版本控制系统还支持在主线上开发的同时发布多个软件版本。
    • 版本控制也是项目级的时间机器,你可以选择任何一个时间, - 精确地查看项目在当时的情况。

    流行的版本控制工具有CVS,SVN,Git等,Git是Linus除了Linux操作系统外的另外一个重要发明。

    git命令上传代码:

    $ cd /home/shiyanlou/Code/shiyanlou_cs212
    # 修改代码文件
    # 添加修改文件
    $ git add 所有修改的文件
    # 提交到环境中本地代码仓库
    $ git commit -m '本次修改的描述'
    # push到git.shiyanlou.com,无需输入密码
    $ git push
    

    实验2代码截图

    (五)重构

    重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。
    我们要修改软件,万变不离其宗,无非就是四种动机:

    • 增加新功能;
    • 原有功能有BUG;
    • 改善原有程序的结构;
    • 优化原有系统的性能 。

    第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求。软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度。它涉及到一个企业、一个软件的信誉度与生命力,因此为所有软件企业所高度重视。要提高软件内部质量,毫无疑问就是软件修改的第三个动机:改善原有程序的结构。它的价值是隐性的,并不体现在某一次或两次开发中,而是逐渐体现在日后长期维护的软件过程中。
    高质量的软件,可以保证开发人员(即使是新手)能够轻易看懂软件代码,能够保证日后的每一次软件维护都可以轻易地完成(不论软件经历了多少次变更,维护了多少年),能够保证日后的每一次需求变更都能够轻易地进行(而不是伤筋动骨地大动)。要做到这几点其实并不容易,它需要我们持续不断地对系统内部质量进行优化与改进。这,就是系统重构的价值。

    实验3代码截图

    (六) 密码学

    密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支。 编码学与分析学相互促
    进, 又相互制约。 一方面, 两者在加强密码分析的安全上相互促进; 另一方面,两者在实施更为有效的攻击方面也相互影响。

    • 密码编码学: 主要研究如何对信息进行编码, 如何实现对信息的隐蔽, 是密码学理论的基础, 也是保密系统设计的基础。
    • 密码分析学: 主要研究加密消息的破译或消息的伪造, 是检验密码体制安全性最为直接的手段, 只有通过实际密码分析考验的密码体制,才是真正可用的。
      密码学并不是孤立存在的, 它需要有一个环境——保密通信模型。密码学的目的在于确保信息的保密传送。 通常这样理解这层含义: 信息的发送者和接收者在不安全的信道上进行通信,而破译者不能理解他们通信的内容。 用保密通信模型来诠释这种信息传送方式, 如下图所示:

    (七)Java与密码学

    Java安全体系结构总共分为4个部分:

    JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。
    JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中
    JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。
    JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。

    实验4代码截图

    我学习的是java与密码DES算法的模块

    PSP(Personal Software Process)时间

    步骤 耗时 百分比
    需求 20 10%
    设计 40 20%
    代码实现 80 40%
    测试 30 15%
    分析总结 30 15%
  • 相关阅读:
    docker学习
    redis哨兵部署
    HUE中一些重要元数据表的DDL整理
    Autosys中ON_HOLD和ON_ICE的区别
    Spark结构化API的执行过程——Logical Plan & Physical Plan
    关于Spark中Columns的引用方法
    关于Spark Dataset API中的Typed transformations和Untyped transformations
    关于Kafka Consumer 与 Partitions
    使用sed根据变量值注释掉文件中相匹配的记录行
    sqoop export to teradata时出现java.lang.NullPointerException
  • 原文地址:https://www.cnblogs.com/Twe1vE/p/6816543.html
Copyright © 2020-2023  润新知