同济大学软件工程实习总结报告资料

上传人:痛*** 文档编号:218027179 上传时间:2023-06-16 格式:DOC 页数:17 大小:97KB
收藏 版权申诉 举报 下载
同济大学软件工程实习总结报告资料_第1页
第1页 / 共17页
同济大学软件工程实习总结报告资料_第2页
第2页 / 共17页
同济大学软件工程实习总结报告资料_第3页
第3页 / 共17页
资源描述:

《同济大学软件工程实习总结报告资料》由会员分享,可在线阅读,更多相关《同济大学软件工程实习总结报告资料(17页珍藏版)》请在装配图网上搜索。

1、生 产 实 习 报 告 实习日程安排我从2004.8到2004.11在这家公司公司进行实习。1. 刚开始的几个星期,公司经理安排我学习一些有关游戏方面的技术,帮我快速的对游戏行业入门。2. 接下来的时间,经理安排我进行一些实战开发,难度从简单到难。所进行开发的项目我会在实习收获和体会这段中具体阐述。实习收获和体会我在公司主要开发了一个图形转换器,制作一个InstallShiled安装程序和关于3D处理的MMX技术,下面我将介绍我的工作情况和工作收获。一. 图形转换器:1.设计文档一:功能描述:此软件能将TGA,BMP等图形格式转换为任意制定的格式功能细化:1 能显示指定的图片(TGA,RGBA

2、等格式)2 能显示指定图片的参数(长度,宽度,图片的格式)3 进行转换的时候能检查该图片长,宽是否为2的幂次,如果不是则发出通知信息4 具有批处理功能,给定一个文件目录,能将该目录下的所有图片转换为DDS格式5 转换为DDS时候可以指定MipMap值 二:模块划分:UI界面 + 转换模块转换模块:以DLL的形式,针对不同的平台各写一个其接口为:bool ChangeTo (const char* SrcName, const char* DestName,TYPE type)enum TYPEBMP = 1,JPEG = 2,DDS = 3; const char* SrcName, cons

3、t char* DestName 应该换成一个结构体SrcName:指定的图片名字DestName: 转换的图片名字UI界面:采取多文档视图结构三:重要结构struct DDS_PIXELFORMAT DWORD dwSize; DWORD dwFlags; DWORD dwFourCC; DWORD dwRGBBitCount; DWORD dwRBitMask; DWORD dwGBitMask; DWORD dwBBitMask; DWORD dwABitMask;struct DDS_HEADER DWORD dwSize; DWORD dwHeaderFlags; DWORD dwH

4、eight; DWORD dwWidth; DWORD dwPitchOrLinearSize; DWORD dwDepth; DWORD dwMipMapCount; DWORD dwReserved111; DDS_PIXELFORMAT ddspf; DWORD dwSurfaceFlags; DWORD dwCubemapFlags; DWORD dwReserved23;四:开发平台VC6.0+DX9.02.接口文档接口说明一 接口代码:class IImageChangepublic:virtual bool ChangeTo(ImageInfo* pImageInfo) = 0;

5、virtual char* GetDllName() = 0;virtual void SetDirectory(const char* szDirName) = 0;上面是一个接口类,这里模仿COM的方法,设计一个抽象类。 任何Image Change DLL必须继承以上接口类。Example:class CImageChangeToDDS: public IImageChangepublic:CImagaChangeToDDS();CImageChangeToDDS();virtual bool ChangeTo(ImageInfo* pImageInfo);virtual char* G

6、etDllName();virtual void SetDirectory(const char* szDirName);二 接口类成员函数说明:virtual bool ChangeTo(ImageInfo* pImageInfo) = 0;该接口函数传入一个ImageInfo结构的指针(ImageInfo是中间图象数据类型,详见中间数据结构文档)。用户可以在自己类中override该函数,该函数可以按自己意愿任意转换为自己想要的格式。virtual char* GetDllName() = 0;该接口函数返回一个代表该该接口的字串,可以说明该接口类的功能和版本。virtual void S

7、etDirectory(const char* szDirName) = 0;该接口函数设置批处理转换功能时的目的文件夹。三 DLL说明: DLL一共导出2个函数:extern CIImageChange* CreateInstance();extern Cvoid ReleaseInstance(IImageChange* pObj);IImageChange* CreateInstance() 产生一个派生自IimageChange的实例,该实例导入到应用程序进程中。void ReleaseInstance(IImageChange* pObj);释放从CreateInstance()产生

