当前位置:文档之家› 手机客观题测试软件开发的叙述

手机客观题测试软件开发的叙述

手机客观题测试软件开发的叙述
手机客观题测试软件开发的叙述

手机客观题测试软件开发的叙述

这一学年承担对口高职升学考试的教育教学工作,想到其中客观题(四川省的,包括填空题)分值占到了近75%,因此充分结合学生同期学习的Access2010数据库,将这些题随机抽取、答案随机变幻顺序后制作成一定题量的试卷,可以让学生在Access窗体上、在浏览器上考试,还可以在手机上自我随时随地考试。这里暂时仅上手机上的处理方式挂出,希望得到高人指点。

一、手机程序界面

各自名称如下图所示:

二、菜单设计,其内容如下代码所示:

android:id="@+id/action_settings1"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings1"/>

android:id="@+id/action_settings2"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings2"/>

android:id="@+id/action_settings3"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings3"/>

android:id="@+id/action_settings4"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings4"/>

android:id="@+id/action_settings5"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings5"/>

菜单文字等内容如下XML文件:

信息一类客观题测试

交卷

查询

帮助

关于

关闭

世界你好!

|<

<<

>|

>>

三、试题源,我将其放在arrays.xml文件中,简图见下:

共内容太多,占一万多行(当然这是根据题的多少而定的),下面仅将部分内容贴出。

1.单选题

2.多选题

3.判断题

4.填空题

四、源代码如下:

package com.ltj.zjdkgktest;

import java.util.ArrayList;

import java.util.Random;

import android.os.Bundle;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Color;

import android.view.GestureDetector;

import android.view.GestureDetector.OnGestureListener; import android.view.Gravity;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.EditText;

import android.widget.SeekBar;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity implements OnGestureListener {

private TextView tvQuestion, tvStandard;// 问题及标准答案文本框

private CheckBox chkOptionA, chkOptionB, chkOptionC, chkOptionD;// 四个复选框分别记录客观题的四个或两个备选答案

private Button btnAnswerOk;// 确认填空题答案

private Button btnFirst, btnPrev, btnNext, btnLast;// 四个导航按钮,依次为第一、上一、下一和最后private Button btnShowOrHide;// 显示或隐藏标准答案显示,仅在交卷后才能够起作用

private EditText etWriteBlank;// 填写答案的文本编辑框

private SeekBar sbNavigationBar;// 导航条

private String[] singleQuestions;// 读取全部单选题

private String[][] singleOptions;// 读取全部单选题的四个备选答案

private String[] singleStandards;// 读取全部单选题的标准答案

private String[] multiQuestions;// 读取全部多选题

private String[][] multiOptions;// 读取全部多选题的四个备选答案

private String[] multiStandards;// 读取全部多选题的标准答案

private String[] judgeQuestions;// 读取全部判断题

private String[] judgeStandards;// 读取全部判断题的标准答案

private String[] blankQuestions;// 读取全部填空题

private String[] blankStandards;// 读取全部填空题的标准答案

private int singleTotal, multiTotal, judgeTotal, blankTotal;// 各类题型分别的题量

private int singleRandom, multiRandom, judgeRandom, blankRandom;// 各种题型应抽取的题量值

private int randomFirst, randomSecond, randomThird, randomFourth;// 各类题型的界定范围值

private String[] randomQuestions;// 随机产生的题目放置的数组

private String[][] randomOptions;// 随机产生对应题目的四个备选项的数组

private String[] randomStandards;// 随机产生对应题目的标准答案

private String[] yourAnswers;// 考试者回答的答案

private int[] yourScores;// 评判后对应题目的成绩

private int currentRecord;// 当前题目所在的序号:从0开始的,直到randomFourth-1

private boolean submitYesOrNo;// 是否提交,如果提交了,“?”号按钮才可用,以显示或隐藏各题答案。

private boolean answerShowOrHide;// 标准答案是显示还是隐藏状态,以上两个同时为真时,才显示标准答案

private TestDbHelper myOpenHelper;// 定义一个内部类的对象——TestDbHelper的对象

private GestureDetector gd;//

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/e214294152.html,yout.activity_main);

this.initAllWidgets();// 初始化各个控件

this.initReadArrayData();// 读取各类题型的题目、备选项、标准答案

int randomTotal = this.initRandomVarables();// 初始化各类题型随机抽取的题量,各类题型的界定范围

this.initRandomArrays(randomTotal);// 初始化将要用到的随机数组

this.randomExtractSingle(0, this.singleRandom, this.singleTotal);// 随机抽取单选题

this.randomExtractMulti(this.randomFirst, this.multiRandom,

this.multiTotal);// 随机抽多选题

this.randomExtractJudge(this.randomSecond, this.judgeRandom,

this.judgeTotal);// 随机抽判断题

this.randomExtractBlank(this.randomThird, this.blankRandom,

this.blankTotal);// 随机抽判断题

this.sbNavigationBar

.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar arg0, int arg1,

boolean arg2) {

// 拖动导航条时调用

currentRecord = arg1;// 当前记录号与导航条进度数一致

showEachQuestion(currentRecord);// 调用显示每一个问题的事件

}

@Override

public void onStartTrackingTouch(SeekBar arg0) {

// 拖动导航条开始时调用

}

@Override

public void onStopTrackingTouch(SeekBar arg0) {

// 拖动导航条停止时调用

}

});

this.btnShowOrHide.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 按钮显示隐藏标准答案的按钮的单击事件

answerShowOrHide = !answerShowOrHide;// 原来隐藏,则后显示,如果原为显示,则这时会显示

if (!answerShowOrHide) {

btnShowOrHide.setText("显示");// 设置按钮上的文本

tvStandard.setVisibility(View.INVISIBLE);// 标准答案文本框不显示

} else {

btnShowOrHide.setText("隐藏");

tvStandard.setVisibility(View.VISIBLE);// 标准答案文本框显示

}

}

});

this.btnFirst.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View arg0) {

// 到首记录的按钮事件

sbNavigationBar.setProgress(currentRecord = 0);// 导航条移到0

}

});

this.btnPrev.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View arg0) {

// 到上一记录的按钮事件

if (currentRecord > 0) {

sbNavigationBar.setProgress(--currentRecord);// 导航条上移一条,记录号减1 }

}

});

this.btnLast.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View arg0) {

// 到末记录的按钮事件

sbNavigationBar.setProgress(currentRecord = randomFourth - 1);// 导航条移到最后}

});

this.btnNext.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View arg0) {

// 到下一记录的按钮事件

if (currentRecord < randomFourth - 1) {

sbNavigationBar.setProgress(++currentRecord);// 导航条下移一条,记录号加1 }

}

});

this.chkOptionA.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 复选框A的单击事件,分单选、多选和判断而不同

allCheckBoxHandle(1);// 点击第一个复选框时,调用时用参数1

}

});

this.chkOptionB.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 复选框B的单击事件,分单选、多选和判断而不同

allCheckBoxHandle(2);// 点击第一个复选框时,调用时用参数2

}

});

this.chkOptionC.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 复选框C的单击事件,分单选、多选和判断而不同

allCheckBoxHandle(3);// 点击第一个复选框时,调用时用参数3

}

});

this.chkOptionD.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 复选框D的单击事件,分单选、多选和判断而不同

allCheckBoxHandle(4);// 点击第一个复选框时,调用时用参数4

}

});

this.btnAnswerOk.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 填空题的答案填写好后,单击此按钮则记录其中答案于对于数组yourAnswers中

String tmpYours = etWriteBlank.getText().toString().trim();// 取出你填写的答案的内容,并去前后空格

String tmpStandard = randomStandards[currentRecord];// 取出对应的标准答案

yourAnswers[currentRecord] = tmpYours;// 将填写的答案记入你的答案中,以备下次到此处时,原来的内容在

if (tmpYours.equalsIgnoreCase(tmpStandard)) {// 忽略大小写,相等则给你成绩为3分,否则对应的记为0分

yourScores[currentRecord] = 3;// 记上3分

} else {

yourScores[currentRecord] = 0;// 记0分

}

}

});

this.sbNavigationBar.setMax(this.randomFourth - 1);// 设置导航条的最大值为全部题量值减去1

this.sbNavigationBar.setProgress(0);// 设置导航条初始值为0

}

