您好,欢迎访问三七文档
2019/8/91课名:软件工程2019/8/92第一章软件工程概述2019/8/93§1.1软件工程的背景和历史1968年由NATO(北大西洋公约组织)在德国Garmish召开的学术会议上,FeitzBauer首先提出了“软件工程”概念。2019/8/94软件工程与编程前者是一门学科,一种科学理论来指导软件系统开发,标准化,自动化的过程考虑如何分解一个系统,以便各人分工开发;考虑如何说明每个部分的规格要求;怎样才能易于维护单纯的代码编写是软件工程发展的前身是软件工程中占据很少时间和空间的一部分2019/8/95计算机学科的发展计算机科学(CS)计算机科学(CS)计算机工程(CE)软件工程(SE)信息系统(IS)计算学科(computingdiscipline)2019/8/9660年代以来工厂管理病人监护工资统发图书馆管理机票预定学籍管理早期第二阶段第三阶段第四阶段面向批处理多用户分布式系统强大的桌面系统有限的分布实时嵌入“智能”面向对象技术自定义软件数据库低成本硬件专家系统软件产品消费者的影响人工神经网络并行计算网络计算机195019601970198019902000Evolutionofsoftware#2019/8/98为什么发展如此之快不准确的时间和金钱的估算软件质量的低下相对硬件产品开发软件开发费用的增加维护、增强软件系统的必要性硬件价格大幅度下降2019/8/99软件技术面临的问题•规模•复杂性•生产率Windows95有1000万行代码Windows2000有5000万行代码例:Exchange2000和Windows2000开发人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人2019/8/911《人月神话》焦油坑史前史中,没有别的场景比巨兽在焦油坑中垂死挣扎的场面更令人震撼。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈,焦油纠缠得越紧,没有任何猛兽足够强壮或具有足够的技巧,能够挣脱束缚,它们最后都沉到了坑底。2019/8/912软件危机的主要特征软件开发周期大大超过规定日期;软件开发成本严重超标;软件质量难于保证。2019/8/913软件工程的定义FritzBauer在NATO会议上给出的定义:“软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。”2019/8/914软件工程的定义(2)IEEE【IEE83】给出的软件工程定义:“软件工程是开发、运行、维护和修复软件的系统方法。”2019/8/915软件工程的定义(3)IEEE【IEE93】给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”软件工程是一门交叉学科软件工程的主要研究内容软件开发技术:软件开发方法学软件开发过程软件工具和软件工程环境软件工程管理:软件管理学软件经济学软件心理学软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解。应用发展的眼光看待它。2019/8/917软件工程—一种层次化技术工具方法过程质量焦点Softwareengineeringlayers软件工程三个要素:方法、工具、过程2019/8/918软件工程与一般工程的差异软件是逻辑产品而不是实物产品软件的功能依赖于硬件和软件的运行环境以及人们对它的操作软件设计的复杂性软件特征:功能的多样性实现的多样性能见度低软件结构合理性差智力密集及知识产权保护2019/8/919软件工程知识结构2001年5月ISO/IECJTC1(ISO和IEC的第一联合技术委员会)发布了《SWEBOK指南V0.95(试用版)》SWEBOK把软件工程学科的主体知识分为10个知识领域。2019/8/920软件工程知识结构软件需求软件设计软件构造软件测试软件维护软件配置管理软件工程管理软件工程过程软件工程工具和方法软件质量2019/8/921“软件工程”课程与其它软件专业课的区别(1)立足于系统的整体。(2)讲授系统分析、系统设计、测试及维护的理论和方法。(3)构筑一个软件系统,实践软件开发全过程。2019/8/922“软件工程”课程教学的目标转变对软件的认识:上升程序系统转变思维定式:上升程序员系统工程师(系统分析员)2019/8/923软件产品的标准化软件开发过程的标准化2019/8/924软件的工业化生产过程应具备的特点:明确的工作步骤详细具体的规范化文档明确的质量评价标准“一个好的工业,应有一套良好的标准来配套”2019/8/925软件工程技术的两个特点强调规范化强调文档化2019/8/926§1.2软件和软件生命期模型(SoftwareLifeCycle)软件产品或软件系统从设计、投入使用到被淘汰的全过程。2019/8/927软件生存期的阶段划分(1)可行性研究与计划(2)需求分析(3)总体设计(4)详细设计(5)实现(6)集成测试(7)确认测试(8)使用和维护成长期(开发期)怀孕期(计划期)成年期(运行期)2019/8/928新的国际标准定义的软件生存过程(1995ISO/IEC12207)软件生存期过程支持过程组织过程主要过程获取过程供应过程开发过程运行过程维护过程文档编制过程配置管理过程质量保证过程验证过程确认过程联合评审过程审核过程问题解决过程管理过程基础设施过程改进过程培训过程2019/8/929软件工作的范围只考虑编写程序涉及整个软件生存周期扩展到2019/8/930软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型也常称为:软件过程模型软件生存周期模型软件工程范型软件开发模型可行性研究与计划需求分析设计编码运行维护测试定义阶段开发阶段维护阶段瀑布模型(WaterfallModel)2019/8/932开发软件不仅仅是编程开发维护设计编写模块测试联合测试分析2019/8/933按照传统瀑布模型开发软件的特点1.阶段间具有顺序性和依赖性。2.推迟实现的观点。3.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。2019/8/934原型模型(快速原型模型)原型范型用户测试运行原型建造/修改原型听取用户意见采用原型模型的软件生存周期分析定义系统需求生成原型系统设计程序设计编码测试运行和维护原型化含原型化的软件生存期2019/8/936§1.3软件质量的评价成功的标准:用户在用用户可很容易做完要做的事失败的根本原因:开发人员写出的东西达不到用户要求(人的问题.技术问题)2019/8/937质量与生产率质量是软件需求方最关心的问题,用户即使不图物美价廉,也要求个货真价实质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提质量与生产率的提高就指望程序员与程序经理非得在质量与生产率之间分个主次不可,那么应该是质量第一,生产率第二2019/8/938质量与生产率(2)质量直接体现在软件的每段程序中,高质量自然是开发人员的技术追求,也是职业道德的要求高质量对所有的用户都有价值,而高生产率只对开发方有意义如果一开始就追求高生产率,容易使人急功近利,留下隐患2019/8/939不贪污的官就是好官吗“运行正确”的程序就是高质量的程序吗?也许运行速度很低并且浪费内存;也许代码写得一塌糊涂2019/8/940软件的质量因素软件的质量因素很多,如正确性、精确性、可靠性、容错性、性能、效率、易用性、可理解性、简洁性、可复用性、可扩充性、兼容性等等(还可以列出十几个)一般说来倾向于可维护性、可靠性、可理解性和效率2019/8/941软件质量因素分类和武学分类正确性与精确性易用性可理解性与简洁性性能与效率可复用性与可扩充性少林派、武当派华山派昆仑派峨嵋派崆峒派2019/8/942正确性与精确性机器不会主动欺骗人,软件运行不正确或者不精确一般都是人造成的需求分析错了,那么对客户而言这个软件也存在错误如果软件没有100%地按需求规格执行,那么这个软件也存在错误程序员要为“正确”、“精确”四个字竭尽全力2019/8/943性能与效率用户都希望软件的运行速度高些(高性能),并且占用资源少些(高效率)旧社会地主就是这么对待长工的:干活要快点,吃得要少点通过优化算法、数据结构和代码组织来提高软件系统的性能与效率优化的关键工作是找出限制性能与效率的“瓶颈”2019/8/944易用性导致软件易用性差的根本原因是开发人员犯了“错位”的毛病:他以为只要自己用起来方便,用户也一定会满意当用户真的感到软件很好用时,一股温暖的感觉油然而生,于是就用“友好”来评价易用性2019/8/945可理解性与简洁性(Note1)开发人员只有在自己思路清晰时才可能写出让别人能理解的程序编程时还要注意不可滥用技巧,应该用自然的方式编程简洁是一种美如果把学术文章写得很简洁,让人很容易理解,它往往中不了2019/8/946可复用性与可扩充性一种方式是原封不动地使用现成的软件构件一种方式是对现成的软构件进行必要的扩充后再使用可复用性好的程序一般也具有良好的可扩充性2019/8/947可行性研究与计划需求分析设计编码运行维护测试测试已经开始返回上级,再…..瀑布模型的质量保障体系2019/8/948小结(Note2)软件的高质量主要是设计出来的不是“管”出来的更不能依赖质量检查。2019/8/949第二章可行性研究与计划2019/8/950系统流程图(Note3)输入单据磁盘文件处理输出单据2019/8/951数据流程图数据源点和终点变换数据的加工文件数据逻辑关系符号:与、或、异或2019/8/952§2.1可行性研究基本概念可行性研究的任务:可行性研究的主要任务是“了解客户的要求及现实环境,从技术、经济和社会因素等三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。”2019/8/953可行性研究的内容(1)技术可行性(2)经济可行性(3)操作可行性(4)社会可行性(法律可行性)(5)抉择2019/8/954技术可行性(Note4)度量一个特定技术信息系统解决方案的实用性及技术资源的可用性考虑的问题开发风险分析资源分析相关技术的发展(现有技术能否实现新系统,技术难点、建议采用技术的先进性)2019/8/955经济可行性度量系统解决方案的性能价格比考虑的问题成本/效益分析有形成本、效益无形成本、效益价值和成本的关系质量与价值、成本的关系价值/成本的均衡2019/8/956经济可行性考虑的问题(Note5)成本和效益的估算•开发成本的估算•开发效益的估算•运行成本的估算•运行效益的估算2019/8/957成本分析代码行技术(page19)任务估算技术(page20)总成本、总人力相对误差在内Putnam估算模型(page21)COCOMO模型比较复杂20%2019/8/958效益分析系统的经济效益=使用新系统增加收入+使用心系统可以节省的运行费用总的效益和软件生存周期有关货币的时间价值(page23)投资回收期(page23)投资回收率(page23)纯收入(page23)投资回收率2019/8/959系统开发和每年运行费用举例1.系统开发费用(一次).2名系统分析员(450小时/名,45美元/小时)$40,500.5名系统开发人员(275小时/名,36美元/小时)$49,500.1名数据库管理员(30小时/名,42美元/小时)$1,260.2名技术写作者(120小时/名,25美元/小时)$6,000.1名秘书(160小时/名,15美元/小时)$2,4002019/8/960系统开发和每年运行费用举例.1名数据通讯专家(60小时/名,42美元
本文标题:软件工程(2)
链接地址:https://www.777doc.com/doc-212959 .html