8、的实例资源。三 接口实现#define FILENAMELEN 128#define PALNUM 256typedef unsigned char IMG_BYTE;typedef unsigned short IMG_WORD;typedef unsigned long IMG_DWORD;typedef long IMG_LONG;typedef bool IMG_BOOL;typedef DWORD IMG_ARGB;typedef void* IMG_LPVOID;enum IMAGE_DATA_TYPE/depth 32bit IDT_A8R8G8B8 = 1,IDT_X8B8G8

9、R8 = 2,/depth 24bitIDT_R8G8B8 = 3,/depth 16bitIDT_R5G6B5 = 4,IDT_X1R5G5B5 = 5,IDT_A4R4G4B4 = 6,IDT_X4R4G4B4 = 7,/depth 8bitIDT_A1R2G3B2 = 8,IDT_R3G3B2 = 9,IDT_INDEX8 = 10,/depth 4bitIDT_A1R1G1B1 = 11,IDT_X1R1G1B1 = 12,IDT_INDEX4 = 13,/depth 1bitIDT_C1 = 14, / monochrome 0:BLACK 1:WHITEIDT_INDEX1 = 1

10、5, IDT_UNKNOWN = -1,;struct ImageHeaderIMG_DWORD dwSize;IMG_LONG lWidth;IMG_LONG lHeight;IMG_BYTE bDepth; /象素的深度IMG_BYTE bReserve13;IMAGE_DATA_TYPE IDT_TYPE;IMG_WORD wPlanes; /Must Be ZeroIMG_WORD wReserve2;IMG_DWORD dwReserve; /保留字,可以填充任意数据,如:指向用户分配的一段内存IMG_DWORD dwPalClrNum; /调色板的颜色数,如果为-1,则不存在调色板

11、;若为1,4,8,16/代表调色板的颜色总数IMG_ARGB PalColorsPALNUM; /调色板的数据,dwPalClrNum如果为-1,则该数据无效 ;struct ImageInfoDWORD dwSize; LONG lOffset; /该结构与数据的偏移,以BYTE为单位ImageHeader iiInfo;LPVOID* pData;转换模块:以DLL的形式,针对不同的平台各写一个其接口为:bool ChangeImage (ImageHeader * pImageHeader)3.中间数据格式说明一 中间数据格式:struct ImageInfoDWORD dwSize;

12、/ ImageInfo结构大小LONG lOffset; /该结构与数据的偏移,以BYTE为单位TCHAR FileNameFILENAMELEN; /源图形文件名ImageHeader header; /图形中间数据的头信息LONG lDataSize; /图形的数据区大小LPVOID pData; /图形的数据区指针;struct ImageHeaderDWORD dwSize; / ImageHeader结构大小LONG lWidth; /位图的宽度, 单位:pixelLONG lHeight; /位图的高度, 单位:pixelWORD wDepth; /象素的深度,代表一个象素占多少位

13、WORD wReserve1; /Must Be Zero IMAGE_DATA_TYPE IDT_TYPE; /位图数据存储类型WORD wPlanes; /Must Be Zero WORD wReserve2; /Must Be Zero DWORD dwReserve; /保留字,可以填充任意数据,如:指向用户分配的一段内存DWORD dwPalClrNum; /调色板的颜色数,如果为0,则不存在调色板;若为1,4, / 代表调色板的颜色总数ARGB PalColorsPALNUM; /调色板的数据dwPalClrNum如果为0,则该数据无效 ;enum IMAGE_DATA_TYPE

14、/depth 32bit IDT_A8R8G8B8 = 1, IDT_X8B8G8R8 = 2,/depth 24bitIDT_R8G8B8 = 3,/depth 16bitIDT_R5G6B5 = 4,IDT_X1R5G5B5 = 5,IDT_A1R5G5B5 = 6,IDT_A4R4G4B4 = 7,IDT_X4R4G4B4 = 8,/depth 8bitIDT_R3G3B2 = 9,IDT_INDEX8 = 10,/depth 4bit/IDT_A1R1G1B1 = 11,/IDT_X1R1G1B1 = 12,IDT_INDEX4 = 13,/depth 1bit IDT_INDEX1=

