201871030129-魏琦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
| 项目 | 内容 |
|---|---|
| 课程班级博客链接 | 班级博客 |
| 这个作业要求链接 | 作业链接 |
| 我的课程学习目标 | (1)掌握Github协作开发程序的操作方法; (2)理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念; (3)体验软件项目开发中的两人合作,练习结对编程。 |
| 这个作业在哪些方面帮助我实现学习目标 | (1)通过阅读《现代软件工程—构建之法》第3-4章内容,掌握了代码风格规范、结对编程等概念 |
| 结对方学号-姓名 | 201871030136-颜静 |
| 结对方本次博客作业链接 | 博客链接 |
| 本项目Github的仓库链接地址 | Github地址 |
任务1:阅读《现代软件工程—构建之法》第3-4章内容
“代码规范”可以分成两个部分:
1.代码风格规范,主要是文字上的规定。
2.代码设计规范。
代码风格的原则是:简明,易读,无二义性。
结对编程的好处:
1.在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
2.对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
3.在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
4.在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
代码复审的目的在于:
1.找出代码的错误。
2.发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的。
3.发现算法错误,比如使用的算法不够优化。
4.发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。
5.发现可能改进的地方。
6.教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。
总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。
任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
结对方博客链接
https://www.cnblogs.com/yanj/p/14652727.html
博客评论如下:
https://www.cnblogs.com/yanj/p/14599796.html
代码核查表
1.概要部分
(1)代码能符合需求和规格说明么?
代码符合需求以及规格
(2)代码设计是否有周全的考虑?
考虑较周全
(3)代码可读性如何?
可读
(4)代码容易维护么?
易维护
(5)代码的每一行都执行并检查过了吗?
都有检查
2.设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
遵从
(2)有没有硬编码或字符串/数字等存在?
没有
(3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)?
不会影响
(4)有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)
注释较多
3.代码规范部分
(1)修改的部分符合代码标准和风格么(详细条文略)?
符合,基本修改
4.具体代码部分
(1)有没有对错误进行处理?
有进行处理
(2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
无错误
(3)循环有没有可能出现死循环?
没有出现死循环
(4)有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
有
(5)数据结构中是否有无用的元素?
没有
5.可读性
代码可读性如何?有没有足够的注释?
可读,注释足够
对方Github项目仓库链接
https://github.com/yanjing-jpj/zero
结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据
- 通过下载git将代码下载下来,可以成功的运行代码:

任务三:设计开发一款D{0-1}KP 实例数据集算法实验平台
需求设计:
平台基础功能:实现任务二的功能;
将D{0-1}KP 实例数据集需存储在数据库;
平台可动态嵌入任何一个有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据;
设计人机交互界面;
利用遗传算法求解D{0-1}KP;
软件设计说明:
前端通过Python语言编写GUI界面;
后端利用Python内置数据库sqllite3实现将D{0-1}KP 实例数据集的存储;
界面可对任务二和任务三的功能进行选择,输出结果;
软件实现及核心代码展示:
- 利用Python内置的数据库SQLite3创建数据库,对D{0-1}KP 实例数据集进行存储
import sqlite3
conn=sqlite3.connect('data.db')
cursor = conn.cursor()
cursor.execute('create table bag(weight int(10),value int(10))')#创建表
for i in range(0,len(weight)):
cursor.execute('INSERT INTO bag(weight,value) values ("%d","%d")' %(weight[i], value[i]))#插入数据
conn.commit()
cursor.execute('select *from bag')
result=cursor.fetchall()
print("数据库中背包的重量和价值为:")
for i in result:
print(i)
cursor.close()
conn.close()`

- 遗传算法部分代码
//交配产生新的下一代
def crossover(chromosomes_states,select_index):
chromosomes_states_new = []
tmp = chromosomes_states[:]
index = len(chromosomes_states) - 1
while index >= 0:
index -= 1
chromosomes_state = tmp.pop(index)
for i in range(select_index[index]):
chromosomes_state_x =random.choice(chromosomes_states)
//随机产生基因序列的交配位置
pos = random.choice(range(1,CHROMOSOME_SIZE-1))
chromosomes_states_new.append(chromosomes_state[:pos]+chromosomes_state_x[pos:])
return chromosomes_states_new
//精选下一代
//先淘汰掉不能适应环境的,即淘汰重量大于80的
//随机从上一代能适应环境的种群个体中选出几个个体进行下一代的繁衍
//记录下精选个体的位置(同一个个体可能被选多次),因此slelect_index中可能有两个值是相同的
def filter(chromosomes_states,fitnesses):
index = len(fitnesses) - 1
while index >= 0:
index -= 1
if fitnesses[index][1] > WEIGHT_LIMIT:
chromosomes_states.pop(index)
fitnesses.pop(index)
select_index = [0] * len(chromosomes_states)
//开始进行精选
for i in range(SELECT_NUMBER):
j = chromosomes_states.index(random.choice(chromosomes_states))
select_index[j] += 1
return select_index
程序运行:
查找数据库中的表格信息如下:

GUI界面效果如下:

选择数字1运行结果如下:

- 选择数字2运行结果如下:

选择数字3执行动态规划算法结果如下:

选择数字4执行遗传算法结果如下:

描述结对的过程
由于我和舍友一组,交流比较方便,口头交流较多。
本次作业PSP
| PSP3.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
|---|---|---|---|
| Planning | 计划 | 8 | 6 |
| Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 6 |
| Development | 开发 | 650 | 720 |
| Analysis | 需求分析(包括学习新技术) | 26 | 30 |
| Design Spec | 生成设计文档 | 35 | 26 |
| Design Review | 设计复审(和同事审核设计文档) | 50 | 60 |
| Coding Standard | 代码规范(为目前的开发制定合适的规范) | 30 | 30 |
| Design | 具体设计 | 30 | 40 |
| Coding | 具体编码 | 100 | 130 |
| Code Review | 代码复审 | 30 | 40 |
| Test | 测试(自我测试,修改代码,提交修改) | 15 | 10 |
| Reporting | 报告 | 20 | 20 |
| Test Report | 测试报告 | 15 | 20 |
| Size Measurement | 计算工作量 | 10 | 5 |
| Postmortem & Process Improvement | 事后总结,并提出过程改进计划 | 30 | 30 |
小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
通过这次组队,体会到了团队合作的重要性,通过合理的分配任务,使得我们的项目能够顺利的进行,在做项目的过程中,双方也出现了意见分歧,通过有效的交流观点达到一致,最终完成任务,学习到了很多新的知识。
201871030129-魏琦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告的更多相关文章
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...
- 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...
- 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- 201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三-软件工程结对项目 这个课程学习目标 掌握软件开发流程,提高自身能力 这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程 ...
- 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...
随机推荐
- 记一次xss漏洞挖掘
博客园在整改中,无法更新文章,难受啊... 记录一次react的xss漏洞发现,比较有意思: 某个站: 直接输入<xxx>,直接把我跳转到了404,猜测可能做了一些验证: 尝试多重编码,发 ...
- 1036 Boys vs Girls
This time you are asked to tell the difference between the lowest grade of all the male students and ...
- 【Feign/Ribbon】记录一次生产上的SpringCloudFeign的重试问题
在上周在的微供有数项目中(数据产品),需要对接企业微信中第三方应用,在使用Feign的去调用微服务的用户模块用微信的code获取access_token以及用户工厂信息时出现Feign重试超时报错的情 ...
- hdu4920 矩阵乘法%3
题意: 给你两个矩阵,让你求两矩阵的乘积,然后3取余.矩阵是n*n的,n<=800 思路: 如果什么都不考虑的话,矩阵的乘法是o(n^3)的,800*800*800 = ...
- UVA10391复合词
题意: 给定一个词典,然后问里面那些是复合词,复合词就是当前这个单词正好是有两个单词拼接而成. 思路: 用map来标记是否出现过,然后先按长短排序,把每个单体拆分成任意两个可能的 ...
- XCTF-i-get-id-200
i-get-id-200 题目描述 嗯..我刚建好了一个网站 解题过程 一共有三个页面 Hello World 告诉了页面是perl写的 Forms 输入name和age会返回渲染后的字符串 搜了一下 ...
- 基于python对B站收藏夹按照视频发布时间进行排序
基于python对B站收藏夹按照视频发布时间进行排序 前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难, ...
- SpringBoot简单尝试
一.spring boot核心 配置在类路径下autoconfigure下(多瞅瞅) @SpringBootApplication里的重要注解(@Configuration,@EnableAutoCo ...
- Windows进程间通讯(IPC)----管道
管道的分类 管道其实际就是一段共享内存,只不过Windows规定需要使用I/O的形式类访问这块共享内存,管道可以分为匿名管道和命名管道. 匿名管道就是没有名字的管道,其支持单向传输数据,如果需要双向传 ...
- 测试的V模型和W模型
V模型 :后测试 优点: 1.每一阶段都清晰明了,便于把控开发的每一个过程. 2.既包含了单元测试又包含了系统测试 缺点: 1.测试介入的比较晚,所以开发前期的缺陷无从修改. 2.开发和测试串行. W ...