protected void allCheckBoxHandle(int who) {

// 处理复选框单击后要做的事情,who为按钮序号

int p = currentRecord;// 当前记录位置

if (p < this.randomFirst) {// 如果当前位置处于单选题范围时

this.chkOptionA.setChecked(false);// 在单击一个复选框时,设置所有复选框均为不选中状态,再根据参数who决定哪一个被选中

this.chkOptionB.setChecked(false);

this.chkOptionC.setChecked(false);

this.chkOptionD.setChecked(false);

switch (who) {// 根据单击复选框时传递的序号,判断哪个复选框应该处于选中状态

case 1:

this.chkOptionA.setChecked(true);

break;

case 2:

this.chkOptionB.setChecked(true);

break;

case 3:

this.chkOptionC.setChecked(true);

break;

case 4:

this.chkOptionD.setChecked(true);

break;

}

int rightAnswer = Integer.parseInt(this.randomStandards[p]);// 取出标准答案的序号

this.yourAnswers[p] = "" + who;// 记录你当前题目的答案值于数组yourAnswers中

if (rightAnswer == who) {// 如果你的点击的复选框序号与标准答案的序号值一样

this.yourScores[p] = 3;// 记3分

} else {

this.yourScores[p] = 0;// 否则不得分,记为0

}

} else if (p < this.randomSecond) {// 如果当前位置处于多选题范围时

String multiAnswer = "";// 用于暂时记录内容

multiAnswer = (this.chkOptionA.isChecked() ? "1" : "0")

+ (this.chkOptionB.isChecked() ? "1" : "0")

+ (this.chkOptionC.isChecked() ? "1" : "0")

+ (this.chkOptionD.isChecked() ? "1" : "0");// 从A开始依次判断哪些复选框被选中,选中则对应位置记“1”,否则记“0”

this.yourAnswers[p] = multiAnswer;// 记录你的回答答案,以四位0、1表示,1表示选中,0表示没有选

String rightAnswer = this.randomStandards[p];// 读取当前位置记录的标准答案

if (rightAnswer.equals(multiAnswer)) {// 你的答案与标准答案比对,如果相等

this.yourScores[p] = 4;// 则记4分

} else {

this.yourScores[p] = 0;// 否则不得分,记0

}

} else if (p < this.randomThird) {// 如果当前位置处于判断题范围时

this.chkOptionA.setChecked(false);// 单击正确或错误这两个选项之一时,先将它们均置未选中状态

this.chkOptionB.setChecked(false);// 这个也置未选中状态

if (who == 1) {// 判断当前选中的是正确还是错误复选框

this.chkOptionA.setChecked(true);// who为1,则选中正确框

} else {

this.chkOptionB.setChecked(true);// who为2时,选中错误框

}

int rightAnswer = Integer.parseInt(this.randomStandards[p]);// 取出标准答案的序号

this.yourAnswers[p] = "" + who;// 记录你当前题目的答案值于数组yourAnswers中

if (rightAnswer == who) {// 如果你的点击的复选框序号与标准答案的序号值一样

this.yourScores[p] = 2;// 记3分

} else {

this.yourScores[p] = 0;// 否则不得分,记为0

}

}

}

protected void showEachQuestion(int record) {

// 根据问题序号显示相应的题目及备选项

if (record == 0) {// 导航按钮的显示情况

this.btnFirst.setEnabled(false);// 为首记录时,前两个按钮不可用,后两个按钮可用

this.btnPrev.setEnabled(false);

this.btnNext.setEnabled(true);

this.btnLast.setEnabled(true);

} else if (record == this.randomFourth - 1) {

this.btnFirst.setEnabled(true);// 为末记录时,后两个按钮不可用,前两个按钮可用

this.btnPrev.setEnabled(true);

this.btnNext.setEnabled(false);

this.btnLast.setEnabled(false);

} else {

this.btnFirst.setEnabled(true);// 非首末记录时,所有四个按钮均可用

this.btnPrev.setEnabled(true);

this.btnNext.setEnabled(true);

this.btnLast.setEnabled(true);

}

if (record < randomFirst) {

this.chkOptionA.setVisibility(View.VISIBLE);// 设置备选可见

this.chkOptionB.setVisibility(View.VISIBLE);// 设置备选可见

this.chkOptionC.setVisibility(View.VISIBLE);// 设置备选可见

this.chkOptionD.setVisibility(View.VISIBLE);// 设置备选可见

this.etWriteBlank.setVisibility(View.INVISIBLE);// 设置填空写答案处不可见

this.btnAnswerOk.setVisibility(View.INVISIBLE);// 设置填空答案确认按钮不可见

if (this.submitYesOrNo && this.answerShowOrHide) {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.VISIBLE);// 设置标准答案显示

} else {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.INVISIBLE);// 设置标准答案不显示

}

https://www.doczj.com/doc/e214294152.html,Question.setText((record + 1) + "(单选)、"

+ this.randomQuestions[record]);// 设备问题及题号

String yours = this.yourAnswers[record];// 记录当前你的选择答案序号

this.chkOptionA.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionB.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionC.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionD.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

if (yours != "") {// 如果答案不为空,才执行下列内容

switch (Integer.parseInt(yours)) {// 具体到1、2、3、4四个序号中的哪个一个时,则对应的复选框被选中

case 1:

this.chkOptionA.setChecked(true);

break;

case 2:

this.chkOptionB.setChecked(true);

break;

case 3:

this.chkOptionC.setChecked(true);

break;

case 4:

this.chkOptionD.setChecked(true);

break;

}

}

this.chkOptionA.setText("A. " + this.randomOptions[0][record]);// 设备备选内容

this.chkOptionB.setText("B. " + this.randomOptions[1][record]);// 设备备选内容

this.chkOptionC.setText("C. " + this.randomOptions[2][record]);// 设备备选内容

this.chkOptionD.setText("D. " + this.randomOptions[3][record]);// 设备备选内容

https://www.doczj.com/doc/e214294152.html,Standard.setText(this.randomStandards[record]);// 设置标准答案内容

} else if (record < this.randomSecond) {

this.chkOptionA.setVisibility(View.VISIBLE);// 几乎同单选题各项处理

this.chkOptionB.setVisibility(View.VISIBLE);

this.chkOptionC.setVisibility(View.VISIBLE);

this.chkOptionD.setVisibility(View.VISIBLE);

this.etWriteBlank.setVisibility(View.INVISIBLE);

this.btnAnswerOk.setVisibility(View.INVISIBLE);

if (this.submitYesOrNo && this.answerShowOrHide) {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.VISIBLE);// 设置标准答案显示

} else {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.INVISIBLE);// 设置标准答案不显示

}

https://www.doczj.com/doc/e214294152.html,Question.setText((record + 1) + "(多选)、"

+ this.randomQuestions[record]);// 此处标记为多选题

this.chkOptionA.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionB.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionC.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionD.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

String yours = this.yourAnswers[record];// 记录多选题你的答案值

if (yours != "") {// 如果答案不为空——表示你已经作答的

char[] charAbcd = yours.toCharArray();// 将你答案中的0、1值依次送入字符数组,以便一个一个判断

if (charAbcd[0] == '1') {// 如果第一个位置为‘1’,则设置第一个复选框为选中状态,否则为不选中状态。注意否则必须要有

this.chkOptionA.setChecked(true);

} else {

this.chkOptionA.setChecked(false);

}

if (charAbcd[1] == '1') {// 如果第二个位置为‘1’,则设置第二个复选框为选中状态,否则为不选中状态。注意否则必须要有

this.chkOptionB.setChecked(true);

} else {

this.chkOptionB.setChecked(false);

}

if (charAbcd[2] == '1') {// 如果第三个位置为‘1’,则设置第三个复选框为选中状态,否则为不选中状态。注意否则必须要有

this.chkOptionC.setChecked(true);

} else {

this.chkOptionC.setChecked(false);

}

if (charAbcd[3] == '1') {// 如果第四个位置为‘1’,则设置第四个复选框为选中状态,否则为不选中状态。注意否则必须要有

this.chkOptionD.setChecked(true);

} else {

this.chkOptionD.setChecked(false);

}

}

this.chkOptionA.setText("A. " + this.randomOptions[0][record]);

this.chkOptionB.setText("B. " + this.randomOptions[1][record]);

this.chkOptionC.setText("C. " + this.randomOptions[2][record]);

this.chkOptionD.setText("D. " + this.randomOptions[3][record]);

https://www.doczj.com/doc/e214294152.html,Standard.setText(this.randomStandards[record]);

} else if (record < this.randomThird) {

this.chkOptionA.setVisibility(View.VISIBLE);// 此仅设两个复选框显示,其余不显示

this.chkOptionB.setVisibility(View.VISIBLE);

this.chkOptionC.setVisibility(View.INVISIBLE);

this.chkOptionD.setVisibility(View.INVISIBLE);

this.etWriteBlank.setVisibility(View.INVISIBLE);

this.btnAnswerOk.setVisibility(View.INVISIBLE);

if (this.submitYesOrNo && this.answerShowOrHide) {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.VISIBLE);// 设置标准答案显示

} else {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.INVISIBLE);// 设置标准答案不显示

}

String yours = this.yourAnswers[record];// 记录当前答案序号

this.chkOptionA.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

this.chkOptionB.setChecked(false);// 转入到一个新记录时,均设置为未选中状态

if (yours != "") {// 如果答案不为空,才执行下列内容

if (Integer.parseInt(yours) == 1) {// 具体到1、2四个序号中的哪个一个时,则对应的复选框被选中

this.chkOptionA.setChecked(true);// 为1,则选中正确复选框

} else if (Integer.parseInt(yours) == 2) {

this.chkOptionB.setChecked(true);// 为0,表示选中第二个复选框“错误”

}

}

https://www.doczj.com/doc/e214294152.html,Question.setText((record + 1) + "(判断)、"

+ this.randomQuestions[record]);// 标记为判断并问题

this.chkOptionA.setText("A. 正确");// 备选答案固定的两种:正确、错误

this.chkOptionB.setText("B. 错误");

