• 软件工程_东师站_第六周作业


    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发布

  • 相关阅读:
    简单两步 ~ 绕过 "Paused in debugger"
    Python3 与 C# 并发编程之~ 线程篇
    【翻译】七个习惯提高Python程序的性能
    Jupyter-Notebook 远程访问
    Ubuntu18.04下给Jupyter-NoteBook设置默认工作路径(附Win设置和pip版)
    Python3 与 C# 并发编程之~ 进程篇
    Python3 与 C# 并发编程之~进程先导篇
    交叉编译调试qemu_guest_agent
    OVN简单部署
    OVN学习(三)
  • 原文地址:https://www.cnblogs.com/zhengrui0452/p/5388971.html
Copyright © 2020-2023  润新知