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

1.2 第四章 两人合作

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

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

2.1 博文评价:

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

2.2 项目克隆

克隆结对方项目源码到本地机器,阅读并测试运行代码


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

图2 idea运行eclipse项目

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

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


图3 动态规划法结果有误

2.3 代码核查表

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

2.4 仓库commit日志数据

结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据


图4 仓库fork记录

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

3.1.需求分析

  • 正确存储并读取数据
     - 将{0-1}KP 实例数据集存储在mysql数据库中,使用数据时从数据库读取实验数据文件的有效{0-1}KP数据;
  • 排序
      - 对任意一组{0-1}KP数据按重量比进行非递增排序
  • 算法求解
      - 用户自主选择贪心算法、动态规划算法、回溯算法,遗传算法求解指定{0-1} KP数据的最优解和求解时间(以秒为单位)
  • 保存结果
      - 将任意一组{0-1} KP数据的最优解、和解向量可保存为Excel表格
  • 保存日志数据
      - 可动态嵌入任何一个有效的{0-1}KP 实例求解算法,并保存算法实验日志数据
  • 实现人机交互界面为GUI界面
      - 通过Android Studio 构建APP框架的方式和web页面访问的方式实现人机交互界面
  • 绘制散点图
      - 对任意一组{0-1}KP数据绘制以重量为横轴、价值为纵轴的数据散点图
  • 用户登录界面(扩展部分)
      - 用户成功输入用户名、密码、验证码后即可使用app或进入web界面

3.2 功能设计与实现

3.2.1. 散点图绘制


图5 app散点图绘制
图6 web散点图绘制

3.2.2. 数据集存储数据库

{0-1}KP 实例数据集需存储在数据库


图7 app数据库数据读入
图8 web页面数据库数据读入
图9 web页面背包数据集查看

3.2.3. 求解算法,并保存日志数据

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


图10 app贪心算法求解
图11 web页面背包问题选择页面
图12 web动态规划法求解
图13 app日志纪录保存
图14 web页面日志查看

3.2.4. 遗传算法

遗传算法求解{0-1}KP


图15 app遗传算法求解

3.2.5. 注册页面


图16 app注册页面
图17 web注册页面

四、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

五、描述结对的过程,提供两人在讨论、细化和编程时的结对照片


图18 github仓库讨论

图19 互相询问进度

六、项目仓库

  1. 多次commit的记录

图20 commit记录
  1. src文件夹

图21 项目src文件夹
  1. Github项目仓库根目录下项目代码规范文档

图22 代码规范文档

七、小结

在上一次的项目设计中,结对双方使用高级语言不同,且之前的学习方向不同,所掌握的编程技术不同。为实现“领航员”与“驾驶员”角色的轮流切换,商议决定项目设计包含两部分:利用java语言实现app设计,利用Python语言实现html设计。其中app实现功能较为全面,但web页面设计功能并不全面,且web在路由跳转方面并没有做到很好。在本次结对编程实验中app显示——驾驶员为张圆圆,web设计中——驾驶员为姜婷。角色切换过程中,互相学习,互相监督,提高项目效率、代码质量。
通过这次的互相结对对程序编写的团体合作有了进一步的了解,熟悉了git在软件开发中的作用。但是这次我觉得我没能控制好个人情感,在结对开发过程中我对有些问题过于偏执,导致项目进程缓慢。之后我应该与队员之间好好交流,互相理解,做好沟通。在结对过程中能感受到1+1>2,这是一次很好的学习机会!

posted @ 2022-04-05 08:14  Jiokie  阅读(190)  评论(3)    收藏  举报