时间:2022-05-18 19:25:25
绪论:在寻找写作灵感吗?爱发表网为您精选了8篇软件工程,愿这些内容能够启迪您的思维,激发您的创作热情,欢迎您的阅读与分享!
实际上,测试人员被测试搞得晕头转向,测试管理人员不知所措是常有的事情(相对来讲,一些知名的大型跨国公司做的比较好)。这些主要和测试时间紧迫,测试质量与产品质量的标准很难度量有关——最可怕的不是对手厉害,而是未知的对手。要解决这些问题显而易见要找到这些问题的根本原因,那就要从根本上说起,软件测试是软件工程的组成部分,脱离软件工程框架的软件测试是不可以想象的,软件工程的工程思想和方法作用在软件产品的每个阶段,当然软件测试也不能例外。换句话说,软件工程的思想为软件测试提供了基础的思想和方法,任何的软件测试不论在哪个阶段都不应该脱离软件工程的思想,孤立的去思考,设计,规划,执行,并验证。但实际上是,由于测试工作的繁忙(大多数是由缺少标准和规划而无法控制所致),更多的时候,可能只是就问题论问题了,从而偏离了软件测试的方向,使得测试质量不可控。
抛开具体的软件工程的具体模型,一般的产品周期流程可以如下划分
[图片]
近几年,计算机软件工程的应用领域日益广泛,具体包括各种程序设计语言、数据库技术、软件设计模式、操作和数据指令的标准、应用系统平台和软件开发工具。鉴于传统软件工程存在的诸多缺限,还有功能对象的转变和应用范围的扩大。无论是作为软件研发的开发商还是作为软件直接应用的用户都要进行软件的升级。软件升级需要达到几点要求,包括要有非常高的工作效率,靠的住的安全性,增加软件的应用寿命和能够进行方便的修改重生成特性。
1.1软件要具有高的工作效率
软件升级几乎涵盖了所有软件相关组成结构,要充分审核任何一个重要结构,做必要的改造。升级后软件要明显优于未升级前,对任务的处理时间要有较大的提升。具体来说就是,要对空间、时间等资源进行充分高效的利用,例如对计算机数据库技术一定要充分挖掘数据的可利用价值。同时,始终保持用户至上的理念,不断提高用户操作的便捷性是软件升级最重要的目标。应该在原有的基础上增加修改程序、组装软件和调整指令等必要的新功能。
1.2软件要安全可靠
互联网的广泛应用方便了人们的工作生活,对计算机的广泛应用起到了不可忽视的推动作用。但由于它的开放性也给黑客提供了作案方便。黑客善于利用应用软件对计算机系统实施攻击,通过对软件代码的反编译,植入和修改破坏软件安全性以达到个人的目的,使得用户蒙受巨大的精神或经济损失。所以软件升级改造必须要考虑软件的安全防御功能。
1.3尽量延长软件的使用寿命
软件开发设计前期调查,需求分析,开发,维护等多个阶段,其过程复杂,需要投入大量的人力、物力和财力。所以从成本消耗的调度看,新软件要尽量延长使用寿命,缩短产品更新换代的周期。就拿杀毒软件而言,每年市场上销售的杀毒软件数量巨大,对就的软件增加和完善功能必须要确保其在规定的时间内无需更换。同时,为了创造良好的经济效益,使用周期也应该得到延长。
1.4方便修改重新生成
为了减少软件开发的投入,还可从软件后期维护着手。对于软件后期维护也是软件周期中花费最大的,只要设法减少这一阶段的投入,就会大大减少软件的成本。因此,开发软件时考虑留有修改余地,使得软件便于修改重新生成就显得尤为有意义,另外也会有效的减少设计工程师的操作难度。
2计算机软件工程升级策略考虑
2.1软件工程设计要有科学性
软件开发的第一阶段就是设计,软件工程的升级设计一定要以科学为指导。例如,对于研发程序代码要考虑软件模块化。对外要考虑软件的抽象和信息隐蔽特性,以及软件的局部化、一致性原则和适应性等特征。选择恰当的科学的设计方法,能够为这些特征的实现提供方便,达到科学性设计这一目标,突出升级软件后的优势特征。
2.2要全面兼顾市场需求
软件开发的直接目的就是服务于市场需求,一个脱离市场需求的软件产品是对经济资源的浪费。同样,软件的升级也要有市场需求为支持,在满足市场基本需求的前提下,进行相关的研究和开发,才会使工作有价值,避免由于开发设计不当造成资源浪费。另外,作为计算机组成的两大部分,软件和硬件一直都存在计算机产品开发不可兼得的问题,无时无刻不逼迫使得软件开发单位考虑两者互相的影响与制约的关系,做出权衡。如此一来,面对具有多变性的市场,在采取有效控制之前,必须对市场有全面的掌握和理解,才能开发出更加满足社会需要的软件产品。
2.3把握智多种发展趋势
2.3.1智能化智能化不仅出现在计算机科学领域,它是现代通信与信息技术、行业技术、计算机网络技术和智能化控制技术综合到一起针对某一方面的应用。在人工智能化应用与计算机领域的今天,这个趋势必然会与现代通信技术、计算机网络技术与现场总线的控制技术飞速发展,一起给人们的生产生活带来巨大的变革。
2.3.2服务化随着计算机软件技术的发展和应用软件的广泛普及,计算机软件技术及产品的服务化将成为一种大趋势。未来,软件开发商会以一种服务的形式提供软件,利用网络提供方式,将各种软件放在服务器的主机上,客户可根据选择下载安装某种应用软件。当然客户也可以与软件开发商联系,提出自己的要求,订购软件服务。通过网络享受软件和硬件资源,软件维护升级等,使软件真正的服务于人民。
2.3.3融合我国对工业发展策略调整以及传统工业的升级,必然会加快电气化、机械化和自动化这些硬设备向信息化、数字化和网络化等软设备转变。计算机软件技术的融合化是我国信息化和工业化融合的一支重要力量。随着工业化不断推进和传统产业升级加快,工业软件的需求会进一步加大,我国计算机软件软件产业会不断发展壮大,推动计算机软件技术融合,以适应发展需要。
2.3.4开放化随着软件工程的蓬勃发展,早期封闭性强的收费性软件发展模式以慢慢不再适应大的形式。为了给提高计算机软件质量的提高创建机遇,逐步打破软件技术和知识产权的垄断,开发化已变成不可阻挡的趋势。计算机软件源代码的开放,将意味着软件产品逐步标准化,这将有利于我国计算机软件产业的更新换代和全面升级。在这种趋势下,也势必会使我国计算机软件开发效率得到较大提高。
2.4提供工程化支持,强化升级管理
新软件必须大幅增强软件的使用价值,具有很强的软件工程使用多用性,这些就需要软件工程的支持。主要包括软件工具和环境要对软件工程有足够的支持,以及充分保障软件工程项目的质量、技术和开销。这些都由对软件工程所提供的支撑质量和效用所决定。软件工程的管理作为另外一项比较重要的方面直接影响了对可用资源的有效利用,大幅提高软件组织的生产单位产出率,生产出合格的软件产品等问题。在参照市场需求下,提前做好准备,制定软件工程的管理制度,加强新旧产品升级空隙的质量监督和管理是电子产品研发企业必须做好的工作。
3结束语
关键词:软件工程;课程群;课程设计
中图分类号:G642 文献标识码:B
文章编号:1672-5913 (2007) 20-0005-03
软件工程是计算机学科的重要学科分支,在本科计算机类各专业中都开设一些软件工程的课程,在研究生教学中,无论是硕士还是博士,都设置软件工程的研究方向,开设高一级的软件工程课程。本文中,软件工程课程群是指包括各层次的软件工程类课程。另外,软件工程又是一门发展非常迅速的学科,早年在研究生中讲述的内容现在放在本科中讲。因此,这些课程存在定位不明确,课程间内容交叉重复等问题。本文根据本科生和研究生两个层次对软件工程类课程的教学要求,阐述软件工程课程群的定位、课程设置、主要课程的知识单元和知识点。
1定位
首先分析社会对各层次计算机专业学生在软件工程方面的知识和能力要求。我们认为计算机类本科学生毕业后,主要从事计算机软件的开发工作,他们应掌握软件工程的基本概念、基本原理和基本方法,并能运用这些概念、方法、原理,参与和/或从事软件开发的某些活动(如分析、设计、编码、测试等)。软件工程方向的研究生主要着重研究能力的培养,毕业后主要承担系统分析员和/或系统设计员角色,甚至承担项目经理的角色,他们应掌握软件工程的研究动态,了解软件工程最新的研究成果,具备有关软件的系统分析、构架设计和软件项目管理的知识和能力。
根据以上分析,我们认为,本科生软件工程课程群应以软件工程的基本概念、基本原理和基本方法为主线,使学生具备扎实的软件工程基本理论知识、熟练的编程能力、较好的团队合作能力和实验能力,同时具备一定的分析与解决问题能力和创新能力。研究生软件工程课程群应以研究课题为主线,使学生掌握软件工程最新的研究动态,对其中若干个研究方向有深入的了解,具备较强的分析与解决问题能力和创新能力,以及基本的软件项目组
织和管理能力。
2课程设置
软件工程课程群按学生的层次可分为本科生软件工程课程群和研究生软件工程课程群,按课程类别可分为必修课和选修课。
根据上述定位,本科生软件工程课程群的必修课包括软件工程和软件实践,有些学校在软件工程课中包括足够的实践时间,可将它们合并成一门软件工程课。选修课可根据各校的特点开设不同的课程,如面向对象的分析与设计、软件体系结构、基于构件的软件开发、软件测试等,也可将研究生的某些课程作为本科高年级学生的选修课。
研究生软件工程课程群的必修课可包括高级软件工程、软件项目管理和专题讨论,其中专题讨论没有固定的教材,它以若干专题(如软件复用技术、模型驱动体系结构、软件产品线等)的最新论文为主,以报告和讨论的形式进行。选修课可根据导师的研究方向选择合适的课程,如需求工程、软件过程、形式方法等。
3教学内容
本节参照国外相关的资料,结合我们多年的教学实践,给出软件工程课程群中各必修课的知识单元。
3.1软件工程(本科生)
本科软件工程课程的内容应覆盖教育部计算机科学与技术教学指导委员会制订的计算机科学与技术本科专业规范(计算机科学方向)中有关软件工程的主要知识单元,该课程以软件工程的基本概念、基本原理和基本方法为主,着重国内比较流行的结构化分析与设计方法、面向对象分析与设计方法和常规的软件测试方法。同时对一些较新的软件开发模型、方法和技术(如基于构件的软件开发模型和方法、敏捷开发方法、CMM&CMMI、Web工程等)做简单的介绍,以便学生今后自学。
3.2软件实践(本科生)
该课程是本科软件工程课程的一门后继实验课,以某种软件开发方法(如面向对象方法)和软件过程(如统一软件过程RUP)为基础,引导学生完成一个完整的软件项目开发全过程,包括需求获取、需求分析、系统设计、实现以及测试等基本步骤。该课程主要培养学生的分析与解决问题能力、团队合作能力、实验能力和创新能力
3.3高级软件工程(研究生)
该课程选择当今软件工程研究的热点课题作为主要内容,其知识单元可包括:基于构件的软件工程、软件产品线、软件体系结构、模型驱动体系结构(MDA)、面向方面程序设计(AOP)、需求工程、面向对象测试技术、逆向工程和再工程、Agent技术、形式方法、高可信软件,开源软件等。值得注意的是,在一门高级软件工程课程中很难详细介绍上述所有的内容,各校可根据自己的特点和研究方向,选择几个(以3~5个为宜)知识单元作重点介绍,对其他知识单元可只做简单的介绍。
下面给出几个知识单元所包含的知识点。
基于构件的软件工程(CBSE)主要包括:CBSE基本概念,软件构件规格说明,构件模型,基于构件的开发过程,基于构件开发的语义完整性,构件组装和集成,预测系统的可信度,软件产品线体系结构中的构件,商用第三方构件(COTS)及构件获取技术,基于构件的软件体系结构,基于构件软件的测试与质量保证,构件的可变性机制,软件构件库,构件交易,构件描述与检索等。
软件产品线(SPL)主要包括:软件产品线的基本概念,软件产品线的基本活动(核心资产开发,产品开发,管理),领域工程与应用系统工程,SPL经济学,软件产品线实践域,软件产品线实践模式,产品线组装,基于产品线的应用系统开发技术等。
软件体系结构主要包括:软件体系结构的原则和实践,体系结构框架/方法,体系结构模型与MDA,集成框架,软件体系结构设计与分析,体系结构风格,软件体系结构文档,软件体系结构评估与确认,面向服务体系结构(SOA),体系结构模式,企业体系结构等。
模型驱动体系结构(MDA)主要包括:MDA基本概念,MDA规格说明,MDA模型(CIM,PIM,PSM),模型转换,模型语言(如可执行的UML,对象约束语言OCL等),元建模,MDA过程,领域建模,系统模型,平台无关建模,平台特定的实现等。
3.4软件项目管理(研究生)
该课程的知识单元包括:综合管理,范围管理,时间管理,成本管理,质量管理,人力资源管理,沟通管理,风险管理,采购管理,敏捷项目管理,外包管理,软技能等。下面给出其中若干个知识单元所包含的知识点。
综合管理:项目,项目范围陈述,项目管理计划(编制过程,内容),项目执行的管理,项目评价,项目的监督和控制,集成的变更控制,实施报告,配置管理,关闭项目。
范围管理:启动过程,项目选择方法,项目合同,范围管理计划(编制过程,范围陈述,范围定义),创建WBS,范围验证过程,范围蔓延,范围变更控制过程,目标管理(MBO),影响曲线。
时间管理:活动定义过程,活动排序过程,图示方法(优先图示方法(PDM),箭头图示方法(ADM),条件图示方法,图形评价和评审技术(GERT), 项目网络图,关键路径方法(CPM),计划评价和评审技术(PERT)等),PERT对CPM的估算,活动资源估算,活动持续时间估算,估算工具,进度表开发过程,进度控制过程,净价值术语和公式。
成本管理:资源计划编制过程,成本估算(术语,过程,COCOMO模型,工具),成本管理计划,成本预算过程,成本基线,项目投资需求,成本控制过程,实施度量,预测完成,净价值术语和公式。
质量管理:质量计划编制过程,质量保证计划,过程改进计划,质量保证过程,质量控制过程,统计质量控制(SQC),质量改进过程。
人力资源管理:人力资源计划编制,组织计划编制,项目管理中人的因素,责任委派矩阵,获取项目组,员工获取过程,项目管理者的角色和责任,项目组(建造过程),小组动力,管理项目组,角色与责任,领导风格,能力类型,冲突管理,6动机理论,小组性能估算,管理知识员工。
沟通管理:沟通计划编制,沟通管理计划,信息分发,沟通模型,沟通风格,沟通方法,沟通链接规则,沟通障碍,沟通技巧,绩效报告,管理涉众,管理收尾。
风险管理:风险管理计划编制,实用方法,风险标识,风险分析(定性分析,可能性与风险影响,定量分析,灵敏性分析,决策树分析,预期货币价值,概率方法),风险响应(计划编制,工具与技术),可保险风险,风险监督与控制过程,影响曲线。
采购管理:采购计划编制,购买和获取计划,合同计划,成本补偿合同,固定价格合同,工作陈述,申请计划编制过程,请求供方响应,申请过程,供方选择,源选择过程,谈判,合同,合同管理,合同变更控制,合同收尾。
敏捷项目管理:Agile宣言和原则,迭代与演化开发,产品业主,敏捷管理需求,敏捷估算与计划编制,敏捷设计,敏捷文档,敏捷软件构造,敏捷编程,人员管理问题,敏捷质量保证,敏捷项目管理,项目评审,敏捷度量。
外包管理:识别全球业务机遇,组织模型与商业策略,全球项目的特征和挑战,全球项目经理的技能,国际及多种文化的交融,IP保护与其他法律方面,采购道德规范,道德规范法规,试验计划,风险管理,软件过程与实践的改进,建立团队,需求管理及客户/供应商关系,开发方法学,全球软件开发(GSD)与全球软件工程(GSE),沟通、协调和协作,离岸项目的管理,克服距离和时间,文化交叉的处理,全球项目的安全问题,全球项目收尾,从业人员教育培训及知识管理。
软技能:领导能力,批判性思考,职业道德规范,自我激励,诚实,小组工作,风险捕获,适应性,人际关系,工作压力承受、压力管理,创造性,影响力,研究能力,问题解决能力,组织能力,多文化处理能力,学习能力,时间管理,口头沟通,文字沟通,细心周到。
4小结
本文介绍了软件工程课程群的设计,在具体实施时,可根据各校的特点,对上述课程设置、知识单元、知识点进行裁剪。下一步将继续完善各课程的知识单元和知识点,为软件工程课程群建设打好基础。
参考文献
[1] 教育部高等学校计算机科学与技术教学指导委员会. 计算机科学与技术本科专业规范[M]. 北京:高等教育出版社,2006 .
作者简介
钱乐秋(1942-),男,复旦大学计算机科学与工程系教授,博士生导师,主要研究方向为软件工程。
本人概况
姓名:XXX
性别:男
民族:汉
政治面目:团员
学历(学位):学士
专业:工业电器自动化
联系电话:12345678
手机:139000234
联系地址:北京市东城区XX大街10号
邮编:100007
Email Address:
呼机:66881122-1234
教育背景
毕业院校:北京工业大学 1993.9--1997.7 工业电器自动化专业
主修课程:自控原理,电力拖动,电子技术,自动测试系统,计算机组织与结构,计算机硬件及接口电路设计,汇编语言程序设计,C.C++程序设计,软件工程计算机网络原理等课程
另:其他培训情况
*微软认证系统工程师培训,培训科目:Windows NT Technology,Windows NT Enterprise,Networking with TCP/IP on Windows NT,ⅡS4.0 WindowsNT
*英语通过国家四级考试,阅读和翻译能力较强,曾多次为机械工业出版社翻译计算机书籍,并获出版。
工作经历
*1998年5月---至今 XX公司
网络系统工程师
Cisco、IBM网络产品的技术支持
网络系统方案(局域网和广域网)的设计和规划,解答用户的疑问,根 据用户需求提出最佳解决方案;Cisco、IBM网络产品的现场调试和系统维护
客户技术培训,及公司内部的技术交流与培训
网络基本原理及技术:LAN,WAN,TCP/IP,ATM等,以及Cisco、IBM 网络设备调试过程;讲解IBM AIX基本系统管理及高级系统管理、Netview、
NFS、HACMP等
曾经参与的项目
设计,安装,调试“吉林97工程”--吉林省电信综合管理系统ATM网络及主机系统,长沙卷烟厂,锦州合作银行,人民教育出版社信息系统;设计云南省邮电办公信息集成系统,济南广电ATM宽带综合业务网、陕西有线电视宽带网。
*1996年9月---1998年3月 XX公司
系统管理员/工程师
CHINAGBN Internet网络信息中心的系统管理
熟练掌握UNIX(SUN Solaris)操作系统、网络管理并参与组建了CHINAGBN Internet网络中心(包括网络设计,安装系统,联调,维护,网络编程)
CHINAGBN 金桥网六城市网络站点的建设
参与各站点Internet网络中心的总体规划和建设及其与卫星主干网的连接,对主干卫星网、X.25分组交换、Frame Relay、ISDN和DDN及其相关设备有所了解
CHINAGBN Internet网络中心Web系统管理员
个人简介
具备丰富的工作经验,认真踏实负责,且具备优秀的表达能力,曾多次主持对用户和内部的技术讲解和培训,获得用户和公司的一致好评。曾在电子工业部“三金工程展风采展示会”上向来宾讲解CHINAGBN专线集团用户解决方案。
任何工程项目在施工前都要完成设计,这需要好的方法、策略。软件开发的第三个过程就是概要设计,即是进行软件的结构设计。软件开发中具有代表性的是面向数据流的方法,它与结构化分析方法衔接组成完整的分析与设计技术,概要设计最终形成了软件结构图,如果应用于工程可以形成施工管理的框架。在这里对于软件工程有一个重要概念:模块的独立性。模块化方法已被所有工程领域接受,但是并不是有模块就一定是好模块,而应用软件工程方法产生的系统结构一般来说模块都有良好的独立性,从而降低了系统的复杂性以及出错的可能性。如果工程中应用模块化方法同时尽量增加模块的独立性,很有可能使工程开发简化、正确、有效。
软件开发的第四个过程就是详细设计。确定每个模块的执行过程有很多种方法,比较直观的是程序流程图和过程设计语言。对应于工程可以理解为底层模块的详细设计,就是确定具体的工作流程,较上层的是工作和管理流程,他们比自然语言描述的工作和管理流程直观、精确而且不会有二义性。
现今软件开发的核心内容之一是测试,分黑盒测试与白盒测试,两种同时使用并贯穿于整个开发过程之中,这是保证软件质量的必要过程。工程开发也有测试过程,但远不如软件测试科学、充分,所以有时会出现上文(所遇到的情况,因此工程中引入适当的、科学的测试是很必要的。
面向对象方法应用于工程开发面向对象方法就是分析、设计一个系统时尽量接近人类认识世界、解决问题的方法和过程,从这个角度看,似乎这种方法没有什么参考意义,但实际上以开发软件为目的的面向对象方法必须经得起所交付的软件的考验,并不是随便想一个方法就能达到要求。其他工程方法可以借鉴其中合理的方法,以减少开发的盲目性。
关键词:软件工程;综合实践;软件过程;迭代开发
为了提高软件工程人才培养的水平,增强学生的实践能力,文献[1]基于建构主义认知学说提出了一种创新的人才培养模式。该培养模式的特点是在第6―7学期引入长周期的综合实训。为便于实施,该综合实训可按学期分成两段。其中第6学期的实训为期20周,如何开展全面的软件工程过程实践,是本文要探讨的对象。此实训将部分原在课堂讲授的理论课贯穿在实训中讲解,并要求学生以小组为单位完成软件开发项目,从而理解和掌握软件开发过程与技术。为有效开展此实训,本文依据现有软件过程理论和经验,对实训中的软件过程进行探讨。
1概念与研究的必要性
软件开发过程是指在工业化环境(如软件公司、大型软件开发团队)开发软件的有先后顺序的一系列活动。它是将各种软件技术组织在一起的粘合剂,是合理高效开发软件产品的保证[2]。对软件过程的描述,往往包括过程模型、活动、角色、制品等方面。
软件工程综合实训课程的目的是为了让学生熟悉软件开发过程,掌握软件开发技术,增强实际动手能力。它与实际软件开发有以下几点不同:
1) 目标不同。前者以培养学生为目标,后者以生产软件为目标。
2) 实践主体不同。前者为学生,后者为工作者。
3) 环境不同。前者在学校的模拟环境进行,后者处于具体的软件开发环境。
这意味着实训教学中应该采用接近实际的软件开发过程,但又不能完全照搬实际过程。这是我们必须探讨综合实训软件开发过程的原因。以下从软件开发过程模型、过程角色、主要活动及对学生的考核等几方面对软件工程综合实训的软件开发过程进行讨论。
2综合实训的软件过程模型
历史上,出现过多种软件过程模型,但大致可分为线性模型和迭代模型两类。线性模型也称瀑布模型,已被实践证实不能适应需求变化的场景。迭代模型认为软件开发是一个反复的过程,比较符合软件复杂、易变的本质,是当今软件开发的主流思想。
在考虑实训教学软件过程模型的选取时,应以简单易行、便于软件技术学习、便于软件过程理解为出发点。单从简单易行的角度,采用瀑布模型比较有吸引力。瀑布模型的步骤和章法清晰,教学组织方便。但是,如果使用瀑布模型,对迭代过程的介绍只能停留在口头上,学生无法从实践中领会这一重要的过程思想。瀑布模型是一次性完成需求描述,然后做全面
设计。这不利于由浅入深、循序渐进地掌握软件架构、设计和编码方面的技术。如果采用迭代式模型,虽会令实训的组织和管理变得复杂,但既可以领会瀑布模型的章法,也可以克服瀑布模型的弊端。对于本文所针对的长达一个学期的综合实训,其教学目标是多维和综合的,既要在过程中传授显性知识,也要通过过程组织和实践指导传递隐性知识。如采用瀑布模型,会将开发过程理想化,而使很多隐性知识和实践经验难以传播。因此长周期的综合实训采用迭代式过程模型更合理。
按照有关迭代开发经验[3],对于小型项目,以3周为一次迭代较合适。我们决定将20周的实训分为开始1周、结束1周、中间6次迭代18周。各次迭代的目标如表1所示。
表中,迭代1的任务是发掘和初步表述系统的主要需求,并设计系统原型;迭代2要完成系统的主要功能,约占全部功能的30%~40%;迭代3完成系统的全部功能;迭代4对系统架构进行优化,增加业务逻辑层;迭代5进一步优化系统架构,增加数据读写层;跌代6使用现有框架对系统进行重构。
在实际的软件开发过程中,早期迭代要着重于影响架构的功能和性能需求的实现,从而一开始就为系统选择合理的架构。但在实训教学中,按由浅入深的教学规律,在学生具备一定的开发经验后引入架构设计知识。因此,前几次迭代较少涉及架构设计的细节,所完成的软件在架构方面是不成熟的。在后几次迭代中,通过对代码的重构逐渐完成软件架构的优化,从而让学生牢牢树立架构设计的理念。这是实训软件过程与实际软件过程的区别。
上述各次迭代的目标,也是系统开发的里程碑。教师检查各次迭代提交制品的同时,也考核了学生团队的成绩。
3综合实训过程中的角色
基于文献[4]及文献[5]的思想,软件工程综合实训学生团队应设置对等角色。即每个小组成员担任一种角色,负责一个方面的工作,同时又是其他成员所负责工作的参与者。这既是实际开发团队的做法,也最适合学生的学习。
考虑到项目规模较小,实训时间较长,一个小组人数不宜过多。以5人一组,分别扮演组长、开发经理、计划经理、测试经理、技术支持经理等角色,各角色职责主要为[4]:
1) 组长:负责小组建设,让小组成员有共同的目标和项目愿景,激励士气,维持纪律,安排任务,主持每周小组例会、成员互评等。
2) 开发经理:主持小组开发工作,包括需求、分析与设计、实现等过程。
3) 计划经理:负责带领小组制订项目计划和迭代计划,督促各成员按要求完成工作日志,制订项目周计划,整理项目周报,对计划进行跟踪,在例会或计划会议上通报项目进度。
4) 测试经理:负责测试计划的制订,编写测试用例,组织测试实施及管理,组织每日集成测试。
5) 技术支持经理:组织执行配置管理、变更控制、数据库管理及风险管理,培训本组成员正确使用工具软件,督促每日代码签入、签出。
上述角色职责涉及的各种活动,详见第4节说明。指导教师在实训中的角色是代表客户方提出对系统的要求,同时也是学生开发活动的指导者和监督者。
在实际的软件开发过程中,团队成员的角色在一个项目中是固定的。但在实训过程中,为了让学生得到更全面的训练,可规定每两次迭代交换角色一次。这样在整个实训中,每人都可以担任三种不同的角色。这是实训过程不同于实际过程的地方。
4综合实训过程的主要活动及制品
依据文献[4]和文献[6],将学生在综合实训中的活动领域分为两大类,一类是核心开发域,包括业务分析、需求、分析与设计、实现、测试、部署等;一类是核心支持域,包括团队管理、计划管理、配置管理、环境支撑等。各活动域的活动种类、制品及负责角色如表2所示,共有约30种活动。
上述活动涉及很多学生尚不了解的知识。对于其中适合讲授的显性知识,由专题主讲老师在过程中集中讲授;对于可以通过实践过程习得的隐性知识,通过实训指导书对有关活动的规范和引导,让学生在活动中领悟。需要集中讲授的知识可以分成以下几个模块:
1) 项目辅导。介绍有关小组建设、小组沟通、工作理念、计划管理等方面的知识,对开发过程的纪
律、工作程序、会议等作具体的指导。
2) 软件开发过程。主要介绍软件开发统一过程(RUP),包括迭代开发方法,各种开发活动、角色及制品的含义,配置管理及风险管理等。
3) 数据库管理。结合项目和实训环境指导学生设计和管理大型关系型数据库。
4) 软件测试。结合项目介绍各种测试活动的要求、内容和组织实施办法。
5) 系统分析与设计。介绍面向对象的可视化建模方法、软件架构设计、模式应用等方面的知识。
6) 程序设计技术。介绍完成项目所需要的程序设计技术。包括Web应用开发、多层体系架构的实现、测试驱动的开发、应用程序框架设计与应用等内容。
在开展项目过程中,讲授也是重要的环节,这也是本实训过程与实际过程的不同之处。
5考核方式
作为一项教学活动,必须对学生学习情况进行考核并给出成绩。由于该实训长达一学期,理论课学时较多,所对应的学分也较多。如果采用一次性考核,显然操作难度很大,也不利于在过程中发现问题,激励学生。因此,本实训最适合分阶段考核,即对每次迭代进行考核,成绩由三部分组成:一是本次迭代过程有关理论知识掌握,占40%,采用笔试方式考核;二是工作成果,占30%,以测试迭代产生的结果为依据;三是工作表现,占30%,通过统计考勤、学生互评及老师评价得到。每两次迭代完成,学生交换角色前,要求每位学生提交所担任角色工作的总结报告,作为单独的角色考核。由于角色是任选的,此考核学分可作为选修学分记入成绩表。
6结语
由于实训与实际软件开发不同,实训软件过程不能照搬实际开发过程。为了与当代流行的软件开发过程一致,也为了能循序渐进地教学,在实训中选择迭代式开发模型。项目小组的成员依次承担多种角色,并产生相应的制品。实训的考核以迭代为单位进行。按照这样的过程开展本文所述约30项实训活动,必将提高学生对软件工程知识的认识和实际的动手能力。
参考文献:
[1] 郑大鹏,林国璋,张克军. 一种创新的独立学院软件专业人才培养模式[J]. 计算机教育,2010(8):1-3.
[2] Roger S. Pressman. 软件工程―实践者的研究方法[M]. 4版. 北京:机械工业出版社,1999:22-49.
[3] Craig Larman. UML和模式应用[M]. 3版. 北京:机械工业出版社,2008:13-20.
[4] Watts S. Humphrey. 小组软件开发过程[M]. 北京:人民邮电出版社,2000:163-225.
[5] 微软公司. MSF Team Model v.3.1[EB/OL]. [2010-11-06]. /msf:17-19.
[6] Ivar Jacobson,Grady Booch,James Rumbaugh. 统一软件开发过程[M]. 北京:机械工业出版社,2002:3-11.
On Software Process of Software Engineering Comprehensive Training
ZHENG Dapeng, XIAO Youqing, ZHANG Xiaoyan, ZHANG Shenyong
(Zhuhai Campus, Beijing Institute of Technology, Zhuhai 519085, China)
软件产业从上个世纪中期从零起步,在短短50年的时间里迅速发展成为推动人类社会发展的龙头产业。在软件产业迅速发展的这50多年的历史中,人们对软件的认识经历了一个由浅到深的过程,软件工程(Software Engineering)的提出和完善就是这个认识不断提高的结果。因为软件开发是一项需要良好组织、严密管理且各方面人员配合协作的复杂工作,而软件工程正是指导这项工程的一门科学,软件工程的成果能为软件设计和开发人员提供思想方法和工具。
软件工程的起源
软件工程学科的出现直接原因是软件危机。所谓软件危机指的是在计算机软件的开发和维护
过程中所遇到的一系列严重问题。概括来说,软件危机包含两方面问题:
第一,如何开发软件以满足不断增长、日趋复杂的需求;
第二,如何维护数量不断膨胀的软件产品。
实际上,软件产生不久,落后的软件生产方式无法满足迅速增长的计算机软件需求这个矛盾就开始暴露出来,并导致软件开发与维护过程中出现一系列严重问题的现象。最为突出的例子是美国IBM公司于1963年~1966年开发的IBM360系列机的操作系统。该项目的负责人Fred Brooks(F•D•希罗克斯)在总结时无比沉痛地说: “……正像一只逃亡的野兽落到泥潭中做垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎……谁也没有料到问题竟会陷入这样的困境……” IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。
由于软件危机的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法,从此软件生产进入软件工程时代。
1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(Software Crisis)这个词,同时讨论了如何摆脱“软件危机”。在那次会议上第一次提出了软件工程(Software Engineering)这个概念,从此一门新兴的工程学科――软件工程学应运而生。作为一门旨在开发满足用户需求、及时交付、不超过预算和无故障的软件的学科,软件工程的主要对象是大型软件。它的最终目的是摆脱手工生产软件的状况,逐步实现软件开发和维护的自动化。
自从软件工程概念提出以来,历经了几十年的研究与实践,虽然“软件危机”没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。尤其应该指出的是,自上个世纪80年代中期,人们已经开始认识到,在软件开发中最关键的问题是软件开发组织不能很好地定义和管理其软件过程,从而使一些好的开发方法和技术起不到所期望的作用,也就是说,在没有很好定义和管理软件过程的软件开发中,开发组织不可能在好的软件方法和工具中获益。
软件工程的内容三段论
这里的三段论是指从内容这个角度看软件工程的三段理论。软件工程是为克服软件危机而提出的一个概念,并在实践中不断地探索它的原理、技术和方法。在此过程中,人们研究和借鉴了工程学的某些原理和方法,并形成了软件工程学。软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。既然软件工程是“工程”,那么我们从工程的角度看一下软件项目的实施过程(如图1所示)。
客户的需求启动了一个软件项目,为此我们需要先规划这个项目,即完成项目计划,然后根据这个项目计划实施项目。项目实施的依据是需求,这个需求类似工程项目的图纸,开发人员按照这个图纸生产软件,即设计和编码,在开发生产线上将开发过程的半成品通过配置管理存储和管理,然后进行必要的集成和测试,直到最后提交给客户。在整个开发过程中需要进行项目跟踪管理。软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。这些活动主要包括开发类活动、管理类活动和过程类活动,这里将它定义为“软件工程的三段论”或者“软件工程的三线索”,即软件项目管理、软件项目开发、软件过程改进。它们之间的关系可以用一个三角形表示(如图2)。它们类似于相互支撑的三角形的三个边,相互依赖,必不可少。
其中: 开发过程是软件人员生产软件的过程,例如需求分析、设计、编码、测试等,相当于生产线上的生产过程;
管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程;
过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进。如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。
为了保证软件管理、软件开发过程的有效性,应该保证这些过程的高质量和过程的持续改进。而软件开发过程中脑力活动的“不可见性”大大增加了过程管理上的困难。因此软件工程管理中的一个指导思想就是千方百计地使这些过程变为“可见的”以及事后可以检查的记录。只有从一开始就在开发过程中严格贯彻质量管理,软件产品的质量才有保证。否则,开发工作一旦进行到后期,无论怎样通过测试和修补漏洞,都会无济于事。
韩万江
北京邮电大学软件学院副教授,主要研究方向为软件工程、软件项目管理及软件测试等。著有《软件工程案例教程》、《软件项目管理案例教程》。
软件工程的未来发展
软件工程的研究热点是随着软件技术的发展而不断变化的。即便在软件工程的领域内,研究热点也在不断转移。
以往软件工程一直不能像其他产品一样做到标准化,随着技术条件的不断成熟、相应标准的出台,软件人员已经开始重视这方面的工作: 实际上可以将许多软件工作分成许多部件去构造,很有可能今后的软件队伍会分为两个部分,一部分专门从事评估,另一部分专门从事集成,集成的对象就是软构件。
软构件的开发与运用已悄悄开始。在一些公共领域,例如软件的用户界面,通用软构件的使用已经屡见不鲜。然而,对于各种专业领域来说,领域构件的开发和使用还基本处于空白状态。这一工作的进行意味着各行各业对本专业领域内的知识形态加以归纳整理,然后以最新的软件形式表达出来。如果全面铺开,将是一件规模浩大的社会工程,需要各领域专家和软件专家通力合作才能完成。一旦软件生产的“构件-集成”格局成为现实,各种应用领域里的构件的设计与生产将开辟出一个十分广阔的新天地,产生出巨大的市场需求,而且软构件的使用可以渗透到符合软构件标准规范的所有系统中,
在软件开发过程中人们开始研制和使用软件工具,用以辅助进行软件项目管理与技术生产,人们还将软件生命周期各阶段使用的软件工具有机地集合成为一个整体,形成能够连续支持软件开发与维护全过程的集成化软件开发环境,以期从管理和技术两方面解决软件危机问题。
此外,人工智能与软件工程的结合从上个世纪80年代末期便成为活跃的研究领域。基于程序变换、自动生成和可重用软件等软件新技术研究也已取得一定的进展,把程序设计自动化的进程向前推进了一步。在软件工程理论的指导下,发达国家已经建立起较为完备的软件工业化生产体系,形成了强大的软件生产能力。软件标准化与可重用性也得到了工业界的高度重视,在避免重复劳动、缓解软件危机方面起到了重要作用。
今天,软件已经普遍应用于各个行业,这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。随着现代信息技术的飞速发展,软件产品的规模也越来越庞大,导致开发队伍的逐渐增大,从而使得软件工程的作用也越来越明显。但是,我们不能盲目崇拜软件工程。实际上,不管有没有软件工程,不管是否存在一个万能的框架系统,我们的应用系统仍然要做,各种各样的软件还是要开发。说到底,软件系统是因为有需求才存在的。有了应用领域软件存在才有了意义。很多时候,我们可以看到国外有各种各样的软件和创新,而我们还面临很多的问题,但我们不能说,只要解决软件工程问题就能推进软件产业。
(作者原文中有大量实例,限于篇幅,本文进行了删减。读者可以登录.cn查看原文,或参考作者所撰写的《软件工程案例教程》、《软件项目管理案例教程》。)
链接一:软件开发的三个阶段
第一个阶段是20世纪50年代~60年代,为程序设计阶段,基本是个体手工劳动的生产方式。这个时期,一个程序是为一个特定的目的编制的,软件的通用性很有限,其开发往往带有强烈的个人色彩。因为软件设计是在某个人的头脑中完成的一个隐藏的过程,而且,除了源代码往往没有软件说明书等文档,因此这个时期尚无软件的概念,基本上只有程序、程序设计概念,不重视程序设计方法。软件主要是用于科学计算,规模很小、采用简单的工具(基本上采用低级语言),硬件的存储容量小、运行可靠性差。
第二阶段是60年代~70年代,为软件设计阶段,小组合作生产方式。在这一时期软件开始作为一种产品被广泛使用,出现了“软件作坊”。这个阶段大多采用高级语言开发工具,开始提出结构化方法。硬件的速度、容量、工作可靠性有明显提高,而且硬件的价格降低。人们开始使用产品软件(可购买),从而建立了软件的概念。程序员数量猛增,但是开发技术没有新的突破,软件开发的方法基本上仍然沿用早期的个体化软件开发方式,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊得高,开发人员的开发技术不适应规模大、结构复杂的软件开发,失败的项目越来越多。
第三个阶段是从70年代至今,为软件工程时代,是工程化的生产方式。这个阶段的硬件向超高速、大容量、微型化以及网络化方向发展,第三、四代程序设计语言出现。数据库、开发工具、开发环境、网络、分布式、面向对象技术等工具方法都得到应用。软件开发技术有很大进步,但仍未能获得突破性进展,软件开发技术的进步一直未能满足发展的要求。软件的数量急剧膨胀,同时,软件开发人员发现软件开发的难度越来越大,在软件开发中遇到的问题找不到解决的办法,最终导致了软件危机。
链接二:软件工程的定义
关键词:系统软件开发;软件工程技术;特点分析;技术要求
进入21世纪以后,我国互联网技术取得了飞跃式发展,相关的应用软件已经被广泛应用商业、教育、银行等领域,逐渐改善着人们的生活。在很多发达国家,系统软件开发企业已经成为支柱性产业。科学合理的软件设计是提高生活、工作的首要前提。在信息快速发展的今天,系统软件在人们生活生产中起到的作用越来越重要。基于此,本文首先分析出传统软件和系统软件的区别,然后,阐述了软件工程技术的特点和设计要求,最后,提出软件工程管理的运用的方式,旨在促使系统工程软件更加智能化、人性化。
一、系统软件和传统软件不同之处
系统软件具有开发时间短、需求不明确的特点,和传统软件的不同之处,主要体现在以下几个方面:第一,系统软件开发比较侧重于信息含量,面向主要市场是文档和电子产品,即动态网页和静态网页;第二,系统软件在开发过程中比较重视视觉和感觉,比较强度客户的舒适度。第三,系统软件的用户形式多样,很多系统软件在设计和开发过程中,必须考虑不同用户的应用技术和能力,拥有较为复杂的人机接口和用户信息递交;第四,系统软件的内容属于驱动内容,这和传统软件有本质区别【1】。
二、系统软件开发过程中软件工程技术的特点
系统软件开发过程中涉及到很多不同类型软件工程技术,而且对不同软件工程技术的要求各不相同。最主要的是系统软件在开发过程中必须着重考虑系统实现方面的工作,这就使得系统软件开发具有极强的复杂性。而且系统软件内部模块和模块之间存在较高的耦合性,每个模块之间都相互联系,当某一个模块发生变动时,带来的后果往往多重的。所以,虽然系统软件开发过程中软件工程技术在前期设计过程中的目标比较明确和完善,但是在实际设计过程中要想完成此目标具有很大难度,需求经过系统、规范、科学而漫长的过程才能实现。
三、系统软件开发过程中对软件工程技术的需求
由于系统软件开发具有很强复杂性,保证软件工程技术的科学性和合理性,对系统软件的开发和利用有至关重要的作用。在控制其复杂性过程中,需要对系统软件开发人员和材料进行严格控制。因此,软件工程技术实际上指的是,在系统软件开发过程中,借助工程化的管理模式,对系统软件开发的全过程、全方位进行控制。相关实践表明,应用软件工程技术对系统软件开发过程中存在的问题,能进行更好控制和解决,从而有效促进系统软件开发过程中既定目标的实现。
四、软件开发技术和开发需求不匹配问题分析
在系统软件开发过程中,随着人们对软件功能要求的提高,软件开开发单位为了满足人们多样化的需求,推出了一系列具有实际意义的方式方法,其中最典型有三种,即:SASD法、JSD法、JSP法。这三种方法的应用时间比较广泛,但我国系统软件开发过程中软件工程技术起步比较晚,和美国、德国、法国等发达国家相比仍然存在较大差距。所以这三种方法能否满足当前系统软件开发的需求还需要进一步验证和分析,在实际应用过程中,软件工程技术对系统软件的开发具有较强约束性。基于此,传统的软件工程技术很难满足我国系统软件工程的需求。提高软件开发技术和开发需求匹配关键不断创新出现新的软件工程技术,从而提高和现有系统软件开发的匹配度,进而达到系统软件充分利用的目的【2】。
五、软件工程技术
(一)系统软件开发模型设计
就目前我国系统软件的发展程度而言,对软件工程技术的提出了更高要求,开发过程中涉及到三个部门,第一,系统软件开发模型,对整个系统软件的开发和研究,进行周期性的阐释;第二,项目管理模型,是对系统软件的基本过程和项目管理进工程化管理;第三,应用组织模型,对系统软件开发全过程进行影响和作用。
(二)软件应用程序的研发
软件开发流程主要来源是迭代思想,在每一次迭代中,蕴涵开一个软件可行版本活动,以及相应的辅助工作。包括版本功能介绍、用户说明。所以一整套完善系统应用程序开发过程包含了:用户的具体需求、针对性设计、测试、应用等程序。在应用开发过程中,又分为是预知需求分析、软件具体设计、软件性能检测等流程。此过程中技术工程人员是整个系统软件开发过程中技术保证,设计和检测是保障整个开发过程能顺利进行的基础。这些因素相互协调发展,是提升用户满意度的基础。
(三)软件工程技术运用
科学合理的运用软件工程技术,能有效促进系统软件开发的顺利运行。进年来,我国社会科学技术和算计软件技术快速发展,系统软件开发团队的技术和实力不断提高,软件工程技术取得长足发展,在系统软件开发过程起到的作用也越来越大,贯穿于整个系统软件开发过程中,包括:系统软件在开发前的可行性分析评估、设计方案、具体操作流程,以及软件开发后的检测验收过程中。
六、结束语
综上所述,系统软件开发过程中软件工程技术应用的合理与否,之间决定了整个系统软件的质量和使用价值。但我国软件工程技术,到目前为止还处于发展的初级阶段,而的系统软件具有很强的复杂性,这就对软件工程技术提出了更高要求。本文结合理论实践,针对的系统软件开发的具体特点和流程模型设计,就系统软件开发过程中的软件工程技术进行深入分析,希望对我国系统软件的开发和利用奠定良好基础。
作者:黄逸之 单位:北京理工大学珠海学院计算机系
参考文献