15、 14, IDT_UNKNOWN = -1,;二. 使用InstallShield制作安装程序修改InstallShield对话框的过程:一:改变InstallShield自带的对话框的方法1. 首先用VC.NET打开_isres.dll资源DLL,该DLL是InstallShield自带的DLL,里面存放了InstallShield中所有自带对话框模板。2. 在VC.NET中修改对话框(对话框ID可以通过Dialog Sampler工具得到)3. 保存修改。注意:修改InstallShield自带的对话框只能修改一些文本,和一些控件的相对位置,不能修改控件的ID和增加一些控件,不然会导致控件

16、消息映射不正确。二:自制可以在InstallShield对话框:1. 首先用VS.NET打开ExamplesCustom DialogVC+ 4 Project_isuser.rc,这是一个模板资源,可供用户任意编辑.2. 生成自己的对话框,保存DLL.3. 写对话框处理函数(跟windows下的对话框处理函数类似)注意: 一定要保存所有的控件ID-ValueInstallShield总结文档:1. 制作自己的对话框作为自己的主界面(修改-isuser.dll,路径为:C:Program FilesInstallShieldProfessional - Standard EditionRedi

17、stributableCompressed Files0009-EnglishIntel 32)2. 设置背景图3. 按照InstallShield默认的流程进行安装(也可以按照自己实际需求改动,比如加入自己的对话框) 如果InstallShield提供的对话框不符合用户要求,可以修改_isres.dll,(路径为C:Program FilesInstallShieldProfessional - Standard Edition RedistributableCompressed Files0009-EnglishIntel 32 ) 一些技巧:1. 在修改InstallShield自带的对

18、话框时,我们可以用DialogSampler工具查看所要修改对话框的ID2. 用InstallShield写注册表时,首先必须要调用RegDBSetDefaultRoot来设置root key3. 如果要手工控制进度条,可以用SetStatusWindow和StatusUpdate函数来控制4. InstallShield函数调用顺序: OnBegin-OnFirstUIBefore-OnMainUIBefore-OnMoving-OnInstallingFile-OnUninstallingFile-OnMoved-OnFirstUIAfter-OnMainUIAfter-OnEnd 5.

19、反安装程序制作: 反安装程序的路径放在注册表中(可在MSDN中搜索 Uninstall可以查的该路径),所以只要写一个windows程序去调用这个反安装程序。三.关于3D处理的MMX技术具有MMX技术的处理器的在片高速缓存子系统,是由两个16K的4路线长为32字节的关联高速缓存体构成。高速缓存具有一个回写机制和一个伪LRU的置换算法。数据的高速缓存由八个按四字节边界交错的存贮体构成。在具有MMX技术的奔腾处理器上,只要引用的数据不在同一个高速缓存体上,就可以被一条读取指令和一条存贮指令同时访问。在具有MMX技术的奔腾处理器上,高速缓存访问失败的迟延为8个内部时钟周期。在具有MMX技术的动态执行

20、处理器中,最小迟延是10个内部时钟周期。具有MMX技术的奔腾处理器和动态执行处理器在分支预测方面,除一个较小的异常处理外(本书2.3.1节中讨论),在功能上完全一样。分支目标缓冲区(BTB)存贮了预先所见的分支和它们的目标。当一个分支被预取后,BTB将目标地址直接填入到指令读取单元(IFU)。一旦分支被执行,BTB将随着目标地址而改变。使用分支目标缓存时,预先所见的分支被动态预告。分支目标缓存的预测算法包括了模式匹配和每目标多达4位的预测历史位。例如,一个具有4个迭代长度的循环将百分之百地被正确预测到。遵循下列原则将提高预测性能:编写条件分支(除循环外)可将最常执行的分支紧接在分支指令后(即失

21、败)。另外,具有MMX技术的处理器有一个堆栈返回缓存(RSB, Return Stack Buffer),可以连续地为不同地址上调用的过程正确地预测其返回地址,进一步为展开具有函数调用的循环带来了益处,并删除了某些需要in-line的过程。另外,在具有MMX技术的奔腾处理器上,如果两个分支指令的最后一个字节在同一个按四字节对齐的内存段内,则分支不可预测。如下图所示:图2-5相连分支的例子这种情况,发生在两个相连分支间没有间隔指令且第二个指令只有两个字节长的情况下(如+/-128字节的相对跳转指令)。为避免这种无法预测的情况,应使第二分支加长,在分支指令中用16位的相对位移代替8位的相对位移。具

