第二次作业,从4月7号开始,陆续开始提交作业。根据同学们提交的作业报告,相比第一次作业,已经有了巨大改变,大家开始有了完整的实践,对那些抽象的名词也开始有了直观的感受,这很好。然后有一些普遍存在的问题,在这里做一下小结,大家可以PK下各自的思考和想法。此处主要从几个方面说:

  1. 作业雷同、抄袭问题
  2. 排版和代码插入的问题
  3. 需求分析和设计太抽象,应该如何理解和实践的建议
  4. 手工测试单元测试的区别,以及单元测试的使用等
  5. 作业反馈和迭代改进,做中学

作业雷同问题

作业雷同的问题。对于作业,我希望大家一定要独立完成。这个独立在不同场合下意义不一样,比如是PSP训练里,那么独立应该是指自己一个人独立完成,如果是结对编程,那么独立应该有两层含义,一方面指代小组相对于其他小组的独立,另一方面指代小组里两个人要各自分工协作,不能编程一个人完全全部,另外一个人啥都没做。所有的作业我们都会看过去,谁在抄袭谁在独自完成,都是能看出来的,这方面请同学们自己注意。

排版和代码插入的问题

首先是排版和代码插入的问题。根据博客园后台编辑器的选择,有些同学使用可视化编辑器,有些同学选择使用MarkDown编辑器。一般来说学会了MarkDown排版的同学,插入代码都是没有问题的,这就是我推荐大家用MarkDown的原因,它既简洁,又排版效果好。而是用可视化编辑器的同学,排版一般也都还可以,只是有些同学可能对如何正确的插入代码不熟悉,所以插入的代码存在排版错乱、没有高亮、缩进不正确等等问题。所以这点上建议大家都改进。学会基本的排版技能对于你们以后的职业生涯都是一个重要的事情。

需求分析和设计太抽象,应该如何理解和实践的建议

其次是需求分析和设计的问题。这两个本身比较抽象,听上去都属于可做可不做的事情,这是神码东西呢:D。什么是需求分析?什么是设计?我想很多同学都是在代码做完了之后,为了写上这么两个环节,而拼凑出内容的。但另一方面,我又看到一些同学在分析和总结里说一开始看不懂题目,在经过A、B、C步骤之后终于搞明白题目要做什么。这个过程本身就是属于需求分析的一部分,软件开发过程中,需求分析是重要的一环,它本身就是要将不明确的、模糊的需求厘清、并写下来的,然后和目标(比如客户)达成一致的一个过程。设计,对于本次作业来说,可能最重要的就是关于代码如何实现的大致划分,比如要不要用函数?如果要,大致有哪些函数,整体又要怎样组合。再一个就是要做单元测试,那么可能首先要根据书上的例子、老师的课堂呈现、以及自己的查阅先搞明白单元测试是什么,有一个直观的认识。然后自己在设计函数、类、模块应该如何设计使得更易于做单元测试。此外,《构建之法》书中的wc程序也是一个很好的从基本需求、扩展需求、到高级需求分析的一个案例,当然这样的过程需要反复训练

手工测试单元测试的区别,以及单元测试的使用等

接着还是说测试。大部分同学都做了手工测试,就是把程序跑起来手工输入一个个答案,然后程序都跑对了,就算是做了测试。但这个和真正的单元测试是不一样的,这块希望大家能结合书上的例子,或者http://en.wikipedia.org/wiki/Unit_testing对这个页面的阅读,能有一个自己认识上的改变,可以将自己的理解写下来,写成博客。单元测试的目的是为了对软件的基本单元,比如函数,做各种边界条件测试或者语义测试。语义测试比较高阶,此处单说边界条件测试,很多人的作业里都对除法的被除数为0,或者除不尽的情况没考虑到,但是如有设计单元测试,则单元测试的测试用例就可以故意针对这种边界条件做测试,所以你在设计测试用例的过程中就实际上把问题考虑的更全面。再比如,有的同学用了goto语句,goto在现代结构化编程里是不推荐使用的,至于为什么,使用了goto语句的同学也可以自己把事后的查阅理解写下来,写成博客。我们说,如果你有了单元测试,那么,你在把goto语句去掉的过程中,就可以要求修改后的函数,通过之前设计的测试用例。这就属于回归测试。你也可以理解成回退测试,就是说我的函数的实现改变了,但是依然通过之前设计的那些测试用例。

作业反馈和迭代改进,做中学

然后,我们说下迭代改进的问题。这次作业只有少数几个同学能对点评做反馈改进--意味着更多工作量。为什么应该要迭代改进呢?此处我要表扬下涂江凤同学,她的作业一开始用到了goto,我给了她点评,她就立刻抓紧时间去对代码做了改进,去掉了goto,并且自己去思考为什么不推荐用goto,这样她就从改进做学到了为什么,并且在博客里记录下了改进的结果,以及从中学到的东西,这就符合《构建之法》的核心理念做中学,通过在实践作业中发现问题,进而通过重新理解重新看书重新写代码等等过程中,去到课程真正要传递给你的那些知识或者认知方法。涂同学看到了zhaoxiong关于代码写法改进以及函数注释的反馈后,就立刻对自己的函数做了详细的注释同时改进了自己的代码,排版风格良好,这样她就有了对代码规范代码风格的一个初步认识,如果她这个时候重新去看《构建之法》里写代码风格和代码规范的章节,那么她就不再是觉的这是很抽象的东西,而是实实在在的切实有用的----写代码的过程中时刻要注意的。涂同学也把每次的修改增加到了PSP耗时统计里,这样她就能看到自己的每次改进的完整记录,包括解决的问题、提出的疑问、以及消耗的时间,这些都可以用在以后的过程中改进自己。这里的核心就是做中学,有迭代改进和无迭代改进,这是一个问题,请同学们也思考下。软件工程里,处处存在人与人之间的沟通和交流,快速的对点评或者建议做反馈,迭代改进,这样的行为它本身就是符合工程思维的,我想在这点上,如果能做到,那么至少是学到了工程的一个小小但非常重要的点。

