1. PSP

Date

Type

Job

Start

Int(min)

End

Total(min)

20160407

编码

抢答器重构

19:00

30

20:50

80

 

站立会议

"耐撕"团队站立会议

20:00

 

20:15

15

 

看书

计算机网络与因特网

22:00

 

22:20

20

20160408

助教

团队博客

10:30

14:30

20:00

30

11:05

18:00

21:00

280

 

站立会议

"耐撕"团队站立会议

15:20

 

15:40

20

 

编码

整合新增的功能并测试

14:00

50

17:20

150

20160411

站立会议

"耐撕"团队站立会议

19:30

 

19:50

20

 

编码

实现评分功能

14:00

 

15:00

60

20160412

站立会议

"耐撕"团队站立会议

19:15

 

19:30

15

20160413

结对编码

逆波兰

19:00

10

20:30

80

 

博客

 

22:00

 

23:30

90

2. 分类统计

表一:类型时间统计表(时间:分)

 

助教

编码

站会

结对

博客

看书

 

100

80

110

80

30

30

 

10

80

20

80

36

21

 

280

25

30

 

60

20

   

50

80

 

40

 
   

35

15

 

90

 
   

60

20

     
   

80

20

     
   

150

15

     
   

60

       

合计

390

620

310

160

256

71

图一:时间饼图

图二:代码行数折线图

图三:博客字数图

3. 进度条

 

代码行数

博客字数

知识点

第一周

400

430

见我博客软件工程——师大站1

第二周

0

5200

见我博客软件工程_东师站_课堂笔记

第三周

0

63

站立会议、单元测试

第四周

1000

1500

见我的博客软件工程_东师站_课堂笔记

第五周

300

400

版本控制

第六周

200

3500

见我的博客软件工程_东师站_课堂笔记

4. 燃尽图

请参看http://www.cnblogs.com/charliePU/p/5385044.html

5. 站立会议

"耐撕"团队 2016.04.07 站立会议

"耐撕"团队 2016.04.08 站立会议

"耐撕"团队 2016.04.11 站立会议

"耐撕"团队2016.04.12站立会议

6. 代码

请见:https://coding.net/u/zhengrui0452/p/QiangDaQi/

7. 结对编程

今天我与伟硕师弟进行了结对编程,实现生成四个数的四则运算,并将结果表示为逆波兰表达式。