22、有MMX技术的处理器具有4个写缓存(相对无MMX技术的奔腾处理器的两个写缓存)。另外,写缓存可以被U管道使用,也可以被V管道使用(相对无MMX技术的奔腾处理器的一个写缓存对应一个管道的情况)。通过对内存写操作进行安排调度,可以提高关键循环的性能。如果你不想看到写未命中,每组指令不能安排多于4条写指令。并在安排另外的写指令前调度其它指令。Intel的MMX技术是对Intel体系结构(IA)指令集的扩展。该技术使用了单指令多数据技术(SIMD)技术,以并行方式处理多个数据元素,从而提高了多媒体和通讯软件的运行速度。MMX指令集增加了57条新的操作码和一个新的64位四字数据类型。这种新的64位数据保

23、持了可供MMX指令操作的成组数据值MMX技术在16位高彩和24位真彩数据方面作的并不是最好。封装好的加,乘逻辑运算符实际上已使得24位成了最具有吸引力的运算方式。它包含了3个8位(红,绿,兰)元素或?位固定点(48位是给RGB的)。完成运算之后(像Gouraud阴影,alpha,等),算法转化成RGB16(555或565)以来更新缓存。MMX技术并没有内置的算法,也没有为5位而封装的块。24位的内部运算符使得能提供用8位调色板无法得到的高质量的色彩。包括:为雾化,透明化的alpha混合为橙色火光的RGB(多色彩)的光亮,等等拟镜的加亮区瞬间在屏幕上显示多于256种颜色真正平滑的阴影,随意的混合

24、色彩少量(或没有)抖动色彩与其它应用的调色板没有冲突或不协调与高彩的容量和色彩可媲美,接近于HW 加速器当然,系统的图像存储器的容量决定了是能用16位还是24位彩色。对于1MB的显卡,只能使用8位的调色板(640*480*2 字节需要600KB,如果没有双倍缓冲,或后备缓冲在存储系统中,这只能适应于1MB)。对于2MB或4MB的显卡,16位就很诱人了。640*480双倍缓冲后,占用1.2M,仍留下800KB给字符缓存或Z-缓冲。8位色准许使用一个简单的MOVQ指令来同时以东8个点。如果有了MMX技术的执行单元和“pairing”指令,它也准许16个点的同时比较或(和)混合。不幸的是,8位的调色

25、器处理需要在同一时间内从调色板中读出一个字节。一直以来,老式处理器的8位处理代码在新的CPU上实际上是扮演着“速度绊脚石”的角色来降低性能。为了奔腾处理器和Dynamic Execution(TM)处理的高速度,这应被避免。例子如下:自修改代码,它用新的地址或即时值重写了部分指令流。这使得避免使用其它注册者来得到数据。在新的CPU中,每个被修改的指令会浪费许多的时钟周期。因为深层的管道必须被清空,而且缓存必须要重写重取。随机(不是顺序)进入存储区,作为乘法查找的结果,颜色变幻,阴影化或抖动经常的数据独立分支,尤其当他们的顺区不规则时与8位或16位 (AL,AH,AX,BL.)一样,32位的注册

26、是很优秀的,将8位像素点的乘法和简单的32位写或0溢出单独字节结合起来使用MMX指令开发时候需要注意的 调整代码,一般情况下不使用向前条件分支,通常使用向后的条件分支。 按16字节边界条件对齐频繁执行的分支目标。 将循环展开来调度指令。 使用软件方式来安排流水线以调度迟延和功能单元。 必须成对使用CALL和 RET(return)指令。 避免使用自修改代码。 避免把数据放在代码段。 尽可能快地计算出存贮地址。 应避免使用包含三个或三个以上微操作代码或指令长度超过7个字节的指令。如果可能,使用只有一个微操作的指令。 不要使用两个8位读取指令来进行16位的读取。 在调用被调用保存(calleesa

27、ve)过程前,先清除部分寄存器的内容。 解决阻塞条件,如存贮地址,尽可能地避免可能引起阻塞的读取。 一般情况下,一个可以直接由处理器支持的N-字节的数据(8位的字节,16值的字,32位的双字,32位、64位及80位浮点数)应该对齐在下一个最高的2的乘方边界处,避免未对齐的数据。按任意边界对齐8位数据。在已对齐的4-字节字数据内对齐16位数据。以4的任意倍数为边界,对齐32位数据。以8的任意倍数为边界,对齐64位数据。以128位为边界(即16字节的倍数),对齐80位数据。合理化建议我觉得学院开的很多课程的顺序不对,而且有的课程能放在实习结束后再上效果可能会更好,比如:软件工程,软件测试等,实习前