大概就写这些,大家加油~。

软件工程(GZSD2015) 第二次作业小结的更多相关文章

  1. 软件工程(GZSD2015) 第二次作业进度

    贵州师范大学软件工程第二次作业 徐 镇 王铭霞 张 英 涂江枫 张 燕 安 坤 周 娟 杨明颢 杨家堂 罗文豪 娄秀盛 周 娟 李盼 岳庆 张颖 李丽思 邓婷 唐洁 郑倩 尚清丽 陈小丽 毛茸 宋光能 ...

  2. 软件工程(GZSD2015) 第二次作业文档模板

    题目: (此处列出题目) 需求分析: 基本功能 基本功能点1 基本功能点2 ... 扩展功能(可选) 高级功能(可选) 设计 设计点1 设计点2 ... 代码实现 // code here 程序截图 ...

  3. 软件工程(GZSD2015) 第二次作业成绩

    作业评分表 姓名 提交 语言 界面 PSP(3) CODE(4) 代码规范(2) 改进(1) 基本得分 提交时间 原始总得分 相对得分 最终得分 涂江凤 20150407 C CLI 3 4 2 1 ...

  4. 软件工程(GZSD2015)第二次作业小结

    第二次作业,从4月7号开始,陆续开始提交作业.根据同学们提交的作业报告,相比第一次作业,已经有了巨大改变,大家开始有了完整的实践,对那些抽象的名词也开始有了直观的感受,这很好.然后有一些普遍存在的问题 ...

  5. 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...

  6. OO第二单元作业小结

    前言 转眼已是第九周,第二单元的电梯系列作业已经结束,终于体验了一番多线程电梯之旅. 第一次作业是单电梯的傻瓜调度,虽然是第一次写多线程,但在课程PPT的指引下,写起来还是非常容易:第二次作业是单电梯 ...

  7. 软件工程(GZSD2015)第二次作业进度

    贵州师范大学软件工程第二次作业 徐 镇 王铭霞 张 英 涂江枫 张 燕 安 坤 周 娟 杨明颢 杨家堂 罗文豪 娄秀盛 周 娟 李盼 岳庆 张颖 李丽思 邓婷 唐洁 郑倩 尚清丽 陈小丽 毛茸 宋光能 ...

  8. 软件工程(QLGY2015)第一次作业小结(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 Github项目提交 github的代码提交,大部分人都只是提交了单个文件,存在几个问题 请提交完整的项目文件到github 问题:为什 ...

  9. 关于Axure RP软件的介绍——软件工程实践第二次个人作业

    关于Axure RP软件的介绍——软件工程实践第二次个人作业 Axure RP是一个非常专业的快速原型设计的一个工具,客户提出需求,然后根据需求定义和规格.设计功能和界面的专家能够快速创建应用软件或W ...

随机推荐

  1. EF 的 CURD 操作

    EF 的 CURD 操作 这里采用了数据库 Northwind,下载地址:https://northwinddatabase.codeplex.com/ 增 /// <summary> / ...

  2. Asp.net Core 项目中如何使用 MongoDB 数据库

    内容来源 https://blog.csdn.net/qq_26900081/article/details/83272132 一.添加依赖 1.MongoDB.Driver 2.MongoDB.Bs ...

  3. GNOME图形界面的基本操作

    成功登录进入CentOS系统之后,我们首先看到的桌面就是GNOME图形界面,下面来看一下相关的基本操作. 个性化设置 1,设置屏幕分辨率 进入菜单 2,更换桌面背景 进入下面菜单. 选择一张背景图片, ...

  4. node处理表单文件,获取formdata的数据

    参考文章:https://blog.csdn.net/a895458278/article/details/48055143# 应用: formidable使用: 原生的node.js在处理客户端以P ...

  5. JavaScript(二)

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/85412716 JavaScript操作符 算术运算符 算术运算符有:+,-,*,/,%,+ ...

  6. 【20190228】JavaScript-数组的操作

    1. 创建数组 var array = new Array(); var array = new Array(5); var array = new Array(1,2,3,"a" ...

  7. 少侠学代码系列(二)->JS实现

    少侠:小子,休息好了没,赶紧的 帅气的我:好了好了,嚷什么 少侠:(拔刀)嗯? 帅气的我:少侠,淡定淡定,我们来看秘籍吧,刚刚我们说了JS实现是由三个部分组成的 核心(ECMAScript),文档对象 ...

  8. 用canvas给视频图片添加特效

    Canvas制作视频图片特效 1. Canvas介绍 1.1Canvas是html5上的一个画布标签,功能有点类似java的swing.可以在canvas上画线条 弧线, 文字 就是画布的功能. 具体 ...

  9. python 通过元类控制类的创建

    一.python中如何创建类? 1. 直接定义类 class A: a = 'a' 2. 通过type对象创建 在python中一切都是对象 在上面这张图中,A是我们平常在python中写的类,它可以 ...

  10. 关于Python, ftplib模块中的cwd()进入含中文目录失败的问题

    使用Python的ftplib模块连接ftp服务器时, 使用cwd()连接含中文的目录, 报错 : UnicodeEncodeError: 'latin-1' codec can't encode c ...