https://www.doczj.com/doc/e214294152.html,Standard.setText(this.randomStandards[record]);

} else if (record < this.randomFourth) {

this.chkOptionA.setVisibility(View.INVISIBLE);// 复选框均不可见

this.chkOptionB.setVisibility(View.INVISIBLE);

this.chkOptionC.setVisibility(View.INVISIBLE);

this.chkOptionD.setVisibility(View.INVISIBLE);

this.etWriteBlank.setVisibility(View.VISIBLE);// 填写答案的编辑框显示出来

this.btnAnswerOk.setVisibility(View.VISIBLE);// 确认填空答案内容的按钮显示出来

if (this.submitYesOrNo && this.answerShowOrHide) {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.VISIBLE);// 设置标准答案显示

} else {

https://www.doczj.com/doc/e214294152.html,Standard.setVisibility(View.INVISIBLE);// 设置标准答案不显示

}

https://www.doczj.com/doc/e214294152.html,Question.setText((record + 1) + "(填空)、"

+ this.randomQuestions[record]);// 标记为填空并显示问题

https://www.doczj.com/doc/e214294152.html,Standard.setText(this.randomStandards[record]);// 设置标准答案,但是被暂时隐藏着的

this.etWriteBlank.setText(this.yourAnswers[record]);// 编辑框中记录你答案中的文本信息}

}

private void randomExtractBlank(int int0, int int1, int int2) {

// 随机抽取填空题,并放入random系列字符串型数组中,第一个参数:数组起始序号,第二个为题量值,起始序号+题量值即可得到此中数组终止的值,第三个为总题量

ArrayList blankArrayList = this.randomCreateIntegerArray(int2,

int1);// 产生0~int2-1之间的随机整数,共int1个

for (int i = int0, j = 0; j < int1; i++, j++) {// i用以表示最后抽出的题目的序号,此从int0~int0+int1-1;j 表示其中元素个数

int arrElement = blankArrayList.get(j);// 依次取得数组列表中的int1个元素

this.randomQuestions[i] = this.blankQuestions[arrElement];// 取出题目

this.randomStandards[i] = this.blankStandards[arrElement];// 取出对应题目的标准答案}

}

private void randomExtractJudge(int int0, int int1, int int2) {

// 随机抽取判断题,并放入random系列字符串型数组中,第一个参数:数组起始序号,第二个为题量值,起始序号+题量值即可得到此中数组终止的值,第三个为总题量

ArrayList judgeArrayList = this.randomCreateIntegerArray(int2,

int1);// 产生0~int2-1之间的随机整数,共int1个

for (int i = int0, j = 0; j < int1; i++, j++) {// i用以表示最后抽出的题目的序号,此从int0~int0+int1-1;j 表示其中元素个数

int arrElement = judgeArrayList.get(j);// 依次取得数组列表中的int1个元素

this.randomQuestions[i] = this.judgeQuestions[arrElement];// 取出题目

this.randomStandards[i] = this.judgeStandards[arrElement];// 取出对应题目的标准答案

}

}

private void randomExtractMulti(int int0, int int1, int int2) {

// 随机抽取多选题,并放入random系列字符串型数组中,第一个参数:数组起始序号,第二个为题量值,起始序号+题量值即可得到此中数组终止的值,第三个为总题量

ArrayList multiArrayList = this.randomCreateIntegerArray(int2,

int1);// 产生0~int2-1之间的随机整数,共int1个

for (int i = int0, j = 0; j < int1; i++, j++) {// i用以表示最后抽出的题目的序号,此从int0~int0+int1-1;j 表示其中元素个数

int arrElement = multiArrayList.get(j);// 依次取得数组列表中的int1个元素

this.randomQuestions[i] = this.multiQuestions[arrElement];// 取出题目

char[] answerOneOrZero = new char[4];// 为提取多选答案中的各“1”或“0”这个数字

answerOneOrZero = this.multiStandards[arrElement].toCharArray();// 将对应标准答案转化为字符数组

String answerText = "";// 写标准答案所包含文字的字符串,初值为空串

for (int k = 0; k < 4; k++) {// 依次取出标准答案中各字符进行判断

if (answerOneOrZero[k] == '1') {// 如果对应的位置上字符为‘1’则分别以“[[”和“]]”来作界定

answerText += "[[" + this.multiOptions[k][arrElement]

+ "]]";// 获取标准答案所对应的文字叠加,成为新的答案内容

}

}

ArrayList abcdArrayList = new ArrayList();// A、B、C、D四个答案所得随机数组所放置的列表

String thirdOption, fourthOption;// 第三个、第四个答案,以备查其中是否有“以上”二字

thirdOption = this.multiOptions[2][arrElement];// 第三个备选答案

fourthOption = this.multiOptions[3][arrElement];// 第四个备选答案

if (thirdOption.contains("以上") && fourthOption.contains("以上")) {

// 如果第三、第四个备选答案均含有3、4的,则只随机产生2个号数

abcdArrayList = this.randomCreateIntegerArray(2);

abcdArrayList.add(2);// 第三个数直压入2

abcdArrayList.add(3);// 第四个数直压入3

} else if (fourthOption.contains("以上")) {

// 如果仅只有第四个备选答案含有“以上”字样,则只产生3个随机整数

abcdArrayList = this.randomCreateIntegerArray(3);

abcdArrayList.add(3);// 第四个数直压入3

} else {

abcdArrayList = this.randomCreateIntegerArray(4);// 产生四个随机整数

}

String newStandard = "";// 新的标准答案字符串,初值置空

for (int k = 0; k < 4; k++) {// 随机备选答案的生成并记录

// 抽取的题目的备选答案分别取自原multiOptions数组中的对应项

String tempOption = this.multiOptions[abcdArrayList.get(k)][arrElement];// 临时备选记录

this.randomOptions[k][i] = tempOption;// 随机后的备选答案,记录入最终题项相应选择中

if (answerText.contains("[[" + tempOption + "]]")) {// 若随机产生的备选项在标准答案文本中,则重新记录标准答案数组

newStandard += "1";// 如果包含其中,则相应位置记上“1”

} else {

newStandard += "0";// 否则相应位置记入“0”,保证新的标准答案由等长的4位“二进制数”表达

}

}

this.randomStandards[i] = newStandard;// 记录新的标准答案

}

}

private void randomExtractSingle(int int0, int int1, int int2) {

// 随机抽取单选题,并放入random系列字符串型数组中,第一个参数:数组起始序号,第二个为题量值,起始序号+题量值即可得到此中数组终止的值,第三个为总题量

ArrayList singleArrayList = this.randomCreateIntegerArray(

int2, int1);// 产生0~int2-1之间的随机整数,共int1个

for (int i = int0, j = 0; j < int1; i++, j++) {// i用以表示最后抽出的题目的序号,此从0~int1-1;j表示其中元素个数

int arrElement = singleArrayList.get(j);// 依次取得数组列表中的int1个元素

this.randomQuestions[i] = this.singleQuestions[arrElement];// 取出题目

int answerOrder = Integer

.parseInt(this.singleStandards[arrElement]) - 1;// 获取标准答案所表示的数字序号:0~3

String answerText = this.singleOptions[answerOrder][arrElement];// 获取标准答案所对应的文字内容

ArrayList abcdArrayList = new ArrayList();// A、B、C、D四个答案所得随机数组所放置的列表

String thirdOption, fourthOption;// 第三个、第四个答案,以备查其中是否有“以上”二字

thirdOption = this.singleOptions[2][arrElement];// 第三个备选答案

fourthOption = this.singleOptions[3][arrElement];// 第四个备选答案

if (thirdOption.contains("以上") && fourthOption.contains("以上")) {

// 如果第三、第四个备选答案均含有3、4的,则只随机产生2个号数

abcdArrayList = this.randomCreateIntegerArray(2);

abcdArrayList.add(2);// 第三个数直压入2

abcdArrayList.add(3);// 第四个数直压入3

} else if (fourthOption.contains("以上")) {

// 如果仅只有第四个备选答案含有“以上”字样,则只产生3个随机整数

abcdArrayList = this.randomCreateIntegerArray(3);

abcdArrayList.add(3);// 第四个数直压入3

} else {

abcdArrayList = this.randomCreateIntegerArray(4);// 产生四个随机整数

}

for (int k = 0; k < 4; k++) {// 随机备选答案的生成并记录

// 抽取的题目的备选答案分别取自原singleOptions数组中的对应项

String tempOption = this.singleOptions[abcdArrayList.get(k)][arrElement];// 临时备选记录

this.randomOptions[k][i] = tempOption;// 记录随机抽取题的备选内容

if (tempOption.equals(answerText)) {// 若随机产生的备选项与原标准答案文本一致,则重新记录标准答案数组

this.randomStandards[i] = "" + (k + 1);// 标准答案仍然是用序号,从1~4,分别对应A、B、C、D

}

}

}

}

private void initRandomArrays(int arrNum) {

// 初始化将要用来装各类题型的题目备选答案及标准答案的数组

this.randomQuestions = new String[arrNum];// 初始化问题数组

this.randomOptions = new String[4][arrNum];// 初始化四个备选项数组

this.randomStandards = new String[arrNum];// 初始化标准答案数组

this.yourAnswers = new String[arrNum];// 初始化你的回答数组

this.yourScores = new int[arrNum];// 初始化得分数组

for (int i = 0; i < arrNum; i++) {

this.yourAnswers[i] = ""; // 你的答案初值均记为空串,以便将官复选哪个(些)被选中或编辑框中是否有内容

this.yourScores[i] = 0;// 成绩初值均为0

}

}

@SuppressWarnings("deprecation")

private int initRandomVarables() {

// 初始化随机中通用到的变量

this.singleRandom = 41;// 将随机产生的单选题量

this.multiRandom = 9;// 将随机产生的多选题量

this.judgeRandom = 26;// 将随机产生的判断题量

this.blankRandom = 17;// 将随机产生的填空题量

this.randomFirst = this.singleRandom;// 单选题界定范围

this.randomSecond = this.randomFirst + this.multiRandom;// 多选题界定范围

this.randomThird = this.randomSecond + this.judgeRandom;// 判断题界定范围

this.randomFourth = this.randomThird + this.blankRandom;// 填空题界定范围

this.answerShowOrHide = false;// 显示或隐藏标准答案框

this.submitYesOrNo = false;// 是否提交

myOpenHelper = new TestDbHelper(this);// 初始化内部类对象myOpenHelper

this.gd = new GestureDetector(this);// 设置可以滑动的对象,这里就是本身LAYOUT

return this.randomFourth;// 返回总的抽取试题数量

}

private void initReadArrayData() {

// 从arrays.xml中读取各数组

// 对单选题的处理

this.singleQuestions = this.getResources().getStringArray(

R.array.singletms);// 读取单选题问题

this.singleTotal = this.singleQuestions.length;// 求出单选题题量

this.singleOptions = new String[4][this.singleTotal];// 初始化四个备选答案数组——二维数组this.singleOptions[0] = this.getResources().getStringArray(

R.array.singlebxas);// 读取单选题备选答案A

this.singleOptions[1] = this.getResources().getStringArray(

R.array.singlebxbs);// 读取单选题备选答案B

this.singleOptions[2] = this.getResources().getStringArray(

R.array.singlebxcs);// 读取单选题备选答案C

this.singleOptions[3] = this.getResources().getStringArray(

R.array.singlebxds);// 读取单选题备选答案D

this.singleStandards = this.getResources().getStringArray(

R.array.singledas);// 读取单选题标准答案

// 对多选题的处理

this.multiQuestions = this.getResources().getStringArray(

R.array.multitms);// 读取多选题问题

this.multiTotal = this.multiQuestions.length;// 求出多选题题量

this.multiOptions = new String[4][this.multiTotal];// 初始化四个备选答案数组——二维数组this.multiOptions[0] = this.getResources().getStringArray(

R.array.multibxas);// 读取多选题备选答案A