28、只要将一些基础的课程学好就行了。附录1: 软件测试本人目前所在的项目组没有专门的软件测试人员,因此我们充当了双重角色,即是开发人员也是测试人员,本人因此对测试有了更多更深入的了解,在实践方面,除了做最基本的单元测试,功能测试外,还参与了集成测试,系统测试,用户验收测试。下面先介绍一些软件测试的相关概念和方法,再结合本人的实践谈谈我们是如何做软件测试的,以及心得体会。软件测试的基本概念和方法软件测试方法在不同的书籍中可能有不同的分类,不同的叫法和不同的解释。比如,从测试人员角度看,可分为手动测试和自动测试。从源代码的角度可分为单元测试和功能测试。从理论定义来分,可分为黑箱测试,白箱测试和灰箱测试

29、。而实际项目主要侧重于软件功能的黑箱测试方法:功能测试(Functionality Test),验收测试(Acceptance Test),用户界面(User interface)测试,性能测试(Performance Test),压力测试(Stress Test)。下面就简单介绍一下这些测试方法的概念。白箱测试:通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。黑箱测试:通过使用整个软件或某种软件功能来严格地测试,而并没有通过检查程序的源代码或者很清楚地了解该软件或某种软件功能的源代码程序具体是怎样设

30、计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。灰箱测试:就像黑箱测试一样是通过用户界面测试,但是测试人员已经有所了解该软件或某种软件功能的源代码程序具体是怎样设计的。甚至于还读过部分源代码。因此测试人员可以有的放矢地进行某种确定的条件/功能的测试。功能测试:验证测试软件功能能否正常按照它的设计工作。看运行软件时的期望行为是否符合原设计。验收测试:是在把测试的版本交付测试部门大范围测试以前进行的对最基本功能的简单测试。因为在把测试的版本交付测试部门大范围测试以前应该先验证该版本对于所测试的功能基本上比较稳定。必须满足一些最低要求用户界面测试:分析软件用户界面的设计是否合乎

31、用户期望或要求。它常常包括菜单,对话框及对话框上所有按钮,文字,出错提示,帮助信息(Menu 和Help content)等方面的测试。性能测试:通常验证软件的性能在正常环境和系统条件下重复使用是否还能满足性能指标。或者执行同样任务时新版本不比旧版本慢。一般还检查系统内存在运行程序时会不会泄漏。比如,验证程序保存一个巨大的文件新版本不比旧版本慢。压力测试:它通常验证软件的性能在各种极端的环境和系统条件下是否还能正常工作。或者说是验证软件的性能在各种极端环境和系统条件下的承受能力。软件测试的重要性软件测试是保证软件产品质量的重要手段之一。它是测量、评估软件产品特点和能力的活动。现在,国内一些软件

32、企业对于软件测试的重视程度还很不够,认为测试工作非常简单,只是简单地操作所测的软件产品而已。这种错误的思想严重影响了国内软件质量,应该引起我们的高度重视。下面就看一个例子。微软公司是软件行业的老大,他们对软件测试的重视程度是许多同行无法比拟的。在微软内部,软件测试人员与软件开发人员的比率一般为1.5-2.5左右,微软软件开发的实践过程已经证明了这种人员结构的合理性与正确性。国内公司显然很难达到这种比率,没关系我们刚刚起步,人多人少不是问题所在,关键在于观念与态度,国内软件业和国外相比,最大的差异也许就在于产品质量和质量控制。而软件测试才能为产品质量和质量控制提供保证。心得体会本人觉得一个好的软

33、件测试员,应该培养以下一些素质:l 怀疑精神。世界上没有绝对正确的,总有错误的地方,软件也是。所以在测试时,不要轻易对自己说“这里肯定没问题”。l 打破砂锅问到底的精神,对于只出现过一次的bug,一定找出原因,不解决誓不罢休。l 保持一个良好的心情,否则可能无法把测试作好。不要把生活中的不愉快的情绪带到工作中来。测试不像开发,很明显有任务要去完成,测试似乎更具神秘性,需要你去发现,糟糕的心情无法让你静下心来,也就很难做好测试。附录2: 软件配置当今计算机信息技术产业的迅猛发展,促进了国内的软件开发在先进技术和产品方面的广泛应用。但是,在先进的操作系统,开发工具为企业带来高效益的同时,另一方面也

