201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告
| 项目 | 内容 |
|---|---|
| 课程班级博客链接 | 班级博客 |
| 这个作业要求链接 | 作业要求 |
| 我的课程学习目标 | (1)详细阅读《构建之法》学习并掌握PSP的具体流程 (2)掌握背包问题,通过查阅相关资料,设计一个采用动态规划算法、回溯算法求解D{0-1}背包问题的程序 (3)掌握Github发布软件项目的操作方法 |
| 这个作业在哪些方面帮助我实现学习目标 | (1)熟悉了软件项目个人开发流程 (2)了解了Github发布软件项目的操作方法 (3)学习了背包问题和PSP流程, 以及采用动态规划算法、回溯算法求解D{0-1}背包问题 |
| 项目Github的仓库链接地址 | 仓库地址 |
任务1 作业点评链接
1.201871030125-王芬
2.201871030134-余宝鹏
3.201871030131-谢林江
任务2:详细阅读《构建之法》第1章、第2章,掌握PSP流程
第一章 概论
第一章从浅入深,以航空业的发展历程作为模型,类比软件工程的发展。玩具:纸飞机>>业余爱好:沙滩椅+氦气球>>探索:莱特兄弟>>产业:容纳百万人就业的航空业。类似的,软件也从简单的“Hello World”到写网站到构建一个软件系统的从简到繁,从易到难的发展历程。软件=程序+软件工程。软件工程是什么?书上是这么说的:
软件工程是把系统的、有序的、可量化的方法应用在软件的开发、运营和维护上的工程。
相对于大家广而熟知的“程序=数据结构+算法”等式,对应的软件=程序+软件工程。而对于软件企业来说,自然也可以推论出:
软件企业=软件+商业模式
从这两个公式可以看出,程序是基本功,软件工程决定软件质量,而商业模式就决定了一个软件企业的成败。
软件具有复杂性、不可预见性、易变性、服从性和非连续性的特点,如何“做一个好软件”既是软件工程的目的,也是挑战和魅力所在。
作为一个工程师的宗旨是:我构建,故我在。好的工程师能尽量减少软件的Bug。Bug的多少影响着软件的用户满意度、可靠性、软件流程的质量和可维护性。只要软件的行为和用户的期望不一致,就可以称为Bug。
通过系统阐述,《构建之法》的教学目标即为以下三点:
1.研发出符合用户需求的软件
2.通过一定流程,在预定时间内发布“足够好”的软件。
3.能证明所开发的软件是可维护和继续发展的
第二章 个人技术和流程
PSP(Personal Software Process),个人软件开发流程的任务清单如下所示:

