Java教程

201971010116-姜婷 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告

本文主要是介绍201971010116-姜婷 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目 内容
课程班级博客链接 2022年春软件工程课程班(2019级计算机科学与技术)
这个作业要求链接 实验三 软件工程结对项目
本次课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
2.掌握Github协作开发软件的操作方法。
这个作业在哪些方面帮助我实现学习目标 1. 利用git第一次实现了协作开发,感觉不错
2. 结对编程,完成了更多的内容
3. 对自己的代码规范有了更多的启发和反省
结对方学号-姓名 201971010259-张圆圆
结对方本次博客作业链接 201971010259-张圆圆 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告
本项目Github的仓库链接地址 Knapsack-0-1

一、任务1 阅读《现代软件工程—构建之法》第3-4章内容

第三章 软件工程师的成长

  1. 软件工程师如何成长?
  • 积累软件开发相关知识
  • 积累问题领域的知识和经验
  • 对通用的软件设计思想和软件工程思想的理解。
  • 提升职业技能
  • 实际成果
  1. 软件开发的工作量和质量怎么衡量?
  • 项目/任务有多大
  • 花了多长时间
  • 质量如何
  • 是否按时交付
  1. TSP对团队成员的要求:
  • 交流
  • 说到做到
  • 接受团队赋予的角色并按角色要求工作
  • 全力投入团队的活动
  • 按照团队流程的要求工作
  • 做好准备工作
  • 理性的工作
  1. 软件工程师的思维误区:
  • 分析麻痹
  • 不分主次,相解决所有的依赖问题
  • 过早优化,无视这个模块对全局的重要性
  • 过早扩大化/泛化
    解决大问题固然让人感觉美妙,但是把小问题真正解决好,也不容易

第四章 两人合作

  1. 代码规范分为两部分
  • 代码风格规范
    • 代码风格的原则是:简明、易读、无二义性。Tab键在不同的情况下会显示不同的长度,严重干扰阅读体验。
  • 代码设计规范
    • 函数原则:只做一件事,并且要做好。
  1. 代码复审的定义:看代码是否在代码规范的框架内正确地解决了问题。

二、任务2 两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价

  1. 结对方博客链接:201971010259-张圆圆 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告
  2. 结对方Github项目仓库链接:Knapsack-0-1
  3. 博文评价:
    博客的结构很完整,每个部分都写的很棒,是学习和借鉴的目标。内容充实,书写认真,能从其中看出仔细认真的态度,是值得学习临摹的一篇博客。整个页面美化也很到位,看起来丰富多彩,目录的设置也使得跳转观看更方便。
  • 博文结构:结构清晰完整,每个部分都写得很清楚,把握了每个细节。
  • 博文内容:从开始到结尾每一部分都完成了博客要求。整个项目也实现了所有需求,代码结构完整,运行逻辑清楚。
  • 博文结构与PSP中“任务内容”列的关系:博客的内容几乎与PSP内容对应。
  • PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究:第一次做项目,对项目流程还不熟悉,不能对自己的时间做到合理把握,也不够了解自己现在的能力导致时间规划不够准确。
  1. 克隆结对方项目源码到本地机器,阅读并测试运行代码

图4 clone结对方实验二项目 结对方实现了全部功能,完成度非常高。但是我们双方使用的java编译环境不同,导致项目克隆后,选择用idea启动对方的eclipse项目,无法正常编译运行,于是选择使用终端运行。
// 终端编译运行
javac Main.java
java Main

图1 idea运行eclipse项目

项目中动态规划法输出结果不正确。在运行过程中发现,由于编写了绝对地址导致在编译错误。在编程过程中应当减少绝对地址的使用以提高代码的可移植性。

String filePath = "D:\\2021-2022\\大三下\\软件工程经济\\Git\\0-1\\0-1-knapsack\\res\\beibao"+fileId+".in";


图2 动态规划法结果有误

代码核查表

项目内容
概要部分 代码符合需求和规格说明么?
代码设计是否考虑周全?
代码可读性如何? 较好
代码容易维护么?
代码的每一行都执行并检查过了吗?
设计规范部分 设计是否遵从已知的设计模式或项目中常用的模式?
有没有硬编码或字符串/数字等存在?
代码有没有依赖于某一平台,是否会影响将来的移植? 依赖eclipse开发环境,无法在idea中运行
开发者新写的代码是否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以通过调用而不用全部重新实现?
有没有无用的代码可以清除? 有很多重复性的代码
代码规范部分 修改的部分符合代码标准和风格么? 符合
具体代码部分 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
参数传递有无错误,字符串的长度是字节的长度还是字符的长度,是从0开始计数还是从1开始计数 无错误,字符长度,从0开始计数
边界条件是如何处理的?switch语句和default分支是如何处理的?循环有没有可能出现死循环? 没有死循环
有没有使用断言来保证我们认为不变的条件真的得到满足? 没有
对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄露?有没有优化的空间? 有可能,存在优化空间
数据结构中有没有用不到的元素?
效能 代码的效能如何?最坏的情况是怎么样的?
代码中,特别是循环中是否有明显可优化的部分?
对于系统和网络的调用是否会超时?如何处理?
可读性 代码可读性如何?有没有足够的注释?
可测试性能 代码是否需要更新或创建新的单元测试?
  1. 结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据

三、任务3 采用两人结对编程方式,设计开发一款{0-1}KP 实例数据集算法实验平台

  1. 散点图绘制
  2. {0-1}KP 实例数据集需存储在数据库

图3 数据库数据读入
图4 web页面数据查看
  1. 人机交互界面要求为WEB页面平台可动态嵌入任何一个有效的{0-1}KP 实例求解算法,并保存算法实验日志数据

图5 背包算法选择求解页面
图6日志查看页面
  1. 遗传算法求解{0-1}KP
  2. 注册页面

图1 app注册页面 ##PSP消耗时间
PSP2.1 任务内容 计划共完成需要的时间(h) 实际完成需要的时间(h)
Planning 计划 2 4
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 1 3
Development 开发 120(5天) 216(9天)
Analysis 需求分析(包括学习新技术) 3 10
Design Spec 生产设计文档 2 1.5
Design Review 设计复审(和同事审核设计文档) 5 5
Coding Standard 代码规范(为目前的开发指定合适的规范) 0.5 0.58
Design 具体设计 2 2
Coding 具体编码 72 96
Code Review 代码复审 40 5
Test 测试(自我测试,修改代码,提交修改) 12 15
Reporting 报告 3 6
Test Report 测试报告 1 1
Size Measurement 计算工作量 1 1
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 0.5 0.5

四、汉堡包法实施项目结对中两人的沟通

五、轮流切换领航员和驾驶员两种角色关系

在上一次的项目设计中,结对双方使用高级语言不同,且之前的学习方向不同,所掌握的编程技术不同。为实现“领航员”与“驾驶员”角色的切换,商议决定项目设计包含两部分:利用java语言实现app设计,利用Python语言实现html设计。其中app实现功能较为全面,但web页面设计功能并不全面,且web在路由跳转方面并没有做到很好。在本次结对编程实验中app显示——驾驶员为张圆圆,web设计中——驾驶员为姜婷。角色切换过程中,互相学习,互相监督,提高项目效率、代码质量。

六、项目仓库

  1. 多次commit的记录

  2. src文件夹

  3. Github项目仓库根目录下项目代码规范文档

七、程序功能评测

这篇关于201971010116-姜婷 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!