34、使得我们的开发环境日趋复杂化而难以管理。如:团队沟通困难,软件重用率低下,代码冗余度高,文档不健全等,结果造成数据丢失,开发周期漫长,产品可靠性差,质量低劣,软件维护困难,用户抱怨使用不便,项目风险增加等。事实已经表明,随着整个软件业的迅速发展,没有得到有效管理的软件开发过程中所出现的风险和挑战将越来越突出。加强软件开发管理,通过管理和追踪软件开发环境中产生的变更,建立规范化的软件开发环境,已成为软件产业化的必要条件。软件配置管理作为软件开发过程中一个重要过程已经逐渐受到各软件企业的重视。软件配置管理(Software Configuration Management),是一个控制软件系统演变

35、的学科。在IEEE标准729-1983中,软件配置管理的定义包括:l 配置标识产品的结构、产品的构件及其类型,为其分配唯一的标识符,并以某种形式提供对它们的存取。l 版本控制通过建立产品基线,控制软件产品的发布和在整个软件生命周期中对软件产品的修改。例如,它将解决哪些修改会在该产品的最新版本中实现的问题。l 状态统计记录并报告构件和修改请求的状态,并收集关于产品构件的重要统计信息。例如,它将解决修改这个错误会影响多少个文件的问题。l 审计和审查确认产品的完整性并维护构件间的一致性,即确保产品是一个严格定义的构件集合。例如,它将解决目前发布的产品所用的文件的版本是否正确的问题。l 生产对产品的生

36、产进行优化管理。它将解决最新发布的产品应由哪些版本的文件和工具来生成的问题。l 过程管理确保软件组织的规程、方针和软件周期得以正确贯彻执行。它将解决要交付给用户的产品是否经过测试和质量检查的问题。l 小组协作控制开发统一产品的多个开发人员之间的协作。例如,它将解决是否所有本地程序员所做的修改都已被加入到新版本的产品中的问题。软件配置管理的解决方案涉及面很广,将影响软件开发环境、软件过程模型、配置管理系统的使用者、软件产品的质量和用户的组织机构。软件组织应该提出不同层次的配置管理视角,这些层次包括:公司级、项目级、程序员级和应用级。公司级视角提供组织的全貌图和配置管理过程的描述;项目级视角是与项

37、目相关的各项目组可以使用不同的配置管理方案;程序员级视角是专门为程序员提供的且具有某些特定的配置管理功能;应用级视角关心的是配置管理如何应用到具体的问题中去。软件配置管理(Software Configuration Management (SCM)),它为软件开发提供了一套管理办法和活动原则,成为贯穿软件开发始终的重要质量保证活动。需要说明的是,从学术上讲,软件配置管理(SCM)只是变更管理(Change Management(CM))的一个方面;但从SCM工具的发展来看,越来越多的SCM工具开始集成变更管理(CM)的功能,甚至问题跟踪(Defect Tracking)的功能。附录3: 团队

38、软件开发实践喜欢足球的朋友应该非常清楚一件事情,那就是在一场足球赛中假如球员之间缺少默契的配合或教练的指导思想执行不到位等情况下,那场比赛多半是以失败告终的,因为这支球队并不是优秀的球队。开发软件项目就象一场进行中的足球赛,是靠项目管理、系统分析设计、程序编制、测试、市场营销等不同角色人员共同协作完成的,不同角色的人执行的工作相互促进和制约着其它角色的人的工作,因此一个高效的软件开发团队是高质量软件项目或产品的保证,可如何才能营造高效软件开发团队呢?从以下几个方面来说明:一、 高效软件开发团队的特征高效的软件开发团队是建立在合理的开发流程及团队成员密切的合作的基础之上的,成员共同的迎接挑战、有