结果表明工程师在“需求分析”和“测试”方面花了更多时间。
好的单元测试应该准确、快速保证程序基本模块的正确性。好的单元测试有以下标准:
1.在最基本的功能/参数上验证程序的正确性
2.由最熟悉的人来写
3.单元测试后机器状态保持不变
4.单元测试要快并产生可重复、一致的结果。
5.保证独立性
6.覆盖所有代码路径
所谓回归测试(Regression Test)目的有二:
7.验证新的代码的确改正缺陷
8.验证新的代码有没有破坏模块的现有功能,有没有Regression
Regress:return to a worse or less developed state.回归测试最好自动化,并且对每一个Bug Fix都要进行回归测试
效能分析目的是是找到程序的效能瓶颈进而可针对性优化程序。
效能分析有两个方法:抽样和代码注入。
一般方法是先用抽样找到瓶颈所在,再对特定模块用代码注入方法详细分析。
任务3:项目开发背景:背包问题
需求分析:背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大.
D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;
功能设计:
1.可正确读入实验数据文件的有效D{0-1}KP数据;
2.能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
3. 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
4.用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
5.任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
个人软件开发流程(psp)
| PSP各阶段 | 预计完成时间(h) | 实际完成时间(h) |
|---|---|---|
| 计划 | 10 | 12 |
| 开发 | 121 | |
| - 需求分析 | 8 | 6 |
| -生成设计文档 | 6 | 7 |
| - 设计复审 | 5 | 7 |
| -代码规范 | 5 | 3 |
| -具体设计 | 8 | 10 |
| -具体编码 | 50 | |
| -代码复审 | 10 | |
| - 测试 | 12 | |
| 报告 | 5 | |
| - 测试报告 | 4 | |
| - 计算工作量 | 3 | |
| -事后总结,并提出改进计划 | 5 |
201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告的更多相关文章
- 20155219&20155224 《信息安全系统设计基础》实验二 固件程序设计
实验二 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中"信息安全系统实验箱指导书.pdf "第一章,1. ...
- 201871030108-冯永萍 实验二 个人项目— D{0-1}背包问题项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- 201871030125-王芬 实验二 个人项目-《D{0-1}问题》软件项目报告
实验二 个人项目-<D{0-1}问题>软件项目报告 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 ...
- 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...
- 201871030131-谢林江 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.学习编写PSP2.完成个人项目实验要求3.在Github建仓 这个作业在哪些方面帮助我实现学习目标 1.首次编 ...
- 201871030126-王会娟 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 https://home.cnblogs.com/u/wanghuijuan815 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh ...
- 201871030106-陈鑫莲 实验二 个人项目-《D{0-1} KP 问题》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.掌握软件项目个人开发流程2.掌握Github发布软件项目的操作方法 这个作业在哪些方面帮助我实现学习目标 1. ...
- 201871030102-崔红梅 实验二 个人项目—— D{0-1}KP 项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 实验二作业链接 我的课程学习目标 1.熟练掌握将本地代码保存至GitHub中2.掌握折扣背包问题3.回顾动态规划算法和回溯算法4.对java语 ...
- 201871010203-陈鹏昱 实验二 个人项目—《D{0-1}KP问题》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 运用科学高效的方法学习软件工程的理论和知识 这个作业在哪些方面帮助我实现学习目标 掌握软件项目个人开发流程,掌握G ...
随机推荐
- css grid layout in practice
css grid layout in practice https://caniuse.com/#search=grid subgrid https://caniuse.com/#search=cal ...
- VAST上线后,如何提升NGK算力生态的收益和流动性?
自比特币诞生以来,"挖矿"一词就成功地步入了大众的视野,也成为了加密货币领域最重要的组成部分之一.无论是早前基于比特币和以太坊为主的算力挖矿,还是逐步进入大众视野的质押挖矿,亦或是 ...
- BGV等 DeFi产品暴涨背后隐藏着什么?
比特币突破两万七千美金,在此创造了历史.在比特币一路飙升的背后,到底是谁注入了"强心针".笔者认为今年以来推动BTC长期上涨的主要动力主要包括四个:经济形势恶化.央行大量放水(主要 ...
- [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2
转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...
- 顶级c程序员之路 基础篇 - 第一章 关键字的深度理解 number-1
c语言有32个关键字,每个关键字你都理解吗? 今天出场的是: auto , register, static, extern 为什么他们会一起呢,说到这里不得不谈到c语言对变量的描述. c给每 ...
- 判断app是否安装
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.fromPar ...
- Linux内核的TCP协议栈和内核旁路的选择?
[前言]最近在实习公司用到了solarflare的万兆网卡,用到了网卡的openonload技术还有TCPDirect模式代码的编写,其理论基础都是内核旁路.网上关于内核旁路技术的介绍基本就两篇,我结 ...
- 别再恐惧 IP 协议(万字长文 | 多图预警)
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...
- ss_port_change - 一键修改ss配置与Centos7的Firewall策略脚本
ss_port_change 修改ss配置与Centos7的Firewall策略脚本 注意是否需要修改config路径与ss服务的名 脚本的敏感字用了*代替 项目地址 Github 脚本 #!/bin ...
- 创建一个scrapy爬虫框架的项目
第一步:打开pycharm,选择"terminal",如图所示: 第二步:在命令中端输入创建scrapy项目的命令:scrapy startproject demo (demo指的 ...