




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件开发技术基础计算机教学实验中心1.理解软件及其软件工程的概念2.了解软件危机与软件的生命周期概念3.理解典型软件开发过程4.了解OO软件开发技术5.了解C/S和B/S软件系统的结构教学内容问题的提出什么是软件?软件有哪些特征?软件工程的含义是什么?什么是软件危机?什么是软件生命周期?软件开发技术究竟有哪些B/S和C/S结构是什么?……软件的基本概念程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合软件=程序+文档+数据IEEE的软件定义:指计算机程序、方法和规则、相关的文档资料以及在计算机上运行它所必需的数据计算机系统由计算机硬件和软件构成计算机能完成各种神奇的功能是因为存在各种软件什么是软件?什么是程序?软件的特征软件是逻辑产品软件产品质量的体现方式不同软件产品的生命周期和失败曲线不同软件产品的成本构成不同大多数软件仍然是定制生产的软件产品的不同属性软件是逻辑产品软件产品是:具有产值、价格、质量和功能的特性看不见,是逻辑的、无形的是脑力劳动的结晶软件产品质量体现方式不同质量体现方式不同:实用、可靠、可操作性;可维护性强方便用户不会折旧、损坏、零部件老化软件产品的成本构成不同
一般产品的成本构成:材料、设计、生产制造、
售后服务、税费、……软件产品的成本构成:人力、设计、售后服务、税费、……软件产品以定制生产为主硬件产品的生产技术和工艺已经成熟,可以做到标准化、系列化成批生产,不论哪个厂家生产的产品,用户买来都可以集成、组装和替换使用。尽管软件产品复用是软件界孜孜不倦追求的目标,在某些局部范围内几家领军软件企业也建立了一些软件组件复用的技术标准,例如,OMG的CORBA、Microsoft的COM和DCOM、SUN的EJB和J2EE,但是目前还做不到大范围使用软件替代品。大多数软件仍然是为特定任务或用户定制的。软件产品的不同属性为便于软件产品的研制、生产、维护和使用,软件还必须具有:可维护性(Maintainability)
独立性(Dependability)
效率性(Efficiency)
可用性(Usability)软件分类软件按不同方式划分为不同的类型:按功能划分按规模划分按功能划分软件分类
软件系统软件应用软件操作系统网络系统语言编译器工具软件管理软件实时软件科学计算、数据处理嵌入式软件人工智能软件专用领域软件系统软件是支持计算机系统正常运行并实现用户操作的那部分软件。一般是在计算机系统购买时随机携带的,也可以根据需要另行安装。①操作系统(OperatingSystem)②网络系统(NetworkSystem)③语言编译系统(
LanguageCompiler)④通信软件(CommunicationsSoftware)⑤工具软件(ToolsSoftware)应用软件应用软件是为满足用户不同领域、不同问题的应用需求而提供的那部分软件。它可以拓宽计算机系统的应用领域,放大硬件的功能。应用软件具有无限丰富和美好的开发前景。①事务处理软件②实时软件③科学计算和数据处理软件④嵌入式软件⑤人工智能软件按规模划分软件分类类别参加人员数研制期限产品规模(语句行数)实例微型11~4周0.5k选择排序程序小型11~6月1k~2k数值计算程序中型2~51~2年5k~10k汇编程序较大型5~202~3年50k~100k数据库系统大型100~10004~5年1M操作系统极大型2000~50005~10年1M~10M空中交通管制系统软件开发技术发展史社会应用需求的驱动是推进软件发展进程的主线:从软件发展早期的按个人意愿编写代码,到按软件工程的理论生产大型应用系统;从手工作坊式的封闭性制作到按标准制式、大工业生产的开放系统;从注重个人精雕细琢地编写代码的技巧到注重工程项目的管理和开发团队的协作;从为特定应用定制设计到以复用为目标的组件式开发;从由少数软件天才的编程艺术到由广大用户直接参与的应用开发。阶段划分半个多世纪以来,软件及软件开发技术在理论、观念、目标及技术方法等方面都发生了很大变化。以10年左右为间隔,划分为五个阶段。详见表1-1。表中概述了每个时期软件开发技术的特点,包括软件开发技术处理的对象、用途、目的、开发方法、开发工具、发展状况、技术突破、理论成就及目标等。软件危机从20世纪60年代开始,软件业出现,研制软件系统需要投入大量的人力、物力和资金,但是系统的质量却无法保证。开发软件所需的高成本与软件产品的低质量之间存在尖锐的矛盾。软件生产周期漫长,不能满足市场需求,软件开发陷入不可自拔的恶性循环之中。这种现象被称为“软件危机”(SoftwareCrisis)。以IBM公司的OS/360操作系统为例。它共有4000多个模块、100万行指令,共投入5000人年,耗资5亿美元,但在交付使用的系统中仍找出2000个以上的错误。软件危机的具体表现⑴软件开发进度难以预测⑵软件开发成本难以控制⑶用户对软件功能难以满足⑷软件产品质量无法保证⑸软件产品难以维护⑹软件通常缺少适当的文档资料⑺生产率提高的速度不能满足社会需要软件危机产生的原因
产生软件危机有两个方面的原因:与软件本身的特点有关;是内在因素、客观的存在,只能因势利导加以解决。与软件开发和维护的技术方法有关;是外在因素,可以完善、提高。软件特点的因素(内因)软件是逻辑产品,是代码化了的人的思维活动。在总体构思时,别人无法管理和干预。在写出程序、并在机器上运行之前,进展情况难以掌握,开发质量也无法评估。这些都给管理和控制带来不便。软件是特定问题在计算机上的运行描述。实际问题的复杂性决定了一个实用软件系统规模往往十分庞大。大有大的难处。程序规模越大,控制、管理难度也就越大。软件开发维护技术方法的因素开发人员和用户之间的矛盾软件开发各阶段任务不明确,方法不科学软件产品有其生命周期。在周期的各个阶段有其具体的任务,如何完成任务,各个阶段有不同的技术方法和操作步骤。只有科学的按生命周期各阶段的任务去组织实施,才能保证质量,降低成本;急于求成,不按科学规律、方法实施,只能“事倍功半”,事与愿违。许多软件系统开发失败的主要原因是开发人员在没有准确、完整地了解了用户的需求后就急于编程;用户对需求也往往不能准确、完整地提出。重编程,轻分析;重开发,轻维护;重程序,轻文档软件产品的使用寿命很长。在这期间要对软件进行必要的修改。据统计数据表明,软件维护的费用占总费用的55%-70%。软件工程的一个重要目标就是提高软件的可维护性,减少软件维护的代价。解决软件危机的途径开发软件选用最好的开发工具是至关重要的,即选择、设置良好的软件工程支撑环境。工具选用的好,它可以“放大”人的智力,大大加快软件开发速度,提高软件质量。采用现代化、社会化的组织管理方式使用成功技术和方法(面向过程、面向对象、面向组件等)使用更好的软件开发工具(汇编、C、VC、JAVA等)为了解决软件危机就要从技术措施和组织管理两个方面去研究,不断总结经验教训,提高软件生产效率,降低软件开发和维护的成本。软件工程的诞生
70年代出现的软件危机归结为软件开发技术落后,人们追求高效的软件开发技术来解决软件危机,软件工程应运而生:克服、解决“软件危机”改进“软件生产”方法、工具提高软件的生产率软件生命周期软件生存周期是指一个软件从提出开发要求直到该软件报废为止的整个时期。针对不同的开发模型、不同的开发对象以及不同的开发方法,软件生命周期可以有不同的划分。如果不考虑上述不同的因素以及应用领域、项目规模和复杂性,软件生命周期可以划分为:
软件定义、软件开发、软件维护软件定义软件定义时期的核心任务是:
“做什么”。即要确定软件开发工程的总目标;确定工程的可行性;提出实现工程目标应该采用的策略及系统应实现的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员和用户共同负责完成。软件定义时期通常进一步划分成3个阶段:
问题定义、可行性研究和需求分析
软件开发软件开发时期的核心任务是:“怎么做”。即要具体设计和实现在软件定义时期定义的软件系统。它又包括4个阶段:总体设计,详细设计,编码和测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。软件维护维护时期的核心任务是:“改变”。即要保证软件持久地满足用户各个方面改变的需要。维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。例如,如果提出的变更要求是更加新的功能,那就要涉及从新一轮的软件开发过程:需求分析、系统设计、编码及测试。软件生命周期的图示问题定义可行性研究需求分析总体设计详细设计软件编码软件测试软件维护软件定义软件开发软件维护软件生命周期系统分析系统设计系统编码系统测试系统维护软件工程的定义著名软件工程专家Boehm定义著名IEEE刊物给出的定义教科书给出的定义运用现代科学技术知识来设计并且构造计算机程序以及为开发、运行和维护这些程序所必需的相关文件资料。以优质、高效、低成本为目标,研究开发、运行和维护软件以及使之退役的系统方法。运用系统的、规范的和可定量的方法来开发、运行和维护软件。关于软件工程学软件工程是一门交叉学科,涉及到计算机科学、管理科学、工程学和数学。软件工程的理论、方法、技术都是建立在计算机科学的基础上;它是用管理学的原理、方法进行软件生产管理;用工程学的观点进行费用估算、制定进度和实施方案;用数学方法建立软件可靠性模型以及分析各种算法。软件工程的目标开发生产尽可能多的软件产品提高软件的生产效率满足应用的功能需要和具有较好的软件性能能按时、按质完成软件开发任务降低软件开发成本软件工程的本质特征软件工程关注于大型程序的构造软件工程的中心课题是控制复杂度软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品软件工程原理自1968年提出“软件工程”的概念以来,专家学者又陆续提出了100多条关于软件工程的准则。著名软件工程专家B.W.Boehm于1983年发表的一篇论文中提出了软件工程的七条基本原理。他认为这七条原理是确保软件产品质量和开发效率的最小准则集合。软件工程七条基本原理用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组人员少而精承认不断改进软件工程实践的必要性软件开发活动软件工程过程是由一系列软件工程的阶段任务和活动组成。1995年ISO将软件生存周期的活动和任务划分为3个过程:主要过程(需求、设计、构造、测试和维护)支持过程(软件配置、软件工程管理、软件过程和软件质量)组织过程(基础设施建设、工具和方法、改进、培训)主要过程主要过程包括如下软件开发活动:需求分析软件设计软件构造软件测试软件维护需求分析任务:收集、分析、理解、确定用户的要求;然后把用户的要求精确、完整地描述表达出来。目的:要回答“要解决什么问题?”,既系统”做什么?“。分两步骤:可行性研究、制定软件开发计划结果:可行性报告、软件计划、需求说明书需求说明书是让用户理解:
“什么是他们真正需要的”。了解用户需求有关的问题什么是需求?希望,功能,限制,必需品,任何必要的东西;什么时候?
从确定方案开始;为什么?
用户的需求是开发需要的依据;来自哪里?
来自用户,工业标准,和实践经验;如何实现?使所有相关的人参与需求分析活动,通过有效的交流实现;谁来做?
用户,工程管理人员,开发人员,维护人员。用户参与需求分析的重要性根据StandishGroup1994年发表的一份研究报告统计,延迟的、超出预算的、未完成的工程的最普遍的原因是:⑴缺少用户参与;⑵不完备的需求规范;⑶改变需求规范。需求分析的难点⑴问题的复杂性。
涉及因素多而;如运行环境和系统功能等。⑵交流障碍。
涉及不同类型人员较多,知识背景、角度、角色的不同;用户不懂计算机,程序员不懂应用环境业务⑶不完备性和不一致性。
用户对问题的陈述有矛盾、片面性等造成。⑷需求易变性。
需求是变化的。需求活动⑴识别问题
通过调研和收集资料,了解用户的确切需求,并将用户提出的功能行为和特殊要求等用双方都能理解的表达方式逐条列出。在整个分析期间要和用户充分协商。⑵可行性研究
对于大型复杂问题,要对用户的要求及实现环境从技术、经济和社会因素三个方面进行可行性研究,以确定问题是否可解。⑶分析建模
建立软件求解模型;信息、行为和表示。⑷需求规格化及编写文档
需求规格说明书、初步用户使用手册等。软件设计任务:给出实现系统的实施蓝图。目的:要回答“如何解决该问题?”,既系统“怎样做?”。步骤:概要设计和详细设计概要设计:解决系统的模块划分、模块的层次结构设计。详细设计:解决每个摸块内部算法和数据结构。结果:系统设计说明书和模块功能说明书
软件设计工作软件设计要做的工作可以归结为:
软件系统结构(软件结构)设计、数据设计、界面设计和过程设计设计办法是功能分解,包括:⑴采用某种设计方法,将一个复杂的系统按功能划分成模块⑵确定每个模块的功能⑶确定模块之间的接口,即模块之间传递的信息⑸评价模块结构的质量软件设计方法⑴面向数据流的设计方法;⑵结构化设计方法;⑶面向数据结构的设计方法;Jackson方法;⑷Warnier方法⑸面向对象方法使用的开发工具⑴层次图、HIPO图、结构图⑵程序流程图、N-S图、问题分析图PAD(ProgramAnalysisDiagram)⑶类语言、过程设计语言PDL(ProceduralDesignLanguage)等⑷统一建模语言UML(UnifiedModelingLanguage)软件构造任务:根据设计说明书中每个模块的控制流程编写出相应的源程序。目的:写出高质量的代码和相应饿文档。构造要注意使系统更易于使用和系统的可重用性。选择合适的开发工具及系统软件、数据库软件、中间件等。制定编程规范。结果:源程序和文档编程风格(1)源程序文件:变量名的命名、源程序中的注解以及源程序的书写格式(2)数据说明:按各类型数据的顺序以及字典顺序说明、对数据结构加注释说明(3)语句构造:语句构造一般规则(4)输入输出语句:输入输出语句的规则。编程风格主要体现如何描述源程序文件、数据说明、输入输出等语句构造规则不要为节省空间而把多个语句写在同一行;尽量避免复杂的条件测试;尽量减少对“非”条件的测试;避免使用多层嵌套的循环和重复;利用括号使表达式的运算顺序清晰直观。I/O语句规则保持输入格式简单;对所有输入数据都进行校验;使用数据结束标记,不要要求用户指定数据的数目;当程序设计语言对格式有严格要求时,应保持输入格式的一致性;检查输入项中重要组合的合法性;给所有的输出数据加标记,并设计良好的输出报表;用标记标明交互的输入请求,应规定可以使用的选择值或边界值;要根据用户的不同类型、特点和要求设计输入方案,输入数据的格式要简单,应具有完备的出错检查和出错恢复措施。程序设计语言(1)心理特性
对人-机通信质量有重要影响。例如,人们习惯使用已熟悉的程序设计语言,由此产生的惰性影响人们学习新语言。(2)工程特性
它涉及到软件的可移植性、开发工具的可利用性等。(3)技术特性
它对设计质量、人和整个软件工程有影响。例如,对数据结构复杂性要求很高的系统,考虑选用C及C++等语言;若对高性能和实时功能要求高,可考虑选用Ada语言。选用程序设计语言时要考虑它的三种特性软件测试任务:检查、发现程序中存在的问题,提高系统可靠性目的:保证系统的正确性、可靠性和可用性回答:“该系统是否能实现规定的操作?”方式:模块测试、组装测试、确认测试和系统测试结果:测试报告和软件修改报告等工作内容:验证(verification)和确认(validation).软件测试分类从是否关心软件内部结构和具体实现的角度划分:1、黑盒测试是根据软件的规格对软件进行的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子。软件测试人员以用户的角度,通过各种输入和观察软件的各种输出结果来发现软件存在的缺陷,而不关心程序具体如何实现的一种软件测试方法。2、白盒测试是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。根据有多少用户参与的划分为:1、阿尔法测试(α测试):由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由该系统的程序员或测试员完成。2、贝塔测试(β测试):指在若干客户场地由客户组织,最终用户参与的测试,此时所有文档均予冻结,作为本软件版本的基线。对于新软件,改版则为里程碑。软件测试分类软件测试分类从是否执行程序的角度划分:1、静态测试指测试不运行的部分,例如测试产品说明书,对此进行检查和审阅.。静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。2、动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。根据动态测试在软件开发过程中所处的阶段和作用,动态测试可分为如下几个步骤:动态测试包括⑴单元测试
对一个模块的测试,一般以白盒法测试为主,多个模块可以并行进行⑵集成测试最终将本项目所有模块集成在一起测试,交出完整程序产品⑶确认测试以用户为主的测试。证实系统能否正确地实现其功能⑷系统测试软件只是整个应用系统的一部分。最后要集成为一个整体,包括硬件、软件以及相关的其它设备。此时的测试称系统测试。设计测试用例应考虑的问题①界面:内界面主要检查参数个数及类型匹配。外界面主要检查I/O文件、数据格式、类型匹配。②模块的数据结构:类型是否不正确或不一致?初始化、缺省值使用情况;变量名拼错;上、下界溢出等数据异常,测试能否正确处理等。③边界条件:保证在边界值的情况下模块依然可以正确操作,值出界时要有正确反应。④独立路径:保证至少所有语句都要执行一次,每个条件或子条件都执行一次更好。⑤错误处理路径:不管程序有无异常处理都要察看出错处理路径。特别要考察是否死机。程序调试调试是在测试发现错误之后排除错误的过程。1、目的不同
软件测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是软件测试的任务,而是调试的任务.
调试的目的是为了证明程序的正确,因此它必须不断地排除错误.它们的出发点不一样。
前者是挑错,是一种挑剔过程,属于质量保证活动。后者是排错,是一种排除过程,是编码活动的一部分.程序调试2、任务不同
软件测试它贯穿于整个开发过程.从需求分析开始,就要制订软件测试计划,软件设计时要设计系统软件测试、集成侧试用例,编码阶段要设计单元软件测试用例并进行单元软件测试,软件测试阶段要进行集成软件测试、系统软件测试等,直到产品交付。只要有修改就有软件测试,产品交付后同样。它是比较有规律的活动,有系统的方法、原则作指导。
而调试是编码活动的一部分,因此有编码就有调试.它的任务主要就是排错。调试的方法经常与使用的开发工具有关,例如:解释型的开发工具可以交互式调试,编译型开发工具就很难较好地查错。当然它有一些启发式的方法,它是一种比较依赖开发人员经验的活动。调试技术①加打印语句:特点是显示的是程序的动态信息,但大量的输出,时间慢,可能引出新的问题②输出存储器内容:特点是效率低、难定位、输出的是静止状态的程序内容③用调试工具:特点是动态调试,可自动执行,是目前广泛采用的一种调试技术调试策略①试探法。大概分析、估计错误的位置。②回溯法。确定最先出现“症状”的地方,然后沿程序的控制流程往回追踪源程序,直到找出错误源为止。③对分查找法。若已知程序中若干个关键点的正确值,然后用调试工具在关键点附近处输入正确值;若输出正确,则故障在前半部分;否则,再查后半部分。④归纳法。从线索出发,通过分析线索之间的关系而找出故障。主要步骤为:收集有关数据,组织数据,导出假设,证明假设。软件维护任务:改正软件系统在使用过程中发现的隐含错误,扩充在使用过程中新的功能要求。目的:维护软件系统的正常运行。回答:系统是否满足用户的应用要求。阶段结果:软件系统的问题报告和软件修改报告。软件维护的原因⑴软件的原有功能和性能可能不再适应用户的要求;⑵软件的工作环境改变了(例如,增加了新的外部设备),软件也要做相应的变更;⑶软件运行中发现错误,需要修改。维护活动分类⑴校正性维护:
指为了识别和纠正错误,修改软件性能上的缺陷,进行确定和修改错误的过程。占整个维护工作的15%。⑵适应性维护:
为了使本软件适应硬件和软件的变化而修改软件的过程称为适应性维护。占整个维护活动的25%。⑶完善性维护:
增加软件功能、增强软件性能、提高运行效率而进行的维护活动称为完善性维护。占整个维护工作的55%。⑷预防性维护:
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。只占整个维护活动的5%。支持过程支持过程包括的软件开发活动和任务是:软件配置管理软件工程管理软件过程软件质量组织过程组织过程包括的软件开发活动和任务是:基础设施建设软件工程工具和方法改进培训软件工程工具和方法程序的开发、运行都是在支持软件的基础上作出的。支持软件的总和称之为软件开发环境。早期的环境只有最必要的软件工具;例如语言的编译器、连接器、加载和运行工具、排错、信息显示及编辑工具。称为最小环境工具集。70年代中期,软件工程师迫于软件危机的压力,提出了计算机辅助软件工程(CASE)的设想,开发出一系列工具尽量使软件过程的各项活动自动化、半自动化。相应问题:工具日益增多,给使用者带来不便,例如,各工具的使用方法、格式、参数等差异的问题。这就在客观上产生了对于集成的CASE工具的需求。计算机辅助软件工程CASE人们期望,借助CASE工具,有朝一日软件开发人员可以像在自动流水线上生产计算机那样生产软件。CASE工具具有如下特征:支持专用的个人计算环境;使用图形功能对软件系统进行说明并建立文档;将生命周期各阶段的工作连接在一起;收集和连接软件系统从最初的软件需求到软件维护各个环节的所有信息;用人工智能实现软件开发和维护工作的自动化。软件工程工具信息工程工具过程模型和管理工具项目计划工具风险分析工具项目管理工具需求追踪工具度量和管理工具文档工具系统软件工具质量保证工具数据库管理工具软件活动过程图示小结软件工具和方法主要过程支持过程组织过程基础设施建设软件改进软件培训软件工程管理软件配置管理软件过程软件质量软件构造软件设计软件测试软件维护软件需求软件活动通过实例说明主要过程的开发工作计算两个正整数的最大公因数软件需求的工作如下:可行性分析如下:p和q只能是正整数的子集最大公因数的定义:能整除P、Q,且是最大的除数p和q数值通过键盘录入结果显示在屏幕上普通PC机环境均可这是小问题,一个人在短时间内即可完成
可行性研究、制定开发计划。回答“做什么”软件需求分析怎么做呢?软件设计的工作如下:需求分析确定了未来程序的输入、处理、输出(IPO,即Input,Process,Output)等等可行性研究的相关结果根据需求分析的结果,将未来程序的具体执行流程或步骤详细设计出来,这就是算法设计常用三种描述算法的方式或者说工具:自然语言、流程图、伪代码可以采用任何一种工具进行设计需求分析回答了“做什么”,而算法设计回答了“如何做”要注意算法是不能被计算机理解、执行的,必须经过下一步编写程序
概要设计、详细设计。回答“如何做”软件设计怎么做呢?古希腊数学家欧几里德给出了一个著名的算法如下:步骤1:任意输入两个数放入p和q中步骤2:如果p<q,交换p和q
步骤3:求出p/q的余数放入r中步骤4:如果r=0,则执行步骤8,否则执行下一步步骤5:令p=q,q=r
步骤6:计算p和q的余数r
步骤7:执行步骤4步骤8:q就是所求的结果,输出结果q自然语言描述实际问题的算法如下:开始结束键盘输入p和qp>qr=p;p=q;q=rr=0r=p除以q的余数;p=q;q=r;显示输出q步骤1:任意输入两个数放入p和q中步骤2:如果p<q,交换p和q步骤3:求出p/q的余数放入r中步骤4:如果r=0,则执行步骤8,否则执行下一步步骤5:令p=q,q=r步骤6:计算p和q的余数r步骤7:执行步骤4步骤8:q就是所求的结果,输出结果q
真真r=p除以q的余数;伪代码描述的算法如下:InputP,QIf(P<Q)thenR=PP=QQ=REndifR=PmodQWhile(R<>0){P=QQ=RR=PmodQ}OutputQ
软件构造的工作如下:软件构造就是将上一步骤的算法描述用某一程序设计语言编写(或表示)出来不同的程序语言其功能和特性各不相同,选择一个适合的程序设计语言,将算法转换成程序代码程序编写风格:命名应简单易记程序中应该有注释语句书写应采用缩进格式
C++程序代码#include<iostream.h>Voidmain(){intp,q,r;cin>>p>>q;if(p<q){r=p;p=q;q=r;}r=p%q;while(r!=0){p=q;q=r;r=p%q;}}Java版程序代码publicstaticvoidmain(Stringargs[]){intp,q,r=0;Scannerreader=newScanner(System.in);p=reader.nextInt();q=reader.nextInt();if(p<q){r=p;p=q;q=r;}r=p%q;while(r!=0){p=q;q=r;r=p%q;}}软件测试的工作如下:测试程序就是将编写的程序在计算机上运行,以便检验程序正确与否。任何程序员所编写的程序都有可能出现两类错误:语法错误和逻辑错误语法错误:一般指程序中不符合语言的语法,如缺少标点符号,名称不符等等逻辑错误:一般指运行程序所得到的结果与预期的结果不同软件维护的工作如下:提交源程序和可执行程序提交用户说明书不断收集用户改进意见,改进软件软件工程方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型软件工程方法学包括3个要素:方法、工具和过程这三者之间是相互联系的。方法是完成软件开发过程中各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动或半自动的软件支撑环境;过程是为了获得高质量的软件所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件工程的基本问题软件工程开发技术思想与原则过程方法工具解决软件工程的三目标质量成本进度软件工程开发技术的角度软件工程开发技术思想与原则过程方法工具解决软件工程的三目标质量成本进度两种典型方法传统软件工程方法(结构化方法)现代软件工程方法(面向对象方法)传统方法学传统方法学是建立在软件生存周期方法学和结构化方法学的基础上。因此,具有明显的那个时代的特点。70年代,计算机技术水平不高,开发工具少而且性能差。对于大型复杂问题的求解,人们不得不采用“将大化小“、“将难化简”,最后“分而治之”的开发策略。结构化方法概述结构化方法是由下列方法组成:
◈结构化分析方法SA
◈结构化设计方法SD◈结构化程序设计方法SP结构化方法的核心是基于功能分解的模块化层次结构方法。结构化分析SA结构化分析的要点是:将大问题分解为小问题,找出关键点、难点,定量描述;核心是:分解;手段是:模块化。
◈自顶向下
◈逐步求精◈模块化设计结构化设计SD结构化设计方法的要点是:将系统设计成由相对独立、单一功能的模块组成的软件结构结构化程序设计SP结构化程序设计方法SP的要点是用三种基本结构的语句编写只有一个入口和一个出口的模块程序,尽可能地采用重用程序,开发组织形式为主程序员组。◈自顶向下逐步加细◈模块只有一个入口,一个出口◈三种基本结构◈开发支持库◈主程序员组传统方法学的缺点过分强调了分阶段实施,使得开发过程各个阶段之间存在严重的顺序性和依赖性;很难将一个复杂的问题化简、分解;设计方法存在很大的主观随意性;基于功能分解的系统结构难于修改和扩充;思维成果的可重用性很差;数据和对数据的处理是分离的;忽视了人在软件开发过程中的地位和作用。现代方法学现代方法学是在传统方法学的基础上,为了强调人在软件开发中的作用,同时为了适应软件新技术的发展趋势而提出的。其基本要点是:⑴软件开发过程是以人为主,充分利用软件开发方法及软件开发工具;⑵开发人员的组织管理对软件开发成功与否至关重要;⑶基于软件组件的软件开发技术。⑷由于软件组件是标准化设计、成品化生产的,极易构造使用,从而大大简化了设计、编程、测试各个环节的工作量,提高了生产效率和产品质量。现代方法学中生命周期在现代方法学中软件生命周期的阶段划分◈系统分析◈系统构造◈系统测试◈软件组件面向对象方法学由于传统方法学无法从根本上解决“软件危机”,业界人士不得不研究、探索新的方法。面向对象(OO)方法是人类借助计算机认识和模拟客观世界的一种方法。它将客观世界看成是由许多不同种类的对象构成。通过分析、研究客观世界中的实体的属性及其相互关系,从中抽象出求解问题的对象,最后求解这些对象,得到问题的解。OO开发过程更接近人类认识问题、解决问题的思维方式,使得计算机求解的对象与客观事物具有一一对应的关系。什么是OO方法OO方法具有以下几个要点:⑴把对象作为一种统一的软件构件,它将数据及在数据上的操作行为融合为一体(封装)⑵
程序是由对象组成,复杂对象是由简单对象组合而成。OO方法学用对象分解代替了传统方法的功能分解(封装和多态)⑶把所有对象都用类来表示;每个类都有自己的属性和方法,具体的对象只是类中的一个实例(类和对象)⑷类具有层次结构,子类可以继承父类的特性和方法(继承性)⑸对象之间只能通过传递消息构成相互之间的联系(消息机制)OO方法是基于“对象、类、封装、继承、消息机制、多态等技术特征”的构造软件系统的开发方法。面向对象分析OOA用对象的属性和方法(操作)分别描述事物的静态特征和行为问题域中有哪些事物,就在OOA模型中创建哪些对象对象属性和方法(操作)的命名尽量与客观实体一致把具有相同属性和相同服务的对象归结为类用一般-特殊结构(分类结构)描述一般类与特殊类之间的关系(继承关系)用整体-部分结构(组装结构)描述实体间的组成关系用实例连接和消息连接表示实体之间的静态联系和动态联系面向对象设计OODOOD包括两方面的工作:①把OOA模型直接搬到OOD中来,作为OOD的一个部分②针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的内容,这些内容与OA采用相同的表示法和模型结构在分析和设计阶段采用一致的表示法是OO方法与传统方法重要的区别之一。这使得从OOA到OOD不存在转换,只需进行局部的修改或调整,并增加几个与实现有关的独立部分即可。可以自然地实现无缝衔接,从而大大降低了从OOA过渡到OOD的难度、工作量和出错率。面向对象编程OOP在“OOA→OOD→OOP”的设计模式中,OOP的分工相对简单多了;认识问题域与设计系统元素的工作在OOA和OOD阶段已经完成,OOP的工作就是用一种OO程序设计语言把OOD模型中的每个元素描述出来而已。面向对象测试OOTOOT的主要特点是:利用对象的封装性。测试以类为基本单位进行。测试只需针对类定义范围内的属性和服务、以及有限的对外接口所涉及到的部分即可。利用对象的继承性。若父类已被测试或父类是可重用构件,则对子类的测试重点只是那些新定义的属性和服务。对于用OOA、OOD和OOP实现的软件,OOT通过捕捉OOA、OOD模型信息,检查程序与模型不匹配的错误,可以极大地提高测试效率。这一点是传统程序设计方法是无法达到的。面向对象的软件维护OO方法为改进软件维护提供了有效的途径。主要表现在:因为OO方法在各个阶段表示的一致性,使得实现的程序与问题域是一致的,便于理解和阅读,也为纠错和功能扩充提供了便利。系统维护过程中的老大难问题是系统功能的变化并由此产生的影响。在OO方法中,由于对象的封装性,使一个对象的修改对其它对象的影响很小,从而可以减少错误传播所产生的“波动效应”,使得用OO方法开发的软件易维护。OO方法的主要优点⑴与人类习惯的思维方式一致
OO方法顺应人认识过程的这个规律,从寻找要求解的对象“是什么?”开始,认识事物及其本质规律,主观随意性受到限制。⑵稳定性好传统方法以“过程为中心”,以功能分解为基本方法。当功能需求发生变化时,将引起对软件整体结构的修改,导致系统不稳定。OO方法以“对象为中心”,采用对象技术。不管需求如何变化,其内在规律不变,不会引起软件结构的整体变化,所以系统的稳定性影响不大。⑶可重用性好⑷可维护性好软件工程模型1瀑布模型2原型模型3增量模型4螺旋模型5基于知识的模型6面向对象模型瀑布模型瀑布模型是上个世纪80年代广泛应用的一种模型,至今仍然是最广泛使用的过程模型之一。在应用程的应用模式也称为软件生存周期模式(B.W.Boehm提出的该模型)。瀑布模型示意图
需求分析7%系统设计6%软件编程7%软件测试13%软件维护67%用户要求分析报告系统设计报告源程序测试报告更改要求UAMATMMPUTPUAMPA系统分析员M项目管理员P程序员T高级程序员U
用户瀑布模型的特点瀑布模型具有顺序性和依赖性,即后一阶段工作必须在前一阶段工作完成后才能开始。推迟实现的观点;把逻辑设计与物理设计清楚地划分开,尽可能推迟物理模型的实现,这是瀑布模型的重要指导思想。质量保证的观点。瀑布模型强调的是优质,即每一步都循序渐进,及早消除隐患,从而保证软件质量。致命缺点是只有做出精确的需求分析,才能取得预期的结果。由于各种客观、主观的原因,需求分析往往不很精确,常常给日后的开发带来隐患。快速原型模型原型模型的主要思想:
先借用已有系统作为原型模型,通过“样品”不断改进,使得最后的产品就是用户所需要的。原形模型的特点:⑴开发人员和用户在“原型”上达成一致。这样可以减少设计中的错误和开发中的风险,以及对用户培训的时间,而提高了系统的实用、正确性以及用户的满意程度。⑵缩短开发周期,加快工程进度。⑶降低成本。原型模型的缺点:当告诉用户,还必须重新生产该产品时,用户是很难接受的。这往往给工程继续开展带来不利因素。快速原型模型
分析原型样品模型设计编程测试使用修改与改进在系统分析与设计中,采用交互式,反复修改与不断改进的方式进行。还有的把原型模式嵌套在瀑布模型中运用。增量模型也称渐增模型。它把软件产品作为一系列的增量构件来设计、编码、集成和测试。增量模型是一种非整体开发的模型。软件在该模型中是“逐渐”开发出来的,开发出一部分,向用户展示一部分,让用户及早看到部分软件,及早发现问题。或者先开发一个“原型”软件,完成部分主要功能,展示给用户征求意见,然后逐步完善,最终后的满意的软件产品。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。缺点:要求软件具有开放的结构是这种模型固有的困难。螺旋模型将工程划分为4个主要活动:制定计划、风险分析、实现工程和用户评价。4个活动螺旋式地重复执行,直到最终得到用户认可的产品。制定计划:确定软件目标,选定实施方案,弄清项目开发限制条件。风险分析:分析可选方案,分析识别风险,研究解决化解风险的办法。实现工程:实施软件产品的开发。用户评价:对当前工作结果进行评价,提出改进产品的建议。螺旋模型的缺点:很难让用户确信这种演化方法的结果是可以控制的。螺旋模型的缺陷建立在风险分析的基础上需要有一个非常有经验的小组来准确地分析和检测风险绝对依赖人的素质(本身就是冒险!)不适合新手开发中的每一层都很有弹性,并不是很明确的界限每一层的目标和计划都是由小组本身来制定。要求有经验的人来组成。智能模型也称基于知识的软件开发模型,它与专家系统结合在一起。该模型在实施过程中要建立知识库,将模型本身、软件工程知识与特定领域的知识分别存入数据库。以软件工程知识为基础的生成规则构成的专家系统与含应用领域知识规则的其他专家系统相结合,构成这一应用领域的软件开发系统。面向对象的开发模型其主导思想是:在整个软件开发过程中将面向对象技术贯穿于整个生存周期。当然,还要结合传统开发模式中好的、已被无数成功开发活动证明是可行的经验和技术。具备3个主要的阶段:分析:模拟
“关键系统”来表示用户要求,并设计独立实现的“关键类”。设计:限制并优化关键类,在特定的环境中实现,得到另外的类。实现:
定义类的接口和实现方法,然后编写并统一测试所有的类。面向对象开发的缺陷还不成熟几个有影响的面向对象开发的过程对不同的步骤意见不一。在大的项目上经验不多,在小项目上尚可。在每个过程步上细节少,新手难于理解。晚期的测试开发过程没有中间的版本,几乎所有的测试都留在最后的实现阶段。结构上的死板假设所有的结构设计都定义好在要求阶段,对于设计和实现阶段基本上没有结构上变化的余地。.
软件开发技术构件技术软件复用技术C/S技术B/S技术构件技术构件技术是基于OO技术上的更高级的抽象。它把底层的对象集合打成包,组成功能“插件”。基于构件技术的软件生产就是把已存在的构件组装(集成)到当前软件系统的框架结构中,从而生产出新的软件产品。OO技术是在“数据十算法”的基础上提升了对事物的认识方法。而构件技术则在“对象+算法”的基础上将认识事物的角度从对象个体本身提升到个体在群体中的作用。这个认识的提高具有本质的不同。从抽象程度来看,OO技术已达到了类级重用(代码重用),它以类为封装的单位。而构件是对一组类的组合进行封装,可以将底层的多个逻辑组合成高层次上的粒度更大的新构件,甚至直接封装到一个系统,使模块的重用从代码级、对象级、架构级到系统级都可能实现。构件的属性构件是可独立配置的单元,因此构件必须自包容。构件强调与环境和其他构件的分离,因此构件的实现是严格封装的,外界没机会或没必要知道构件内部的实现细节。构件可以在适当的环境中被复合使用,因此构件需要提供清楚的接口规范,可以与环境交互。可以看出,构件沿袭了对象的封装特性,但同时并不局限于一个对象,其内部可以封装一个或多个类、原型对象甚至过程,结构是灵活的。中间件构件是依赖于平台环境的。那么在分布式异构环境中如何应用构件呢?中间件就是基于跨环境的构件应用而发展起来的。中间件是介于应用层和网络层之间的一个功能层次,是使应用系统独立于由异构操作环境(操作系统、硬件平台及通信协议等)组成的开发环境。中间件扩展了客户/服务器结构,形成了一个包括客户、中间件和服务器在内的三层次结构及多层次结构,为开发可靠的、可扩展的、复杂的事物密集型应用提供了有力的支持。软件复用技术软件复用是指在软件开发过程中重复使用相同或相似软件元素的过程。软件复用是在软件开发中避免重复劳动的解决方案,它使得应用系统的开发不再采用一切从零开始的模式,而是以已有的工作模式为基础,充分利用过去应用系统开发中积累的知识和经验,从而将开发的重点集中于应用的特有构成成分。为了能够在软件开发过程中重用已有的复用件,必须不断地进行复用件的积累,并将它们组织成复用件库。因此,软件复用不仅要解决如何检索所需的复用件,还要解决如何选取复用件、如何组织复用件库等问题。这类项目通常称为软件复用项目。软件重用过程可借助于支持软件重用的CASE工具,其主要任务是:用某种组织结构实现复用件库的存储,提供友好的人机界面,帮助用户浏览、检索和修改复用件库,并且对用户感兴趣的复用件进行解释。软件复用方式分类⑴依据复用的对象分类;可以分为:产品复用指复用已有的软件构件,通过构件集成得到新系统。产品复用是目前现实的、主流的途径。过程复用指复用已有的软件开发过程,过程复用依赖于软件自动化技术的发展。⑵依据对可复用信息进行复用的方式分类,可分为:白盒复用指已有构件并不能完全符合用户要求,需要根据用户需求进行适应性修改后才能使用。黑盒复用指对已有构件不需作任何修改,通过构件组装的方式直接进行复用。这是目前的研究热点,也是将来的发展趋势。技术方面的问题采用软件复用可以降低开发成本,但如果其原件存在的某些问题代码,可能会导致其他采用该代码的系统具有相同的问题代码;这种情况称之为继承性缺陷。因此当原件的问题代码被修改后,往往无法自动更新实用软件中相应的代码;最终导致实用软件中的问题代码依旧存在。这种非但没有降低开发成本,反而增加维护消耗的复用技术显然是失败的。C/S技术客户机/服务器系统也称C/S(Client/Server)系统,它是基于局域网/广域网的系统。在C/S中存在着服务器和客户端。为了充分利用客户机的计算能力,计算和事务处理在服务器和客户机之间分配。服务器承担数据的集中管理、通信和客户管理的任务,因为数据在服务器端,对数据的处理和计算都在服务器端执行。而人机界面和一些需要实时响应的事件或人机交互的处理等在客户端进行,这些程序都运行在客户端。C/S系统往往需要数据库服务器。C/S系统体系结构特征计算和处理分布在服务器和客户机之间。数据管理集中在服务器端。软件驻留在服务器和客户机。C/S应用系统的特征分布数据。出于安全性和负载平衡的考虑,数据库可以分布在多个数据库服务器上。分布过程。不同的过程(事务处理、数据库连接等)可以在不同服务器上进行。客户为中心。把需要在客户端执行的程序和定制的程序放在客户端,以使客户快速得到响应。把对数据进行处理的过程放在数据库服务器端,以加快数据处理速度。异构硬件和软件。在C/S体系结构中很容易加入多层结构,屏蔽不同的硬件和软件。例如,加入应用服务器可以基于不同的操作系统和计算机主机,同样客户端安装的中间件可以基于不同的客户端系统,例如,Linux,Windows。C/S系统构成C/S结构发展经历了两个阶段:两层结构和三(多)层结构两层结构C/S系统第一层是客户端软件,由应用程序和相应的数据库链接程序组成,企业的业务过程都在程序中表现。第二层包括数据库服务器,根据客户端软件的请求进行数据库操作,然后将结果传送给客户端软件。两层应用软件的开发工作主要集中在客户端,客户端软件不但要完成用户界面和数据显示的工作,还要完成一部分对商业和应用逻辑的处理工作。两层结构的C/S系统仅能在各自的客户机和数据库服务器之间使用,分割了界面和数据,使得客户机要管理复杂的软件,导致“肥胖”客户机的产生。两层C/S系统不能进行有效的扩展,使这些系统不能支持大量用户的访问和高容量事务处理的应用。三(多)层结构C/S系统客户机上只安装具有用户界面和简单的数据处理功能的应用程序,负责处理与用户的交互和与应用服务器的交互。而将商业和应用逻辑的处理功能移到中间层——应用服务器上。应用服务器负责处理商业和应用逻辑,接受客户端应用程序的请求,然后根据商业和应用逻辑将这个请求转化为数据库请求后与数据库服务器交互,并将与数据库服务器交互的结果传送给客户端应用程序。数据库服务器软件根据应用服务器发送的请求进行数据库操作,并将操作的结果传送给应用服务器。三层C/S结构优点整个系统被分成不同的逻辑块,层次清晰,一层的改动不会影响其他层次;能够使“肥胖”的客户机变“瘦”;开发和管理工作向服务器端转移,使得分布的数据处理成为可能;管理和维护变得相对简单。C/S结构的局限性第一,C/S结构的计算能力过于分散,网络中服务器和客户机的数目正发生“细胞”分裂,使得系统的管理费用以几何级数的方式增长。第二,C/S结构中数据库信息的使用只限于局域网的范围内,无法利用Internet的网络资源。第三,在C/S结构中,无论多小的企业都必须安装自己的服务器,而服务器和服务器软件的管理和维护都是非常复杂的工作,需要专门人员负责,小企业往往无力购买高性能的服务器和聘用专门人员。因此,C/S结构不利于小企业计算机应用的发展。B/S技术浏览器/服务器系统也称B/S(Browser/Server)系统,它也是基于局域网/广域网的系统。它的客户端是标准的浏览器(如IE等),服务器端为标准的Web服务器,可协同应用服务器响应浏览器的请求。B/S是一种三层结构的系统:第一层客户机是用户与整个系统的接口。客户应用程序就是一个通用的浏览器。第二层是Web服务器,它负责启动相应的进程来响应处理请求,并动态生成一串嵌入了处理结果的HTML代码,并返回给客户端的浏览器。如果客户机提交的请求包括数据的存取,Web服务器还需与DB服务器协同完成这一处理工作。第三层数据库服务器的任务类似于C/S模式,负责协调不同的Web服务器发出的SQL请求,管理数据库。B/S系统的特点⑴B/S系统采用B/W/D结构。即客户端只安装一个浏览器(Browser)。中间层是Web服务器。再根据需要安装小支持库,如Java或VB的DDL以处理特殊应用。⑵B/S结构简化了客户端。客户机上只需安装通用的浏览器软件。节省客户机的硬盘空间与内存.⑶简化了系的开发和维护。系统的开发者只需把所有的功能都实现在Web服务器上,并就不同的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铜仁地区万山特区2025年三年级数学第二学期期末质量跟踪监视模拟试题含解析
- 浙江省台州市玉环市2024-2025学年初三第一次诊断性生物试题含解析
- 山东省济南市历下区达标名校2025届初三第一次诊断性测试化学试题文试题含解析
- 合同登记办事指南
- 吉林省通化一中2024-2025学年高三下学期期中质量评估英语试题含解析
- 江苏省苏州市胥江实验中学2024-2025学年中考模拟(7)语文试题含解析
- 山东省无棣县2024-2025学年初三3月总复习质检(一模)语文试题含解析
- 云南省江川二中2025届高考模拟金典卷物理试题(七)试题含解析
- 借款合同【含担保条款】
- 蜜蜂租赁服务合同模板
- 传承红色基因-汇聚强军力量课件-高中主题班会
- 油茶的加工厂可行性方案
- 《传播学教程》教案x
- 皮肤科护士的实践经验与案例分享
- 代煎中药管理制度
- 转氨酶升高患者护理查房
- 《高中信息技术课分层教学的探索与研究》课题研究开题报告结题报告
- 财产险水灾现场勘查及理赔定损标准
- JB-T 2302-2022 双筒网式过滤器 型式、参数与尺寸
- 船舶带缆知识学习
- 导线悬垂合成绝缘子串绝缘子、金具机械强度计算
评论
0/150
提交评论