39、效的计划、协调和管理各自的工作以至完成明确的目标,高效的开发团队具有如下特征:1、 具有明确且有挑战性的共同目标一个具有明确的而且有挑战性目标的团队比目标不明确或不具有很大的挑战性目标的团队效率高得多,通常技术人员往往会因为完成了某个明确的任务,而且这个任务的完成具有挑战性的意义而感到自豪,反过来团队成员为了获取这种自豪的感觉而更加积极的工作从而带来团队开发的高效率,如作为系统设计人员很清楚的知道在什么时候要做到什么,什么时候开始做,什么时候必须完成,为了完成工作必须面临哪些挑战,怎么解决这些困难等为设计出一个高质量的软件项目提供了重要保证,而模模糊糊的去设计一个系统或模模糊糊的就去编写代码是

40、非常危险的,而且会为此付出高昂代价,因此高效的软件开发团队具有挑战性的共同目标。2、 团队具有很强的凝聚力在一个高效的软件开发团队中,成员们凝聚为一个整体共同进行工作,他们是相互支持、互相交流、互相尊重的,而不是相互推卸责任、保守、相互指责的,在一些散乱的开发团队中往往存在这样的问题,一些程序员是比较保守的,明明知道另外的模块中需要用到一段与自己已经编写完成但有些难度的程序代码,他也不愿拿出来给其它程序员共享,不愿与系统设计人员交流,这样给项目的进度造成了些不可度量的因素。3、 具有融洽的交流环境在一个开发团队中,每个人行使自己的职责,如需求分析人员制定需求规格说明、系统设计人员做系统概要设计

41、和详细设计、项目经理配置项目开发环境并且制定项目计划等,但每个人的工作不可能做到完美的,如系统概要设计的文档可能有个别地方词不达意,做详细设计的时候就可能会造成误解,项目经理制定计划时可能忽略了某种风险的存在而造成执行者过于紧张的压力等等情况都需要大家通过交流、反馈的手段然后协商解决的,因此高效的软件开发团队是具有融洽的交流环境的,而不是那种简单的命令执行式的。4、 具有共同的工作规范和框架高效软件开发团队具有规范性及共同框架的工作,对于项目管理具有规范的项目开发计划,对于分析设计具有规范和统一框架的文档及审评标准,对于代码具有程序规范条例,对于测试有规范且可推理的测试计划及测试报告等等。并且

42、所有成员都明白自己的职责,知道必须完成什么计划?由谁来完成?什么时候开始?什么时候结束?按什么顺序?等,总之一个高效的开发团队无论是工作内容还是工作流程都具有不同程度的规范性和标准风格的框架。5、 采用合理的开发过程软件的开发不同于一般商品的研发和生产,开发过程中会面临着各种难以预测的风险,比如需求的变化、人员的异动、技术的瓶颈、同行的竞争等,高效的软件开发团队往往是采用了合理的开发过程去控制开发过程中的风险、提高软件的质量、降低开发费用,这样的团队会根据自身的必要程度决定要执行哪些工作?如配置管理、资源管理、版本控制、代码控制等,团队还合理的分划并定义开发过程的里程碑,决定每项活动内容的底线

43、和审评标准,决定各项活动的先后关系或迭代的关系等。总之高效的软件开发团队的开发过程的原则是高效率、高质量、低成本。二、 目前国内软件开发团队容易存在的问题由于传统的旧体制下的管理思想的沿袭、大部分中国人传统的思维习惯及软件行业在中国发展的处于初期阶段等原因,使国内的许多软件开发团队在领导、合作、质量、参与等方面存在一些问题,具体如下:1、 领导不力有效的领导是高效率软件开发团队的基本要求,如果领导不力,工作计划就不一定会合理,团队成员也不一定会投入工作的热情,使团队的凝聚力大打折扣;如果领导不力,就不一定有明确且具有挑战性的目标,团队成员就无法完成高质量的项目产品,无法投入信心和激情。传统的旧

44、体制下的管理思想的沿袭,是部分领导还具有老大爷的心态,于是贪功、推卸责任、明则保身等一系列现象也相继而生;如果领导不力,就无法营造融洽的交流环境,团队的工作便是死板的没有生气的;如果领导不力,就不知道采用什么样的开发过程是合理的,就不可能高效率、高质量的完成软件项目。领导不力还可能导致其它问题的出现。2、 缺少必要的信心和激情也许你会发现周围的一些同事仅仅是为了薪水而工作,在执行工作的时候即使发现了上层领导忽略的问题依然照糊涂画瓢也不反馈问题所在,即便他是个天才,但成功不会属于他的,因为成功垂青于有激情的人才,其实这些同事并不是一开始就缺少激情的,原因也许是失去了信心,而暂时做糊涂人而已,无论