this.multiOptions[1] = this.getResources().getStringArray(

R.array.multibxbs);// 读取多选题备选答案B

this.multiOptions[2] = this.getResources().getStringArray(

R.array.multibxcs);// 读取多选题备选答案C

this.multiOptions[3] = this.getResources().getStringArray(

R.array.multibxds);// 读取多选题备选答案D

this.multiStandards = this.getResources().getStringArray(

R.array.multidas);// 读取多选题标准答案

// 对判断题的处理

this.judgeQuestions = this.getResources().getStringArray(

R.array.judgetms);// 读取判断题问题

this.judgeTotal = this.judgeQuestions.length;// 求出判断题题量

this.judgeStandards = this.getResources().getStringArray(

R.array.judgedas);// 读取判断题标准答案

// 对填空题的处理

this.blankQuestions = this.getResources().getStringArray(

R.array.blanktms);// 读取填空题问题

this.blankTotal = this.blankQuestions.length;// 求出填空题题量

this.blankStandards = this.getResources().getStringArray(

R.array.blankdas);// 读取填空题标准答案

}

private void initAllWidgets() {// 所有widget控件初始化

https://www.doczj.com/doc/e214294152.html,Question = (TextView) this.findViewById(R.id.textView1);// 列出试题

https://www.doczj.com/doc/e214294152.html,Standard = (TextView) this.findViewById(R.id.textView2);// 显示标准答案

this.chkOptionA = (CheckBox) this.findViewById(R.id.checkBox1);// 备选答案A

this.chkOptionB = (CheckBox) this.findViewById(R.id.checkBox2);// 备选答案B

this.chkOptionC = (CheckBox) this.findViewById(R.id.checkBox3);// 备选答案C

this.chkOptionD = (CheckBox) this.findViewById(R.id.checkBox4);// 备选答案D

this.btnAnswerOk = (Button) this.findViewById(R.id.button1);// 确认填空内容

this.btnFirst = (Button) this.findViewById(R.id.button2);// 第一道试题

this.btnPrev = (Button) this.findViewById(R.id.button3);// 上一道试题

this.btnLast = (Button) this.findViewById(R.id.button4);// 最后一道试题

this.btnNext = (Button) this.findViewById(R.id.button5);// 下一道试题

this.btnShowOrHide = (Button) this.findViewById(R.id.button6);// 显示隐藏标准答案

this.etWriteBlank = (EditText) this.findViewById(R.id.editText1);// 填空时,编写答案的文本编辑框

this.sbNavigationBar = (SeekBar) this.findViewById(R.id.seekBar1);// 导航条

https://www.doczj.com/doc/e214294152.html,Question.setTextSize(20);// 设置题目文本的大小

https://www.doczj.com/doc/e214294152.html,Question.setTextColor(Color.rgb(139, 26, 26));// 设题目的文本颜色

this.chkOptionB.setTextColor(Color.rgb(16, 78, 139));// 设备备选答案B的文本颜色

this.chkOptionD.setTextColor(Color.rgb(16, 78, 139));// 设备备选答案D的文本颜色

this.btnShowOrHide.setEnabled(false);// 设置显示按钮为不可用状态

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// 对五个菜单项的操作,通过右键单击,在快捷菜单中选择Source下的Override/Implement Methods...选择重载模块

switch (item.getItemId()) {

case R.id.action_settings1:

// 交差后的处理

if (!submitYesOrNo) {

this.btnShowOrHide.setEnabled(true);// 提交后显示答案的“?”号按钮为可用状态

this.btnShowOrHide.setText("显示");// 设置按钮上显示的文字

this.submitYesOrNo = true;// 并且变量提交否为真

this.myDialog("本次得分情况如下", statisticsTestScores());// 调用简单对话框AlertDialog 对象

}

break;

case R.id.action_settings2:

// 查询历次成绩的处理

SQLiteDatabase dbQuery = myOpenHelper.getReadableDatabase();// 定义内部类的只读对象dbQuery

String sql = "SELECT COUNT(序号) AS id,AVG(单选) AS single ,AVG(多选) AS multi,AVG(判断) AS judge,AVG(填空) AS blank,AVG(单选+多选+判断+填空) AS average FROM score;";// 只统计次数及求平均分值Cursor cursor = dbQuery.rawQuery(sql, null);// 执行查询语句,参数为空

String[] textContent = { "你总共做的次数是:", "单选题平均得分是:", "多选题平均得分是:", "判断题平均得分是:", "填空题平均得分是:", "平均总得分是:" };

String queryMsg = "";

if (cursor.isFirst() && cursor.isLast()) {// 如果既是文件头,又是文件尾,表示没有记录

queryMsg = "你没有进行过一次测试,所以查询不出结果。";

} else {

if (cursor.moveToNext()) {

for (int i = 0; i < 6; i++) {// 用简单对话框输出时的显示内容

queryMsg += textContent[i] + cursor.getInt(i) + "\n";// 文字及对应数据

}

}

}

dbQuery.close();

this.myDialog("成绩查询结果信息", queryMsg);

break;

case R.id.action_settings3:

// 显示帮助信息

String helpMsg = "";

helpMsg = "1.中间一个带问号?的按钮为显示/隐藏标准答案的按钮,但只有交卷后才能有效;\n";

helpMsg += "2.填空题将答案填好或者更改好后,一定要记得单击后面带对勾√的按钮;\n";

helpMsg += "3.单选题与判断题只能选一个,多选题至少选择二个答案;\n";

helpMsg += "4.查询只显示考的次数及平均成绩情况,而且要至少考一次才能够查询;\n";

helpMsg += "5.向左划动则移到下一题,向右划动则移到上一题。";

this.myDialog("简单帮助信息", helpMsg);

break;

case R.id.action_settings4:

// 显示软件及作者信息

Toast toast;// 定义Toast对象

String info;// 对话框中信息文本,分成4行

info = "信息一类对口升学客观题测试程序1.0\n";

info += "制作人:李天进\n";

info += "版权所有者:李天进\n";

info += "制作人单位:四川省泸州市职业技术学校\n";

info += "未经许可不得拷贝";

toast = Toast.makeText(getApplicationContext(), info,

Toast.LENGTH_LONG);// 初始化toast

toast.setGravity(Gravity.CENTER, 0, 0);// 显示位置:屏幕中心

toast.show();// 显示对话框

break;

手机APP软件开发(Android)课程标准

国家中等职业教育改革发展示范学校 软件信息与服务专业建设 1.2.5核心课程的课程标准 5.核心课手机APP软件开发(Android) 课程标准 东莞理工学校软件信息与服务专业项目建设小组

一、课程的性质 1、课程定位 《手机APP 软件开发(Android )》是理实一体化课程,是计算机软件与服务专业的一门重要的专业必修课程,通过此课程的学习,学生可以开发基本和较复杂的Android 应用程序。本课程的前导课程:计算机应用基础、JAVA 语言。后续课程:Android 游戏开发,Android 地图服务等。 本课程的课程定位于移动设备软件蓝领、智能手机APP 开发的工作岗位,课程任务是培养适应智能手机APP 安装调试、测试、开发工作的技能型人才。通过本课程的学习,学生能掌握Android 平台安装,Android 基本控件的使用,Android 四大组件运用,Android 数据存储技术,Android 网络初级编程,Android 多媒体编程及Android 地图服务等技能。 2、课程任务 课程任务是课程任务是通过本课程的学习,使学生形成一定的学习能力、沟通与团队的协作能力,形成良好的思考问题、分析问题和解决问题的能力,养成良好的职业素养。遵守国家关于软件与信息技术的相关法律法规,形成网络管理和系统维护能力。最终成为具备较全面的软件开发与信息服务的技术人才。 以社会对Android 开发类人才的实际需求为出发点,以提高学生的科学文化素质、培养学生的创新精神、实践能力及职业素质为目标。按照学生的认知规律,采用项目驱动方法安排内容,着重培养学生的思考和动手能力。 二、职业活动 《手机APP 软件开发(Android )》课程是软件与信息服务、计算机应用专业 的核心课程,坚持“以企业应用为背景,以工作过程为导向,以任务驱动为手段,以职业竞岗位目标,变应试为应用”的教学设计理念,在岗位调研的基础上解构关键职业岗位能力,以职业能力为中心设计教学过程。

全国自学考试软件开发工具试题

全国2008年10月自学考试软件开发工具试 题 全国2008年10月自学考试软件开发工具试题试卷内容预览网站收集有1万多套自考试卷,答案已超过2000多套。我相信没有其他网站能比此处更全、更方便的了。 全国2008年10月自学考试软件开发工具试题 课程代码:03173 一、单项选择题(本大题共10小题,每小题1分,共10分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.软件开发工具最重要的性能是( ) A.存储各种信息的能力 B.工具的可靠程度 C.版本管理的能力 D.帮助人们编写文档 2.计划工具是从( ) A.宏观的角度去看待软件开发 B.微观的角度去看待软件开发 C.宏观的角度去制定测试方案 D.微观的角度去制定测试方案 3.在论述程序结构时,E.Yourdon把程序的结构分解成三个基本模块,即( ) A.处理单元、循环机制、二分决策机制 B.处理单元、循环机制、控制转移机制 C.循环机制、二分决策机制、控制转移机制

D.处理单元、二分决策机制、控制转移机制 4.划分模块的基本要求是( ) A.模块间联系少,模块规模足够小,模块扇入数足够大 B.模块功能单一,模块间联系少,模块扇入数足够大 C.模块功能单一,模块间联系少,模块规模足够小 D.模块功能单一,模块规模足够小,使用逻辑耦合 5.在信息库(Repository)研究中的核心问题是( ) A.提高信息的共享性 B.保持信息的一致性 C.确保信息的准确性 D.保证信息的安全性 6.在PowerBuilder中,提供以自由表形式显示数据的是( ) A.应用程序对象 B.菜单对象 C.数据窗口对象 D.用户对象 7.在软件开发工具中,文档生成功能与代码生成相比( ) A.数量小,内容复杂 B.数量小,内容简单 C.数量大,内容复杂 D.数量大,内容简单 8.在AD/Cycle的跨周期管理中,在编码和测试阶段都使用的工具是( ) A.建模工具 B.分析工具 C.测试工具 D.生成工具 9.对软件开发工具进行审计(Audit)的基础是( ) A.功能完善的软件 B.日常记录的信息

软件开发与测试工作流程

软件开发与测试 工作流程 版本 2.0 XXX软件股份有限公司质量部 XXXX年XX月

目录 1.简介 (4) 2.适用范围 (4) 3.术语、名词定义 (4) 3.1 送测软件 (4) 3.2 开发文档 (5) 3.3 测试文档 (5) 3.4 被测程序 (5) 3.5 送测单 (5) 3.6 BUG单 (5) 3.7 测试循环 (6) 4.参考文献 (6) 5.测试与开发的配合 (6) 5.1 文档和软件保存目录 (6) 5.2 辅助工具的使用 (7) 5.2.1 辅助测试系统1.0 (8) 5.2.2 SourceSafe6.0 (8) 5.3 开发与测试配合的流程 (9) 6 . 送测单 (10) 6.1送测单的填写 (10) 6.2 工作流程 (12) 7 .BUG单 (12) 7.1 BUG单的填写 (13) 7.2 工作流程 (14) 8 .测试阶段的结束 (15) 9 . 备注 (15) 9.1 开发阶段与测试阶段 (15) 9.2 待测模块的组合与测试原则 (15) 9.3 BUG的分类评级原则 (16)

9.4 国标中有关BUG数量的描述 (18) 9.5 测试阶段的划分 (18)

1.简介 本流程文件旨在规定一个简单的可使开发人员和测试人员在软件开发的编码阶段相互配合工作的工作流程,其中包括测试与开发的配合、送测单和BUG 单的填写、测试循环的结束等部分。开发阶段与测试循环的关系、测试模块的组合与测试原则、BUG的分类评级原则等也在本流程文件中有相关的描述。 鉴于公司的技术要求,目前质量部的测试人员不仅要完成黑盒测试工作,而且还要进行白盒测试中的“代码走查”工作。其它的白盒测试工作,目前还不在测试人员的工作职责之内。 由于公司已经为质量管理部开发完成“辅助测试系统1.0”,因此本测试流程的制定就建立在辅助测试系统之上,如果辅助测试系统有了新的版本,质量部将根据其变化适当调整测试流程。 2.适用范围 本流程文件适用于公司开发软件并需要测试服务的任何软件开发项目组、软件开发人员,以及任何测试人员。 当项目组在辅助测试系统中注册以后,公司领导可以使用本系统查询了解所有在本系统中注册的项目的测试信息,项目的质量管理员可以使用本系统查询了解项目的当前测试进展情况。程序员和测试员都可以使用本系统查询到自己产生的送测单和BUG单。 3.术语、名词定义 3.1 送测软件 送测软件包括一切软件执行必须的文件、数据、数据库配置等。开发人员必须提供所有的详细的资料以保证测试人员可以像客户一样的运行被测软件。

手机直播App开发,功能和步骤详解

手机直播App开发,功能和步骤详解 直播App的火爆点燃了创业的一个新的热潮,电商、O2O甚至P2P都那么过时。今年就是要玩直播,玩VR/AR才够潮!但据说开发一款直播App不仅耗时还非常昂贵,今天就讨论下,开发一款直播App到底分几步走? 第一步:分解直播App的功能,我们以X客为例 1.视频直播功能,这是一款直播App最主要的功能,要能支持视频直播RTMP推流,使 画面传输流畅、清晰; 2.聊天功能,用户之间的互动聊天,包括文字和表情; 3.互动功能,用户与主播间的互动,点亮个灯,送一束花等等; 4.支付&提现功能,用户用现金购买礼物送给心仪的主播,主播收到礼物后可再兑换成现 金取出; 5.视频回放功能,在直播的过程中同时录像,使得没看到直播的小粉丝也有机会再看; 6.分享功能,将房间号分享到微信、微博、QQ等。 第二步:寻找合适的云服务SDK进行嵌入,在APICloud的聚合API中可以轻易找到以上的功能模块,挑选合适的模块封装到自己的App中

1.视频直播功能有ytylive qupaiLive 亲加云等模块。 拿ytylive举例,此模块支持主流RTMP 服务器支持目前所有主流的RTMP 服务器(simple-rtmp-server、crtmpserver、FMS 等)。支持所有的RTMP 协议支持所有RTMP 协议及变种(RTMP、RTMPT、RTMPE、RTMPS、RTMPTE、RTMPTS 等)。性能强大资源(CPU/内存) 占用率低,使用硬件加速进行编码,压缩比例大,延时小。支持实时滤镜支持多种实时滤镜效果(Gray、InvertColors、Sepia、Fisheye、Glow、GaussionBlur)。 而像亲加云模块共有4个,包括视频直播基础模块、视频直播模块、视频播放器模块和视频直播聊天室模块。 2.聊天文本/表情输入有chatbox,UIChatbox等模块。效果如下:

03173软件开发工具2009年10月份真题及答案

全国2009年10月高等教育自学考试 软件开发工具试题 课程代码:03173 一、单项选择题(本大题共10小题,每小题1分,共10分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.从60年代末期开始,人们对于软件工作的认识大大深入了,在认识到软件工作的重要性的同时,也认识到了软件工作的困难性。这就是所谓的() A.软件的智能化问题 B.结构化程序设计的技巧问题 C.软件生存期的划分问题 D.软件危机问题 2.一般来说,软件开发工具对环境的要求() A.与它所支持的应用软件的环境要求无关 B.依赖于它所支持的应用软件的环境要求 C.应当超出它所支持的应用软件的环境要求 D.不应当超出它所支持的应用软件的环境要求 3.属于软件开发工具的是() A.COBOL B.DOS C.TOOLBOOK D.DBMS 4.编写文档的主要工作阶段是() A.需求分析 B.总体设计 C.实现 D.测试 5.完成软件测试最合适的人员是() A.编程者 B.软件负责人 C.用户 D.专门的小组 6.在软件开发过程中,有关系统环境、现状及需求的信息的提供者和采集者分别是() A.分析人员用户 B.用户分析人员 C.分析人员设计人员 D.设计人员分析人员 7.在软件开发工具的概念模式中,描述系统状态及其转换方式的是() A.结构图 B.数据字典 C.时序网络 D.直观模型

8.在软件开发过程中,建立逻辑模型应在() A.需求分析阶段 B.编码阶段 C.分析设计阶段 D.测试阶段 9.在NEWCAFG中,构成Repository库的主体关系是() A.系统类关系 B.属性类关系 C.实体类关系 D.联系类关系 10.在对市场上可供使用的软件开发工具进行调查研究时应包括的内容是() A.软件开发工具供应商的规模 B.软件开发工具的管理者 C.软件开发工具的销售量 D.软件开发工具的服务和培训条件 二、多项选择题(本大题共10小题,每小题2分,共20分) 在每小题列出的五个备选项中至少有两个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选、少选或未选均无分。 11.软件开发工具在以下几方面提供支持() A.认识与描述客观系统 B.存储及管理开发过程中的信息 C.代码的编写或生成 D.文档的编制或生成 E.为挑选管理人员提供必要的信息 12.NEWCAFG的安全保证主要措施是对信息库的() A.密码设置 B.备份 C.恢复 D.访问控制 E.登记日志 13.质量好的软件应满足() A.实现所要求的功能 B.界面友好 C.足够的运行速度 D.足够的可靠性 E.结构良好,文档齐全 14.模块的划分应符合() A.功能尽可能单一、明确 B.模块间的联系尽可能少 C.明确说明模块间必需的联系 D.模块间仅限于数据耦合 E.模块的规模足够小 15.造成大型软件开发困难的原因有:() A.大系统的复杂性 B.人员的组织与协调

软件测试与软件质量关系的概述

软件测试与软件质量关系 的概述 Prepared on 24 November 2020

软件测试与软件质量关系的概述 摘要:软件测试和软件质量的概念是分不开的。测试是手段,质量是目的。软件测试能够提高软件质量,但是软件测试和软件质量保证二者之间既存在包含又存有交叉的关系。软件测试能够找出软件缺陷,确保软件产品满足需求。但是测试不是质量保证。测试可以查找错误并进行修改,从而提高软件产品的质量。软件质量保证则是避免错误以求高质量,并且还有其他方面的措施以保证质量问题。本文是通过软件质量和软件测试的相关概念来讨论软件测试和软件质量之间的关系。 关键字:软件测试;质量度量;质量模型;白盒测试;黑盒测试 An overview of the relationship between software testing and the software quality Abstract:The concept of software testing and software quality are inseparable. Testing is a means, quality is the goal. Software testing can improve the quality of software, but software testing and software quality assurance exists between include and exists a relationship of cross. Software testing to identify software defects, to ensure that the software products meet the demand. But the test is not quality assurance. Test can find errors and modified, so as to improve the quality of software products. Software quality assurance is to avoid mistakes in order to high quality, and other aspects of measures to ensure the quality problem. This article is through the related concepts of software quality and software testing to discuss the relationship between the quality of software testing and software. Key words:Software testing; Quality measures; The quality of the model; White box testing; Black box testing

手机app开发方案

广州APP开发公司酷蜂科技设计app的方案,移动互联网作为信息服务的新兴产业,在近2年,也逐渐与地产业紧密结合,通过微博、微信、手机APP等方式,为地产业提供了新的营销思路与方法。手机具有随身携带,信息传播快等特点,因此以手机为媒介,向潜在消费者发布有吸引力的营销信息与广告,将楼盘信息全面集成在一部小小的智能手机上,让传统楼书转变为电子化的手机楼书,已经成为了一种新型的地产营销模式。 智能手机普及的今天,利用手机这一新兴媒介,通过智能手机APP,能建立全新的购房者与房企信息沟通渠道,全新的楼盘信息展示方式,让楼书装进潜在消费者的口袋,并利用移动互联网传播速度快等优势,快速找到意向客户,传播信息,传递楼盘价值,提升销售。房地产利用APP进行营销与推广,有以下几个优势: 1.随身楼书,随身楼盘信息全展示,用户可以随时翻看,而且较长时段内,用户不会丢失。 2.信息展示方式更新颖,支持视频、GPS地图等多种模式,信息更加全面化,宣传效果更好。 3.信息随时更新,各种营销活动直接推送到用户手机,时效性更强。 4.通过客户端,建立购房者与房企的互动渠道,改变了原来依靠电话的单一模式。消息推送、优惠活动、客户积分等多种营销模式的支持,直接通过手机操作,更便捷。 因此,房企为了加快楼盘销售进度,提升楼盘品味,提高营销效果,而采用APP作为营销工具,可以起到良好的推动作用。房企APP(楼盘APP)在分析用户的需求基础上,结合智能手机的各种智能化功能,一般具备以下的典型模块: A:楼盘介绍:通过文字、图片、视频等方式,全面展示楼盘信息,让购房者通过手机,了解楼盘的特色与优势,将原来平面化的楼书,改变为交互性强,丰富多彩的电子楼书。 B:周边配套:采用GPS地图方式,一方面,可以很直观的表现楼盘在城市所处的位置,及周边的交通状况。另一方面,通过地图的二次开发,标注楼盘周边的商场、娱乐、学校、医院、政府机构等,让购物者对购房入住后,周边的生活配套情况,有很全面的了解。 C:房型展示:展示小区楼盘各个户型的户型图,并介绍各户型的特点、适宜居住人群等,便于购房者进行户型选择。支持3D模型的360度展示,实景展示,效果更佳。 D:VIP会员卡:支持VIP会员卡,及会员卡相关的活动等。打造购房潜在用户圈,并通过各种圈子营销活动,提升销售成功率。 E:物管介绍:楼盘物管信息展示,让购房者了解入住后的物业关系相关信息。 F: 优惠活动:楼盘的各类优惠活动的手机信息推送,直达购房者手机,活动消息100%到达,直接面对意向用户,宣传效果好。

全国1月自学考试软件开发工具试题

全国2013年1月自学考试软件开发工具试题 课程代码:03173 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题纸” 的相应代码涂黑。错涂、多涂或未涂均无分。 1.在需求分析阶段,人们最希望软件开发工具提供的帮助是 A.认识与描述客观系统 B.存储及管理开发过程中的信息 C.文档的编制或生成 D.软件项目的管理 2.在实际工作中,数量最大的软件开发工具是 A.分析工具 B.计划工具 C.设计工具 D.软件工作环境 3.为了提高软件开发工作的水平和效率,人们提出了多种程序设计方法。其中,主要为项目管理者服务的是 A.结构化程序设计 B.软件工程方法 C.面向对象的方法 D.即插即用的程序设计 4.IBM公司宣布一个名为AD/Cycle的巨大的理论框架,标志着进入集成的软件开发环境阶段,时间是20世纪 A.80年代初 B.80年代末 C.90年代初 D.90年代末 5.在软件开发过程中,确定信息流通模型的阶段是 A.系统设计阶段 B.程序编码阶段 C.需求分析阶段 D.系统维护阶段 6.自行开发软件开发工具的主要缺点是 A.不易于商品化 B.不便于扩充 C.往往低估开发难度 D.目标不明确 7.在权衡购置或自行开发软件开发工具时不必 ..考虑的因素是 A.人员的因素 B.准备从事的软件开发工作的性质与要求 C.资金的多少 D.开发人员对工作与支持程度的实际需要 8.不成功的商品化软件开发工具往往由于 A.应用范围广泛 B.应用范围专一

C.使用手册简单 D.使用手册复杂 9.2008年,国际电子电气工程师学会的权威刊物《软件》的九月/十月号,以“软件开发工具”(Software Development Tools)为题的一期专刊中概括了40年来软件开发工具的发展轨迹,指出抽象程度最高的软件开发工具是 A.Eclipse B.XMF Mosaic C.Delphi D.Turbo Oascal 10.以下几种语言及其开发工具中,发展潜力最差的是 A.VB B.VC C.PB D.C++Builder/Delphi 11.在大型软件开发中,程序员承担的工作是 A.验收模块 B.要求修改 C.交付检验 D.试运行 12.为创建一个C Project,在选择向导窗口“Select a wizard”对话框中打开C/C++文件夹,选择"C Project"后,单击的按钮是 A.Next B.Back C.Finish D.Cancel 13.为了在不影响程序行为的情况下进行系统范围内的代码更改,用户可以使用Eclipse的 A.重构功能 B.重命名功能 C.搜索功能 D.抽取方法 14.在GDB添加行断点时,应打开调试文件,从菜单中选择的选项是 A.Add Bookmark B.Disable Breakpoint C.Toggle Breakpoint D.Breakpoint Froperties 15.在Eclipse代码模板编辑中,变量用{ }括起来,开头的字符是 A.$ B.¥ C.& D.@ 16.在CVS中,获得工作备份的操作称为 A.输入 B.提交 C.签出 D.更新 17.在软件开发过程中,直接与设计方案关联的界面是 A.分析界面 B.编程界面 C.用户界面 D.管理界面

软件测试方法和技术练习题与答案

一、判断题 1.测试是调试的一个部分(╳) 2.软件测试的目的是尽可能多的找出软件的缺陷。(√) 3.程序中隐藏错误的概率与其已发现的错误数成正比(√) 测试是验收测试的一种。(√) 5.测试人员要坚持原则,缺陷未修复完坚决不予通过。(√) 6.项目立项前测试人员不需要提交任何工件。(╳) 7.单元测试能发现约80%的软件缺陷。(√) 8.测试的目的是发现软件中的错误。(√) 9.代码评审是检查源代码是否达到模块设计的要求。(√) 10.自底向上集成需要测试员编写驱动程序。(√) 11.测试是证明软件正确的方法。(╳) 12.负载测试是验证要检验的系统的能力最高能达到什么程度。(√) 13.测试中应该对有效和无效、期望和不期望的输入都要测试。(√)验收测试是由最终用户来实施的。(√) 14.测试人员要坚持原则,缺陷未修复完坚决不予通过。(√) 黑盒测试也称为结构测试。(╳) 集成测试计划在需求分析阶段末提交。(╳)15.软件测试的目的是尽可能多的找出软件的缺陷。(√) 16.自底向上集成需要测试员编写驱动程序。(√) 17.负载测试是验证要检验的系统的能力最高能达到什么程度。(╳) 18.测试程序仅仅按预期方式运行就行了。(╳) 19.不存在质量很高但可靠性很差的产品。(╳) 20.软件测试员可以对产品说明书进行白盒测试。(╳) 21.静态白盒测试可以找出遗漏之处和问题。(√) 22.总是首先设计白盒测试用例。(╳) 23.可以发布具有配置缺陷的软件产品。(√)24.所有软件必须进行某种程度的兼容性测试。(√) 25.所有软件都有一个用户界面,因此必须测试易用性。(╳) 26.测试组负责软件质量。(╳) 27.按照测试实施组织划分,可将软件测试分为开发方测试、用户测试和第三方测试。(√) 28.好的测试员不懈追求完美。(×) 29.测试程序仅仅按预期方式运行就行了。(×) 30.在没有产品说明书和需求文档的条件下可以进行动态黑盒测试。(√) 31.静态白盒测试可以找出遗漏之处和问题。(√) 32.测试错误提示信息不属于文档测试范围。(×) 33.代码评审是检查源代码是否达到模块设计的要求。(√) 34.总是首先设计黑盒测试用例。(√) 35.软件测试是有风险的行为,并非所有的软件缺陷都能够被修复。(∨) 36.软件质量保证和软件测试是同一层次的概念。(x) 37.程序员兼任测试员可以提高工作效率。(x) 38.在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。(∨) 39.传统测试是在开发的后期才介入,现在测试活动已经扩展到了整个生命周期。(∨)40.传统测试以发现错误为目的,现在测试已经扩展到了错误预防的范畴。∨ 41.软件测试的生命周期包括测试计划、测试设计、测试执行、缺陷跟踪、测试评估。(∨)42.软件生存周期是从软件开始开发到开发结束的整个时期。(x) 43.测试用例的数目越多,测试的效果越好。(x) 44.只要能够达到100%的逻辑覆盖率,就可以保证程序的正确性。(x) 45.单元测试属于动态测试。(∨) 46.验收测试是以最终用户为主的测试。(∨) 47.没有发现错误的测试是没有价值的。(∨) 48.可以把不合格的开发人员安排做测试。(x)

2018年自考考试《软件开发工具》试题及答案

2018年自考考试《软件开发工具》试题及答案 1.为了推广应用计算机,大量的工作集中在( B )中。 A.硬件领域 B.软件领域 C.研制软件开发工具 D.研究改进程序设计方法 2.从( C )语言开始,软件摆脱了对特定硬件系统的依赖。 A.第一代 B.第二代 C.第三代 D.第四代 3.软件开发工具是以( C )语言为基础的。 A.第一代8.第二代C.第三代D.第四代 4对用户的需求进行分析,最终以编程所需的方式表达出来,这是(D. )必须承担的任务。 A.用户部门的技术人员B企业管理人员C、教学工作者D.软件开发者 5.软件开发的成败更多地依赖于( D ) A.程序员的编程能力B项目负责人的技术水平 C软件开发工具的使用D合理的组织和协调 6.软件开发的第一阶段是:( A ) A.需求分析B画出程序流程图c.选择所用的语自D.编写程序 7.需求分析阶段的主要任务是(A )。 A.提出初始要求,写出功能说明书 B 对计算机需求的分析 C.对语言需求的分桥D 对软件开发工具的需求分析 8.编写软件使用说明书与编程工作应( C )。 A先编写程序B.先编写使用说明节

C.同步编写D。可不计次序 9.认识与描述客观系统是软件开发工具对软件开发( B )阶段的支持、 A.需求分析 B.总体设计c.实现D.运行维护 10.在存储和管理开发过程中的信息时.最重要、最困难的问题是:( D )。 A.信息的收集 B.信息的分类 C.信息存储的格式 D.信息的一致性 E.信息的维护 t1.软件使用的方便程度主要依赖于( D ) A.软件的功能 B.操作系统C I/O设备D 人机界面 12.编写与调试软件的工具属于( C )。 A.计划工具 B.分析工具 C.设计工具D管理工具 13.帮助人们绘制数据流程图、结构图、ER团的工具属于( B ) A计划工具B.分析工具C.设计工具D管理工具 14.(B )工具从更宏观的角度去看待软件开发。 A计划B.分析C设计D 调试运行 15.帮助管理项目的进度、资源、质量等的软件开发工具属于( D) A.计划上具 B.分析工具 C.设计工具D管理工具 16.( D )实现了跨生命周期的信息管理与共享。 A.计划工具 B.分桥工具 C.设计工具D管理工具 多项选择题 1.(AB)语言依赖于机器

软件测试与软件质量关系的概述

软件测试与软件质量关系的概述 摘要:软件测试和软件质量的概念是分不开的。测试是手段,质量是目的。软件测试能够提高软件质量,但是软件测试和软件质量保证二者之间既存在包含又存有交叉的关系。软件测试能够找出软件缺陷,确保软件产品满足需求。但是测试不是质量保证。测试可以查找错误并进行修改,从而提高软件产品的质量。软件质量保证则是避免错误以求高质量,并且还有其他方面的措施以保证质量问题。本文是通过软件质量和软件测试的相关概念来讨论软件测试和软件质量之间的关系。 关键字:软件测试;质量度量;质量模型;白盒测试;黑盒测试 An overview of the relationship between software testing and the software quality Abstract:The concept of software testing and software quality are inseparable. Testing is a means, quality is the goal. Software testing can improve the quality of software, but software testing and software quality assurance exists between include and exists a relationship of cross. Software testing to identify software defects, to ensure that the software products meet the demand. But the test is not quality assurance. Test can find errors and modified, so as to improve the quality of software products. Software quality assurance is to avoid mistakes in order to high quality, and other aspects of measures to ensure the quality problem. This article is through the related concepts of

软件研发测试报告

丰台科技馆科普互动远程点播系统 研发测试报告 拟制:李志洋日期: 审核:史方舟日期: 批准:袁爱英日期: 北京锦绣年华信息技术有限责任公司 编制日期:2007年12月

目录 1 范围................................................................... 1.1定义.............................................................. 1.1.1标识......................................................... 1.1.2术语......................................................... 1.1.3缩写词....................................................... 1.2系统概述.......................................................... 1.2.1软件用途..................................................... 1.2.2特性......................................................... 1.2.3项目背景..................................................... 1.2.4运行环境..................................................... 1.3文档概述.......................................................... 2引用文档............................................................... 3测试结果概述........................................................... 3.1测试环境的影响.................................................... 3.2改进建议.......................................................... 4详细的测试结果......................................................... 4.1基础平台 > 人员管理 > 用户管理.................................... 4.1.1测试结果小结................................................. 4.1.2遇到的问题................................................... 4.1.3与测试用例/过程的偏差........................................ 4.2基础平台 > 全局设置 > 代码维护.................................... 4.2.1测试结果小结................................................. 4.2.2遇到的问题................................................... 4.2.3与测试用例/过程的偏差........................................ 4.3基础平台 > 权限管理............................................... 4.3.1测试结果小结................................................. 4.3.2遇到的问题................................................... 4.3.3与测试用例/过程的偏差........................................ 4.4基础平台 > 网站定制............................................... 4.4.1测试结果小结................................................. 4.4.2遇到的问题................................................... 4.4.3与测试用例/过程的偏差........................................ 4.5门户前台.......................................................... 4.5.1测试结果小结................................................. 4.5.2遇到的问题................................................... 4.5.3与测试用例/过程的偏差........................................ 5测试记录............................................................... 1范围 1.1定义 此份测试报告是程序员在进行测试计划(单元测试)指定测试编写。

手机软件开发需要学什么

手机软件开发需要学什么 手机软件开发席卷IT培训市场,Android开发因其领域新,覆盖面广,而受到广大应届毕业生的关注。现在大学生空有一张文凭,就业形势却颇为紧张,相反,Android开发的职位空缺却相当大,所以很多大学生看准这块“肥肉”,纷纷投身iOS培训,希望通过系统培训解决当前就业难,薪水低的问题。 以下的相关信息是4G梦工场的相关人员为大家整理的。4G梦工场目前有Android培训班、IOS培训班、Java培训班、C/C++培训班。 手机软件开发是软件开发的一部分。手机软件开发:手机软件开发包括Android开发,ipad软件开发,安卓软件开发,windows phone开发,主题制作,专业定制开发各种应用软件系统,掌握各种手机开发平台及现在流行的手机开发结构,有效满足手机软件系统的开发需求。 企业对软件人才的需求:随着国内智能手机越卖越火,诺基亚、索爱、宏基等厂商也逐步加入程序开发大战,并且加大与开发人员分成的力度,让开发人员获得更高利润。月薪上万的岗位:前程无忧数据显示,目前华为北研所手机软件工程师的月薪大约为7000元,加上各类补贴和奖金,年薪在12万—14万元之间。而中兴手机软件工程师、大唐电信集团中央研究院手机软件工程师的年收入也都超过10万。 手机软件开发具体学习:C++类设计,基本输入输出,C++相对C语言的改进和不同,string类,类的定义和使用,面向对象思想之封装,定义和实现的分离,访问控制及get和set方法,类的构造与析构,类的拷贝构造函数,静态成员static,常量成员const,动态创建对象new,继承和多态,类的继承,继承后的权限,继承后的构造函数,多继承,虚函数和抽象类,运算符重载,函数模版,类模版,异常处理,类型转换,RTTI运行时状态识别,标准库,标准IO (iostream),常用容器,向量, 列表, 队列, 堆栈, 映射, 集合,常用算法,Boost 库,Boost库常用,Cocos2D-X基本数据结构介绍,

软件开发工具与试题答案最新

系部 专业 班级 姓名 学号 第 1错误!未找到引用源。错误!未找到引用源。 页 共错误!未找到引用源。 10 页 第 2错误!未找到引用源。错误!未找到引用源。 页 共 10 页 装 线 订 考试方式:闭卷 考试时间:50分钟 卷面总分:150 分 一 选择题 (每小题2分,共40分) 1.高级程序设计语言实现了 A .计算机系统的各种资源自动管理 B.计算机语言对机器的独立性 C .由机器自己去安排执行的顺序 D.用自然语言描述人们设想的处理过程 2.软件工具的思想与方法得到了广泛的宣传是在20世纪的 A.50年代 B.60年代 C .70年代 D.80年代 3.在软件开发过程中,直接与变更要求关联的界面是 A .分析界面 B.编程界面 C .用户界面 D.管理界面 4.在软件开发过程中,确定子系统或模块划分的阶段是 A .需求分析阶段 B.分析设计阶段 C .程序编码阶段 D.系统维护阶段 5.软件开发工具的基础是 A .数据库 B.工具软件 C .信息库 D.文档 6.购买市场上已有的软件开发工具的优点是 A .减轻工作负担 B.比较便宜 C .发展水平较高 D.可靠程度较高 7.以下几种较有代表性的语言及其开发工具中支持面向对象非常好的是 A .VC B.PB C.C++Builder/Delphi D.JAVA 8.不属于...软件开发工具概念模式的是 A .数据流程图 B.实体关系图 C .关键路线图 D.数据字典 9.以下几种较有代表性的语言及其开发工具中发展潜力最差的是 A .VC B.VB C .PB D.JAVA 10.用来打开网页文件的编辑器是 A.C/C++编辑器 B.文本编辑器 C .任务编辑器 D.Web 浏览器 11.出现最早的软件开发工具是 A .计划工具 B.分析工具 C .设计工具 D.集成化工具 12.一个好的项目组应当具备的条件是 A .有事先制定详细的时间表,并且得到严格执行 B.成员有程序设计所需要的基本知识与技能 C .成员深入了解本项目所在的领域 D.成员熟悉软件开发的技术环境 13.在Eclipse 设置调试属性时,应选择Preferences 菜单中的选项是 A.General B.Install/Update C.Tasks D.Run/Debug 14.不属于...Eclipse 调试透视图的是 A .触发器 B.变量视图 C .编辑器 D.大纲视图 15.在Eclipse 代码模板编辑中,变量的开头字符和括起来的符号分别是 A.$和[ ] B.&和{ } C .¥和( ) D.$和{ } 16.在版本控制软件中,对程序冻结和解冻的操作人员只能是 A .程序员 B.程序员和管理员 C .管理员 D.用户 17.在Eclipse 的插件清单中,提供插件id 的标签是 A.plugin B.runtime C.requires D.extensions 18.在Eclipse 插件中,属于代码管理类插件是 A .CDT B.Lomboz C.PDT D.Log4E 19.在Rational Rose 建模的逻辑设计中,使用的图是 A .活动图 B.状态图 C .交互图 D.关联图 20.在Rational Rose 建模的设计中,系统中与实现无关的视图是 A .用例图 B.活动图 C .顺序图 D.协作图 题 号 一 二 三 四 五 总成绩 合分人 得 分 得 分 评阅人 软件开发工具考试试题 课程代码:03173

软件质量保证测试试题与答案

软件质量保证测试试题与答案

选择题 1.软件测试的目的是( B )。 A)试验性运行软件 B)发现软件错误 C)证明软件正确 D)找出软件中全部错误 2.软件测试中白盒法是通过分析程序的( B )来设计测试用例的。 A)应用范围 B)内部逻辑C)功能 D)输入数据 3.黑盒法是根据程序的( C )来设计测试用例的。A)应用范围 B)内部逻辑C)功能 D)输入数据 4.为了提高软件测试的效率,应该( D )。 A)随机地选取测试数据 B)取一切可能的输入数据作为测试数据 C)在完成编码以后制定软件的测试计划 D)选择发现错误可能性最大的数据作为测试用例 5.与设计测试用例无关的文档是( A )。 A)项目开发计划 B)需求规格说明书 C)设计说明书 D)源程序 6.测试的关键问题是( B )。 A)如何组织软件评审 B)如何选择测试用例 C)如何验证程序的正确性 D)如何采用综合策略 7.软件测试用例主要由输入数据和( C )两部分组成。A)测试计划 B)测试

