基础知识1.1什么是软件工程软件工程(SoftWareEngineering)的框架可概括为:目标、过程和原则。(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。1、概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。2、详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。1.2什么是软件文档软件文档(document)也称文件,通常指的是一些记录的数据和数据媒体,它具有固定不变的形式,可被人和计算机阅读。它和计算机程序共同构成了能完成特定功能的计算机软件。我们知道,硬件产品和产品资料在整个生产过程中都是有形可见的,软件生产则有很大不同,文档本身就是软件产品。没有文档的软件,不成其为软件,更谈不到软件产品。软件文档的编制(documentation)在软件开发工作中占有突出的地位和相当的工作量。高效率、高质量地开发、分发、管理和维护文档对于转让、变更、修正、扩充和使用文档,对于充分发挥软件产品的效益有着重要意义。文档包括:1、用户文档:用户手册;操作手册;维护修改建议;软件需求(规格)说明书2、开发文档:软件需求(规格)说明书;数据要求说明书;概要设计说明书;详细设计说明书;可行性研究报告;项目开发计划3、管理文档:项目开发计划;测试计划;测试报告;开发进度月报;开发总结报告1.3软件项目管理软件产品的规模也越来越庞大,各软件企业都在积极将软件项目管理引入开发活动中,对开发实行有效的管理。软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。软件项目管理的意义不仅仅如此,进行软件项目管理有利于将开发人员的个人开发能力转化成企业的开发能力,企业的软件开发能力越高,表明这个企业的软件生产越趋向于成熟,企业越能够稳定发展(即减小开发风险)。“软件项目管理”栏目分五个块,分别为:1、学术交流在其中发布一些关于软件工程理论、项目管理理论、软件国家标准等相关的基本资料,这些应该是“软件项目管理”的基本学术理论。2、方法措施在其中介绍软件项目管理中,在项目开发的各个阶段,采用的不同类型的各种方法措施,提供给软件项目管理人员专业的技术上的方法指导。3、专家视角主要从各种刊物、网上摘录一些软件项目管理专家的关于项目管理的新思维、新观点,展示软件项目管理领域的多方视角。4、管理软件介绍更管理软件相关的文章,介绍多种软件的功能、目标、使用场合、使用方法、使用技巧等,为使用管理软件的管理人员提供一些天地,也为一些还没有使用软件来进行项目管理的管理者们提供入门知识。5、百家争鸣放一些杂项内容,比如论坛中的比较好的问题和解答,某些非常规的软件项目管理的观点,还有来自各方的相关信息,等等。1.4软件测试概述不论软件的生产者还是软件的使用者,均生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成,当然希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,造成公司信誉下降,继而冲击股票市场。在一些关键应用(如民航订票系统、银行结算系统、证券交易系统、自动飞行控制软件、军事防御和核电站安全控制系统等)中使用质量有问题的软件,还可能造成灾难性的后果。软件中的错误原因主要有如下几点:①、交流不够、交流上有误解或者根本不进行交流在应用应该做什么或不应该做什么的细节(应用的需求)不清晰的情况下进行开发。②、软件复杂性图形用户界面(GUI),客户/服务器结构,分布式应用,数据通信,超大型关系型数据库以及庞大的系统规模,使得软件及系统的复杂性呈指数增长,没有现代软件开发经验的人很难理解它。③、程序设计错误象所有的人一样,程序员也会出错。④、需求变化需求变化的影响是多方面的,客户可能不了解需求变化带来的影响,也可能知道但又不得不那么做。需求变化的后果可能是造成系统的重新设计,设计人员的日程的重新安排,已经完成的工作可能要重做或者完全抛弃,对其他项目产生影响,硬件需求可能要因此改变,等等。如果有许多小的改变或者一次大的变化,项目各部分之间已知或未知的依赖性可能会相互影响而导致更多问题的出现,需求改变带来的复杂性可能导致错误,还可能影响工程参与者的积极性。⑤、时间压力软件项目的日程表很难做到准确,很多时候需要预计和猜测。当最终期限迫近和关键时刻到来之际,错误也就跟着来了。⑥、自负人更喜欢说:'没问题''这事情很容易''几个小时我就能拿出来'太多不切实际的‘没问题’,结果只能是引入错误。⑦、代码文档贫乏贫乏或者差劲的文档使得代码维护和修改变的异常艰辛,其结果是带来许多错误。事实上,在许多机构并不鼓励其程序员为代码编写文档,也不鼓励程序员将代码写得清晰和容易理解,相反他们认为少写文档可以更快的进行编码,无法理解的代码更易于工作的保密(“写得艰难必定读的痛苦”)。⑧、软件开发工具可视化工具,类库,编译器,脚本工具,等等,它们常常会将自身的错误带到应用软件中。就象我们所知道的,没有良好的工程化作为基础,使用面向对象的技术只会使项目变得更复杂。1.5软件质量评价标准我们把影响软件质量的因素分成三组,分别反映用户在使用软件产品时的三种不同倾向或观点。这三种倾向是:产品运行、产品修改和产品转移。可以采取以下步骤实施全面质量控制:1.实行工程化开发“信息系统开发方法”一词的广义理解是“探索复杂系统开发过程的秩序”;狭义理解是“一组为信息系统开发起工具作用的规程”,按这些规程工作,可以较合理地达到目标。规程由一系列活动组成,形成方法体系。信息系统是一项系统工程,必须建立严格的工程控制方法,要求开发组的每一个人都要遵守工程规范。2.实行阶段性冻结与改动控制信息系统具有生命周期,这就为我们划分项目阶段提供了参考。一个大项目可分成若干阶段,每个阶段有自已的任务和成果。这样一方面便于管理和控制工程进度,另一方面可以增强开发人员和用户的信心。在每个阶段末要“冻结”部分成果,作为下一阶段开发的基础。冻结之后不是不能修改,而是其修改要经过一定的审批程序,并且涉及到项目计划的调整。3.实行里程碑式的审查与版本控制里程碑式审查就是在信息系统生命周期每个阶段结束之前,都正式使用结束标准对该阶段的冻结成果进行严格的技术审查,如果发现问题,就可以及时在阶段内解决。版本控制是保证项目小组顺利工作的重要技术。版本控制的含义是通过给文档和程序文件编上版本号,记录每次的修改信息,使项目组的所有成员都了解文档和程序的修改过程。广义的版本控制技术称为软件配制管理,并已有功能完善的软件工具支持,如PVCS和MicrosoftVisualSourceSafe。4.实行面向用户参与的原型演化在每个阶段的后期,快速建立反映该阶段成果的原型系统,通过原型系统与用户交互,及时得到反馈信息,验证该阶段的成果并及时纠正错误,这一技术被称为“原型演化”。原型演化技术需要先进的CASE工具的支持。5.尽量采用面向对象和基于构件的方法面向对象的方法强调类、封装和继承,能提高软件的可重用性,将错误和缺憾局部化,同时还有利于用户的参与,这些对提高信息系统的质量都大有好处。基于构件的开发又被称为“即插即用编程”方法,是从计算机硬件设计中吸收过来的优秀方法。这种编程方法是将编制好的“构件”插入已做好的框架中,从而形成一个大型软件。构件是可重用的软件部分,构件既可以自己开发,也可以使用其他项目的开发成果,或者直接向软件供应商购买。当我们发现某个构件不符合要求时,可对其进行修改而不会影响其他构件,也不会影响系统功能的实现和测试,就好像整修一座大楼中的某个房间,不会影响其他房间的使用。6.全面测试要采用适当的手段,对系统调查、系统分析、系统设计、实现和文档进行全面测试。7.引入外部监理与审计要重视信息系统的项目管理,特别是项目人力资源的管理,因为项目成员的素质和能力以及积极性是项目成败的关键。同时还要重视第三方的监理和审计的引入,通过第三方的审查和监督来确保项目质量。1.6软件开发包括的主要步骤1开发前的准备工作一般软件项目在开发前都有系统任务书,主要规定软件的开发目标、主要任务、功能、性能指标及研制人员和经费、进度等安排,作为系统设计开发和检验的基本依据。根据系统任务书,与软件用户深入进行交流,编写需求分析报告2软件开发过程有了系统任务书和需求分析报告,软件设计人员就要对软件项目的实现进行系统分析,系统分析包括系统的总体方案,系统的设计说明,作为软件设计的依据。具体说明如下。2.1系统总体方案在系统开发单位和用户充分交互、理解的基础上,提出系统的技术构架,对系统功能、性能等主要指标作描述,对实现方法和要求作规定,是系统进行详细设计的依据。2.2系统设计说明根据《系统总体方案》提出的系统构架、功能、性能及数据要求,确定系统的物理结构,说明系统主要技术方面的设计和采用的技术方法以及系统的标准化约束等,是系统实施的基本依据。2.3软件开发对于开发语言的选择因人而易,开发数据库系统可以选择DELPHI,因为它对于数据库开发的支持是很完善的。在软件实现方面,上面已经说明了一种C/S结构,但是这种结构本身也包含了一些问题,例如C/S结构经常把应用系统的企业逻辑编写在客户端的应用程序中,因此当应用系统需要改变时,所有在客户端的应用系统都必须改变,这对于MIS系统的维护来说成本太高了;为了解决这些重复开发应用系统的成本以及为了增加应用系统的重复使用性发挥面向对象分析/面向对象设计的功能,就必须导入所谓的应用程序服务器,软件开发人员以一种特定的组件形式,例如Microsoft的COM/DCOM,CORBA对象,或是EnterpriseJavaBean等,组装企业的逻辑程序代码。这种经过组装,能够执行特定企业功能的对象便称为企业对象,然后把这些企业对象分发到此应用程序服务器。程序设计中要注意合理的程序设计结构,可以将所有的公用组件放在一起。例如Delphi语言中可以新建一个单元,将所有编写的函数放在这个单元里,其他单元均可以调用,还可以新建一个数据模块(Datamodule),将所有的公共数据库控件放在这里,可以减少系统资源浪费,优化数据库程序设计。3软件开发后的工作软件项目在开发完成后还要进行系统测试,以测试开发出的软件的功能和性能是否达到预定要求。3.1软件测试大纲这是软件设计人员用来自测系统的。3.2用户应用测试由用户在实际使用过程中进行测试,并给出应用证明。1.7三层结构近年来,现代企业纷纷开始建立新的管理信息系统(简称MIS)或修订原有的管理信息系统。在此过程中,关于MIS系统平台模式的选择是系统设计人员遇到的主要问题。MIS系统平台模式大体上分为4种:主机终端模式、文件服务器模式、客户机/服务器模式(Client/Server,简称C/S)和Web浏览器/服务器模式(Browser/Server,简称B/S)。主机终端模式由于硬件选择有限,硬件投资得不到保证,已被逐步淘汰。而文件服务器模式只适用小规模的局域网,对于用户多、数据量大的情况就会产