项目 内容
课程班级博客链接 班级博客
这个作业要求链接 作业链接
我的课程学习目标 (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 实例数据集算法实验平台》项目报告的更多相关文章

  1. 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  2. 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...

  3. 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...

  4. 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...

  5. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  6. 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  7. 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  8. 201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三-软件工程结对项目 这个课程学习目标 掌握软件开发流程,提高自身能力 这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程 ...

  9. 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...

随机推荐

  1. Redis 面试必备知识点

    1.Redis 简介 是一个用 C 语言开发的,高性能的键值对数据库. 数据存在于内存,读写速度快. 可用来做缓存.分布式锁.消息队列. 提供多种数据类型来支持不同的业务场景. 支持事务.持久化.Lu ...

  2. 漫画 | 公司测试因提Bug不规范,锒铛入狱~

    互联网人罪状系列 1.上班第一天,前端把后端告上县衙,还列了 5 宗罪 2. 程序员状告产品经理八大罪状 (上) 3.程序员状告产品经理八大罪状(下) 开发人员与测试人员的关系,就如同程序员与产品经理 ...

  3. Vue method与computed的区别

    为了说明method与computed的区别,在此我想先来看看computed属性在vue官网中的说法: 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算.在模板中放入太多的逻辑会让模板过重 ...

  4. hdu4665 DFS

    题意:       给你一个字符串,问你能不能拆成两个相同的字符串,顺序不能改变. 思路:       咋一看数据有点大,搜索过不去,但想想优化的地方很多,而且每个字母最多出现四次,所以多几个剪纸应该 ...

  5. Nessus扫描器的使用

    目录 Nessus Scans Settings 一个基本扫描的建立 自定义扫描策略 Nessus的高级扫描方法 Nessus Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组 ...

  6. windows-API劫持(API-HOOK)

    API Hook ApiHook又叫做API劫持,也就是如果A程序调用了B.cll里面的C函数,我们可以做到当A调用C函数执行的时候,直接执行我们自己事先准备好的函数,之后我们在执行真正的C,当然我们 ...

  7. 接口测试的N中玩法

    在我看来接口测试相对其他类型的测试是比较简单的.对于最常见的HTTP接口,只需要知道接口的 URL.方法.参数类型.返回值 ... 就可以对接口进行测试了. apifox 如果你是入门级选手,那么ap ...

  8. 复现Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

    靶机IP(Ubuntu):192.168.43.185 攻击IP(kali):192.168.43.37 一.docker环境搭建 打开vulhub靶机,目录定位到vulhub-master/shir ...

  9. [BUUCTF-Pwn]刷题记录1

    [BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...

  10. 源码简析XXL-JOB的注册和执行过程

    一,前言 XXL-JOB是一个优秀的国产开源分布式任务调度平台,他有着自己的一套调度注册中心,提供了丰富的调度和阻塞策略等,这些都是可视化的操作,使用起来十分方便. 由于是国产的,所以上手还是比较快的 ...