规则 C)预期输出结果 D)以往测试记录分析 8.成功的测试是指运行测试用例后( B )。 A)未发现程序错误 B)发现了程序错误 C)证明程序正确性 D)改正了程序错误 9.下列几种逻辑覆盖标准中,查错能力最强的是( D )。A)语句覆盖 B)判定覆盖C)条件覆盖 D)条件组合覆盖 10.在黑盒测试中,着重检查输入条件组合的方法是( D )。 A)等价类划分法 B)边界值分析法 C)错误推测法 D)因果图法 11.单元测试主要针对模块的几个基本特征进行测试,该阶段不能完成的测试是( A )。A)系统功能 B)局部数据结构 C)重要的执行路径 D)错误处理 12.软件测试过程中的集成测试主要是为了发现( B )阶段的错误。 A)需求分析 B)概要设计 C)详细设计 D)编码13.不属于白盒测试的技术是( D )。 A)路径覆盖 B)判定覆盖C)循环覆盖 D)边界值分析 14.集成测试时,能较早发现

软件测试的起源与发展

软件测试的起源与发展 软件测试的概念与定义 软件测试是伴随着软件的产生而产生的。早期的软件开发过程中,那时软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。 直到1957年,软件测试才开始与调试区别开来,作为一种发现软件缺陷的活动。由于一直存在着“为了让我们看到产品在工作,就得将测试工作往后推一点”的思想,潜意识里对测试的目的就理解为“使自己确信产品能工作”。测试活动始终后于开发的活动,测试通常被做为软件生命周期中最后一项活动而进行。当时也缺乏有效的测试方法,主要依靠“错误推测ErrorGuessing”来寻找软件中的缺陷。因此,大量软件交付后,仍存在很多问题,软件产品的质量无法保证。 到了20世纪70年代,这个阶段开发的软件仍然不复杂,但人们已开始思考软件开发流程的问题,尽管对“软件测试”的真正含义还缺乏共识,但这一词条已经频繁出现,一些软件测试的探索者们建议在软件生命周期的开始阶段就根据需求制订测试计划,这时也涌现出一批软件测试的宗师,BillHetzel博士就是其中的领导者。1972年,软件测试领域的先驱BillHetzel博士(代表论著《TheCompleteGuidetoSoftwareTesting》),在美国的北卡罗来纳大学组织了历史上第一次正式的关于软件测试的会议。在1973年,他首先给软件测试一个这样的定义:“就是建立一种信心,认为程序能够按预期的设想运行。Establishconfidencethataprogramdoeswhatitissupposedtodo.”后来在1983年他又将定义修订为:“评价一个程序和系统的特性或能力,并确定它是否达到预期的结果。软件测试就是以此为目的的任何行为。Anyactivitiesaimedatevaluatinganattributeorcapabilityofaprogramorsystem.”在他的定义中的“设想”和“预期的结果”其实就是我们现在所说的用户需求或功能设计。他还把软件的

相关主题
文本预览
相关文档 最新文档