45、如何,缺少信心和激情的团队,只会是一盘散沙。3、 软件质量的价值观念模糊软件质量这个问题已经是老调老谈了,但质量的标准是如何?是否在团队中有明确的评价标准?目前国内的许多软件开发团队都很难给出正确的答案,许多的项目最终仅仅是以可以交差、收到钱、套概念、圈钱等市场行为做为标准。目前流行的许多开发过程、质量体系如:RUP、XP、CMM、ISO9000、SEI等真正应用的又有多少?一些公司仅仅是用来提升公司形象而已。缺少正确的软件质量价值观念的软件开发团队是不可能有明确目标的,不可能会采用合理的开发过程,也不可能有共同的工作规范和框架的。4、 相互的合作并不协调在一个开发团队中偶尔有部分人不愿意与整

46、个团队合作,也许是这些人性格比较保守,也许是有某些不平衡的心态,也许是他们还没有明白目标是什么,也许他们并没有体验到团队开发成功的快乐。不管怎样,这种情况的出现必然影响融洽的交流环境。5、 无效的内耗占据了开发过程的主体也许是一些不良的传统观念和思想的沿袭,一些软件开发团队出现了排挤其它有异议的成员、推卸责任、相互指责、贪功等,这种情况是最坏的,但却事实存在。没有凝聚力的团队是不可能做得很好的。6、 模糊不清的角色职责定义软件开发是由不同角色的成员共同协作完成的,但目前国内的一些开发团队却没有对各种角色成员的职责做出明确的定义,成员就无法明确知道自己的目标,很简单的道理,都不知道要做的是什么,

47、能按时准确的完成吗?如果每人都按自己想象中的职责去工作,那么有多少工作冲突、多少遗漏,谁能给出正确的估计?没有明确的职责定义人力资源的安排可能合理吗?结果可能是找了个资格较老的程序员做了项目经理,找了个没有理会对象概念的人去做面向对象的系统分析,找个不顾网络安全、网络流量、事务特性、运行费用的人去设计一个分布式系统。有才华的人也许只能跺在被窝里激呼怀才不遇或许能做个美梦安慰自己。三、 营造高效软件开发团队的关键因素如果做到了高效软件开发团队的特征,那么这个团队肯定是高效的团队,可是如何才能营造这样的一个团队呢?上面分析了国内软件开发团队容易出现的一些问题,解决这些问题及避免这些问题的出现是营造

48、高效软件开发团队的出发点,但一些问题产生的原因是其它问题的存在,关键是解决问题的根源,所以营造高效软件开发团队的因素是以下几点:1、 选拔或培养适合角色职责的人才软件项目是由不同角色的人共同协作完成的,每种角色都必须有明确的职责定义,因此选拔和培养适合角色职责的人才是首要的因素,如:选拔软件项目开发经理一定要注意,这人要熟悉各种设计方法,愿意听取其他人的意见并且客观上和逻辑上把自己的思想与其它人意见相比,掌握激发团队成员的积极性的方法等;选拔系统分析员,一定要注意,这人要熟悉需要的设计方法,掌握系统分析和设计的原则,拥有完成职责所需技能和丰富经验等。选拔或培养适合角色职责的人才,特别是合适的软

49、件开发经理是营造高效软件开发团队的最重要的因素。2、 建立共同的工作框架、规范和纪律约束软件项目的开发是创造性的工作,但要有必要开发纪律。建立共同的工作框架使团队成员知道如何达到目标,知道应该做到什么及对开发过程达成共识;建立规范使各项工作有标准可以遵循,使成员知道团队的风格是怎样的;建立一定的纪律约束保证计划的正常执行。3、 自我管理作为团队的成员,应该以开发经理为首坚持管理自我,对工作负责,与同事友好合作,遵守工作纪律、自我技能培训等。4、 学习国外成功经验学习国外的一些成功开发过程、分析方法、设计思想、体系结构、设计模式等,如学习合理统一开发过程(RUP)的一些实践,归纳适合自己的合理开发过程;学习先进的系统分析、设计的思想力求完成更高质量要求的软件项目;学习各种体系结构优缺点及适应情况,设计出满足系统需求的软件体系结构;学习国外成功设计模式,使代码的编写满足更高质量的需求。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!