群硕软件开发笔试题
“今天要好好上班”通过精心收集,向本站投稿了12篇群硕软件开发笔试题,下面是小编整理后的群硕软件开发笔试题,欢迎大家阅读借鉴,并有积极分享。
篇1:群硕软件开发笔试题
群硕软件开发笔试题
软件开发类:
一:选择题
1. 一道简单switch语句考察,没有break的'话,应该顺序执行,所以结果应该为a=2,b=1;
2. having语句,(好像是查询分组吧,其他选项没仔细看,忘记了,)
3 .忘了 真不好意思
二:编程题
1.求最大公约数,语言不限。(很简单,直接法便能很顺利实现。)
2.1-2+3-4……n 求和,注意效率。(个人觉得只有两种情况,一种是N是偶数,另外一种是N是基数,然后直接返回结果即可。)
3.程序查错题:
void main{
char string[10],str1[10];
int i;
for(i=0;i<10;i++){
string='a';
}
strcpy(string,str1);
}
参:数组越界,
因为strcpy(dst,src),src还没初始化,所以越界。str1和string调换位置或者改为strncpy(string,str1,10)也能保证程序正常运行,但结果明显不是所需。
4.U2乐队演奏问题17分钟内赶到音乐会现场,4个人,过桥,必须要手电筒,耗时分别为1,2,5,10……@#*(@$*(&@($&(@&$(&*(#(*&*(#总之就这么个意思。
因为这道题目之前用C语言实现过一个。而且本身题目不难,还是很好解决的。首先时间相差差不多的一起过,1,2一起过,1送回,5,10再一起过,2送回,1,2再一起过,完成。总耗时2+1+10+2+2=17正好完成任务。
篇2:群硕笔试题
群硕笔试题
群硕的笔试在语言方面主要是Java和C++,夹了一道C#题,趁记忆犹新的时候记下来
一、给了一棵二叉树的前序遍历和中序遍历,要求写出后序遍历,
看一下数据结构就行了,很easy。提示:前序遍历的第一个节点为根结点,在中序遍历中根结点的左边节点是左子树,右边节点是右子树,如此递归。
二、什么是物理内存和虚拟内存,OS中为什么要使用虚拟内存?
看OS的书。
三、解释一下C#中的“delegate”。
原先不清楚的,然后在技术面试的时候问了一下面试官,原来类似于一个队列,队列中存的是函数指针(托管函数),运行时队列中的函数会在一个线程中被依次执行。
四、与子程序传递参数有哪些方法?
汇编题,我想起来三个:参数压栈、参数存寄存器、参数存数据段。
五、解释一下Java中的String和StringBuffer,什么时候需要使用StringBuffer?
核心是String对象是不变对象,连接、取子串等操作会生成新的对象,旧对象可能会被回收。StringBuufer则是可变对象,上述操作将在原对象上进行。
六、Java中哪些容器的默认布局器(layout)是BorderLayout?
这个不是那得很准,就写了JFrame及其子类,Frame及其子类。
七、一个C++的函数:
int operation(int numberA,int numberB){
return numberA + numberB;
}
然后声明了三个变量:
int a = 2;
int result1 = operation(5, a++);
int result2 = operation(5+a, ++a);
问result1和result2的值。
原先以为考得是传值、传引用的.问题,结果仔细一看考得是a++和++a的问题,这就简单了,
result1 = 7, result2 = 12
八、如果父类的析构函数没有声明为虚函数的话在父类的指针上调用析构函数会有什么后果?
屏蔽多态,子类申请的资源将不被释放。
九、定义了一个类:
class Something{
pulic:
Something();
void setValue(int val){
value = val;
}
private:
int value;
}
以及一个函数:
void doSomething(int val){
Something* sth = new Something(); // Line 1
sth->setValue(val); // Line 2
}
问Line 2如果是doSomething()的最后一行的话会有什问题?
doSomething执行完后sth没有被销毁,内存泄漏。
十、写一个程序将输入的16进制转为10进制。
基础
十一、设计一个微波炉的控制程序(OO)。
这道题有点意思,我主要用Observer模式设计了一个定时器,然后把微波炉烹饪的对象抽象为Cookable。
十二、逻辑题,一列火车以15 mph的速度从北京开往上海,另一列火车以20 mph的速度从上海开往北京,一只鸟(比较笨)速度25 mph,在两列火车之间来回飞,相遇即折回。问到两列火车相遇这只笨鸟一共飞了多远?
很简单,因为鸟一直在飞,所以一共飞了s/(15 + 20),s为上海到北京之间的距离,那么它一共飞了s/(15 + 20) * 25 mile。
12道题,除了那道C#题,其它觉得没多少地方能扣我分了,当天晚上就没睡好,很兴奋。果然第二天上午就打电话来让我去面试,效率真的很高,然后就果然顺利拿到了offer
篇3:网友群硕软件笔试题
网友分享群硕软件笔试题:
1.1-2+3-4……n 求和,注意效率,(个人觉得只有两种情况,一种是N是偶数,另外一种是N是基数,然后直接返回结果即可。)
2.求最大公约数,语言不限。(很简单,直接法便能很顺利实现。)
3.U2乐队演奏问题17分钟内赶到音乐会现场,4个人,过桥,必须要手电筒,耗时分别为1,2,5,10……@#*(@$*(&@($&(@&$(&*(#(*&*(#总之就这么个意思。
因为这道题目之前用C语言实现过一个。而且本身题目不难,还是很好解决的,
首先时间相差差不多的一起过,1,2一起过,1送回,5,10再一起过,2送回,1,2再一起过,完成。总耗时2+1+10+2+2=17正好完成任务。
4.程序查错题:
void main{
char string[10],str1[10];
int i;
for(i=0;i<10;i++){
string='a';
}
strcpy(string,str1);
}
参:数组越界。因为strcpy(dst,src),src还没初始化,所以越界。str1和string调换位置或者改为strncpy(string,str1,10)也能保证程序正常运行,但结果明显不是所需。
篇4:群硕软件的笔试题
。)
3 .忘了 真不好意思
二:编程题
1.求最大公约数,语言不限。(很简单,直接法便能很顺利实现。)
2.1-2+3-4……n 求和,注意效率。(个人觉得只有两种情况,一种是N是偶数,另外一种是N是基数,然后直接返回结果即可。)
3.程序查错题:
void main{
char string[10],str1[10];
int i;
for(i=0;i<10;i++){
string='a';
}
strcpy(string,str1);
}
参:数组越界,
因为strcpy(dst,src),src还没初始化,所以越界。str1和string调换位置或者改为strncpy(string,str1,10)也能保证程序正常运行,但结果明显不是所需。
4.U2乐队演奏问题17分钟内赶到音乐会现场,4个人,过桥,必须要手电筒,耗时分别为1,2,5,10……@#*(@$*(&@($&(@&$(&*(#(*&*(#总之就这么个意思。
因为这道题目之前用C语言实现过一个。而且本身题目不难,还是很好解决的。首先时间相差差不多的一起过,1,2一起过,1送回,5,10再一起过,2送回,1,2再一起过,完成。总耗时2+1+10+2+2=17正好完成任务。
三:翻译
篇5:群硕软件测试笔试题
群硕软件测试笔试题
软件测试类:
一:填空题
1、给出二叉树的前缀和中缀表达式,求出该二叉树的后缀表达式,
2、死锁发生的.四个必要条件
二:简答题
1、数据库三大范式及其作用
2、UML的概念和基本模型等
3、黑盒法,白盒法和灰盒法的基本概念和特点
三:编程与测试题目
1.用程序构造所有字符组合,如aabccd,有ab,ac,ad,bc,bd,cd,abc……等等
2.网页包含用户名,密码和登录按钮三个空间,设置20组不同的测试用例来测试用户登录功能(= =、非常 的题目)
四:综合逻辑题;
1.孔雀来找茬,大概8处错误,精通美女来找茬的同学们幸福啦~~~
2.飞机问题,
原题如下:
一架飞机(可空中加油)载满油可绕地球飞行半圈,若全球只有一个基地,问至少要起落几架次飞机,才能
使一架飞机安全绕地球飞行一圈,加油飞机也能安全返回,请你写出空中加油方案?
(分析了一下,时间不够,并没有做出来,很悲惨~)
a
篇6:软件开发笔试题
软件开发笔试题
笔试“软件开发”职位:
1.ISR,APC,DPC的定义
2.windows/linux下系统创建进程的步骤
3.xtoa函数,输入是两个整数,原数字,数制,输出是字符串
4.实现内存拷贝的C函数
5.比较两个二叉树结构是否一样
6.C++中volatile关键字的'作用
7.一个程序找错误
8.根据上述错误给程序员发邮件提出改进意见
9.最喜欢的一首唐诗,原因
10.当代最崇拜的人,原因
篇7:群硕软件实习生笔试题经验
今天在中南大学铁道校区世纪楼D101参加了群硕的宣讲和笔试,是小生第一次参加正式的职场笔试,难免有些心潮澎湃,废话少说,直接进入正题:
笔试的题目分为两大部分,根据不同的方向,主要分为软件开发类和软件测试类,软件开发类题目整体难度不大。但是细节考察比较多。还有一段纯英文的翻译,内容的话,也没什么好说的了,就是一个人的一番讲话与愿景把。而软件测试类的涉及的知识面比较广,而且比较注重逻辑思维能力。下面就我一点儿残存的'记忆,努力回忆一下今天笔试的题目吧。
软件开发类:
一:选择题
1. 一道简单switch语句考察,没有break的话,应该顺序执行,所以结果应该为a=2,b=1;
2. having语句,(好像是查询分组吧,其他选项没仔细看,忘记了。)
3 .忘了 真不好意思
二:编程题
1.求最大公约数,语言不限。(很简单,直接法便能很顺利实现,
)
2.1-2+3-4……n 求和,注意效率。(个人觉得只有两种情况,一种是N是偶数,另外一种是N是基数,然后直接返回结果即可。)
3.程序查错题:
void main{
char string[10],str1[10];
int i;
for(i=0;i<10;i++){
string='a';
}
strcpy(string,str1);
}
参:数组越界。因为strcpy(dst,src),src还没初始化,所以越界。str1和string调换位置或者改为strncpy(string,str1,10)也能保证程序正常运行,但结果明显不是所需。
4.U2乐队演奏问题17分钟内赶到音乐会现场,4个人,过桥,必须要手电筒,耗时分别为1,2,5,10……@#*(@$*(&@($&(@&$(&*(#(*&*(#总之就这么个意思。
因为这道题目之前用C语言实现过一个。而且本身题目不难,还是很好解决的。首先时间相差差不多的一起过,1,2一起过,1送回,5,10再一起过,2送回,1,2再一起过,完成。总耗时2+1+10+2+2=17正好完成任务。
三:翻译
软件测试类:
一:填空题
篇8:群硕软件届实习生笔试题
群硕软件届实习生笔试题
在中南大学铁道校区参加了群硕的宣讲和笔试,是我第一次参加正式的职场笔试,难免有些心潮澎湃,废话少说,直接进入正题:
笔试的题目分为两大部分,根据不同的方向,主要分为软件开发类和软件测试类,软件开发类题目整体难度不大。但是细节考察比较多。还有一段纯英文的翻译,内容的话,也没什么好说的了,就是一个人的一番讲话与愿景把。而软件测试类的涉及的知识面比较广,而且比较注重逻辑思维能力。下面就我一点儿残存的记忆,努力回忆一下今天笔试的题目吧。
软件开发类:
一:选择题
1. 一道简单switch语句考察,没有break的话,应该顺序执行,所以结果应该为a=2,b=1;
2. having语句,(好像是查询分组吧,其他选项没仔细看,忘记了。)
3 .忘了 真不好意思
二:编程题
1.求最大公约数,语言不限。(很简单,直接法便能很顺利实现。)
2.1-2+3-4……n 求和,注意效率。(个人觉得只有两种情况,一种是N是偶数,另外一种是N是基数,然后直接返回结果即可。)
3.程序查错题:
void main(){
char string[10],str1[10];
int i;
for(i=0;i<10;i++){
string='a';
}
strcpy(string,str1);
}
参:数组越界。因为strcpy(dst,src),src还没初始化,所以越界,
str1和string调换位置或者改为strncpy(string,str1,10)也能保证程序正常运行,但结果明显不是所需。
4.U2乐队演奏问题17分钟内赶到音乐会现场,4个人,过桥,必须要手电筒,耗时分别为1,2,5,10……@#*(@$*(&@($&(@&$(&*(#(*&*(#总之就这么个意思。
因为这道题目之前用C语言实现过一个。而且本身题目不难,还是很好解决的`。首先时间相差差不多的一起过,1,2一起过,1送回,5,10再一起过,2送回,1,2再一起过,完成。总耗时2+1+10+2+2=17正好完成任务。
三:翻译
软件测试类:
一:填空题
1、给出二叉树的前缀和中缀表达式,求出该二叉树的后缀表达式。
2、死锁发生的四个必要条件
二:简答题
1、数据库三大范式及其作用
2、UML的概念和基本模型等
3、黑盒法,白盒法和灰盒法的基本概念和特点
三:编程与测试题目
1.用程序构造所有字符组合,如aabccd,有ab,ac,ad,bc,bd,cd,abc……等等
2.网页包含用户名,密码和登录按钮三个空间,设置20组不同的测试用例来测试用户登录功能
四:综合逻辑题
1.孔雀来找茬,大概8处错误,精通美女来找茬的同学们幸福啦~~~
2.飞机问题。 原题如下:
一架飞机(可空中加油)载满油可绕地球飞行半圈,若全球只有一个基地,问至少要起落几架次飞机,才能使一架飞机安全绕地球飞行一圈,加油飞机也能安全返回,请你写出空中加油方案?
(分析了一下,时间不够,并没有做出来,很悲惨~)
题目的情况基本就是这个样子啦~ 希望能够对大家有一点点的帮助,倍感欣慰
篇9:软件开发工程师笔试题
软件开发工程师笔试题
1、试分析下面的SQL语句的优劣,并用另外的方法实现,
(1) Select * from empe where e.No in (select a. No from amp a )
Select * from empe e where NOT EXISTS (Select a.No from amp a where e.NO=a.No)
(2) select * from emp e, anp a where e. No=a. No
2、用Decoole 重写下面的socl 语句
SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAME LIKE ‘SMITH%’;
select count(*),sum(sal) from emp where dept_no = 0030 and ename like ‘smith%’;
select count(decode(dept_no,0020,’x',null)) d0020_count,
count(decode(dept_no,0030,’x',null)) d0030_count,
sum(decode(dept_no,0020,sal,0)) d0020_sal,
sum(decode(dept_no,0030,sal,0)) d0030_sal
from emp where ename like ‘smith%’;
3、下面哪几种SQL不好。2,4,5
(1) update 语句 (2)in语句 (3)子查询 (4)多查等值查询 (5)笛卡尔乘积
4、请造出下列哪3种命名正确 A,B,D
A、ASD B、$abc C、const D、_asd E、3_asd
5、texarea java (1)写出文件名 (2)补充代码
6、型转换
example:
public String getValue(Object a,Object b){}
当下列方法调用时将出现何种异常,如何修正
String c=new String(“aaa”);
int d =123;
my.getValue(c,d);
(1) Integer d=new Integer(123);
(2) My.getValue(c,(String)d);
7、在JSP上显示Araylist中的'元素
<%@ page contentType=”text/html; charset=GBK” %>
<%@ page import = “java.util.ArrayList”%>
<%
ArrayList al = request.getAttribute(“arraylist”);
%>
<%
for(int i=0;i {
%>
<%
}
%>
序号姓名<%=i%><%=al.get(i)%>8、解释
beam:远程接口的具体实现
Home:管理和创建远程对象
Romate:提供给用户的远程接口
9、解释Javabean与EJB的区别
10、SeSS’on bean与Entitybean区别
11、解释Commend、DAO模式,试举例说明。
Command定义
不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作,将这些命令封装成在一个类中,然后用户(调用者)再对这个类进行操作,这就是Command模式,换句话说,本来用户(调用者)是直接调用这些命令的,如菜单上打开文档(调用者),就直接指向打开文档的代码,使用Command模式,就是在这两者之间增加一个中间者,将这种直接关系拗断,同时两者之间都隔离,基本没有关系了.
显然这样做的好处是符合封装的特性,降低耦合度,Command是将对行为进行封装的典型模式,Factory是将创建进行封装的模式,
从Command模式,我也发现设计模式一个”通病”:好象喜欢将简单的问题复杂化,
喜欢在不同类中增加第三者,当然这样做有利于代码的健壮性 可维护性 还有复用性.
如何使用
具体的Command模式代码各式各样,因为如何封装命令,不同系统,有不同的做法.下面事例是将命令封装在一个Collection的List中,任何对象一旦加入List中,实际上装入了一个封闭的黑盒中,对象的特性消失了,只有取出时,才有可能模糊的分辨出:
典型的Command模式需要有一个接口.接口中有一个统一的方法,这就是”将命令/请求封装为对象”:
程序代码:
public interface Command { public abstract void execute ( );}
//具体不同命令/请求代码是实现接口Command,下面有三个具体命令
程序代码:
public class Engineer implements Command {
public void execute( ) { //do Engineer’s command }
}
public class Programmer implements Command {
public void execute( ) { //do programmer’s command }
}
public class Politician implements Command {
public void execute( ) { //do Politician’s command }
}
按照通常做法,我们就可以直接调用这三个Command,但是使用Command模式,我们要将他们封装起来,扔到黑盒子List里去:
程序代码:
public class producer{
public static List produceRequests {
List queue = new ArrayList();
queue.add( new DomesticEngineer() );
queue.add( new Politician() );
queue.add( new Programmer() );
return queue; }
}
这三个命令进入List中后,已经失去了其外表特征,以后再取出,也可能无法分辨出谁是Engineer
谁是Programmer了,看下面如何调用Command模式:
程序代码:
public class TestCommand {
public static void main(String[] args) {
List queue = Producer.produceRequests();
for (Iterator it = queue.iterator(); it.hasNext(); )
//取出List中东东,其他特征都不能确定,只能保证一个特征是100%正确,// 他们至少是接口Command的”儿子”.所以强制转换类型为接口
Command((Command)it.next()).execute();
}
}
DAO:
由此可见,调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程,这样,以后增加第四个具体命令时,就不必修改调用者TestCommand中的代码了.
篇10:银行软件开发笔试题
银行软件开发笔试题
一,单选,20道吧,涉及到软件可行性分析,需求分析,计算机基础知识,软件测试(黑白盒测试),数据结构(基本概念、线性表、链式存储等),SQL数据库的查询修改语句,ODBC,等等,具体题目记不清了。有点基础的童鞋,考前花半天时间再复习一下就可以了。没学过的,放弃吧,一星期也看不完。还有几道公务员的逻辑推理题,不是很难。
二。程序填空题,2大段C/C++的程序,每段程序挖5个空让你填,
一段是录入学生成绩和考试科目的(涉及到指针、链式存储等数据结构的知识),一段是数组排序的。10个空让填的基本上都是for语句的'循环条件啦、循环体啦,很晕,因为已设变量就有一堆,一大堆字母搞不清代表什么含义(个人编程水平不高)!~
三。大选择题,共有3篇,每篇都是一小短文,内设5道选择,类似英语的完形填空~对了,最后一篇很变态,居然是英文逻辑推理,句子都很简单,就是得好好想一下~
题型就是这样,一个小时的时间基本够用,但绝对不是太富裕,因为我那个考场30来个考生吧,没有提前交卷的。
篇11:JAVA软件开发笔试题
JAVA软件开发笔试题
对日java软件开发工程师笔试题
1:设int a=10, b=20, c=30;条件表达式a
A.5
B.10
C.20
D.30
2:对 do-whie 语言 错误 的说法是
A.可构成多重循环结构
B.循环次数不可能为 0
C.循环次数可能为 0
D.先执行后判断
3:调用函数时,若实参是一个数组名,则向函数对应的`形参传送的是
A.数组的长度
B.数组的首地址
C.数组第一个元素的值
D.整个数组元素的值
4:C语言中,″x3d″在内存中占用的字节数是
A.1
B.2
C.4
D.5
5:若定义了( )
union
{ char a[10];
short b[4][5];
long c[5];
}u;
篇12:一套软件开发工程师笔试题
一套软件开发工程师笔试题
1、试分析下面的SQL语句的优劣,并用另外的方法实现,
(1) Select * from empe where e.No in (select a. No from amp a )
Select * from empe e where NOT EXISTS (Select a.No from amp a where e.NO=a.No)
(2) select * from emp e, anp a where e. No=a. No
2、用Decoole 重写下面的socl 语句
SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAME LIKE ‘SMITH%’;
select count(*),sum(sal) from emp where dept_no = 0030 and ename like ‘smith%’;
select count(decode(dept_no,0020,’x',null)) d0020_count,
count(decode(dept_no,0030,’x',null)) d0030_count,
sum(decode(dept_no,0020,sal,0)) d0020_sal,
sum(decode(dept_no,0030,sal,0)) d0030_sal
from emp where ename like ‘smith%’;
3、下面哪几种SQL不好。2,4,5
(1) update 语句 (2)in语句 (3)子查询 (4)多查等值查询 (5)笛卡尔乘积
4、请造出下列哪3种命名正确 A,B,D
A、ASD B、$abc C、const D、_asd E、3_asd
5、texarea java (1)写出文件名 (2)补充代码
6、型转换
example:
public String getValue(Object a,Object b){}
当下列方法调用时将出现何种异常,如何修正
String c=new String(“aaa”);
int d =123;
my.getValue(c,d);
(1) Integer d=new Integer(123);
(2) My.getValue(c,(String)d);
7、在JSP上显示Araylist中的元素
序号 姓名
8、解释
beam:远程接口的具体实现
Home:管理和创建远程对象
Romate:提供给用户的远程接口
9、解释Javabean与EJB的区别
10、SeSS’on bean与Entitybean区别
11、解释Commend、DAO模式,试举例说明。
Command定义
不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作,将这些命令封装成在一个类中,然后用户(调用者)再对这个类进行操作,这就是Command模式,换句话说,本来用户(调用者)是直接调用这些命令的,如菜单上打开文档(调用者),就直接指向打开文档的代码,使用Command模式,就是在这两者之间增加一个中间者,将这种直接关系拗断,同时两者之间都隔离,基本没有关系了.
显然这样做的好处是符合封装的特性,降低耦合度,Command是将对行为进行封装的典型模式,Factory是将创建进行封装的模式,
从Command模式,我也发现设计模式一个”通病”:好象喜欢将简单的问题复杂化,
喜欢在不同类中增加第三者,当然这样做有利于代码的健壮性 可维护性 还有复用性.
如何使用
具体的Command模式代码各式各样,因为如何封装命令,不同系统,有不同的做法.下面事例是将命令封装在一个Collection的List中,任何对象一旦加入List中,实际上装入了一个封闭的黑盒中,对象的特性消失了,只有取出时,才有可能模糊的分辨出:
典型的Command模式需要有一个接口.接口中有一个统一的方法,这就是”将命令/请求封装为对象”:
程序代码:
public interface Command { public abstract void execute ( );}
//具体不同命令/请求代码是实现接口Command,下面有三个具体命令
程序代码:
public class Engineer implements Command {
public void execute( ) { //do Engineer’s command }
}
public class Programmer implements Command {
public void execute( ) { //do programmer’s command }
}
public class Politician implements Command {
public void execute( ) { //do Politician’s command }
}
按照通常做法,我们就可以直接调用这三个Command,但是使用Command模式,我们要将他们封装起来,扔到黑盒子List里去:
程序代码:
public class producer{
public static List produceRequests() {
List queue = new ArrayList();
queue.add( new DomesticEngineer() );
queue.add( new Politician() );
queue.add( new Programmer() );
return queue; }
}
这三个命令进入List中后,已经失去了其外表特征,以后再取出,也可能无法分辨出谁是Engineer
谁是Programmer了,看下面如何调用Command模式:
程序代码:
public class TestCommand {
public static void main(String[] args) {
List queue = Producer.produceRequests();
for (Iterator it = queue.iterator(); it.hasNext(); )
//取出List中东东,其他特征都不能确定,只能保证一个特征是100%正确,// 他们至少是接口Command的”儿子”.所以强制转换类型为接口
Command((Command)it.next()).execute();
}
}
DAO:
由此可见,调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程,这样,以后增加第四个具体命令时,就不必修改调用者TestCommand中的代码了.
12、谈一下对“保障软件质量”的理解。
有效的软件质量管理
一、引言
随着社会信息化水平的不断提高,信息行业急速膨胀,信息企业快速成长,随之带来的信息市场竞争激烈,企业为了求生存,满足客户要求则成为各行各业的首要责任。依赖于质量、成本和进度的客户满意度,质量则是重点支撑之一,这样要求我们对质量管理需要加强认识。我们都知道pmbok把项目管理划分为9个知识领域,即范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、采购管理、风险管理和综合管理。质量管理作为9大知识领域之一,可见其重要性。
质量管理包括:质量计划编制、质量保证和质量控制三个过程域。质量计划是质量管理的第一过程域,它主要结合各个公司的质量方针,产品描述以及质量标准和规则通过收益、成本分析和流程设计等工具制定出来实施方略,其内容全面反应用户的要求,为质量小组成员有效工作提供了指南,为项目小组成员以及项目相关人员了解在项目进行中如何实施质量保证和控制提供依据,为确保项目质量得到保障提供坚实的基础。质量保证则是贯穿整个项目全生命周期的有计划和有系统的活动,经常性地针对整个项目质量计划的执行情况进行评估、检查与改进等工作,向管理者、顾客或其他方提供信任,确保项目质量与计划保持一致。质量控制是对阶段性的成果进行检测、验证,为质量保证提供参考依据,它是一个PDCA循环过程。
二 质量管理责任分配
我们公司在开发项目上按照规范化软件的生产方式进行生产,在生产流程上采用ISO9000的标准进行。每个项目除配备了项目开发所需角色外,还专门配备了配置管理小组、测试小组和质量保证小组确保质量管理的实施,下面针对这三种角色进行说明:
1、配置管理小组职责
配置管理小组是保证项目开发完毕的同时,内部文档和外部文档都同时完成。内部文档的及时产生和规范,是保证项目开发各小组能够更好的接口和沟通的重要前提,从另一个方面讲,也是保证工程不被某个关键路径所阻塞而延滞的前提。如上所述,配置管理小组还是保证质量保证小组得以发挥作用的基础。配置管理小组的主要职责包括: 完善各个部门发送需要存档和进行版本控制的代码、文档(包括外来文件)和阶段性成果; 对代码、文档等进行单向出入的控制; 对所有存档的文档进行版本控制; 提供文档规范,并传达到开发组中。
2、测试小组职责
测试小组作为质量控制的主要手段,负责软件的测试设计和执行工作。如同软件开发一样,测试在执行之前,同样需要进行测试计划和测试策略的设计,通常情况下测试可以分为如下几种类型,如:正确性测试、功能性测试、性能测试、安全测试和系统测试等。而这些测试均需要在测试计划和测试策略中进行描述用以指导测试小组成员进行测试用例编写和测试执行,
程序员在交给测试人员之前是进行过一定的单元测试,确保程序编译、运行正确。
测试人员根据详细设计的文档对软件要实现的功能进行一一测试,保证软件的执行正确的实现设计要求,在此也只证明了软件正确的反映了设计思想,但是否真正反映了用户的.需求仍需要进一步的功能性测试。
测试人员只有根据软件需求规格说明书所提及的功能进行检测,才能确保项目组开发的软件产品满足用户需求。在正确性测试完成之后,需要测试的是软件的性能,软件的性能在本项目中占有重要的地位,性能要求有可能改变软件的设计,为避免造成软件的后期返工,测试在性能上需要较大的侧重。如果有必要的话,测试小组还需要做安全测试,以确保系统使用安全可靠。
3、质量保证小组职责
质量保证小组作为质量保证的实施小组,主要职责是保证软件透明开发的主要环节。在项目开发的过程中几乎所有的部门都与质量保证小组有关。质量保证小组对项目经理提供项目进度与项目真正开发时的差异报告,提出差异原因和改进方法。
在项目进度被延滞或质量保证小组认为某阶段开发质量有问题时,提请项目经理、项目负责人等必要的相关人员举行质量会议。解决当前存在的和潜在的问题。质量保证是建立在文档的复审基础之上,因而文档版本的控制,特别是软件配置管理,直接影响软件质量保证的影响力和力度。质量保证小组的检测范围包括:系统分析人员是否正确的反映了用户的需求; 软件执行体是否正确的实现了分析人员的设计思想; 测试人员是否进行了较为彻底的和全面的测试; 配置管理员是否对文档的规范化进行的比较彻底,版本控制是否有效。
三 质量管理实施
有了良好的资源配备,又如何在项目全生命周期内实施质量保证,让我们从以下几个方面来看质量保证的实施过程:
1、项目进度的质量保证
项目进度是项目进行是否顺利的最直观表现。显然在项目开始之前,项目开发计划是必须的。如果项目开发计划的制定的是完全合理的,那项目进度也就真正表达了项目与最终的交付使用之间的距离,然而要制定完全合理的项目开发计划几乎不太可能。可见要保证项目进度,首先要保证项目开发计划尽可能合理。
项目计划的合理程度与项目计划制定者从事类似规模和类似业务的项目的经验有直接关系,通过经验往往能够预见潜在的阻碍,这样要求项目计划制定者需要集众人之力来完善计划。
当项目计划制定初期,由质量保证小组组织召开的项目计划评审会,邀请公司技术专家、用户以及项目组小组成员一起讨论项目计划的可行性,会议通常采用头脑风暴法,各抒己见,会后由指定的记录员形成质量记录,发送给相关人员,对其计划中不合理的地方进行修改完善,并由质量保证人员对其结果跟踪,以确保项目计划完整性、可行性,完善后的计划交由配置管理人员进行版本控制。
然而在计划实施过程中,计划不是“固定化”。常有人道,“计划赶不上变化”,但“要跟上变化”。项目计划以里程碑为界限,将整个开发周期划分为若干阶段。根据里程碑的完成情况,适当的调整每一个较小的阶段的任务量和完成的任务时间,这种方式非常有利于整个项目计划的动态调整。也利于项目质量保证的实施。
实际运作中,当质保小组发现计划实施的差异后,报告项目经理,由项目经理组织负责对计划进行周期性维护,对于已经变动的计划由质保小组协助配置管理小组完成版本控制。本公司已经开发湖南移动的集中客服系统,开发中的子项目多达六个,历时十个月,目前多数项目已经开发完毕,系统正在试运行阶段,项目金额数千万元。在这样的项目中,从管理者到开发人员到测试人员都积累了较为丰富的经验,特别是项目开发计划的制定,和项目进度的控制。
2、项目开发各阶段的质量保证
a、需求分析
需求分析是开发人员对系统需要做什么和如何做的定义过程。从系统分析的经验来看,这个过程往往是个循序渐进的过程,一次性对系统形成完整的认识是困难的。只有不断地和客户领域专家进行交流确认,方能逐步明了用户的需求。从系统开发的过程得知,系统分析时犯下的错误,会在接下来的阶段被成倍的放大,越是在开发的后期,纠正分析时犯下的错误所花费的代价越是昂贵,也越发影响系统的工期和系统的质量。
解决系统分析错误的方法我们公司通常采用邀请用户参与进行需求评定,然后对其用户的意见由质保成员跟踪检测是否纳入需求规格说明书,同时与用户签字确认形成需求基线,交由配置管理员放入配置管理库。
虽然尽早的邀请用户参与,仍然避免不了项目进行中用户的需求变更请求。对于开发过程存在的需求变动,我们要求用户填写变更申请单发送给项目配置管理员,在通过配置配置员转交质保小组,负责组织专家小组和项目组成员一起讨论实施变更的可行性及实施后所带来的影响,小的变更则直接记录入变更记录原因分析项和风险项栏,大的变更则需要形成正式的变更报告,无论那种变更都需要对相应的文档实施同步变更(包括需求规格说明书、详细设计文、安装手册、操作手册等)。但是对于无法实现或是变更会带来巨大的影响而将导致进度的延期,这时,我们将变更报告提交给用户或邀请用户进行协调会议,讨论变更取舍问题或是项目进度变更问题。
决定变更之后,由项目经理组织实施变更,测试人员检测变更结果,而质保小组成员监督变更实施过程并协助配置管理员对变更后的成果物进行版本控制。变更实施完后,上线前还需要指定人员协助用户一同测试并由用户签字后同意方可上线。
b、系统设计
优良的体系结构应当具备可扩展性和可配置性,而好的体系结构则需要好的设计方法,自然设计选型成为了系统设计首要的工作,究竟是采用哪种设计方法好呢?
对于设计选型不能一概而论,需要针对项目的结构、项目的特征和用户的需求来分析,同样也要考虑到参与项目小组成员的素质,如果其中大部分都没有从事过面向对象的设计且项目进对紧迫,这样没有多余的时间来培训小组成员来掌握面向对象的设计方法,尽管众所周知面向对象设计方法的优势,我们还是不如采用面向过程的方式(除用户指定开发设计方式外)可以减少项目承担的技术风险。
我们公司有过一个项目,用户指定需要采用面向对象分析、设计和开发,且开发周期短,在无赖的情况下,项目小组只能选用面向对象的软件开发过程,由于项目小组很少从事过面向对象的开发,经验缺乏,导致项目上马后项目进度延误,项目没有达到预期的效果。
针对此次开发,我们分析其原因,发现小组成员在开发过程中对于新技术互相交流少,各自有各自的理解和想法,造成理解上的不一致性,导致工作重复性高,滞后项目进度。建议解决方法是项目组成员采用集中办公,分块学习,学习的成果马上向项目相关人员发布,再由配置管理员对其发布的文档进行整理、规类放入配置库以供大家共享。这样方便大家的互相学习,减少重复的工作。在这次开发中我们公司从管理人员、设计人员到开发人员都汲取了很多教训,同时经过此次项目的开发,小组成员也积累了丰富的面向对象的开发经验。
除设计选型,还有一个容易被忽视的问题,就是公共类开发。公共类开发可以减少工作中的重复工作,降低开发成本。这要求我们再设计阶段通过对用户需求的仔细研究,尽可能的识别出公共类,并进行定义指定专人负责设计通知其它设计人员,以减少重复工作。对于项目组提供的设计文档,由质保小组组织技术专家、项目组设计人员、开发人员和测试人员对其设计文档的评审,检测设计文档对其下一阶段工作的可行性,及时发现设计中可能存在的错误,降低项目开发风险,同时确保设计文档能为开发人员、测试人员提供切实的指导。对于可复用的设计进行提取作为公共库设计和开发,提供项目组或整个公司重用。最后交由配置管理员进行设计文档的版本控制。
c、实现
实现也就是代码的生产过程。这里不仅包括代码的产生,同时也包括测试用例的产生。针对上一阶段提供详细设计,程序员开始编码并且调试程序,测试人员则根据设计进行测试用例的设计,设计出来的用例需要得到项目组成员认可由项目经理审核通过才能进入配置库。同时程序员调试完程序提交测试人员进行程序正确性检测。
d、文档管理
文档维护主要是配置管理小组的工作。文档从用途上分主要分为内部文档和外部文档。
内部文档包括: 项目开发计划; 需求分析; 体系结构设计说明; 详细设计说明; 构件索引; 构件成分说明; 构件接口及调用说明; 组件索引; 组件接口及调用说明; 类索引; 类属性及方法说明; 测试报告; 测试统计报告; 质量监督报告; 源代码; 文档分类版本索引; 软件安装打包文件。
外部文档主要包括: 软件安装手册; 软件操作手册; 在线帮助; 系统性能指标报告; 系统操作索引。
如何保证文档的全面性,使其真正为项目的进度提供保证,又不因为文档的写作而耽误项目的进度,这仍然是一个比较难解决的问题。解决此问题,其核心仍然是个”度”的问题。在本项目的开发中,配置管理小组的一个非常重要的任务还是书写文档规范和文档模板。当有文档模板后需要书写文档的人员只剩下”填空”的工作,从某种意义上讲,书写文档的速度会加快。如果书写文档的人员认为文档的更细致的部分可以由他人帮助完成,则该文档即交由他人完成,但此时文档并不算被正式提交,当他人书写完毕之后,必须由文档的初写者进行复审,复审通过后方可以正式提交,进入软件配置管理的循环中。
配置管理小组真正核心的工作是对文档的组织管理。根据文档的不同,文档的来源也不同,有些是通过质量保证小组经过复审之后转交给配置管理小组,有些则会直接从文档的出处到达配置管理小组。文档的管理是一个非常烦琐的工作,但是长远来看它不仅使项目的开发对单个主要人员的依赖减少,从而减少人员流动给项目的带来的风险,更重要的是在项目进行到后百分之十的时候起到拉动项目的作用。
从以往做大项目的经验来看,写作文档在项目开发的早期可能会使项目的进度比起不写文档要稍慢,但随着项目的进展,各个部门需要配合越来越多,开发者越来越需要知道其他人员的开发思路和开发过程,才能使自己的开发向前推进。一个明显的例子就是系统整合,或者某些环节是建立在其他环节完成的基础之上时,就更显现出文档交流的准确性和高效性。
3、系统维护质量保证
在我们公司,维护小组的任务一方面是保证对项目客户的跟踪服务,另一方面是确保该项目其它的开发人员从项目中尽快的解脱出来以便投入到下一个项目的开发中。所以通常项目维护小组成员主要由项目组的少部分开发人员承担完成。他们不仅了解软件的核心内容,而且与客户也不陌生,以便能够以最快的速度修正错误。对于一般性的错误,如操作不当等引起的问题,全部由维护小组执行完成,但需要用户测试确认上线。如果较大的修改则需要走变更控制流程,用户或者维护人员填写变更申请,经专家会议讨论分析可行方案在由维护小组实施,通过测试后方可提交用户。
维护小组的人员基本上是按项目跟进的。当一个项目刚刚交付用户时,在维护小组有较多的人员进行跟进,随软件的稳定,跟进的人逐步减少,并转移到其它项目中去。
13 3.给出一个MVC结果图,请简单用文字对他进行一次前后台交互的描述。(这个图你去找啦)
14 PowerDesigner
15 项目经验
16 三层结构的理解
【群硕软件开发笔试题】相关文章:
4.笔试题
6.CPMP笔试题
7.笔试题继承
8.笔试题编译程序
9.HTC笔试题
10.Hongkong笔试题






文档为doc格式