软件基础个人工程——数独4

GITHUB项目地址:

https://github.com/hhz-hhz/Sudoku_software_engineer.git

软工基础个人项目——数独1

软工基础个人项目——数独2

软件基础个人工程——数独3

四、测试阶段

1、同测试设计文档一样对程序进行了测试:

但SolvingSudoku.cpp中:

由于inline bool CheckingForDFS(int n, int key)和inline int SolvingByDFS(int n)都是用了全局数组,所以没有办法对它们单独进行测试。

GeneratingSudoku.cpp中:

inline void MovingStep()也是同上述一样的情况,所以也没有办法测试。

由此可以看出全局变量对于软件开发的弊端。

2、单元测试:测试代码见UnitTest文件夹

3、测试代码覆盖率测试:

4、进行完单元测试后的性能测试:

1)-c 1000000:对生成终局进行测试

2)-s D:\sudoku\Debug\sudokutest.txt:求解1000个终局

五、总结和优化阶段

1、后续的优化

关于求解终局,求解1000个数独需要耗时与生成1000000个终局的时间几乎相同,但是当求解1000000个终局的时候还是需要花费很长一段时间,所以从性能分析表上看,需要对求解数独的方式进行优化,可能需要一个更为简便的求解数独的方式。以及文件的读取方式也有待改进。

2、PSP表格

3、事后总结

1)、对于项目进度的设计

因为这次自己用VS进行单元测试的了解不够深入,因此对于时间的预估有些紧迫,所以对于时间的提前准确估计是有必要的。

2)、对于项目的体验

经过这一次的体验,认识到编程并不是全部,提前的准备和后期的设计对于项目而言都是必要的。前期对于需求进行一个足够的分析,后期才能够不去花费力气。就像这次,我在测试的时候一度不明白怎么进行单元测试,看到的例子都是由C++完成的,虽然中间有用到C++的函数,但是最终的形式并不是对象,所以中途想将它变成C++的对象的方式,但是这时发现再想改它很困难,由于时间紧张,就并没有将其进行修改,但是中间有经过数次的尝试,所以在前期分析好需求,制定好计划,是对于项目而言一件重要的事。

3)、对于代码规范

在进行前的代码规范设计的时候,有很认真的去查过资料,所以这次是按照代码规范来的,虽然有些地方不够规范,但是对于重要的函数、变量,都提前进行了命名的设计,所以再此后的代码实现的时候会很轻松的找到自己书写的函数和变量,命名规范也很容易让我联想起它们的作用。

之后又进行了代码分析,之前的概念里warning不是一件重要的事,但是经过这次的代码分析,可以看出不够严谨的代码可能会对程序带来安全隐患。所以对于warning还是需要去理睬的。

4)、对于编译器的用法

经过这一次的项目开发,我对于编译器的认识又上了一个层次,像性能分析、单元测试等,之前也都是没操作过的,并且在这一次的实验中几乎是每一个关于操作这些新东西的错误都遇到过,所以对于以后的使用也有了一个较大的帮助。

5)、关于代码托管

由于不够熟练使用github,前期都是通过自己的备份,后期看到要求后,慢慢地去使用,发现代码托管对于代码的备份,代码的一致性都有很大的帮助

4、运行结果图

1)生成终局

2)、求解简单数独

3)、求解多个数独

原文地址:https://www.cnblogs.com/picaqiu/p/12216012.html

时间: 2024-11-13 13:55:11

软件基础个人工程——数独4的相关文章

必须掌握的软件基础课程

大学必须掌握的软件基础课程 转自:http://blog.java1234.com/blog/articles/40.html  大学软件专业有很多课程,有些学生搞不清哪些是重点,以下是笔者根据多年经验,认真很重要的课程罗列下: 1,C语言 很重要,作为学编程的入门语言,也是众多流行编程语言之父. 2,数据结构和算法 很重要,以后深入理解一些东西有帮助,即使是Java把很多数据结构都进行了封装,但是学习本课程,可以对性能有深入理解: 3,计算机组成原理 一般,学习一下: 4,编译原理 一般,学习

第二天:SLAM智能小车DIY乐趣-小车控制stm32软件基础

