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章内容
第三章 软件工程师的成长
- 软件工程师如何成长?
- 积累软件开发相关知识
- 积累问题领域的知识和经验
- 对通用的软件设计思想和软件工程思想的理解。
- 提升职业技能
- 实际成果
- 软件开发的工作量和质量怎么衡量?
- 项目/任务有多大
- 花了多长时间
- 质量如何
- 是否按时交付
- TSP对团队成员的要求:
- 交流
- 说到做到
- 接受团队赋予的角色并按角色要求工作
- 全力投入团队的活动
- 按照团队流程的要求工作
- 做好准备工作
- 理性的工作
- 软件工程师的思维误区:
- 分析麻痹
- 不分主次,相解决所有的依赖问题
- 过早优化,无视这个模块对全局的重要性
- 过早扩大化/泛化
解决大问题固然让人感觉美妙,但是把小问题真正解决好,也不容易
第四章 两人合作
- 代码规范分为两部分
- 代码风格规范
- 代码风格的原则是:简明、易读、无二义性。Tab键在不同的情况下会显示不同的长度,严重干扰阅读体验。
- 代码设计规范
- 函数原则:只做一件事,并且要做好。
- 代码复审的定义:看代码是否在代码规范的框架内正确地解决了问题。
二、任务2 两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
- 结对方博客链接:201971010259-张圆圆 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告
- 结对方Github项目仓库链接:Knapsack-0-1
- 博文评价:
博客的结构很完整,每个部分都写的很棒,是学习和借鉴的目标。内容充实,书写认真,能从其中看出仔细认真的态度,是值得学习临摹的一篇博客。整个页面美化也很到位,看起来丰富多彩,目录的设置也使得跳转观看更方便。
- 博文结构:结构清晰完整,每个部分都写得很清楚,把握了每个细节。
- 博文内容:从开始到结尾每一部分都完成了博客要求。整个项目也实现了所有需求,代码结构完整,运行逻辑清楚。
- 博文结构与PSP中“任务内容”列的关系:博客的内容几乎与PSP内容对应。
- PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究:第一次做项目,对项目流程还不熟悉,不能对自己的时间做到合理把握,也不够了解自己现在的能力导致时间规划不够准确。
- 克隆结对方项目源码到本地机器,阅读并测试运行代码
图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分支是如何处理的?循环有没有可能出现死循环? | 没有死循环 | |
有没有使用断言来保证我们认为不变的条件真的得到满足? | 没有 | |
对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄露?有没有优化的空间? | 有可能,存在优化空间 | |
数据结构中有没有用不到的元素? | 无 | |
效能 | 代码的效能如何?最坏的情况是怎么样的? | 是 |
代码中,特别是循环中是否有明显可优化的部分? | 是 | |
对于系统和网络的调用是否会超时?如何处理? | 是 | |
可读性 | 代码可读性如何?有没有足够的注释? | 是 |
可测试性能 | 代码是否需要更新或创建新的单元测试? | 是 |
- 结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据
三、任务3 采用两人结对编程方式,设计开发一款{0-1}KP 实例数据集算法实验平台
- 散点图绘制
- {0-1}KP 实例数据集需存储在数据库
图3 数据库数据读入
图4 web页面数据查看
- 人机交互界面要求为WEB页面平台可动态嵌入任何一个有效的{0-1}KP 实例求解算法,并保存算法实验日志数据
图5 背包算法选择求解页面
图6日志查看页面
- 遗传算法求解{0-1}KP
- 注册页面
图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设计中——驾驶员为姜婷。角色切换过程中,互相学习,互相监督,提高项目效率、代码质量。
六、项目仓库
-
多次commit的记录
-
src文件夹
-
Github项目仓库根目录下项目代码规范文档
七、程序功能评测
标签:姜婷,结对,201971010116,项目,代码,KP,实验,页面 来源: https://www.cnblogs.com/Jiokie/p/16089877.html