时间:2022-04-03 09:46:46
绪论:在寻找写作灵感吗?爱发表网为您精选了1篇软件开发论文,愿这些内容能够启迪您的思维,激发您的创作热情,欢迎您的阅读与分享!
提要
本文结合笔者实际工作经验,分析了国内给排水专业CAD软件开发及应用现状,探讨了给排水CAD软件开发的原则、思路、方法及步骤等,并给出了开发实例。
一、给排水专业CAD开发应用现状
在工程设计行业,CAD技术的应用大大提高了设计及绘图效率。CAD应用软件的开发也越来越重要。
在给排水设计领域,CAD开发应用起步较晚。有些设计院从八十年代末开始尝试进行CAD开发,但进展比较慢,多数是图块和小型实用程序,在深度和广度上都存在着差距。从1993年以后给排水CAD开发步伐开始加快。1994年底全国给排水学会和给排水技术情报网组织召开了“计算机技术在给排水专业应用研讨会”,对给排水软件开发起了积极的促进作用。
目前在给排水CAD开发方面已经取得了可喜的成绩,尤其是建筑室内给排水方面涌现出一些比较优秀的给排水CAD软件,如洛阳的一家软件和北京的几家软件。这些软件都具有计算机辅助设计建筑给排水平面图、自动生成系统图、自动统计材料表;进行室外给排水管网计算、自动生成图形等功能,其中个别软件已在室外设计和泵房设计等方面有了新的进展。
现有软件都偏重于民用建筑给排水方面,而且也有待于继续完善、发展。在给排水的其它领域,由于难度大,投资回报较低,软件公司还不愿涉足,所以进展缓慢。应用CAD进行给排水及水处理系统的优化设计更是少有人涉足。此外,目前还没有专业设计CAD软件的标准和规范。商业化软件多数都不经过权威部门严谨的技术测试和鉴定,所以其数据库、计算方法、设计方法和生成图形的准确性还没有严格保障,这一点还可能成为工程设计质量的隐患。
现在设计部门的给排水CAD应用水平也参差不齐。有的购买或自行开发了给排水专业软件,提高了设计绘图效率。有的只是在用AutoCAD的简单命令绘图,虽提高了CAD出图率,却根本谈不上利用CAD提高效率。给排水专业CAD应用水平还有待于进一步提高。
目前许多有精力的设计院及研究部门都在研究开发本单位适用的专业软件及应用程序,但由于开发经验不足,成绩不明显。本文将结合笔者的工作经验,着重论述有关给排水软件开发的原则、思路、方法及步骤,旨在抛砖引玉,促进给排水CAD软件开发工作。
二、给排水软件包开发思路及原则
由于现有建筑给排水软件已经比较成熟,且仍在继续开发、升级。一般开发者在水平和起点上均与这些软件开发有一定差距,所以应该购买此类软件,而着重开发适合本单位使用的实用程序、应用软件或优化设计软件。高起点开发者则应在深度及广度上向更高层次冲击。
1.给排水CAD软件开发依据及原则
(1)设计依据为有关设计规范、制图标准以及设计手册等;保证数据库、计算方法和设计方法的准确性。
(2)软件包开发设计首先要突出专业水平,把专业设计思想转化为计算机语言是专业软件包的关键所在。
(3)符合设计人员思维习惯及设计习惯,人机界面友好,操作简单,易掌握。
(4)适用性强,容易修改,容易扩充,容易发展。
(5)尽量使用效率高、功能强的计算机语言及开发工具。
(6)严格执行标准化及规范化。
(7)通过自动绘图以及建立标准图库,提高图纸复用率等途径,提高设计绘图速度,真正发挥计算机的优势,把设计人员从图板上解脱出来。
2.设计开发步骤
(1)开发适合于给排水专业应用的CAD软件环境,包括AutoCAD的优化配置及常用专业图块及绘图工具。
(2)开发一些独立的专业绘图软件,发展标准图形库,由浅到深,从易到难,逐步提高自动成图及图纸复用比例,使软件包成为覆盖面广,功能齐全的专业绘图软件包。
(3)开发给排水专业高阶段设计方案优化软件,以及设计、绘图一体化软件,逐步成为智能化、自动化程度较高的专家系统软件包。
3.开发人员配备软件开发是一项较复杂的脑力劳动,对开发人员要求也较高,专业软件开发人员大致可分为以下几个档次:
(1)初级水平:专业人员掌握一些基本计算机知识及开发工具可以进行一些专业图块制作,简单的实用程序开发。
(2)中等水平:较高专业水平加上较高计算机水平。熟悉专业设计习惯,有较丰富的设计经验的专业人员,如果掌握先进的CAD开发技术,可以开发出较高水平的CAD应用软件,可以提高设计效率,特别是可以大大提高绘图效率。
(3)高级水平:高深的专业水平加上先进的计算机开发技术。在专业方面应该熟练掌握专业基础知识,有丰富的工程设计经验,善于总结专业设计思路,发现规律,具有较强的系统工程及方案优化水平。在计算机方面要掌握LSP、ADS、DCL等开发工具(或其它高级开发工具)。这类人员开发专业CAD软件是最理想的。
由于给排水专业涉及面广,而且不同行业给排水设计习惯也不尽相同,不可能有软件可以覆盖所有给排水领域,适用于所有设计院,所以目前仍然需要分行业、分类进行开发。前述的个别建筑给排水软件包及开发人员属于较高水平,其开发设计思路非常值得向给排水其它领域延伸。
4.开发工具(软件方面)
目前较常用的CAD开发工具主要有AutoLISP语言、ADS、DCL语言以及数据库处理,也有的开发者使用BASIC、FORTRAN等高级语言与AutoCAD的图形数据交换接口进行开发;还有用C++开发或用VB等在Windows界面下开发的;此外,网络技术也越来越重要。
开发CAD软件,需要非常熟悉Auto CAD命令,以及其中的各参数、系统变量、图层、图块、线形等,这样才能方便灵活地在程序中执行各种命令,掌握CAD开发技巧,例如图块的属性可以带许多信息,一条LINE线的厚度可以存入管道的管径等。此外现在有些软件使用数据的后处理方式,使软件和AutoCAD结合得更好,这些技术还需要对AutoCAD图元数据库和数据图形交换等有更深的了解。
AutoLISP是在AutoCAD内部使用的语言,用AutoLISP编辑的程序可以定义变量,对数据进行处理和作出图形,并可能自定义函数,比较适合搞人工智能工作,特别是它的表处理功能以及递归等功能比较独特,在CAD工作中它可以独立工作,也可能与DXF图形交换文件互相配合。其不足之处是速度慢,且程序代码几乎无法保护。
ADS是AutoCAD11.0版以后新增加的用来开发应用的一个C语言编程环境。它运行速度快,代码保护性好,能更有效地利用内存空间以及访问设备与系统,具有更强大的开发功能。但掌握ADS要比LISP困难,要求开发人员具备C语言编程经验并熟悉ADS库中各函数用法。一般商业软件应该用ADS。
AutoCAD还提 供了可编程对话框(PDB)工具,使用户可以结合自身专业特点,用DCL语言构造自己的对话框,从而改善界面,提高CAD软件效率。
目前最流行、最实用的专业CAD开发工具是ADS、DCL,加上少量AutoLISP。
三、开发过程1.专业绘图环境的开发
(1)AutoCAD的配置及改善
a.选择AutoCAD版本。目前最常用的是汉化AutoCAD12.0版。但其汉字输入不太方便,应配上较先进的汉字系统,或用12.0版forWindows(中文)。
b.对AutoCAD系统变量进行重新优化配置及设定,主要包括系统变量及尺寸变量设置,层、线形设置等,使acad.dwg成为理想的样板图。
c.对acad.mnu进行优化,将许多常用命令放在最容易拾取的位置或固定位置。专业菜单部分可加入acad.mnu,也可以独立编写。
d.利用acad.pgp做简化命令(10.0版以前的版本可在acad.lsp中用defun函数设定),编写acad.lsp。
(2)专业绘图功能
a.专业图框绘制:可由菜单点取或用屏幕幻灯菜单点取,自动生成各种图框。
b.专业常用图块:由菜单点取生成,自动插入断线。
c.开发实用的专业绘图工具程序:如标注标高、管径、坐标、管道立管、代号、各种管件等的程序,绘制单、双线管道的程序,生成专业设计说明、图例、专业词组的程序,以及文字、线形、线宽编辑和表格操作等实用程序。
d.开发或引进建筑图绘图程序。
专业CAD软件包都应具有高效的绘图环境,否则一旦自动生成等功能出现故障或不能适用时,用户就只能用AutoCAD简单命令来画图了。
2.专业绘图软件的开发
在专业绘图环境的基础上逐步开发一些相对独立的专业绘图软件,逐步形成功能强,覆盖面广的给排水综合软件包。
目前已开发的较成熟的软件有:民用建筑给排水CAD软件包、室外给排水管网计算软件、给排水管道纵断面图绘图软件、给排水外部管网设计软件等。
正在开发,初见成效的软件有泵房设计软件、平流沉淀池软件、机械加速澄清池软件、和市政管网CAD软件等。
尚未深入开发,开发难度大,但预期效果好的软件包括:辐射沉淀池、旋流沉淀池、水塔、综合管沟、架空管网、过滤间、软水站、污泥脱水间设计等项目。
给排水软件开发的另一条思路是发展给排水设备和构筑物的标准CAD图形库,从而提高图纸复用率,这比编制自动成图的软件要容易得多。标准CAD图形库还可以由权威部门编制后,作为标准图出版。此外,标准图还可作为软件包的一部分,即软件包可以交互式自动生成图形,也可以通过自动计算直接调用相应的标准图。
3.高阶段设计及方案优化设计软件的开发在
利用CAD进行高阶段设计及方案优化设计方面,除在民用建筑给排水领域有个别公司研究外,在其它给排水领域中的研究国内还未见到报道。方案优化软件的难点在于系统化的设计思路和设计经验向计算机程序的转化,其中给排水及循环水流程的方案优化模型的建立本身就是给排水设计的一个难题。目前这方面进展缓慢的原因首先是它对开发人员要求高,这一领域的理想人选稀少;其次是给排水专业行业多,领域广,需开发的软件工作量巨大,具备这方面精力的研究部门或公司还很少。
总之,给排水专业绘图软件包开发是一项艰苦的工作,需要创造一个规模生产,流水线开发的环境,投入一大批高层次的人才。各部门的研究人员既要知难而进,又要避免重复劳动,在各行业、各领域开发出各有特色的实用专业软件。
四、给排水CAD软件包开发实例———BYWAT
1.软件包结构
专业绘图环境-CA AutoCAD12.0汉化版
AutoCAD配置及改- 系统配置
参数设置
菜单优化
命令简化
专业绘图功能-
专业图框绘制
专业图块绘制
专业工具程序
绘建筑图程序
BYWAT-(2.0)b.
专业绘图软件- IS泵及S泵基础绘图软件
水泵底座绘图软件
材料表等填充软件
给水管纵断面图绘图软件
排水管纵断面图绘图软件等多常
2.软件包主要技术特点
(1)符合设计人员设计习惯,简便易学。
(2)速度快,可提高设计绘图速度3到5倍。
(3)可由用户幻灯菜单自动点取专业图框。
(4)有丰富的专业图形符号,插入时管道自动断线。
(5)可方便地绘制建筑图。
(6)具有各种类型的标高、管径、坐标等标注功能以及一些方便实用的程序。
(7)绘材料表只需在屏幕菜单中点取材料名称即可将名称、材料、单位、标准图号等填入材料表中的合适位置,序号、数量也特别方便,速度快,辅助功能及提示功能强。如果需要,还可以自动填入单重,自动计算并填入总重。
(8)各型号水泵基础自动绘制,半自动生成水泵底座图形,自动计算和生成材料表。
(9)给排水管道纵断面图软件交互式、参数化绘图,可自动计算,并有辅助功能。
3.专业软件实例———排水纵断面图绘图软件
给排水纵断面图在冶金给排水设计中约占施工图总量的近10%,规律性也较强,较适合开发专业绘图软件。本软件原采用LISP语言编写,由主程序及辅助功能组成,包括程序600多句和几个图块、幻灯等。其中主程序结构较复杂,多处使用循环语句及LISP语言擅长的表处理语句。软件完全按照冶金设计院设计绘图习惯及顺序设计,操作特别简单,用户只需交互式输入简单的参数,即可完成完整理想的纵断面图。
输入比例尺后,程序自动绘制排水纵断面图表头。此后按顺序输入节点,节点平面距离、管径、地面标高、管内底标高、坡度、管材代号、平面示意图种类后,程序即可画出这段管及有关的全部文字、图形,并计算出下一点的管内底标高。以后每输入一段管的参数,即可画一段管,与前段管相同不必重新输入。每个井均可有跌水,软件还可自动画出各种平面示意图。同一表头内可结束一条管,再给起点画下一条管。软件的辅助功能可进行交叉等处理。此外软件还有较强的容错功能。
改进以后,加入可编程对话框,每确认一个对话框即可画一段管,使输入更加简洁。软件还可以从已编写的数据文件中提取数据自动生成图形,这也为从外网平面图直接提取信息生成纵断面图打下基础。
用给排水纵断面图软件绘图,比手工快5倍以上。
1在设计方面要考虑用户对软件的印象
根据调查显示,网络用户在快速阅读过程中通常会呈现出“F”型的习惯,也就是在特定时间内,用户迅速浏览网站的时候会先看到网站的顶端与左侧内容,而中间的内容只能够被阅读到一部分。所以我们在设计网站界面的时候可以遵循“F视线追踪原则”,将各个部门按照主次次序放置到框架之中。如果一个网络用户在浏览到一个新的网站的时候,如果在三分钟之内还没有发现能够吸引自己兴趣的内容,那么这个网站就会100%地失去这个客户。在近几年,许多软件开发公司喜欢用过去的项目模版来设计主界面,这无形中是有利于提高软件开发速度,并且减少耗费创新技术、思路的时间与风险,然而如果一个软件产品长期保持一成不变的风格,那么就不会为用户留下深刻的印象,进而失去市场竞争力。软件开发商必须要根据商业营销学的理论,寻找到自己的目标客户群体,之后根据这个客户群体的偏好、特征来设计软件界面的整个风格,让使用者可以看到产品第一眼后产生一种与众不同的感受。
2在程序选择方面要注重优化与处理效率
我们在软件产品设计的算法方面要注重优化设计,当软件运行过程中耗时较多就需要我们注意处理、降低广大用户在等待过程中的不满情绪。随着科学技术的不断发展,计算机性能与运算速度的不算提升,诸多程序开发工作中将程序运行缓慢的原因归咎于计算机的问题,不会从自身编程过程找原因,因此软件开发工作效率较低,许多软件产品恶评较多,所以我们需要在能够控制的范围中优化程序代码,给予用户们科学、高效的产品体验过程。针对一些确实耗费时间的操作软件,我们可以通过进度条显示、后台运行等方式来调整,让用户心理上顺畅。笔者曾经有幸亲自参观了某通讯公司新任务的运行体验,工作人员每次点击用户的查询请求,在系统返回的时候需要几秒钟甚至几十秒钟,使得该公司用户抱怨数量众多,而这正是缺乏优化功能的原因。
3产品功能设计要结合人性化与灵活性的特征
传统设计受到信息化社会发展的影响,使其正处在改造进程的关注对象。当前计算机发展所带动的现代技术发展并没有到达高潮,但是计算机作为理想化的设计工具,正在逐步改革自身的设计途径、方法、过程,并逐渐迈向到数字化设计的时期。如果我们说数字化是现代社会的发展特征,那么人性化的设计就是对这种存在具象的诠释。我们在产品设计过程中,尽管存在着模块化设计的理论,但是作为产品设计者的我们不能忘记软件产品最终是为大众服务的,必须要将用户体验过程放在首要位置。另外,在软件产品设计过程中,要注重业务模块之间相互搭配的灵活性属性,不能盲目追求大众的操作形式。在广大用户使用计算机产品过程中,随着人们的个人喜欢与聚焦点不同,使用产品的方式也是具有差异性的。笔者曾经设计过一套工程方面的预算系统,部分用户关注最后的造价,而另一部分用户关注的是建筑材料的使用状况,侧重点不同导致自身操作步骤也是不同的,因此我们在设计产品过程中需要注意到这一点。
4结束语
随着科学技术的不断发展,用户对于计算机软件设计水平的需求不断提高,软件开发工作者务必要对目标群体进行深入性研究分析,要真正地了解到用户群体喜欢什么样的软件,需要什么样的软件,关注什么样的团结,从每种软件的运行界面、使用功能、运用条件等诸多方面来实现软件的优化设计,站在用户的角度来面对软件的多个问题,只有遵循这样的原则,才能够满足诸多用户群体的需求,开发出优质的软件。
笔者所在学院的软件工程系是成立于2005年的新专业,为校级特色专业。近年来,随着对软件工程特色专业建设进程的推进,课程体系日趋完善。针对软件工程学科具有理论多且实践性极强的特点,本系较大幅度地加大了实践类课程和环节所占的比例,“软件开发设计实训”便是其中很重要的一门实践课程。由于软件工程学科发展速度很快,在软件产业不断发展,全国对高素质的软件人才的需求量激增的形式下,迫切需要研究和探索实践类课程的教学模式,激发学生学习兴趣,以更有效的手段和方式提高教学和指导质量,为培养更加符合社会实际需要的软件开发人才打下坚实基础。在我校教改基金的资助下,依托软件工程教学团队,本文对将软件工程应用于“软件开发设计实训”课程的教学模式及主要措施进行探讨。
1 选择适当的软件工程过程
“软件开发设计实训”课程的主要目的是使学生学会用面向对象的设计方法设计实际系统。结合软件工程学科的发展和应用现状,软件开发过程主要采用rup(rational unified process,统一软件开发过程)的方式组织软件开发。rup是风险驱动的、基于use case(用例)技术的、以架构为中心的、迭代的、可配置的软件开发流程。
rup分为初始、精化、构造和交付四个阶段,各阶段涉及多种工作流【1】。rup的核心工作流主要包括:
需求捕获工作流:需求捕获通过对问题的理解和分析,确立问题涉及的信息、功能和系统行为,将用户需求精确化、完全化。需求的焦点主要在初始和精化阶段,在精化阶段后期,需求捕获的工作量大幅下降。
分析工作流:分析的主要工作开始于初始阶段的结尾,和需求一样是精化阶段的主要焦点。精化阶段的大部分活动是捕获需求,分析工作与需求捕获在很大程度上重叠。
设计工作流:设计的主要工作是位于精化阶段的最后部分和构造阶段的开始部分的主要建模活动。系统建模最初的焦点是需求和分析,在分析活动逐步完善后,建模的焦点开始转向设计。
实现工作流:实现(实施)是关于把设计模型转换成可执行代码的过程。从系统分析师或系统设计师的角度看,实现工作流的重点就是完成软件系统的可执行代码。实现工作流是构建阶段的焦点。
测试工作流:测试是一项相当主要的工作。测试工作流贯穿于软件开发的整个过程。它开始于软件开发的初始阶段,而细化阶段和构造阶段是测试的焦点。测试是为了找出程序中的错误与缺限,而不能证明程序无错。
rup就像一个元过程,通过对rup进行裁剪可以得到很多不同的开发过程,非常灵活,所以可以将其按本课程需要进行精简,从而把深奥的理论指导融入具体软件项目的开发设计中,让学生更加深切地体会到什么叫学以致用,消除畏难情绪,培养和增强在软件开发设计中自觉遵从软件工程思想的习惯。本课程使用的case(computer aided software engineering,计算机辅助软件工程)工具集采用sybase公司的powerdesigner。
2 将有价值的软件工程知识引入课堂,教学采用项目贯通案例
为让学生在中小规模的实训项目中也能体会到较大型项目通常会用到的一些软件工程技术,让本课程更有实用价值,教师需要对学生补充一些软件工程相关知识,包括:设计模式、架构设计、类的持久化以及数据库设计、面向对象实现以及文档的书写这四个方面。
为配合上述四个方面的软件工程相关知识的介绍,教师采取“项目驱动的案例教学”方法【2】,在课堂讲授中引入一个完整的、规模适中、难易适度的软件项目案例。该案例需要通俗易懂而又具有实际意义,涉及的应用领域应该是学生较为熟悉的,这样理解起来更为容易。以此案例完整的开发设计过程为主线,借助这个贯穿整个课程教学进程、文档齐全的完整案例来将软件项目开发设计过程中的各个环节串连起来,着重展现上述四个方面的知识运用,让学生熟悉和掌握软件开发设计的具体实施步骤和技术。
3 学生实践环节分小组按项目方式进行
由于在本实训课程之前学生已经学习过一门先导课程:“软件需求分析实践”,所以可以把学生仍然按照在“软件需求分析实践”课程中的各小组成员组成来进行项目分组,这样各小组便可将该课程中的最终成果——《软件需求分析规格说明书》作为本课程的起点来进行,需求捕获工作流便只需粗略进行。由于本课程侧重于软件开发过程的分析工作流和设计工作流,对实现工作流和测试工作流也只作粗略涉及。
每个项目小组通常为3到5人,分组时采用了优势互补的方式,注意合理搭配,尽量让每组各个成员具有不同的优势能力,并让其民主推选一名组长负责组内的组织和协调【3】。
教师的项目贯通案例教学分阶段间插在学生实践过程中,每介绍一个阶段的rup理论,就紧跟几次课的学生实践环节,如此交替进行,当教师的教学案例施教完毕,学生的项目也同步进行到最后阶段。
项目进行中模仿软件公司的例会形式,定期由项目小组长召开小组讨论会(如每周一次),对最近这段时间的项目进展情况和技术问题进行讨论。每个开发设计阶段结束时教师均要求各小组给出相应的文档,且每个阶段完毕要进行一个模拟的里程碑式的评审(教师参与作为评审团的一员)【4】。
教师还应在课程即将结束的最后课时中对各小组的项目完成情况及普遍存在的共性问题作一个分析总结,并让各小组组长总结本组项目完成的经验教训,以利于同学之间取长补短,活跃思维,提高分析总结问题的能力。
4 依托教学团队,理论及案例部分采用轮流授课法
笔者所在的软件工程系于2009年底成立了软件工程教学团队。团队兼顾了职称、学历、教学、科研的合理搭配,由有大型项目开发和管理经验的老教师提供指导来提升年轻教师的教学能力,并让其参与到科研项目中积累项目经验。本课程的任课教师均由该团队中选出。本课程所用的《软件开发设计实训指导书》的编写由各任课教师分工完成,每人负责完成一章内容。本课程每个教学班安排30人左右,各教学班的教师全程负责该班整个课程的实践指导环节。而理论及案例讲授部分的教学则采用轮流授课法,实施方案是每个阶段的课堂讲授由编写实训指导书的相应章节的教师对全体教学班集体授课,其他教师同时到场辅导。具体各阶段的课堂讲授内容安排如下:
1)rup总论以及课程概述
2)设计模式
3)常用的软件架构风格及适用情况分析
4)对象持久化与数据库设计
5)面向对象实现及文档编写与整理
对应进行的学生的各阶段实践任务如下:
1)按既定方式确定各小组成员和组长,并且重新审核各组在先导课程“软件需求分析实践”中的最终成果《软件需求分析规格说明书》,进一步完成分析模型,得出用例图,分析类图,序列图及协作图。这一阶段学生需提交分析模型文档。
2)按照设计模式重新设计类。这一阶段学生需完成两个任务:一是实现设计模型中的具体设计类,具体要求学生:使用设计模式和机制;创建初始设计类;确定持久类;定义类可视性;定义操作;定义方法;定义状态;定义属性;定义依赖关系;定义关联;定义内部结构;定义泛化关系;解决用例冲突。二是完成用例实现的设计,主要设计模型内的协作关系,以设计类及其对象为基础,描述各个特定用例的实现和协作。这一阶段学生需提交设计模型、类图和用例实现。
3)完成架构设计。这一阶段学生需要设计包结构,完成系统设计模型图的实现子系统、接口设计类及架构模型(组件图),重新审查用例模型,得出用例模型的架构视图。这一阶段学生需提交子系统设计文档、接口设计文档及架构模型文档。
4)根据持久类以及数据库知识对数据库进行设计(包括字段编码设计)。这一阶段学生需提交数据库设计文档。
5)本课程的最后阶段。完成实施模型(部署图);完成界面以及输入输出(报表等)设计;完成具体子系统的编程工作,并进行二次迭代重新审核前面的设计部分;整理测试报告;整理文档并编写软件使用说明书。这一阶段学生需提交组件图、部署图、输入输出设计说明及具体子系统代码执行程序。
5 考核方式强调过程考核,开发设计能力与书写文档能力并重
本课程的实训目标是使学生能综合运用所学的知识进行中小型应用项目的软件开发设计。为此,我们提出了本课程考核的指导思想:重视实训过程,看重软件开发设计能力的提高,采用复合考核的方式,课程成绩由平时考核、过程考核和项目验收答辩成绩组成。重点突出“会不会做”,强调对学生的实际开发设计能力考核,同时注意防止轻视书写文档的观念。这种考核方式不但能更客观地反映学生的学习情况,还能引导学生有意识地加强软件开发设计技能的培养,开发设计能力与书写文档能力并重,更利于达到预期的教学效果。本课程具体的课程考核成绩组成如下:
1)平时成绩*10%(考勤成绩*50%+小组开发设计工作中的合作精神表现*50%);
2)阶段考核成绩*60%(五个阶段,各阶段的能力表现及提交的文档各占20 %);
3)项目验收成绩*30%(项目文档汇总整理占50%,项目答辩50%)。
6 结束语
“软件开发设计实训”课程是软件工程专业实践类课程中非常核心的一门,其实践性和综合性都很强,能集中训练和提高学生进行软件项目开发和设计的实际技能。其教学实施过程不应被视为只要学生针对项目要求能编写出相应的软件即可,而更应注重软件开发设计过程的方法和技能的培养,以培养具有软件工程思想的真正符合社会需求的软件人才。本课程应紧随软件工程学科的发展而不断更新。在今后的课程开展过程中,其教学模式和措施还需要不断创新、总结和改进,需要持续不断地研究和探索。
21世纪是计算机化、信息化的时代,在这个时代,计算机网络成为信息传输媒介,软件开发技术成为计算机未来发展的导向。为了满足计算机网络对软件不断增多的需求,软件开发技术必须不断发展,才能为构建完善的计算机网络系统提供可能。
1 计算机软件开发技术概述
计算机软件主要指系统软件、应用软件。系统软件是监控、管理和维护计算机的软件,比如操作系统和自检程序等。而应用软件则是解决用户具体问题的软件,比如人事管理软件和学习管理软件等等。不管是系统软件还是应用软件,都为用户提供了利用计算机代替或简化一种计算机的工作环境,对于用户来说,接触计算机其实是接触计算机软件。早在20世纪五六十年代,计算机软件的开发多是手工方式,这种软件开发技术不仅出错率较高、生产效率低下,而且不能满足软件生产需要。随着商品化、大型化软件的开发,人们意识到计算机软件的开发需要规范的文档来确保程序设计、调试和运行。到了20世纪八十年代,人们将软件工程定义为:实现计算机程序功能采取的规则、方法及与之相关联的文档和在计算机上运行程序所需的数据都是计算机软件。
软件工程的发展大体经历了程序设计时代、软件时代和软件工程三个时代。以建筑工程开发为例,可以看出计算机软件开发过程与建筑工程开发有较大的差异。建筑工程开发过程中,设计蓝图设计之后,之后的每一步都不存在回溯的问题,但计算机软件工程在开发的过程中,每一步都有可能经历多次的修改、适应等回溯问题,另外,软件开发成功投入使用后,要考虑到软件运行和维护的问题等等。
2 计算机软件开发技术的重要性
软件开发技术是软件工程较为关键的技术之一,对计算机网络发展有着极大的助推作用,计算机软件开发技术能够促使计算机网络技术的创新,使一些网络支持、远程控制成为可能。软件开发技术的应用使得计算机网络形成开发性、共存性的一种网络模式,对于计算机网络的发展有促进作用。计算机软件开发技术的应用解决了软件开发落后计算机网络需求的问题,随着软件开发技术的不断提高,软件的安全性、可靠性和便捷性也有了较大的提高。上述的计算机软件开发重要性推动了计算机软件开发技术的应用。
3 计算机软件开发方法
目前,计算机软件开发方法主要有原型化方法、软件生命周期法和自动形式的系统开发方法三种。原型化方法:软件开发之前要进行严格定义和预说明,要求用户及软件开发人员对系统整体功能及信息需求有全面、深刻、准确的认定。如果用户给出的软件目标不能详尽描述输入处理及输出需求,或者软件开发者不能确定算法效果、系统适用性或未来使用的人机界面形态,此时,适合采用原型化方法进行软件开发设计。软件生命周期法:软件生命周期法从时间角度出发对软件开发、定义、维护等问题分解成若干阶段,每一个节段的开始和结束均有标准。软件生命周期通常由6个时期,也就是6个阶段。自动形式的系统开发方法:这个方法是利用第4代技术[3]中的软件作为开发工具,其要求软件开发者说明软件实现的内容和目标,而不需要说明如何实现,这种开发方法根据系统的要求自动设计和编码。
4 计算机软件开发技术的应用
计算机作为一个工具,计算机软件开发者的存在使为了让计算机能更好地服务于人类,因此计算机软件开发技术要真正实现其应用价值才能被称得上成功。这里我通过一个计算机软件开发实例说明计算机软件开发技术的应用价值。采用两种方式开发两个产品,其中第一个产品是运用vb6.0+acess、单机版运行模式进行开发设计,第二个产品是运用web+xml+activex和高级数据库服务器进行开发设计。现利用两种产品分别安装客户机端,其中,采用第一个产品的话,在客户机可直接安装,因为vb虚拟机和acess驱动均是微软历史版本,所以系统可自动兼容;采用第二个产品的话,在客户机要安装activex组件,这时,要更改浏览器安全设置,这就要求客户端安装第二个产品的时候需要多个安装步骤。客户端安装成功后,经过一段时间运行,第一种安装方法运行稳定、无问题,若需备份还原数据或修复安装,用户可单独完成,缺点是随着客户端使用时间的增长用户数据越来越多,在客户端运行后期运行速度会下降,这时需要人为转档。而第二种安装方法在安装、运行上受浏览器安全设置或系统操作版本的限制,给用户的使用带来了一定的不便。这两个例子引起软件开发者对问题的认知。计算机作为一种工具,其存在是为了更好地服务于人类,目前,计算机已经成为大众化工具,计算机软件开发者不能要求使用计算机的工作人员都是专业化人才,因此,在计算机软件开发的过程中要根据需求、实际情况进行投入和开发。在计算机软件开发中要本着“以人为本”的理念,体现软件的易用及功能强大。
5 结束语
计算机软件以硬件为载体,是计算机思想的体现,其处理大量的逻辑、信息,为人们提供一种方便、快捷的信息处理手段。在当前这个信息化时代,软件开发技术有极大的应用价值,因此,科学运用计算机和软件开发知识,以期通过较少的投入获 取高质量、高效率、满足人们需求的软件产品,对于推动现代化、信息化发展大有裨益。
论文关键词:软件开发技术 网络教育 重要性
论文摘要:随着计算机技术在教育领域的广泛应用,网络教育应运而生。软件开发技术的日趋完善为网络教育飞速发展提供了技术支持。本文从软件开发技术与网络教育的关系角度阐述了软件开发技术在计算机网络教育中的重要性。
计算机自20世纪40年代诞生以来,经过近二十多年来教育技术的发展,已经向社会的各个领域渗透。随着计算机应用的普及、深化,计算机软件技术的规模越来越大。1968年,北约组织的一次研讨会上提出了“软件工程”一词。今天,随着网络教育的不断发展,软件工程的重要性也随之突显出来。
1 计算机软件开发技术的发展过程
软件开发是一个非常复杂的过程,软件开发技术的发展经历了漫长的历史阶段。在软件开发的初期,人们对软件开发的认识主要集中在“软件危机”的解决办法上。20世纪60年代末k.w.dijkstra提出的结构化程序设计技术曾被看作是克服“软件危机”的灵丹妙药,但面对大型软件系统,系统的重要性、稳定性、扩充性却难以实现,20世纪70年代产生的面向对象方法,给软件工程产生了活力。对象管理组织omg在1997年11月将几经修改的uml正式作为基于面向对象技术的标准建模语言,从此又经不断发展、推新,uml目前已成为可视化建模语言事实上的工业标准。
随着soa体系结构的产生以及case技术的不断发展,软件工程技术日趋成熟,发生了质的飞跃,对现代网络教育产生了深远的影响。
2 现代网络教育的特点
随着计算机技术在教育领域的广泛应用,网络教育应运而生,相对传统教育模式而言,网络教育的出现不仅是对传统教育形式的有益补充,同时随着时代的发展,网络教育也越来越呈现出自身的优势,其特点明显体现为:促进了教育形式的变革,实现了传统面授教育向网络远程教育的过渡;促进了教育资源的有效利用,实现了由传统的书本、纸介文字学习材料向多媒体课件、学习软件、网络资料等教学资源转变,最大限度地有效利用学习资源;促进了学习者自主学习,实现了学习者根据自身学习时间和知识基础设计学习计划,获取知识的自主方式;促进了教学管理的自动化,实现了教学管理的软件化、平台化,提升了管理水平和工作效率。
3 软件开发技术对网络教育的意义
网络教育的飞速发展依赖于大量计算机软件的开发和技术发展,软件开发技术为实现并发展网络教育提供了操作平台和技术保障。
3.1 教育资源库的开发为网络教育提供了资源储备
目前,我国的教育资源库开发模型有很多种,资源的内容和采集的模式得到了极大的丰富,为网络教育提供了充足的资源储备。各类学科资源库、开放式教育资源库、资源中心等教育资源与资源数据库紧密结合,大大提高了资源管理的效率。改变了传统的教育资源库脱离数据库而造成数据不可重复使用,数据关联性弱和人工浪费的现状,使教育资源储备形成了快捷、高效、安全的良好发展态势。
3.2 教育管理软件的开发丰富了网络教育的管理手段
技术进步不仅推动人类文明的发展,同时也给教育提供了学习的新知识,对教育观念的转变起到积极地促进作用。教育管理软件的开发丰富了教育的管理手段,使教育的管理方式由传统的认为管理向软件化、信息化管理转化,有效地提高了管理效率,提升了信息准确率,同时也极大地方便了管理信息的存储和备份。随着教育管理软件的普及、应用,也间接地促进了教师和学校管理人员的现代教育技术水平的提高。
3.3 学科分类软件的开发使网络教育更具针对性
学科分类是教育教学资源内容划分的基本方式,它能够将每一学科根据类别划分并进一步细化知识点,促进知识的拓展。因而,在网络教育中学科分类软件的开发与应用对学科分类细化和突出网络教育针对性具有积极的促进作用。学科分类软件的广泛应用促进了课程资源的整合,使整个学科类别和知识的层级划分更加合理清晰、条理分明,结合不同学科的知识特点,更好地突出学科个性。学科分类软件的应用,在细化知识分类的同时也为学生构建了良好的知识资源环境,为教师与学生间的教与学的过程提供了依托平台,促进了互动交流。在这一过程的循环中,也能够较好地体现教师的教学风格,突显教学个性。这也是网络教育的重要特点。
3.4 辅助教学软件的开发使网络教育更具灵活性
软件辅助教学是现代教育理论倡导的新型教育模式。辅助教学软件的大量开发和实践应用使网络教育具有更加灵活的教育方式,突显网络教育的时代特色。同时教学软件的广泛应用有利于促进学生学习自主性的培养,丰富的教学软件资源使学生根据自身特点制定学习计划、选择学习内容、把握学习时长、掌控学习进度,极大地调动了学生自主学习的积极性;有利于学生自学能力的培养,培养了学生自我教育、自我管理、自我服务的良好意识,提高了有效获取知识的能力。
4 结论
网络教育开创了现代教育开放、交互、自主、和谐的教育新模式,适应了现代教育的发展变革,软件开发技术为网络教育的发展提供了有效技术依据。实践证明,随着计算机应用的普及和网络技术的广泛应用,依托于计算机网络的软件开发技术将以多形式、多层次、多角度发展态势,在教育领域乃至人类学习、工作、生活等全方位面临更加广阔的发展未来。
达芬奇,是文艺复兴时期一位意大利籍、极富创新精神的科学家和艺术家;如今在半导体领域,它是强大视频软硬件技术的代名词,是ti德州仪器又一soc开发的心血结晶。
德州仪器dsp业务发展经理郑小龙说,“达芬奇”(davinci)平台的推出,旨在让客户成为“数字视频的创意大师”;希望客户能通过达芬奇平台,更好地实现数字视频的创意,这也是此平台命名的初衷。郑小龙介绍说,面向不同的应用,达芬奇平台目前共有三大家族;首先问世的是dm6446,它包括arm9和c64+内核,以及视频协处理器和视频前端,并具有丰富的外围和网络接口,适合做讲求视频效能的编解码工作。
ip可视电话的开发便是其一。需要同时对影像和声音进行编解码,且对“双向通信”的要求高。它的另一个典型应用是高端摄像机,需内置支持d1视频压缩码流的编解码功能(25帧/秒),以及支持h.264的视频前端,才能获得清晰图像。第二个系列是dm6443,它是履行“裁减艺术”的低成本达芬奇平台。虽然同样包括arm9和c64+内核,但主要侧重在d1解码的输出功能。最后一种是专门针对数码相机所推出的dsc系列,锁定其低功耗和静态影像的特性,特别强化电源管理增强型芯片和jpg2000算法部分,并对高端功能进一步进行裁减。同时由于其属于最终消费品,故而也特别注重对高速总线的支持。
强化组态配置功能 加快设计速度
上市时间永远是数字多媒体产品研发团队工作压力的最大来源,特别是soc化之后,系统的硬件成本虽然显著降低,但固件开发的复杂度也因而提升。如果没有适当的工具协助,研发团队可能得耗费数周以上的时间在整合并最佳化各种固件模块的工作上。以手机系统设计为例,由于硬件的整合度已经很高,因此研发团队在手机硬件设计上花不了太多时间,反倒是手机的软件与固件的编写与整合,占据了整个手机开发流程中大多数的时间。
在davinci这种高度整合的硬件平台上,开发团队也会面临相同的问题。因此德州仪器在最近所推出的软件开发套件中,提供了一套expressdsp组态配置套件(configuration kit),让开发人员可以把多个独立软件模块整合成一个系统可执行的输出文件,这能为他们省下数个月繁杂耗时的手动整合工作。这套组态配置工具还能针对特定规格产生一组量身订制的编码解码器,这不仅简化程序代码的重复使用,开发人员也有更多时间利用他们的工程资源为产品增加更多功能与价值。
此外,鉴于嵌入式系统采用linux操作系统已经成为风潮,在新版开发套件中,ti也从善如流地为davinci平台的核心──dm644x处理器提供一套数字视频最佳化linux操作系统。除了操作系统之外,此平台也包含一套由montavista提供并通过系统测试和实际考验的视频应用最佳化linux电路板支持套件。使用此平台的厂商将直接从ti取得montavista操作系统和devrocket整合开发环境的使用授权和支持,他们可借此取得业界最丰富的linux应用资源。
视频codec一应俱全 系统开发更容易
除了硬件效能与成本具有竞争力之外,完善的软件开发工具环境与庞大的第三方支持社群,一直是德州仪器能够稳居手机应用处理器市场与dsp器件市场的关键。在针对视频应用设计的达芬奇平台推出后,ti也正试图将以往带来成功的策略复制到新平台上,同时以更积极的做法来深化其市场优势。去年9月达芬奇产品正式发表,初试啼声之后,日前另一波达芬奇效应高潮宣告来临!
随着ti这套兼备音频/视频、语音/影像编码格式的全集成开发套件问世,将有效减小数字视频系统的设计复杂性。此次的开发套件由3个部分组成:
expressdsp配置工具:利用首款优化的数字视频配置工具,尽可能减小设计工作的复杂性。
数据可视化工具:利用首款全面的图形系统可视化工具实现设计效率与性能的最大化;这套首创图形系统可视化技术可帮助实现系统互动分析、负载分布分析、瓶颈隔离、意外状态识别、基准应用性能,并可在同一图象上同时显示arm与dsp的任务运行情况。
montavistalinux主板支持套件:充分利用首款针对达芬奇数字视频而精心优化的linux内核加速应用开发,既可获取montavista经过验证且通过系统测试的内核与devrocketide以进行linux编程,并可直接从ti获得认证与支持。
细心的读者想必会纳闷:为什么要刻意区别“音频/语音”,以及“视频/影像”呢?我们同样也向ti提出了这么一个疑问。郑小龙的回答是:因为目的不同。动态视频的质量指针是编解码,而静态影像是的关键词在“像素”;同理,音频看重的是“压缩率不能太低”,但单纯的语音应用却想尽可能地把码流降到最低,因此有必要加以区别。
除了在组态配置与操作系统方面提供更完善的支持之外,ti与其开发社群在davinci平台上所提供的codec种类与数量也正在快速提升。从图3就可以看出,目前能在davinci平台上执行的codec几乎已经完整涵盖所有视频应用。此外,为加速先期推广,ti在推出此款开发套件时,同时也祭出60天免费评估计划。所有ti自行研发的编解码软件将免费提供给采用davinci平台的客户免费评估60天,让客户的研发团队可以对各种视频编解码算法的效进行深入评估之后,再决定是否要掏钱购买。在这60天内,如果客户需要相关技术支持,ti的授权软件供应者也将提供4小时免费的支持服务。
1 项目可行性和建设目标
1.1 编写目的
互联网行业对人才的需求量巨大。由于软件行业是当前平均薪酬最高、需求增长最快的行业,不少年轻人并没有考虑自身的特点,盲目地跨进了这一行业而深感无所适从。同时不少公司也为如何选择有潜力的软件精英而伤透脑筋。
优秀的软件从业人员在认知风格上表现出显著的群体特征。他们大多具有很强的推理能力、重组信息的能力和用计算机语言描述思维的能力。如何科学地量化这些特征,事关整个社会人力资源的合理分配和效益发挥。
本软件的设计与编写正是为了测评软件开发人员的认知风格,通过对软件设计人员的认知风格的研究来挖掘其显著特性,以便为人们在专业选择、职业选择、职业教育、公司人才甄别和培训(根据认知风格进行有目的的培训)等方面提供指导和帮助,从而促进软件行业更健康、持久地发展。
1.2 理论基础
赖丁和雷纳给出一个结构模式[1],开发了一套认知风格的综合测评系统——认知风格评测系统(csa)。此系统直接测量“整体/分析”和“言语/表象维度”的两端,由3个子测验构成[1]。第一个子测验通过每次呈现一个要求判断“对”和“错”的陈述,来测试“言语/表象维度”。测验中关于认知范畴的信息的陈述和描述外观的题目的陈述各占一半。赖丁假定表象型的个体由于物体相对容易被表征成心理表象,能够迅速获得用于比较的信息,从而对外观性的陈述做出的反应更快。同时假定言语型个体对认知范畴的项目的反应时间会更短,计算机记录对每个项目的反应时,并且计算“言语/表象”比率。低比率反应的是言语型,高比率反应的是表象型,居于中间位置的被认为是双重型。笔者采用这种方法,要求个体必须既阅读言语型项目,又阅读表象型项目,以便于阅读能力和速度同时得到测试。
另外的两个子测验用于评估“整体/分析”维度。其中的第一个子测验的项目要求个体判断成对的复杂几何图形是否相同。假定“整体型”的个体对这种任务的反应可能相对较快,其中的第二个子测验的项目要求被试通过按两个有标记的键中的一个,来指出作为参考的简单几何图形是否包含在复杂的几何图形中。假定“分析型”的个体把简单图形从镶嵌它在内的复杂几何图形中找出来的速度相对要快些。在进行这一子测验时,计算机同样要记录反应时,计算整体加工与分析加工的比率。低比率反应了整体性加工倾向。显然,高比率反应了分析性加工倾向,介于两者之间的比率被称为“中间型”。
由于在做这些测验时,被试并不知道该测验记录反应时,他们就能以一种轻松的方式接受测试任务,反映出他们通常加工信息的方式。由于使用比率,总体的反应速度并不影响风格的测试结果。在赖丁的研究[2]中给出了开发相应的csa的背景资料。
1.3 改进与实现
假定软件从业人员的认知风格在某维度更偏好些,采取ali reza rezaeia(2003)[3]等人对csa系统的建议,根据csa的测试模型进行修正后制定了具体的4个子测验。小组的成员对csa测试系统进行改进,设计了一个“软件行业从业人员的认知风格测试系统”。
赖丁的csa系统的“表象维度”的测试是用文字描述的,这可能使表象型的被试先要进行“言语/表象”的转换,增加对每个项目的反应时。考虑到这一点,在测试系统的设计中,将表象测试题设计为用图形来呈现。显然,这将提高“表象维度”的测试效度。
考虑到测试时系统主要是根据“反应时”作为衡量不同风格的依据,笔者首选c#系统进行编程。用c#语言工具设计出用于测试软件人员认知风格的系统,将4个子测验进行综合测试。由于在做这些测验时,被试并不知道该测验记录反应时,这样他们就能以一种轻松的方式接受测试任务,从而反映出他们通常加工信息的方式。由于使用了比率,所以总体的反应速度并不影响风格的测试结果。软件开发人员认知风格偏好评测系统如图1所示。
2 业务和功能需求分析
2.1 总体功能模块
本系统主要完成4个主模块,即被试信息管理、试题项目管理、四个分测评和统计分析。其中四个分测评包含两个维度的四个分测试,即整体/分析维度和言语/表象维度的四个分测试。
2.2 被试信息管理
被试信息管理是用于记录被试信息,便于随后的统计与分析的,所以应该具备被试的职业背景选择、性别、成长环境和学习偏好等相关数据。
2.3 四个子测验
1)“表象维度”测试。第一个子测评是以图形方式呈现的对外观认知的项目,用来测试“表象维度”。假设表象型的个体由于物体相对容易被表征成心理表象,从而对图形题干将会做出更快的反应,并且从这些表象中能够直接而迅速地获得用于比较的信息。样题如图2所示,要求被试尽快反应出右边的字母是否是左边字母平面旋转的结果。
2)“言语维度”测试。第二个子测验包含认知范畴的信息来测试言语维度。言语测试题如:“服法:每日服四片,日服三次。儿童减半,或遵医嘱。温开水送下”,表明儿童每天要服6片。言语型的个体对认知范畴的项目反应时间更短,因为表象型的个体需要先将抽象的言语转换为形象来表征。计算机记录被试对每个项目的反应时。
3)“整体维度”测试。第三个子测验包含有成对的简单几何图形组(如图3所示)。此子系统要求个体判断同一组的图形是否相同,从而用来评估整体维度。
4)“分析维度”测试。第四个子测验项目包含一个简单图形和一个复杂图形(如图4所示),它要求被试在复杂图形中找到简单图形用来评估分析维度,这一子测验所考察的是个体对包含在复杂图形里的简单图形的识别能力。它假定分析型的人在这一作业中做得更快。
2.4 被试认知风格所属区间
测试时,系统会随机从每个子测验的测试题目中选择10个题目共组成40题。由于测试中考虑到被试对题目可能没有兴趣,或者大多数题目没有经过大脑的认真思考就回答会影响测试分析的最终结果,因此必须对测试卷的有效性进行合理判断。如果一个测试的每一个项目的错误率达到30%,系统可判定该测试卷为无效试卷,不计于有效样本。
3 结语
系统在被试测试开始过程中,记录下被试对每一个子测验的各个项目的反应时,然后通过计算言语和表象平均反应时的比率,作为整体加工与分析加工比率值。低比率反应了整体加工倾向,高比率反应了分析加工倾向,界于这两者之间的比率为中间型。同理,计算出言语和表象反应时的比率。低比率反应了言语维度倾向,高比率反应了表象维度倾向,比率界于这两者之间的属于中间型。
计算机应用软件开发中编程语言的选择研究
随着社会的发展,应用软件在我们的生活中所发挥的作用越来越大。对于软件开发企业而言,这既是机遇也是挑战,如何提升软件开发的效率和质量,进而提升企业的竞争力成为了当前的一个重要课题。这种背景下,做好计算机应用软件开发中编程语言选择的研究有着重要的意义。
1 常用编程语言分析
了解常用编程语言的特征和优缺点既是我们进行语言选择的前提,也是保证我们编程工作顺利开展的有效手段。
1.1 c语言:c语言是介于高级语言和汇编语言之间的语言,也被我们称之为中级语言,它集中了汇编语言和高级语言的很多优势。在最初的时候,c语言主要应用于unix系统,后来随着人们对其强大性的认识越来越多,到了上个世纪的90年代,这一语言已经成功的应用到了其他操作系统之中。它一直属于最为优秀的编程语言之一。
具体来说,c语言的特点主要可以分为以下几个方面:首先,c语言属于结构化语言,因此,它具有非常清晰的层次,对于我们使用模块化的方式进行程序的组织非常有利,也便于维护和调试。其次,c语言中不仅数据类型以及运算符非常丰富,还能够对内存中的物理地址进行直接的访问,方便我们进行位操作。第三,它的效率非常高,而且移植性比较强,因此,能够移植到各种计算机上,这就方便形成很多版本的c语言。第四,由于可以利用c语言实现位操作以及字节操作,因此,相当于利用这一语言能够实现部分汇编语言的作用。最后,c语言编写的代码具有较高的质量,而且程序在执行起来效率比较高。
1.2 c++语言。1986年,at&t贝尔实验室开发出来了c++语言,主要是利用数据封装来减少程序变量的不利影响,进而提升程序的可靠性。它的多继承机制可以更好的对对象的行为及属性进行描述,虽然c++属于c语言的扩展,但是,我们可以将其作为一种全新的语言对待。
c++语言的特点主要有:面向对象、封装、继承以及多态性。具体来说,由于c++语言属于c语言的扩展,所以,它具有很多c语言的特点。另外,在c远的基础上,c++加入了面向对象的编程思想,这就是其能够更好地适应当前大规模项目的需求,举例来说,当前很多系统级编程使用的都是c++语言。
1.3 java语言。java语言相对于c++语言来说,在简洁性以及安全性有着更大的优势,具体来说,其主要的特点有:
首先,简单性:这一点和c++语言比较类似,但是它减少了c++语言中比较容易导致程序错误的地方,比如指针以及内存管理。其次,java语言属于完全面向对象语言,这一点和smalltalk比较类似,当然相对于smalltalk,它的很多方面又存在着巨大的优势。第三,分布式,在java语言中,包涵了支持基于tcp/ip协议的子库。第四,健壮性,java语言中的类型检查可以帮助我们查出很多软件开发初期出现的错误,降低内存出错的几率。第五,结构中立,在使用java语言编程的时候,会把程序编译为中间文件格式,也就是说只要存在java运行系统的机器都能够对这种中间代码进行执行。第六,安全,它删除了手动释放内存等,很好的防止了非法的内存操作。
此外,除了以上的优势之外,java语言还具备可移植性好、解释性强、高性能以及多线程等特点,这里限于篇幅不再对其进行详细的分析。当前,java语言主要应用在web浏览器以及网络应用系统之中。
1.4 c#语言。这种语言有着类型安全、精确、简单以及面向对象的特点。它属于.net的代表语言。具体来说,其特点是:
首先,完全面向对象。其次,对于分布式有很强的支持,也就是说其处理的过程是分布在服务器以及客户机上的,从这张语言的诞生过
程我们可以发现其注定就可以很好的解决分布式的问题。第三,健壮,在检查程序错误以及运行错误方面,c#语言一点不比java语言要差,它使用的也是自动管理内存机制。第四,灵活性比较高,比如在默认情况下,c#语言是不可以使用指针的,但是如果有必要我们可以将指针打开来使用。第五,安全性比较高,它的安全性是由.net平台来提供的。
此外,c#语言还具备可移植性、解释性、高性能、多线程、组件模式等特点,总体来说,它属于java流行之后的有一种语言,但是由于微软系统的支持,使其在windows方面相对于java有着更大的优势。当前,这一语言的主要应用有网络编程、数据库、窗体编程等方面。
1.5 pascal语言。这是计算机通用的高级程序设计语言,它的主要特点是结构化形式比较严格、数据类型非常丰富、查错能力较高以及运行的效率高等。正是由于这些优势,使得这一语言可以对各种算法以及数据结构进行描述。另外,利用这种语言,可以帮助我们编程者保持一个很好的习惯和设计风格。
总体来说,每一种语言都有其独特的优势和应用范围,在计算机应用软件开发过程中如果能够使用最合适的语言将极大地降低我们的工作量,提升我们的工作效率。
2 计算机应用软件开发中编程语言选择的原则
了解了各种编程语言的特点并不能帮助选择出最合适的语言,我们还要掌握编程语言选择过程中的原则:
首先,我们在确定编程语言以前充分考虑开发项目的整体架构,一般情况下,并不是说整个系统都必须要使用同一种编程语言进行编写,语言的选择将会给组件分解及连接带了较大的影响。其次,对开销比较大的操作要我们要进行认真的考虑,比如图形渲染、密码学、视频处理以及信号处理等操作,我们最好选择静态类型的语言。第三,如果条件允许,我们要尽量使用最为熟悉的语言,通过这种做法可以更好的对软件工程项目时间表进行预测,进而降低了变数出现的几率。第四,假如软件主要应用于重复处理手工劳动,那么我们要选择灵活、简单的编程语言,如果某种语言可以与生俱来来实现这些功能则最佳。第五,对开发硬件环境进行充分的考虑,并不是全部的编程语言都可以很好地适应于受限的硬件环境。一般来说,虽然当前的硬件基本已经足够了,但是对于以下较为特殊的应用来说,这一问题依旧严重。所以,要选择使编出来的程序可以较好的运行在这种环境中的语言。第六,不论应用软件开发过程中使用了哪种编程语言,确保编出来的程序可以实现快速调整是一项重要的前提,所以,快速原型是很重要的,基于此,动态语言是一个不错的选择,它可以和和很多相关库进行结合。第七,支持平台也是我们在编程语言选择过程中需要考虑的因素,比如,假如我们代码要在浏览器中运行,那么就可以排除很多不合适的编程语言。第八,在编程过程中,有些文件格式将会涉及到位操作,所以,我们还要对项目是否需要大量位操作进行考虑,一般来说,如果有这方面的要求,我们最好选择容易位操作而且可以提供合适数据类型的编程语言。最后,针对一些特殊领域,我们可以考虑使用专业的编程语言,它既能够节省很多的工作时间,还可以防止编程出现较大的失误。
3 结语
软件开发过程中,编程语言的选择和编程的效率、质量有着非常大的关系,做好这一工作可以使我们的工作事半功倍。因此,在具体的工作中,我们应加强学习,对这些编程语言特点进行深入的了解,以寻找出最合适的编程语言。
在一般应用软件系统开发时,程序员只需要考虑软件系统的功能设计,硬件部分直接根据软件需求购买即可。嵌入式软件的开发则需要软硬件综合开发,这有两方面的原因:一方面,任何一个嵌入式产品都是软硬件的结合体;另一方面,一旦嵌入式产品研制完成后,软件就已经固化在硬件环境中,用户不能对其修改。嵌入式软件的这一特点决定了嵌入式应用开发方式不同于传统的软件工程方法。
1 嵌入式软件开发的特点
嵌入式软件的开发具有如下几方面的特点:
1)需要交叉开发工具和环境。由于嵌入式软件本身不具备自主开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改,因此必须有一套开发工具和环境才能进行开发。这些工具和环境一般基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机交叉开发的概念,主机用于程序的开发、调试,目标机作为最后的执行机构。开发时主机和目标机需要交替结合进行。
2)软硬件协同设计。软硬件协同设计涉及以下方面:嵌入式软件设计、实时系统设计、硬件设计和软件设计。软硬件协同设计强调硬件与软件的协同性与整合性、软件与硬件的可裁减,以满足系统对功能、成本、体积和功耗等要求。
3)嵌入式软件开发人员以应用专家为主。通用计算机的开发人员一般是计算机科学或计算机工程方面的专业人士,而嵌入式软件则是要和各个不同行业的应用相结合的,要求更多的计算机以外的专业知识,其开发人员往往是各个应用领域的专家。
4)软件要求固态化存储。为了提高执行速度和系统可靠性,嵌入系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存储于磁盘等载体中。
5)软件代码高质量、高可靠性。尽管半导体技术的发展使处理器速度不断提高,片上存储器容量不断增加,但在大多数应用中,存储空间仍然是宝贵的,还存在实时性的要求。为此要求程序编写和编译工具的质量要高,以减少程序二进制代码长度,提高执行速度。嵌入式软件的核心是系统软件和应用软件,由于存储空间有限,因而要求软件代码紧凑、可靠,大多对实时性有严格要求。
6)系统软件的高实时性。在多任务嵌入式软件中,对重要性各不相同的任务进行统筹兼顾和合理调度是保证每个任务及时执行的关键,单纯通过提高处理器速度是无法完成和没有效率的,这种任务调度只能由优化编写的系统软件来完成,因此系统软件的高实时性是基本要求。嵌入式软件应用程序虽然可以没有操作系统直接在芯片上运行,但是为了合理地调度多任务,利用系统资源,系统一般以成熟的实时操作系统作为开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。
2 软硬件协同设计概念
嵌入式软件设计是使用一组物理硬件和软件来完成所需功能的过程。系统是指任何由硬件、软件或者两者的结合来构成的功能设备。由于嵌入式软件是一个专用系统,所以在嵌入式产品的设计过程中,软件设计和硬件设计是紧密结合、相互协调的。这就产生了一种全新的发展中的设计理论——软硬件协同设计。这种方法的特点是,在设计时从系统功能的实现角度考虑,把实现时的软硬件同时考虑进去,硬件设计包括芯片级“功能定制”设计。既可最大限度地利用有效资源,缩短开发周期,又能取得更好的设计效果。
系统协同设计的整个流程从确定系统要求开始,包含系统要求的功能、性能、功耗、成本、可靠性和开发时间等。这些要求形成了由项目开发小组和市场专家共同制定的初步说明文档。系统设计首先确定所需的功能。复杂系统设计最常用的方法是将整个系统划分为较简单的子系统及这些子系统的模块组合,然后以一种选定的语言对各个对象子系统加以描述,产生设计说明文档。其次,是把系统功能转换成组织结构,将抽象的功能描述模型转换成组织结构模型。由于针对一个系统可建立多种模型,因此应根据系统的仿真和先前的经验米选择模型。
3 嵌入式软件开发的方法论
在建立一个完整的嵌入式软件或是产品时,大部分系统都很复杂,不但功能规格很多,还必须考虑例如价格、性能等其他因素,否则很容易做出一个失败的系统或是产品。因此,在进行系统开发之前,必须先了解一些系统设计技术,使得在开发过程中更为顺利。一般来说,产品设计的过程会经历几个步骤,为了确保这些步骤的合理性,我们需要一个设计方法论来面对整个设计过程。采用方法论有以下三个重要理由。
确认所做的每一件事情都是必须要做的,不做无谓的工作,也不漏掉关键性的重要工作,其中包含性能最佳化或是功能测试。
根据设计方法论可以发展出计算机辅助工具或是设计经验累积,汲取每一次产品开发的经验。再经过量化之后,可以发展出一套工具或是方法,让往后的产品设计步入自动化。
开发团队遵循同一套方法论,可以让团队成员更容易彼此沟通。每个人都能在短时间内了解整体过程中将经历哪些过程,需要何种支持与接收到何种结果。此外,也容易通过一套已经定义好的方法论,彼此相互合作协调。设计过程的目标是做出有一定用途且具有创新点的产品。产品的典型规格包含功能性、制造成本、性能表现、省电考虑和其他特性。
4 结束语
嵌入式系统开发是在开发过程中综合考虑软硬件环境和需求,这样开发的软件产品不仅能使系统与硬件的驱动默契更高,还能有效缩短开发周期。由于能够有效解决软件危机带来的危害,嵌入式系统开发成为系统开发的主要趋势也是不可避免的。
引言
嵌人式系统开发经过30多年的发展,到现在算是一个成熟的技术了。由此可以从总体上确认在嵌入式系统开发展过程中出现的几种明显趋势,这些趋势指出了一系列新兴的关键技术。
1 微处理器技术
最早的微处理器是4位和8位器件。由于制造技术越来越复杂,集成的单片8位微处理器开始出现,16位微处理器也开始使用。随着微电子技术的发展,16位的微处理器已得到广泛的应用。32位架构的器件逐渐占领了高端的应用市场,第一代的32位器件都是cisc架构,但目前,越来越多的risc芯片正在提供更高的性能。嵌人式系统设计者选择微处理器的范围比以前大了,必须根据性能、需求、支持、可用性和价格来进行选择。
2 系统架构
随着微处理器的发展系统架构也在进步。最早的系统,是由cpu和一些逻辑器件组成的。多年以来,系统变得日益复杂,但都还可以使用同样的调试技术—电路仿真、芯片级调试、rom监控器以及指令集模拟。嵌入式系统日益强劲,而功能需求的增长则更快很多设计者开始重新审视微处理器和它们的用法。
3 设计组成
嵌入式系统发展的最初阶段。所有的开发包括软件和硬件设计,通常都是一个工程师来承担。软件在整个工作址中的比例很小,大约5%-10%。随着时间的推移软件开发占工程时间的比例持续增长。至20世纪80年代中期,软件开发已经是由专业欢件人员来做,所占比例一般已超过整个开发工作量的50%。
在最近几年,虽然硬件设计变得更加复杂,但软件的份量也急剧增长,目前通常占到开发总量70%-80%。因此,需要有软件团队参与,同时也产生了一些新的挑战。这些挑战中的一个,就是要有可用的硬件平台来进行软件测试。由于要在更短的时间内开发更多的软件,就需要尽快建立测试环境。发出更多的软件,就需要尽快建立测试环境。有多种可行的方法,如本地代码执行原型环境、指令集软仿真(模拟),以及使用标准的、低成本的、现成的评估板。此外,低成本的主机一目标机连接技术,也变得越来越普及,有代表性的就是jtag接口。
4 软件内容
软件开发所占总时间的比例一直在增加。同时,来自全球贸易和竞争的压力使得产品投放市场的时间也一直在缩短。这极大地影响了设计的策略。最早的设计相当简单,仅仅由自己设计的应用代码组成。随着系统的复杂度增加,多任务的模型被软件开发者广泛采纳,很多开发者选择标准的、商用的实时操作系统产品。随着各个标准的进一步被采纳,买来的软件,或者说有“知识产权”的软件所占的比例正稳步增长。这个趋势给了软件开发者很多启示。集成标准的软件组件—和应用代码及其他—是我们所关心的。在多任务背景下调试是另一个值得关注的问题。与选择知识产权有关的商业决定尤为复杂;除了当前的要求之外,还有将来的(例如移植到别的处理器)也必须加以考虑。
5 编程语言
对于早期的4位和8位微处理器,汇编语言是唯一的选择。随着16位微处理器技术成为现实,出现了几种可供选择的语言。有pascal和c语言和pl/m语言。对某些类型的系统来说,forth语言也曾很流行,随着时间推移,32位技术的使用日益增多,出现了c和ada。后者在国防部的系统中被普遍使用。
在嵌入式软件开发中,c++开始逐步取代c语言。现在,1/4~1/3的嵌入式系统代码是用c++编写的。java语言当初是专门为嵌人式应用开发的,在要求运行时重新配置的应用场合,它找到了一席之地。统一建模语言(uml)也成为高级设计方法学的最流行选择。
6 软件队伍的规模和分布
正如先前讨论的一样,最初的嵌人式系统设计只要一个人就够了。在适当的时候,因专业化,产生了致力于软件开发的工程师。下一步就是建立嵌人式软件开发团队。管理软件开发在任何情况下都是一个挑战,嵌入式系统开发也不例外,只是有细微差别。使用传统的编程技术———过程语言,如c语言和汇编语言,团队里的大部分成员都需要对整个系统了解比较全面。随着团队变大,这就变得越来越不可行。价况住往是,团队里有一些特殊的人才,他们对某些专门领域很在行。为了有效地管理团队必须使用合适的策略,将他们的专长封装起来。尽可能使一个专家的工作成果能够被非专家以安全、可靠和直观的方式加以使用.在这种情况下,面向对象编程技术找到应用点。
虽然有很多非常大的公司,但软件队伍不是简单的人员扩充他们正在变成分布式的。团队的一些成员在一个地方,而其他的可能在别处。这些地点甚至有可能位于不同的国家。这种安排在欧洲很常见,在那里,真正关心的可能是交流的语言。其他地方,时区可能是个问题(可能也是一个优势,因为分布式的团队可以全天候工作)。随着新兴的技术中心(如印度)广泛崛起,上述情况越来越普遍。在这一背景不,软件组件的可重用性需求就变得很常见了。
7 uml和建模
最近几年,uml己经成为一项关键的设计方法,它和逐渐增七的嵌人式软件团队规模关系密切。广义上说,使用设计工具的方式有2种:或者是作为编写代码的指导,或者就作为直接生成代码的一种手段。对于嵌人式软件来说,代码生成是有争议的,它可能会被争论(而且还很有道理)—每一个系统都是不同的,都有各自的特殊需求。这正是xtuml(可执行和可翻译的uml)吸引人的地方,因为它使得应用与架构清晰地分离了。这里所遵循的,是与面向对象编程同样的原则—使用工具和技术来平衡专家意见。
追踪所有被当前各种嵌人式系统开发趋势所驱动的新技术并非易事。孤立地看待其中任何一项技术也是毫无意义的,因为它们之间有着许多联系。例如,多任务与多处理器调试相关;基于标准的rtos技术对处理器移植来说真是件幸事;使用设计方法学可以令实现更容易。
随着现代电子技术的不断发展,嵌入式系统已经广泛渗透到我们的工作、生活中,从家用电器、手持通信设备、汽车、到信息终端、仪器仪表、航天航空、军事装备、制造工业、过程控制等,都充斥着嵌入式系统的应用。
随着嵌入式软件快速发展,传统嵌入式系统的开发手段已越来越难以满足日益增长的复杂性和质量要求。当前,嵌入式软件开发大多采用文档形式。但文档形式嵌入式软件开发存在着许多弊端:文档本身在传递过程中是不可测试的,因此在软件开发的各个阶段之间形成了沟通障碍。由于不可测试,需求的错误被逐层积累,只有系统测试时才能发现。这就产生了矛盾:大部分错误已积累形成,但只能在后面发现。因此在纠正错误时,文档架构代价高昂。
为了解决上述传统嵌入式软件开发存在的问题,提高嵌入式软件开发的开发效率、保证嵌入式软件的质量,本文探讨将模型驱动开发技术应用到嵌入式软件开发过程。
一、模型驱动开发技术
模型驱动开发(model-driven development,mdd )是mda中的一部分。mda是模型驱动体系架构(model-driven architecture)的简称,由对象管理组织(object management group,omg)所驱动。mda表示了一种模型驱动开发方法的概念框架。然而,尽管完整的mda还没有成为现实,但模型驱动开发现在已成为可能[1]。
软件开发一般要经历软件需求分析、软件概要设计、软件详细设计、编码实现、软件测试几个阶段。每个阶段都可以产生每个阶段的相应模型。这些产生的模型,可以在工具环境中进行调试验证,尽可能在系统开发的早期发现其中的错误,同时也可以克服采用自然语言作为文档工具出现的不准确、不科学的描述。在开发的最后阶段,考虑软硬件平台的实现,保证开发过程与软硬件平台的无关性,有利于系统的开放性和可移植性的提高。整个过程也是一个不断迭代开发的过程,这种通过可调试模型驱动的迭代方式,由于不是首先从浩瀚复杂的代码中入手,而是首先从清晰易懂的模型出发,使得系统的更新变得比较容易[2]。
二、模型驱动开发的优势
模型驱动开发的一个优点是可以消除开发过程中各参与方之间的隔阂,需求工程师,系统分析员,软件开发人员和测试者都可以使用同一种预言。他们可能专注于语言的不同部分,以满足他们的需要,但他们都会共用一些基本的结构,并对他们工作的系统有一个统一的认识。而且使用统一的语言有助于消除角色间的界限,使得在项目的不同阶段人员转换到被需要的角色更加容易。还有另外一些人需要知道项目的进展情况,包括项目领导、经理和评估委员会。更重要的是,用户也需要知道什么将会被交付,需要加入到整个开发过程中,与创建系统的不同人员进行交流。一种图形建模语言,比如统一建模语言(unified modeling language,uml),使得各参与方之间的交流成为可能,帮助架起参与方与某些系统复杂功能之间的桥梁。模型驱动开发正逐渐获得公司高级管理者注意,其中的一个主要原因就是这种能够逐渐增加用户、管理层和大的组织机构参与的能力。
模型驱动开发的另一个优点是把系统和软件开发更多地纳入到系统和软件工程规则中。模型驱动开发是关于开发和维护系统的,系统并不只是由应用程序组成,还包括其他的部分,使得人们可以理解这个应用程序。一个模型可以包含明显可执行的部分,但它几乎总是还有其他部分,并不能被运行,比如需求、系统的粗略框架、分析模型。在项目开发时,所有这些都应该被创建出来并保持最新,它们对于将来的维护非常重要。
模型驱动开发可以使嵌入式软件开发过程花费更少的时间用于实现和测试阶段,更多的时间用于分析和设计阶段,当迭代重复这些过程时,会发现,这种方式的好处是实实在在的。
三、模型驱动开发在嵌入式软件开发中的应用前景
目前,模型驱动开发技术还处于新兴阶段,在嵌入式软件开发领域的发展仍然处于起步阶段。在一段时间内,传统的文档形式软件开发仍将是主流的嵌入式软件开发手段。但传统的嵌入式软件开发存在的诸多弊端决定了其必将被新的开发技术所取代,而模型驱动开发技术正是解决这些问题的有效手段。
嵌入式软件开发领域专业技术人员正在不断年轻化,他们能够更快的接受新的技术理念,积累新的技术知识。因此,他们会持续关注模型驱动开发技术的发展,并研究将模型驱动开发技术应用到嵌入式软件开发过程中的契合点。在年轻的专业技术人员逐渐占据主导地位后,必将会逐渐把积累的先进技术理念和知识应用到工程实践中去,采用模型驱动开发技术这种更合理、更有效的技术手段去保证项目开发的效率和质量。
四、结论
随着模型驱动开发技术的不断发展、完善和推广,相关模型驱动开发工具环境的不断出现,以及嵌入式软件领域的系统设计人员和开发人员对于模型驱动技术的不断深入了解,模型驱动开发技术在嵌入式软件开发中必将得到广泛应用。
论文关键词:网络应用软件 软件开发生命周期osd动 安全性测试 项目设计 单元测试 集成测试 验收侧试
论文摘要:文章论述了软件开发生命周期中每个阶段添加的一系列关泣安全性的活动,提出将安奋浏试整合到软件开发生命周期中,分析了软件安全性浏试片祠试人员的要求,并以一个sql注入实例来具体说明安全性浏试在软。
信息网络安全事件发生比例的不断攀升、病毒利用软件漏洞猖狂地传播使得人们越发认识到信息安全的重要性。一般认为,传统的信息安全技术可以借助防火墙(包括软件和硬件防火墙)审核通过网络的报文、限定用户的访问权限等来防止非授权用户对重要数据的访问,但是这一观点是建立在软件安全基础上的。网络应用软件需要暴露在网络环境下,并且授权外部用户可以透过网络来访问此软件。通过网络,攻击者有机会接触到软件,如果软件本身存在漏洞,那么所有的防火墙就形同虚设。暴露于网络的应用软件往往成为被攻击的目标,是网络应用软件安全的重灾区。美国国家标准与技术研究院(nist)2002年的一项研究表明,美国花费在软件缺陷方面的费用达到595亿美元。公安部2008年全国信息网络安全状况与计算机病毒疫情调查分析报b说明,在发生的安全事件中,未修补或防范软件漏洞仍然是导致安全事件发生的最主要原因。
1安全测试的定义
安全测试是鉴别信息系统数据保护和功能维护的过程。安全测试需要涵盖的6个基本安全概念是:保密性、完整性、权限(身份验证)、授权(权限分配)、可提供性、不可抵赖性阴。软件开发商都存在解决安全威胁方古的问题。对软件开发商来说,安全性是其核心要求,这是由市场力量所驱动,也是由保护关键基础结构及建立和保持计算的广泛信任的需要所决定的。所有软件开发商面对的一个主要挑战就是创建更加安全的软件,使其不需要频繁地通过修补程序进行更新。软件安全已经成为评判软件质量的一个重要标准,软件安全测试则成为保证软件产品能够符合这一标准的重要手段。软件的安全性测试主要是测试在正常和非正常情况下,软件能否对数据进行安全有效的操作。
2软件开发生命周期流程(参见图1)
对于软件行业来说,要满足当今提升安全性的需要,软件供应商必须转为采用一种更严格的、更加关注安全性的软件开发流程。这种流程旨在尽量减少设计、编码和文档编写过程中存在的漏洞,并在软件开发生命周期中尽可能早地检测到并消除这些漏洞。用于处理来自internet的输人、控制可能被攻击的关键系统或处理个人身份信息的企业和消费者软件最需要实施这种流程。在很多实际的软件开发项目中,安全测试已经成为sdl一个不可或缺的组成部分,并成为整个项目过程中的长期任务。黑盒一白盒测试方法往往执行在产品递交客户之前,但有的甚至在投人使用之后都未进行安全检测和风险评估;在一些安全性要求较高的项目中,虽然将安全风险评估纳人预算,但在实际操作中却对其并未作过多考虑。这样,所导致的直接后果是在开发工作几近完成的情况下进行问题分析处理所造成的成本将远远大于在软件开发阶段进行缺陷修改的成本。即便是从充分利用现有的有限资金和资源的角度来考虑,也有必要将安全测试囊括到sdl中。这样做虽然不能取代软件开发后期的渗透测试和脆弱性测试,却可以有效减少后者在施过程中的投人。
开发人员应该根据客户的功能需求来制定相应的安全规约,利用内建的明确的控制机制来降低安全风险。开发人员可以根据风险评估的结果来确定测试项目:软件能否可靠运行(safety)以及软件运行结果是否可靠(security)。
软件开发生命周期((sdl)中常用的测试方法有:单元测试、集成测试和验收测试。
2.1需求、设计阶段—安全性分析
在软件项目的设计过程中,人们往往只是关注系统的特性和功能,而没有充分考虑其他重要的非功能问题(例如性能、可用性、平台支持、安全,及要在稍后的软件开发生命周期中需要解决的安全性),导致了项目中许多不必要的波动和延迟。由于安全性分析影响了整个的设计和架构,因此应该在项目设计阶段充分地审查和了解它们。
安全性考虑包括一系列问题,例如访问控制和授权、敏感数据的适当处理、数据和存储器访问的适当使用,以及加密方法。一些安全性需求不是非功能的需求,如所实施的加密类型。另外,许多安全性需求是更直接地面向用例的,并且需要定义主要场景,以及定义备选路径和异常路径。在没有将功能的和非功能的需求适当地定义及并人软件中的情况下,编码错误和设计缺陷会表现出关键的信息和操作处于危险。我们应该像对待其他的需求那样处理安全性需求,并将安全性需求划分出优先级,设定范围,同时作为整体用例和功能需求的一部分进行管理。
2.2实施阶段—单元测试
受测试方式的影响,开发者对软件安全风险的评估不可能面面俱到。最典型的就是在代码设计阶段,开发者可以通过单元测试来检验代码行为,这些结果都是可以预知的,但是受到范围的局限,不能测试这些类或者模块集成后的行为。
实施单元测试可以从软件基本单位(单个类)的检测上保证输人的有效性;在可能出现恶意攻击的地方,也可以利用这一思想来组织针对单个类或者方法的单元测试,从而组织起软件内部的纵深防御策略,防止恶意行为对软件安全造成的损害。但是,这一方法将软件各组件进行强制孤立,因此对于因大量组件交互而引起的软件缺陷,利用此种方法无法检测。
单元层的安全测试比较适合于防止缓冲区溢出,格式化字符串以及数据缺失的审核。
2.3验证阶段—集成测试
在集成层,软件的整体安全属性变得可见和可测试,使得这一层的可测试属性数量相对单元层而言要多得多,但是对于跨站脚本和网络服务器提供的一些服务(例如安全套接层ssl和url过滤)的测试,存在一定的困难。我们可以将实际案例和风险分析的结果作为组织集成测试的指南。
集成测试要求测试人员通过安全测试培训,并且是有熟练技术的软件开发人员。
在这一层,我们可以开展诸如注人缺陷验证、旁路验证以及访问控制等方面的安全测试,来源于外部代码的安全审查结果也应该以集成测试的方式加以确认。
2.4阶段—验收测试
验收测试是软件产品交付客户之前的最后一个测试阶段,是在真实的测试环境中,利用基于恶意事件的安全检测模板,测试在典型的渗透活动中可被识别的安全缺陷。验收测试的这一特性(基于安全检测模板),使得我们可以借助于强大的自动化测试软件进行检测,并且可以用验收测试的结果来完善渗透测试报告内容,从而有助于开发人员理解软件的脆弱性以及针对软件脆弱性所采取的补救措施是否有效。
验收测试针对软件的外部api,因此不如单元测试和集成测试松散,并且只能测试当前已知且暴露的漏洞或者缺陷。非定制的商业软件重新设计的关键功能或者其他改变都会影响到软件的整体安全性,因此,如果改变会使得软件产生不可预知的缺陷,针对这些缺陷的测试就应该在单元层或者集成层开展,而不是在验收层。
在验收层,我们可以测试针对解释性程序(sql, xpath,ldap等)的注人式攻击、跨站脚本攻击、跨站请求伪造等。缓冲区溢出及格式化字符串等软件缺陷也可以在验收测试层得到检测。
3安全测试队伍
软件测试一度被认为是编程能力偏低的员工的工作,直到今天,仍然有许多公司把优秀的人才安排在编码工作上,也有更多公司让优秀的人才进行设计,仅有很少公司让优秀的人才进行测试工作。实际的软件工程实践证明,让对软件思想有深刻理解的工程师进行软件测试,可以大幅度地提高软件质量软件供应商还必须认识到组织测试人员进行“安全进修”对安全测试的成功实施至关重要。在这些情况下,软件供应商必须负责对其工程人员进行适当教育。根据组织的规模和可用的资源,拥有大批工程人员的组织可建立一个内部计划对其工程师进行在职安全培训,而小型组织则可能需要依赖外部培训。
测试人员要像攻击者那样带有“恶意的”想法去思考,而且在测试软件时还要扮演攻击者,攻击自己的系统,以此来帮助发现软件的安全漏洞。安全测试并不会总是直接导致安全溢出或者暴露可利用的漏洞,从而引出安全缺陷。要安全测试尽可能地发挥作用,测试人员需具备较强的分析能力,而这更多的是依靠熟练的开发技术和开发经验。
4漏洞举例:一个sql的注入式漏洞
有几种情形使得sql注人攻击成为可能。最常见的原因是,使用拼接形成的sql语句去操作数据库。譬如,传入用户输人的管理员用户名和密码,把这2个参数拼接形成sql语句,通过执行该sql语句,以便验证用户输人的管理员用户名和密码的正确性。具体过程如下:
一般情况下,用户传人正常的用户名和密码进行验证,如传人“myname”和“mypassword”进行验证,得到的sql语句将是:
这个sql语句很正常。但是,这只是开发人员预期的做法:通过管理员用户名和密码来验证账户信息。但因为参数值没有被正确地加码,黑客可以很容易地修改查询字符串的值,以改变sql语句的逻辑。譬如,分别传人“myname’ ori=1--” , "mypassword",得到的sql语句将是:
在用户名“myname’ or i=i--”中,第一个“”’结束了原有字符串中第一个单撇号的配对,"or”后面的“i=i”会导致不管前面的验证结果如何,都会返回真true值,而随后的“一”将把其后的sql语句注释掉。现在问题出现了,不管使用什么用户名和密码,都能验证通过。在存在漏洞的数据显示页面,如果注人join语句,就能获取数据库里的所有数据,显示在页面上,如获取用户名、密码等;而注入up-date/insert/delete语句将改变数据,如添加新的管理员账号等。这样,数据库将不再安全。
sql注人安全漏洞的形成,根本在于sql语句的拼接,只要放弃sql语句拼接,适用规范的加码访问方式,问题自然迎刃而解。以下便是修改后的安全验证方法:
5结论
为符合软件的安全性要求,开发人员在开发过程中应尽可能多地进行安全分析、安全性测试。安全检测效能的充分发挥依赖于开发人员与安全测试人员的密切配合以及对相关人员在安全教育方面的再投资。对于安全问题,在软件完成后进行处理比在代码编写阶段处理付出的代价要大得多。包含了安全因素在内的经过完全测试的最终产品,自然具有保密性、完整性、权限(身份验证)、授权(权限分配)、可提供性、不可抵赖性。
随着计算机技术的飞速发展,软件开发也已经有了五六十年的发展历史了,从上个世纪90年代以来,世界软件产业获得了飞速的发展。
一、软件开发中小型项目发展的现状
首先项目管理意识差,在项目开发过程中,一定程度的存在有人无事情做以及有事情无人做的现象。项目开发中的技术经理一心专研技术,无暇顾及各种管理事务,同时,专门聘请的项目管理经理又由于不了解项目具体问题,不涉及系统的分析设计,出现了无事情可做的现象。其次是项目成本意识差,很多项目经理都是从技术骨干当中而来,对规格、进度和成本之间的平衡知之甚少,所以在对资源进行申请的时候很好考虑成本的因素。第三是项目计划制定不合理,在制定项目计划的时候不严谨、可操作性差、随意性大,并且也没有能够贯穿于整个项目之中。第四是文档编写不规范,没有能够进行及时的更新,往往是文档写在功能模块实现完之后,并且是凭工程师的记忆来写。第五是不重视软件测试,在开发中没有规范的测试文档、没有详尽的测试用例。第六是团队意识差,各成员之间不够团结,甚至是存在矛盾,导致技术交流缺乏,出现很多模块之间的问题。
二、软件开发的特点
软件是由程序、文档和数据组成,是为实现软件产品而进行的活动,首先它具有临时性,对于软件开发的开始和结束都很明确,和一般的日常工作不相同。其次是独特性,每一个软件开发都有自己明确的目标,和其他项目不相同。第三是渐进明细性,软件开发是一个不断改进、不断完善的过程,软件开发不可能一次性完成并永久使用,在信息技术的不断发展中,以及软件技术人员的水平不断提高的基础上,软件开发肯定是一个不断进取的过程。第四是知识与技术特性,在软件开发中,存在着大量的智力型活动,需要用到管理学、现代信息技术等知识。第五是要以客户为中心,软件开发最终是需要客户接受的,通过客户接受才能实现它的价值,因此软件开发不仅要满足系统功能和性能,还要适应不同的用户以及不同观点的人的使用。
三、软件开发中小型项目的开发流程
结合软件开发的特点,为了更好的解决软件开发中小型项目开发现状中存在的问题,提高项目管理意识、控制项目成本,软件开发中小型项目开发的流程主要分为以下几个阶段。首先是软件开发中小型项目开发的启动阶段,在这个阶段中,要建立项目管理过程规范,对各种软件项目计划和需求管理进行建立,保证工作计划在软件项目活动管理中的可行性。比如制定软件质量保证计划、软件开发计划、软件测试计划、软件配置管理计划、过程改进计划、风险管理计划等。在软件开发计划中要明确项目组的费用预算和资源安排、项目组与客户之间的介入关系、项目组各成员分工安排等。特别是在软件项目启动的时候就需要开展软件质量保证活动,对项目明显和潜在的风险进行分析识别,明确各风险管理项的跟踪管理方式。其次是软件项目的实施阶段,在这个阶段中重点关注风险和需求的跟踪,开发成果、开发计划与进度和活动的一致性。成立sqa部门,指定软件质量保证负责人,通过建立bug,实现对问题的跟踪。在同一的标准结构下建立项目配置库,有效的和客户进行沟通,对客户新的需求进行及时的更改,对工作的成果进行及时的标识和管理。控制好项目成果的入库、出库和更新,更新和都由专门的管理人员统一进行,将工作成果在的时候打上标签,保证项目成员手头是统一版本的工作成果,避免在阶段工作中,由于工作成果不一致导致版本混乱,甚至是出现返工的现象,从而影响到整个项目的进度。同时,要定期或不定期的对配置库内容和软件产品基线的状态进行检查,保证库内成果的可用性和配置库的完整性。项目阶段成果和项目重要计划都必须经过严格评审,并且要取得相关方的承诺和一致认同。在项目编码阶段,互查单个工作产品的普及代码,保证单位模块的质量。在工作成果的每一次评审之前,给各位评审人员通报评审内容和范围,使评审人员更加充分的了解评审内容,从而提高评审效率,起到保证评审质量的作用。在评审中发现的缺陷,应该立即纠正,并且同时指定责任人跟踪缺陷解决过程,使缺陷能够全部被解决掉。第三是可行性研究和分析阶段,在这个阶段中要进行充分的调研、了解、分析,有项目经理和开发部经理参与完成可行性研究报告、软件需求说明书、产品需求说明书和项目开发计划。第四是软件开发设计阶段,在这个阶段中,主要是进行设计、软件平台选型、数据库和数据文件的设计、io设计、编码设计、操作流程设计、模块接口设计等。第五是软件实现阶段,在这个阶段中,主要是代码的实现、软件的跟踪调试、软件的单元和整体测试、修订软件设计说明书、编写测试文档等。第六是软件发放和维护阶段,这个阶段主要是对产品进行评价,编写产品发放报告、综合评价产品、交付给用户使用、跟进用户的问题等。
【摘要】在软件项目开发的过程中,软件项目管理的成功与否是决定一个项目是否能够顺利高效率完成的重要保证。但是我国大部分的软件企业在进行项目管理时都存在着各种问题,从而使项目不能顺利有效地完成。文章探讨了在项目管理过程里出现的常见问题,并给出了相应的解决策略。
【关键词】软件项目管理;项目经理;项目计划
软件行业在现在的众多行业里是一个极具挑战性和创造性的行业,体现了软件开发者的智慧和汗水,同时软件开发是一项复杂的系统工程,牵涉到许多方面的因素,在实际工作中,经常会出现各种各样的问题,甚至会面临失败。如何总结、分析失败的原因,得出有益的教训,对于项目开发人员来说,是在今后的项目中取得成功的关键。
一、软件开发中实行项目管理的意义
项目管理就是在项目活动中运用一系列的知识、技能、工具和技术,以满足或超过相关利益者对项目的要求,实际上就是通过项目各方干系人的合作,把各种资源应用于项目,以实现项目的目标,满足项目干系人的需求,其本质就是对时间、质量和成本的管理。
随着软件开发的深入、各种技术的不断创新以及软件产业的形成,人们越来越意识到软件过程管理的重要性,管理学的思想逐渐融入软件开发过程中,项目开发的管理日益受到重视。
二、目前在软件项目管理中存在的误区
现在大多数企业都认识到了在项目中进行管理的重要性,但是仍然有许多企业在实施项目管理的过程中存在着这样那样的误区,主要表现在:
1.项目经理不够专业。在软件企业中,缺乏专业的项目管理人员来实施项目管理及担任项目经理,通常被任命的项目经理主要是因为他们能够在技术上独当一面,但是他们在管理方面特别是项目管理方面的知识比较缺乏。
2.项目计划缺乏纲领性。项目经理对总体计划、阶段计划的作用认识不足,因此制定总体计划时比较随意,不少事情没有仔细考虑;阶段计划因工作忙等理由经常拖延,造成计划与控制管理脱节,无法进行有效的进度控制管理。
3.缺乏有效的管理意识。部分项目经理不能从总体上把握整个项目,而是埋头于具体的技术工作,造成项目组成人员之间忙的忙、闲的闲,计划不周、任务不均、资源浪费。有些项目经理没有很好的管理方法,不好安排的工作只好自己做,使项目任务无法有效、合理地分配给相关成员,以达到“负载均衡”。
4.缺乏有效的沟通制度和机制。在项目中一些重要信息没有进行充分和有效的沟通。在制定计划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足,造成各做各事、重复劳动,甚至造成不必要的损失;有些人没有每天定时收邮件的习惯,以至于无法及时接收最新的信息。
5.风险管理意识淡泊。有些项目经理没有充分意识到风险管理的重要性,对计划书中风险管理的章节简单应付了事,随便列出几个风险,随便地写一些简单的对策,对于后面的风险防范起不到什么指导作用。
6.项目干系人的不确定性。在范围识别阶段,项目组对客户的整体组织结构、有关人员及其关系、工作职责等没有足够了解以至于无法得到完整需求或最终经权威用户代表确认的需求;或者是多个用户代表各说各话、昨是今非,但同时又要求项目尽早交付;项目后期需求变化随意,造成项目范围的蔓延,进度的拖延,成本的扩大。
7.缺乏项目团队的合理分工 。项目团队内部有时由于各阶段不同角色或同阶段不同角色之间的责任分工不够清晰而造成工作互相推诿、责任互相推卸的现象;有时各阶段不同角色或同阶段不同角色之间的责任分工比较清晰,但是各项目成员只顾完成自己那部分任务,不愿意与他人协作。这些现象都将造成项目组内部资源的损耗,从而影响项目进展。
三、解决软件项目管理中存在的误区的有效策略
要想解决上面描述的误区,归根到底还是要从管理学的角度入手,即在软件项目的开发过程中加入过程管理的内容,这样我们可以在软件开发中对各个过程的质量加以控制,从而达到保证软件产品质量的目的。为了有效提高管理水平,我们应该努力做到:
1.项目经理接受系统的项目管理知识培训是非常必要的,有了专业领域的知识与实践,再加上项目管理知识与实践和一般管理的知识和经验的有机结合,必能大大提高项目经理的项目管理水平。
2.计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。提高项目经理的计划意识,采用项目计划制定相关知识、技术、工具,加强对开发计划、阶段计划的有效性进行事前事后的评估。
3.加强项目管理方面的培训,并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。技术骨干在担任项目经理之前,最好能经过系统的项目管理知识,特别是其中的人力资源管理、沟通管理的学习,并且在实际工作中不断提高自己的管理素质,丰富项目管理经验,提高项目管理意识。
4.制定有效的沟通制度和沟通机制,提高沟通意识;采取多种沟通方式,提高沟通的有效性。通过制度规定对由于未及时收取邮件而造成损失的责任归属;对于特别重要的(下转第198页)(上接第196页)内容要采用多种方式进行有效沟通以确保传达到位,例如:除发送邮件外还要电话提醒、回执等,重要的内容还要通过举行各种会议进行传达。
5.通过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法,掌握项目风险管理所必备的知识。通过加强对项目规划中风险管理计划的审核提高项目组的风险管理意识。总结本行业项目中常见的风险及其对策作为风险管理计划中必要的风险内容,并切实评估相应对策的有效性和可行性。
6.项目的目的就是实现项目干系人的需求和愿望。项目干系人管理应当从项目的启动开始,项目经理及其项目成员就要分清项目干系人包含哪些人和组织,通过沟通协调对他们施加影响,驱动他们对项目的支持,调查并明确他们的需求和愿望,减小其对项目的阻力,以确保项目获得成功。
7. 项目经理应当对项目成员的责任进行合理的分配并清楚地说明,同时应强调不同分工、不同环节的成员应当相互协作,共同完善。
实施有效的项目管理绝非易事,对于软件企业而言,这不是一个小的改变,而是一种变革,企业需要为此付出艰苦的努力,同时,成熟有效的项目管理无疑将对企业起着至关重要的作用,项目管理的水平将是企业核心竞争力之一。
摘要:在特定框架的基础上建立目标应用系统是当前web应用开发的主流,如面向j2ee平台的struts、spring、jsf、cocoon、axis和xalan等框架都得到了广泛的应用。这些框架是软件开发人员从以往的经验和教训中总结出的设计模式。这些模式的应用,不仅降低了软件开发的成本,同时也保证了web应用系统的质量。
关键词:j2ee平台;web应用;jsp
一.j2ee平台概述
sun的java 2 enterprise edition(j2ee)平台已经成为使用最广泛的web程序设计技术。该技术主要支持两类软件的开发和应用。一类是做高级信息系统框架的web应用服务器(web application server),另一类是在web应用服务器上运行的web应用程序(web application)。全球主要的商业网站和管理信息系统大多采用j2ee平台作为首选的web开发技术,每一个web应用服务器都将需要企业开发和运行多种web服务软件。
二.j2ee平台web应用结构分析
j2ee平台的核心技术是java server page[1]和servlet。整个j2ee平台的应用结构模型如图1所示。从应用结构图明显看出j2ee完全遵从mvc设计模式[2]。下面分别对每个组件做一个介绍。
servlet组件:servlet在web应用中担任重要角色。servlet运行于servlet容器中,可以被servlet容器动态加载,来扩展服务器的功能,并提供特定的服务。servlet按照请求/相应得方式工作。在j2ee平台下,控制器组件就是由servlet来构成的。
jsp组件:在传统的html文件中加入java程序代码和jsp标签,就构成了jsp页面。java程序段可以操控数据库、重新定向网页以及发送e-mail等,实现建立动态网站所需要的功能。jsp技术大大降低了对用户浏览器的要求,即使用户浏览器端不支持java,也可以访问jsp页面。
javabean组件:javabean是一种符合特定规范的java对象,在javabean中定义了一系列的属性,并提供了访问和设置这些属性的公共方法。javabean可以作为共享数据,存放在page、request、session或application范围内。在jsp文件中,可以通过专门的标签来定义或者访问javabean。
自定义jsp标签:jsp标签技术是在jsp1.1版本后出现的。这些可重用的标签能够处理复杂的逻辑运算和事务,或者定义jsp页面的输出内容和格式。自定义标签可以使jsp代码更加简洁,有助于将jsp文件中的java程序代码分离出去,使jsp文件侧重于提供html表示层数据。对于j2ee下不同的框架,会有自己不同的标签库。
ejb组件:enterprise java bean(ejb)组件是基于标准分布式系统对象技术、corba和rmi的服务器端java组件。ejb组件和javabean组件一样,都用于实现企业应用的业务逻辑,它们的根本区别在于:ejb组件总是分布式的,sun公司制定的ejb组件模型要求ejb组件运行于ejb服务器中,而javabean组件可以和servlet或jsp运行在由servlet/jsp容器提供的同一个java虚拟机中。
xml语言:即可扩展标记语言(extensible markup language),是一种用来创建自定义标记的标记语言。xml在web应用以及web服务开发中得到广泛的应用,可用来描述结构化的数据。如在struts框架中,有两个重要的配置文件:web.xml和struts-config.xml。web.xml文件用于配置web应用;struts-config.xml用于配置struts框架。
三.j2ee平台下web开发框架
框架 (framework)[3]不同于类库(library)。框架提供的不是一组功能性的组件,而是一个软件结构,一种业务流程,以及hollywood法则(“don’t call us,we’ll call you”)。选择框架,意味着web应用开发人员只需且只能在框架限制的范围内编写业务组件和显示组件,由框架管理这些组件之间的协作。这虽然丧失了一定的自由,但是却能得到结构更加良好,质量更加可靠的web应用软件。现在,常用的j2ee平台下web应用框架包括struts、spring、jsf、webwork等。
四.展望web应用开发
纵观web应用的发展过程,有两个现象值得注意。首先,底层功能的完善会优化上层功能,上层功能的推广对底层功能提出更高的要求。当web硬件能提供高速度的带宽时,软件公司才能开发出满足用户需要的程序。web系统被大量使用往往使现有系统不能满足要求。这就要求开发出新的硬件和软件系统。例如,在http协议上,最先只有html作为文档编辑语言。当web浏览器(ie,netscape)成为计算机必不可少的上网工具时,动态的web设计语言(java,servlet/jsp,asp,cgi,等)应运而生。其后由于这些语言需要占用系统得计算资源,高速的web应用软件和主机成为大型网站必不可少的配置。在此背景下,web应用技术在整个人类的生活中开始占据重要的位置,随着web应用平台和框架的增多,如何快速有效的进行web应用开发,而且如何尽可能的使前期开发可以为多个web框架应用,成为it业界的研究方向。