我的结对伙伴刘伟硕师弟的博客[http://www.cnblogs.com/WeSure6/]

算法:

我首先帮助伟硕师弟回忆了一下如何将一个中缀表达式变为后缀表达式:

使用了这位大神的算法[http://www.cnblogs.com/wanghetao/archive/2012/04/23/2466580.html],不过经过实验他有一个地方错了,改进如下:

1、从左至右扫描一中缀表达式。

2、若读取的是操作数,则判断该操作数的类型,并将该操作数存入操作数堆栈

3、若读取的是运算符

(1) 该运算符为左括号"(",则直接存入运算符堆栈。

(2) 该运算符为右括号")",则输出运算符堆栈中的运算符到操作数堆栈,直到遇到左括号为止。

(3) 该运算符为非括号运算符:

(a) 若运算符堆栈栈顶的运算符为括号,则直接存入运算符堆栈。

(b) 若比运算符堆栈栈顶的运算符优先级高,则直接存入运算符堆栈。

(c) 若比运算符堆栈栈顶的运算符优先级低或相等,则输出栈顶运算符到操作数堆栈,并将当前运算符压入运算符堆栈。

4、当表达式读取完成后运算符堆栈中尚有运算符时,则依序取出运算符到操作数堆栈,直到运算符堆栈为空。

我们设计了以下几个函数:

  1. 生成题目
  2. 获得运算符优先级
  3. 将生成的题目转成逆波兰表达式
  4. 根据逆波兰表达式求解(今天未完成)

代码如下:

  1 package SiZheYunSuan;
  2
  3 import java.util.Random;
  4 import java.util.Stack;
  5
  6 public class Main {
  7 //1.优先级
  8     public int youxianji(char c)
  9     {
 10         int value = 0;
 11         switch (c) {
 12         case '+':
 13             value = 1;
 14             break;
 15         case '-':
 16             value = 1;
 17             break;
 18         case '*':
 19             value = 2;
 20             break;
 21         case '/':
 22             value = 2;
 23             break;
 24         default:
 25             break;
 26         }
 27         return value;
 28     }
 29 //2.中缀表达式变后缀表达式
 30     public String NiBoLan(String exp)
 31     {
 32         String result="";
 33         Stack<Character> sk_op = new Stack<Character>();
 34         Stack<Character> sk_num = new Stack<Character>();
 35         int i=0;
 36         char c;
 37         while((c=exp.charAt(i))!='=')
 38         {
 39             if(c<58&&c>48)
 40             {
 41                 sk_num.push(c);
 42 //                System.out.println("num = "+c);
 43             }
 44             else
 45             {
 46                 if(c == '(')
 47                 {
 48                     sk_op.push('(');
 49                 }
 50                 else if(c == ')')
 51                 {
 52                     char temp = sk_op.pop();
 53                     while(temp!='(')
 54                     {
 55                         sk_num.push(temp);
 56                         temp = sk_op.pop();
 57                     }
 58                     sk_op.pop();
 59                 }
 60                 else
 61                 {
 62 //                    System.out.println("char = "+c);
 63                     if(sk_op.isEmpty())
 64                     {
 65                         sk_op.push(c);
 66                     }
 67                     else
 68                     {
 69                         if(youxianji(c)>youxianji(sk_op.firstElement()))
 70                         {
 71                             sk_op.push(c);
 72                         }
 73                         else
 74                         {
 75                             while(youxianji(c)<=youxianji(sk_op.firstElement()))
 76                             {
 77                                 sk_num.push(sk_op.pop());
 78                                 if(sk_op.isEmpty()) break;
 79                             }
 80                             sk_op.push(c);
 81                         }
 82                     }
 83                 }
 84             }
 85             i++;
 86         }
 87         while(!sk_op.isEmpty())
 88         {
 89             sk_num.push(sk_op.pop());
 90         }
 91         result = sk_num.toString();
 92         System.out.println(result);
 93         return result;
 94     }
 95 //3.求后缀表达式的结果
 96     public int getResult()
 97     {
 98         return 0;
 99     }
100     public char getOp(int i)
101     {
102         char op;
103         switch (i) {
104         case 0:
105             op = '+';
106             break;
107         case 1:
108             op = '-';
109             break;
110         case 2:
111             op = '*';
112             break;
113         case 3:
114             op = '/';
115             break;
116         default:
117             op = '+';
118             break;
119         }
120         return op;
121     }
122     public String RandomQ()
123     {
124         Random r = new Random();
125         int num1 = r.nextInt(9)+1;
126         int num2 = r.nextInt(9)+1;
127         int num3 = r.nextInt(9)+1;
128         int num4 = r.nextInt(9)+1;
129         int op1 = r.nextInt(4);
130         int op2 = r.nextInt(4);
131         int op3 = r.nextInt(4);
132         String exp = num1+""+getOp(op1)+""+num2+""+getOp(op2)+""+num3+""+getOp(op3)+""+num4+"=";
133         System.out.println(exp);
134         return exp;
135     }
136     public static void main(String[] args) {
137         // TODO Auto-generated method stub
138         Main m = new Main();
139         for(int i=0;i<30; i++){
140             String exp = m.RandomQ();
141             String exp1 = m.NiBoLan(exp);
142         }
143     }
144
145 }

逆波兰 四则运算

程序运行结果如下:

感想:

我与伟硕第一次结对编程是改进他的词频统计程序,他当时就完成的非常好,思路清晰,手段明确,效果展示非常棒。从这次结对编程我又有了几点体会:

  1. 两个人工作的效率要比一个人高得多,因为两个人在结对编程的时候会不断讨论,这样两个人可以更长时间的集中注意力。
  2. 两个人工作的效率高另一个原因是一个人写的代码很容易出错,而两个人一块代码出错的机率就大大降低,尤其是低级错误。
  3. 写伪代码绝对是一个好方法,在编程之前,思路越清晰设计越详细越好,设计时间>编程时间 是绝对值得的作法。
  4. 编程过程中,我们两人没有一人碰过手机,刷过朋友圈,玩过游戏。
  5. 编程之前两个人一定要统一思路。
  6. 伟硕很棒,逻辑思维能力比我强很多,我研究了一天的逆波兰,他很快就整明白了。

todo:

运算结果

效能分析

8. 不同 语言/类型 单元测试工具

VS单元测试工具:

JAVA单元测试工具Junit:

这是我对四则运算做的一个简单测试。

9. 内聚 耦合有几种,参见《软件工程实践者之路》

《软件工程实践者的研究方法》(本科教学版)第204页

内聚性意味着构件或者类只封闭那些相互关联密切,以及与构件或类自身有密切关系的属性和操作。

LET01定义了许多不同类型的内聚性(按照内聚性的级别排序):

  • 功能内聚
  • 分层内聚
  • 通信内聚
  • 顺序内聚
  • 过程内聚
  • 暂时内聚
  • 实用内聚

耦合是类之间彼此联系程序的一种定性度量。随着类(构件)相互依赖越来越多,类之间的耦合程序亦会增加。在构件级别设计中,一个重要的目标就是尽可能保持低耦合。

LET01定义了如下耦合分类:

  • 内容耦合
  • 共用耦合
  • 控制耦合
  • 印记耦合
  • 数据耦合
  • 例程调用耦合
  • 类型使用耦合
  • 包含或者导入耦合
  • 外部耦合

10. 测试自动化工具

自动化测试,其理念就是应用各种手段模拟人工操作,节省人力测试成本,保证产品测试质量。下面介绍9中自动化测试工具。(内容源自于百度百科)
  • QTP全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0QTP是quicktest
    Professional 的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对 应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等QuickTest针对的是GUI应用程序,包括传统的Windows应用 程序,以及现在越来越流行的Web应用。它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。其中包括:创建测试、插入检查点、检 验数据、增强测试、运行测试、分析结果和维护测试等方面。
  • WinRunnerMercury Interactive 公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操 作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用 无故障发布及长期稳定运行。企业级应用可能包括Web应用系统,ERP系统,CRM系统等等。这些系统在发布之前,升级之后都要经过测试,确保所有功能都 能正常运行,没有任何错误。如何有效地测试不断升级更新且不同环境的应用系统,是每个公司都会面临的问题。
  • Rational Robot是业界最顶尖的功能测试工具,它甚至可以在测试人员学习高级脚本技术之前帮助其进行成功的测试。它集成在测试人员的桌面IBM
    Rational Test
    Manager上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能是自动化测试的理想开始。
  • AdventNet QEngineAdventNet QEngine是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java
    API 测试、SOAP测试、回归测试和Java应用性能测试。支持对于使用HTML、JSP、ASP、.NET、PHP、 JavaScript/VBScript、XML、SOAP、WSDL、e-commerce、传统客户端/服务器等开发的应用程序进行测试。此工具以 Java开发,因此便于移植和提供多平台支持。
  • SilkTest 是业界领先的、用于对企业级应用进行功能测试的产品,可用于测试Web、Java或是传统的C/S结构。SilkTest提供了许多功能,使用户能够高效 率地进行软件自动化测试。这些功能包括:测试的计划和管理;直接的数据库访问及校验;灵活、强大的4Test脚本语言,内置的恢复系统(Recovery System);以及具有使用同一套脚本进行跨平台、跨浏览器和技术进行测试的能力。
  • QA RunQARun 的测试实现方式是通过鼠标移动、键盘点击操作被测应用,即而得到相应的测试脚本,对该脚本可以进行编辑和调试。在记录的过程中可针对被测应用中所包含的功 能点进行基线值的建立,换句话说就是在插入检查点的同时建立期望值。在这里检查点是目标系统的一个特殊方面在一特定点的期望状态。通常,检查点在 QARun提示目标系统执行一系列事件之后被执行。检查点用于确定实际结果与期望结果是否相同。
  • Test Partner 是一个自动化的功能测试工具,它专为测试基于微软、Java和Web技术的复杂应用而设计。它使测试人员和开发人员都可以使用可视的脚本编制和自动向导来 生成可重复的测试,用户可以调用VBA的所有功能,并进行任何水平层次和细节的测试。TestPartner的脚本开发采用通用的、分层的方式来进行。没 有编程知识的测试人员也可以通过TestPartner的可视化导航器来快速创建测试并执行。通过可视的导航器录制并回放测试,每一个测试都将被展示为树 状结构,以清楚地显现测试通过应用的路径。
  • Holodeck-强大的故障植入软件测试工具Holodeck is an advanced fault-injection tool that gives you the power to attack an application while it monitors and
    logs everything your application does - every function call, registry entry,
    piece of data read or written.
  • Telelogic TAUTAU第二代包含三个最新的、最强大的技术用来加速大规模软件开发和测试:统一建模语言(UML)及它的许多最新修订版本中的特性,UML2.0;功能强大的测试语言TTCN-3和新的构造系统的方法:Model
    Driven
    Architecture(模 型驱动构架)。这三个新的业界标准结合成TAU的已经过认可的软件开发平台,形成了一个系统,一个一流的稳定可靠的工具解决方案。TAU第二代是系统与软 件开发解决方案的一个突破,它把业界从使用了太长时间的手工、易出错、以代码为中心的方法中释放出来,自然而然地迈向下一步,一个更加可视化、自动化及可 靠的开发方法。Telelogic
    TAU/Tester是基于通用测试语言TTCN-3,用于自动化的系统和集成测试的强大工具。TAU /Tester以现代化的开发工具为基础,提供高层测试功能,支持整个测试生命周期,加速自动化测试。TAU/Tester可使用户特别关注于测试的开 发,因为TTCN-3语言是独立于开发语言或测试设备的,且是抽象和可移植的。

推荐一篇博客:http://blog.chinaunix.net/uid-7509663-id-3069999.html

声明:以上内容均来自百度经验。

11. 给当前所做的项目做测试矩阵

12. 剧透Beta发布

转载于:https://www.cnblogs.com/zhengrui0452/p/5388971.html

软件工程_东师站_第六周作业相关推荐

  1. 软件工程_东师站_总结

    一.团队成员介绍 团队名称: 耐撕(Nice) 团队队长: 蕊哥:http://www.cnblogs.com/zhengrui0452/ 团队其他队员: 亮哥:http://www.cnblogs. ...

  2. 软件工程_东师站_课堂笔记

    一.课程内容 12周学习成果展示,final发布 耐撕团队final发布成果: 抢答器: Coding地址: 下载地址:耐撕团队_抢答器V1 客户端视频地址:http://v.youku.com/v_ ...

  3. 计算机基础18春在线作业1,东师-计算机应用基础18春在线作业1-1.docx

    东师计算机应用基础18春在线作业1 1.A 2.A 3.C 4.D 5.B 一.单选题共25题,62.5分 1.I/O接口位于 A总线和I/O设备之间 BCPU和I/O设备之间 C主机和总线之间 DC ...

  4. 18春东师计算机应用基础,东师计算机应用基础18春在线作业31.docx

    东师计算机应用基础18春在线作业3 1.A 2.A 3.D 4.D 5.C 一.单选题共25题,62.5分 1.解释程序的功能是 A解释执行高级语言程序 B解释执行汇编语言程序 C将汇编语言程序编译成 ...

  5. 计算机应用基础18春在线作业1答案,东师计算机应用基础-18春在线作业1.docx

    东师计算机应用基础18春在线作业1 1.A 2.C 3.C 4.C 5.B 一.单选题共25题,62.5分 1.国际区位.全拼双音.五笔字型和自然码是不同种类的汉字 A外码 B内码 C字型码 D交换码 ...

  6. 奥鹏东师计算机应用基础18,免费在线作业答案奥鹏东师计算机应用基础15秋在线作业1试卷及答案(1)...

    奥鹏东师计算机应用基础15秋在线作业1试卷及答案(1) 一.单选题(共25道试题,共62.5分.) 1.在Excel 中保存的工作簿默认的文件扩展名是(). A. XLS B. DOC C. DBF ...

  7. 计算机应用基础18春在线作业2,东师计算机应用基础18——春在线作业2.docx

    东师计算机应用基础18春在线作业2 1.D 2.A 3.C 4.D 5.C 一.单选题共25题,62.5分 1.在微型计算机的硬件设备中,既可以做输出设备又可以做输入设备的是 A绘图仪 B扫描仪 C手 ...

  8. 东师计算机应用基础20在线作业3,东师计算机应用基础-18春在线作业3-1.docx

    东师计算机应用基础18春在线作业3 1.A 2.A 3.D 4.D 5.C 一.单选题共25题,62.5分 1.解释程序的功能是 A解释执行高级语言程序 B解释执行汇编语言程序 C将汇编语言程序编译成 ...

  9. 东师18春计算机在线作业答案,东师计算机应用基础18春在线作业3.docx

    东师计算机应用基础18春在线作业3 1.D 2.C 3.D 4.B 5.C 一.单选题共25题,62.5分 1.I/O设备直接( ) A与主机相连接 B与CPU相连接 C与主存储器相连接 D与I/O接 ...

最新文章

  1. Java8 Stream流递归,几行代码搞定遍历树形结构
  2. http请求过程 Android,android HTTP网络请求回顾
  3. 阿里云yum源安装SVN失败的问题
  4. idea快速从dao层跳转到mapper.xml文件的插件
  5. 腾讯云黑石TStack一体机柜斩获2019数博会领先科技成果双重“优秀项目奖”
  6. jvm中的年轻代 老年代 持久代 gc ----------转载
  7. [转]vmware 域网络搭建
  8. HTTP协议的无状态性
  9. vc++开发学习二(模态对话框和非模态对话框的创建和销毁)
  10. java struts2 例子_java struts2入门学习实例--用户注册和用户登录整合
  11. 【ZBrush笔刷】实用笔刷和Alpah下载,及笔刷使用方法
  12. 华为手机html文件是什么,如何备份华为手机文件
  13. c语言源程序要求每行只能书写一条语句,C语言试题库(含答案)
  14. ICPC Central Europe Regional Contest 2019【山东大学】 部分题解
  15. Monkey工具详解
  16. vscode中文注释斜体修改
  17. DNSPod十问顺丰科技唐恺:为什么顺丰快递那么快?
  18. c语言数码管中断器,数码管动态显示 定时器中断 数码管动态显示不正常
  19. MyEclipse6.5注册码
  20. 论文阅读:No-Reference Image Quality Assessment with Global Statistical Features

热门文章

  1. html5关于校庆作品名称,十周年校庆幼少儿组绘画作品展
  2. springboot项目集成了mybatis之后编译报错
  3. python统计字符频次_Python 统计长字符串中字符频次
  4. 浅谈静电场的边值问题(包括数学物理方法和数值计算)
  5. Android中的数据存储
  6. android 微信 备份通讯录,用微信导入手机通讯录?安卓手机的备份方法介绍
  7. 机器学习: 离散变量的概率分布
  8. 执行exe报计算机中丢失qtdll,Qt入门教程(2) 直接运行Qt生成的exe报错缺少dll文件 | 阿拉灯...
  9. 华为云郑叶来:坚持普惠AI,打造通往未来的EI智能体
  10. Redis阻塞的几种原因