SLAM智能小车DIY乐趣-小车控制stm32软件基础 ####写在前面#### 前面介绍了小车控制stm32硬件基础,本文就来介绍配套的小车控制stm32软件基础.关于stm32开发相关的基础知识这里就不多说了,有需要的小伙伴可以查阅相关资料进行学习,这里重点从小车控制项目入手,直接进行跟实际需求相关的开发.本文主要内容: 1) 电机控制 2) 编码器数据读取 3) 串口数据收发 4) 电机速度PID控制 5) 周期性控制 6) 小车控制软件整体框图 ####正文#### 1.电机控制 电机控

利用开源软件搭建JAVA工程CI&CD自动化工具链

JAVA传统项目交付流程的问题 开发和运维间环境有明显差异 代码缺乏统一质量度量 客户要求上线时间紧,人工测试慢,导致测试不充分,时常做线上BUG修复 打造工具链 ● 源码管理Gitlab● 持续集成Jenkins● 代码扫描SonarQube● 接口测试PostMan+NewMan● 制品管理ArtifactoryOSS版本(仅支持Maven)● 自动部署Ansible GitLab安装 vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=

软件工程质量之“工程元数据”

临时想到一个有关提升软件工程质量的思想,分享给的大家: 工程元数据,就是用来描述工程本身的数据,和业务无直接关联,纯粹就是描述工程本身的信息."元"一词,就和"元认知"(元认知就是对认知的认知)里的元是一样,就像java里的"反射"描述的是类本身的信息一样. 在提到软件工程质量的时候,我曾和原来所在一家公司的技术总监提过这个想法,大致的思想就是: 1.针对项目建立单独的一个日志数据库: 2.在业务低谷期(比如凌晨2点),利用任务调度去解析日志:

工程项目管理问题那么多,什么软件可以实现工程项目管理自动化

工程项目管理的那些问题 当工程接近完工时,突然发现工地角落还放着一大堆钢材! 当工地工人的流动性增加时,每个人的信息难以匹配,工人如何实现打卡? 当需要查某项资料时,翻箱倒柜找了半天也没找到! …… 上述场景反应了工程项目管理中存在很多问题.总结一下包括: 成本管理不精细,无法达到预期的利润率 对工程实际进度了解不清楚,一旦出现问题无法及时解决 关系错综复杂,涉及到甲方.乙方.监理方等,无法统一管理 工程资料一大堆,查找起来非常困难 一直以来,工程项目管理问题令很多项目经理头疼.如何才能减轻项目

Mooc软件工程-01软件基础和软件过程

1 软件的概念 含义 软件 = code + data + documents 也就是软件的代码, 软件相关的输入输出等数据, 和一切相关的文档 特点 抽象的, 无形的, 逻辑实体 不会被磨损 可以移植 软件是复杂的, 难设计难实现难维护 软件是昂贵的 2 软件危机和软件工程 软件危机 进度成本估算不准确 用户通常对完成的产品不满意 软件的质量通常是不可靠的 软件的可维护性差 没有可用文档 在计算机的比例越来雨大, 但是跟不上计算机的发展 软件工程 软件的实现是一个团队完成的, 这是一个工程项目

软件工程基础-个人项目-数独

任务:实现一个能够生成数独局并且能求解数独问题的控制台程序. 1.GitHub:https://github.com/MiaoZhou48/SoftwareEngineeringProject 2.时间耗费 PSD2.1 Personnal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning  计划  40  40 .Estimate .估计这个任务需要多长时间     Development 开发  150  120 .Analysis .需求

设计模式-可复用面向对象软件基础笔记(一)

1.根据两条准则对设计模式进行分类: 第一是目的准则:模式依据其目的可分为创建型(C r e a t i o n a l) .结构型 ( S t r u c t u r a l ).或行为型( B e h a v i o r a l )三种.创建型模式与对象的创建有关:结构型模式处理类或对象的组合:行为型模式对类或对象怎样交互和怎样分配职责进行描述. 第二是范围准则:指定模式主要是用于类还是用于对象.类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了.对象模式处

<软件工程基础>个人项目——数独

参见GitHub:https://github.com/1773262526/Software-Foundation.git Personal Software Process Stages         预估耗时(分钟)       实际耗时(分钟)       计划     估计这个任务需要多少时间     开发     需求分析(包括学习新技术)     生成设计文档     设计复审(和同事审核设计文档)     代码规范     具体设计     具体编码     代码复审