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,这是一次很好的学习机会!

本文作者:Jiokie

本文链接:https://www.cnblogs.com/Jiokie/p/16089877.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Jiokie  阅读(139)  评论(3编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 极恶都市 夏日入侵企画
  2. 2 Lemon 米津玄師
  3. 3 MY ALL 浜崎あゆみ
Lemon - 米津玄師
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 米津玄師

作曲 : 米津玄師

夢ならばどれほどよかったでしょう

未だにあなたのことを夢にみる

忘れた物を取りに帰るように

古びた思い出の埃を払う

戻らない幸せがあることを

最後にあなたが教えてくれた

言えずに隠してた昏い過去も

あなたがいなきゃ永遠に昏いまま

きっともうこれ以上 傷つくことなど

ありはしないとわかっている

あの日の悲しみさえ

あの日の苦しみさえ

そのすべてを愛してた あなたとともに

胸に残り離れない

苦いレモンの匂い

雨が降り止むまでは帰れない

今でもあなたはわたしの光

暗闇であなたの背をなぞった

その輪郭を鮮明に覚えている

受け止めきれないものと出会うたび

溢れてやまないのは涙だけ

何をしていたの

何を見ていたの

わたしの知らない横顔で

どこかであなたが今

わたしと同じ様な

涙にくれ 淋しさの中にいるなら

わたしのことなどどうか 忘れてください

そんなことを心から願うほどに

今でもあなたはわたしの光

自分が思うより 恋をしていたあなたに

あれから思うように 息ができない

あんなに側にいたのにまるで嘘みたい

とても忘れられないそれだけが確か

あの日の悲しみさえ

あの日の苦しみさえ

その全てを愛してたあなたと共に

胸に残り離れない

苦いレモンの匂い

雨が降り止むまでは帰れない

切り分けた果実の片方の様に

今でもあなたはわたしの光