需求分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章软件系统开发概述李忠伟lizhongwei@nankai.edu.cn南开大学软件学院软件的基本概念软件行业的发展趋势软件开发的基本概念什么是软件软件:是一系列按照特定顺序组织的计算机数据和指令的集合。软件并不只是包括可以在计算机上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体。程序设计的最终结果是软件。软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件的分类系统软件(操作系统、系统管理、数据库中间件、安全软件)软件开发工具(编程开发工具、专业软件)应用软件(办公、行业软件、跨行业、消费类)软件服务(外包软件开发、软件方案定制)软件行业的特点跨行业的程度广且深吸纳高素质人才多产业发展快(朝阳产业)市场份额2000年全球软件市场收入结构软件服务51%系统软件12%软件开发工具12%跨行业应用软件10.4%(ERP52%)行业应用软件10%消费类软件2%安全软件2%办公类软件0.5%中国软件产业《中共中央关于制定国民经济和社会发展第十个五年计划的建议》2000年信息化是当今世界经济和社会发展的大趋势,也是我国产业优化升级和实现工业化、现代化的关键环节。要把推进国民经济和社会信息化放在优先位置。大力推进国民经济和社会信息化,是覆盖现代化建设全局的战略举措。以信息化带动工业化,发挥后发优势,实现社会生产力的跨越式发展。2000年国务院18号文《鼓励软件产业和集成电路产业发展若干政策的通知》对软件产品增值税实施“即征即退”(至2010年)数据来源:信息产业部2002-2007软件产业规模经济危机环境中的中国软件业收入2009年1月-7月的软件业收入比较1.产业发展保持平稳总势经济危机环境中的中国软件业收入2009年1月-7月的软件业收入比较2.软件技术服务增长突出经济危机环境中的中国软件业收入2009年1月-7月的软件业收入比较3.西部地区增势明显经济危机环境中的中国软件业收入2009年1月-7月的软件业收入比较4.出口和外包服务保持较快增长预测:2010年中国软件市场收入研究机构Gartner预测2010年中国软件市场的收入将首次超过60亿美元。中国是亚太地区最大的软件市场,这一市场预计将占该地区2010年总收入的27%,相当于全球软件市场总份额的2.7%。中国市场中软件消费排名靠前的四大垂直行业是制造业、金融服务业、通信业和政府。这些行业占中国软件总消费的60%。预测:2010年中国软件市场收入软件厂商在中国具有强劲的增长潜力,但也面临在发展中商业环境运营的实际挑战。由于劳动力的成本较低,企业用户传统上更偏爱利用自己的劳动力开发应用程序,但这种趋势导致了落伍的、迅速过时的软件,并制约了中国企业的可持续性和企业IT的连续性。现阶段,中国软件市场的增长将主要由用标准化系统替换不成熟的基础设施来进行推动,因此大型软件厂商将从中受益。什么是软件开发软件开发:是根据客户要求建造出软件系统或者系统中的软件部分的过程。目的:以软件为载体实现客户的目的(流程整合/规范、信息/数据的快速整合→赚钱、提供更好的服务)按标准化程度分:标准化软件(OS,办公套件,开发工具)半标准化(ERP、金融方面纵向应用方案)软件服务(方案咨询)理想中的软件开发从客户角度来看软件系统的实施能够提升客户公司的生产力(生产/管理/效率/规范)软件公司能够准确领会我的意图(需求)软件公司有实力按时按质完成任务以我为主,软件公司要适应我的进步和变化从软件公司来看开发目标明确(前瞻+适应变化)各团队分工明确、发挥各自所长(内部的有效管理)人员良性流动与公司稳定开源节流利益相关者(Stakeholder)利益相关者:在软件项目中存在利害关系的人。即任何受到系统影响或对系统开发产生影响的人,都是利益相关者。客户(决策者、管理者、使用者)开发者(系统分析员/顾问、架构设计师、开发工程师、测试工程师)软件开发出的成果物必须为利益相关者提供切实的好处,否则它将会失败存在的问题IBM大型机之父FredBrooks(1987)在其“Nosilverbullet:EssenceandAccidentsofSoftwareEngineering”阐述了软件工程的本质问题(essence)和其他意外事件(accident)。本质问题(essence):软件本身在分析与设计上存在先天困难,即如何从抽象性问题发展出具体概念上的解决方案。(工艺或艺术)实现时碰到的意外事件(accident):将概念上的构思施行于计算机上遇到的困难造成本质性困难的原因-1本质性困难最难以解决,因为大部分活动是发生在人们的意识里,缺乏有效的辅助工具。复杂性:软件系统所要解决的问题涉及很多的实体、关系、流程,这些问题的解决需要人的抽象化的智能活动不可见性:在完成开发前,软件是不可见的,即使使用图示说明,仍无法充分呈现完整结构和重点细节,使得人们在沟通上面临极大困难造成本质性困难的原因-2本质性困难最难以解决,因为大部分活动是发生在人们的意识里,缺乏有效的辅助工具。协同性:在软件系统中,各子系统、模块的接口必须协同一致。由于时间和环境的演变,维持一致性十分困难变异性:软件所应用的环境常是由人群、法规、硬件设备、应用领域等,各因素所汇集而成,而这些因素皆会快速变化。造成本质性困难的原因-3软件系统是社会系统,是社会活动(生产/管理/社交)的抽象、深入和延续软件系统的开发就是刻画社会系统的过程,开发的软件系统如果不能融入现有社会系统中,它的生命就终结了。造成本质性困难的原因-4客户端客户需求被误解、或未被完全捕获;客户的需求改变的过于频繁;客户没有准备为项目提供足够的资源;客户不想与开发者合作;客户怀有不切实际的期望;系统不再对客户有利;结论随着软件复杂性的增加,人们意识到,开发者是最重要的“伟大的设计来源于伟大的设计者”软件系统生命周期需求分析(双方调研)系统设计代码开发测试(代码/模块/系统/用户体验)实施修改消亡软件开发的模型软件开发模型是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。软件开发的模型—边做边改顾名思义,在软件开发时没有规格说明,没有系统分析设计,软件的修改随着客户的需要而进行。开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。绝对“作坊式”的软件开发方式。软件开发的模型—边做边改缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;忽略需求环节,给软件开发带来很大的风险;没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。软件开发的模型—瀑布模型1970年温斯顿·罗伊斯提出了著名的“瀑布模型”。瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。强调文档的作用,并要求每个阶段都要仔细验证。软件开发的模型—瀑布模型软件开发的模型—瀑布模型各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。软件开发的模型—快速原型模型建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么。克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。关键在于迅速建立原型,随之按客户需求迅速修改原型,所以原型系统的内部结构并不重要。软件开发的模型—快速原型模型软件开发的模型—增量模型软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品。客户可以不断地看到所开发的软件,从而降低开发风险。软件开发的模型—增量模型由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。软件开发的模型—螺旋模型1988年,巴利·玻姆正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。软件开发的模型—螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用。强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的。如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。软件开发的模型—演化模型针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。软件开发的模型—演化模型可以看作是重复执行的多个“瀑布模型”:在开发模式上采取分批循环开发的办法,每循环开发一部分的功能使之成为这个产品的原型的新增功能,从而不断地演化出新的系统。要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。软件开发的模型—混合模型也叫做过程开发模型,或元模型。把几种不同模型组合成一种模型,允许一个项目能沿着最有效的路径发展。实现时的意外事件主要指根据设计进行开发、测试、部署、性能调优等过程中碰到的技术或管理问题。一般来说,这些问题是可以解决的,可以随着技术、开发平台、管理方法的改进逐步得到解决或改善。更好的语言/开发工具/测试工具规范的开发流程严格、够用的质量保证等实现时的意外事件-解决方法利益相关者之间的有效沟通软件过程管理软件建模软件过程管理一个过程管理模型包括声明所执行活动及其执行顺序详细说明各活动的成果物及交付时间为执行活动的开发者提供资源和支持提供开发进度控制、成果评估和规划未来的标准软件过程管理模型能力成熟度模型CMMRational统一过程模型RUP微软解决方案框架模型MSFISO9000系列质量标准软件需求建模对于软件建模必须进行沟通(使用语言)和文档化(使用工具)最好能在不同抽象层面上构建模型在不同细节层面上来表现解决方案可视化说明性:说明需要做“什么”,而不是需要“如何”去做软件系统开发的简单过程确定问题;————系统启动分析和理解问题;————系统分析确定方案需求和预期;确定替代方案,选择“最佳”方案;—系统设

1 / 48
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功