




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章软件工程基础知识1.1软件的定义1.2软件工程1.3软件生命周期第一章软件工程基础知识1.1软件的定义FAQ(关于软件工程)什么是软件?好的软件有那些特点?什么是软件工程?什么是软件过程?什么是软件过程模型?什么是软件工程方法?什么是CASE(ComputerAidedSoftwareEngineering)?软件工程和系统工程有什么区别?软件工程面临的关键挑战是什么?FAQ(关于软件工程)什么是软件?1.1软件的定义什么是软件软件的特点软件发展史软件危机1.1软件的定义什么是软件什么是软件?(1/2)
书本上的定义–Softwareisasetofitemsorobjectsthatformsa“configuration”thatincludesprograms,documents,data,……IEEE的定义–Softwareiscomputerprograms,procedures,andpossiblyassociateddocumentationanddatapertainingtotheoperationofacomputersystem.什么是软件?(1/2)书本上的定义可执行部分不可执行部分数据文档1文档2什么是软件?(2/2)与计算机系统操作有关的程序和数据以及任何与之相关的文档的集合。程序可执行部分不可执行部分数据文档1文档2什么是软件?(2/2什么是程序(1/2)程序:由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列程序例子Main(){inti,j;
//变量定义
charStr[10];i=i+j;//语句说明
……}什么是程序(1/2)程序:由程序设计语言所描述的、能为计算什么是程序(2/2)程序设计语言具有良好、严格语法和语义目前程序设计语言主要有以下几种类型面向机器:如汇编语言、机器语言等面向过程:如Fortran,Pascal,C等等面向对象:如Java等等面向问题:如结构化查询语言SQL等等什么是程序(2/2)程序设计语言具有良好、严格语法和语义什么是文档文档:记录软件开发活动和阶段性成果、理解软件所必需的阐述性资料需求分析文档软件设计文挡等编写文档目的促进对软件的开发,管理和维护;便于各种人员(用户,开发人员)的交流什么是文档文档:记录软件开发活动和阶段性成果、理解软件所必软件特点不会老化逻辑产品(智力,无形)维护困难和复杂(完善,纠错,…...)生产只需复制软件开发性质如成本、进度等难以估计软件的开发更加依赖于开发人员的业务素质、智力、人员的合作、组织和管理好的软件有哪些特点?软件特点不会老化好的软件有哪些特点?软件发展史软件发展史软件危机软件需求的增长得不到满足;软件开发的成本和进度无法控制;软件质量难以保证;软件不可维护或维护成度非常低;软件成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。
为了消除软件危机,形成了软件工程的概念,开辟了工程学的新兴领域——软件工程学。软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。软件危机软件需求的增长得不到满足;为了消除软件危机,形成了软1.2软件工程1.2.1软件开发活动1.2.2软件工程1.2.3软件工程的知识域1.2软件工程1.2.1软件开发活动1.2.1软件开发活动1.2.1软件开发活动软件工程基础知识论述软件开发活动的主要内容问题用户需求需求分析规格说明,可行性报告,初步用户手册
设计结构设计,各模块的详细设计说明,测试计划构造各模块代码和单元测试报告,测试设计测试各种测试报告维护发布计划、培训计划及教材、维护档案等需求分析软件设计软件构造软件维护软件测试软件开发费用的比例软件开发活动的主要内容问题用户需求需求分析规格说明,可行性报1需求分析需求规格说明(specification)初步用户手册项目开发计划可行性(风险)分析需求分析用户的需要(needs)对软件的需求(requirements)使用计算机术语,比较严格的语言全面理解准确表达使用用户的语言(行业内的术语)功能要求性能要求环境要求可靠性要求安全性要求用户界面需求资源使用需求软件成本消耗开发进度需求等1需求分析需求规格说明(specification)需求软件需求说明书的内容Ⅰ.引言A.背景B.定义C.参考资料Ⅱ.任务概述A.目标B.用户的特点C.假定和约束Ⅲ.需求规定
A.对功能的规定
B.对性能的规定(ⅰ精度ⅱ时间特性要求ⅲ灵活性)C.输入输出要求
D.数据管理能力要求
E.故障处理要求
F.其它专门要求Ⅳ.运行环境规定A.设备B.支撑软件C.接口D.控制软件需求说明书的内容Ⅰ.引言A.背景B.2软件设计软件模块划分算法设计数据结构设计用户界面设计软件设计需求规格说明(specification)概要设计说明书详细设计说明书从实现角度出发自顶向下逐步细化(stepwiserefinement)2软件设计软件模块划分软件设计需求规格说明概要设计说明书软件详细设计说明书的内容Ⅰ.引言A.目的B.背景C.定义D.参考资料Ⅱ.软件的体系结构列出软件中的每个程序(包括每个模块和子程序)的名称、标识符和它们之间的层次结构关系Ⅲ.程序1设计说明
A.程序描述B.功能
C.性能D.输入项
E.输出项F.算法H.流程逻辑I.接口
J.存储分配K.注释设计L.限制条件M.测试计划
N.尚未解决的问题Ⅳ.程序2设计说明
A.程序描述B.功能C.性能D.输入项
E.输出项F.算法H.流程逻辑I.接口
J.存储分配K.注释设计L.限制条件M.测试计划
N.尚未解决的问题其他程序的设计说明····软件详细设计说明书的内容Ⅰ.引言A.目的B.3软件构造软件构造(程序设计)可执行的软件模块,集成后的软件成品算法数据结构用户界面程序设计语言(如C,C++,JAVA,VB等)软件运行平台(使用何种操作系统,向应用程序提供哪些服务。一般通过API(应用程序接口)提供,如Windows系统的API:Win32SDK和MFC类库等)编程和开发工具(集成开发环境;Delphi、C++Builder、
VisualStudio;VisualStudio.NET)设计说明书3软件构造软件构造可执行的软件模块,算法程序设计语言(如关于程序设计语言和编程训练必须学好:C/C++、Java、…等程序设计语言一定要大量编写程序和开发软件,这是因为:1使用语言才能掌握语言2编程是计算机科学的“实验”手段3通过编程才能把计算机系统方方面面的概念联系在一起,理解计算机的行为和特性。编程是理解抽象概念的有效途径4编程和软件开发仍然是大部分计算机专业及相关专业毕业生就业岗位的主要工作;5在开发系统软件和数据处理类大型应用软件方面,计算机专业及相关专业毕业生应该也必须具有明显的优势。关于程序设计语言和编程训练必须学好:C/C++、Java、4软件测试软件测试经过测试和修改的软件产品测试说明书测试工具测试用例和测试数据可执行的软件模块集成后的软件成品软件测试是分阶段进行的,它贯穿于软件开发的全过程:单元测试(模块测试)集成测试确认测试用户定制软件:验收测试和安装测试商品软件:阿尔法测试和贝塔测试4软件测试软件测试经过测试和修改的软件产品测试说明书可执测试过程测试(Testing)是找出程序和设计中的错误,其要求是:有效数据结果正确无效数据有预防措施测试软件配置结果分析测试结果排错改正的软件预期结果可靠性分析预测的可靠性找出错误出错率数据测试用例测试数据测试工具排错(Debugging)也叫调试,用于消除程序中缺陷(bug):找出出错的位置(定位)分析出错原因并改正测试过程测试(Testing)是找出程序和设计中的错误,其要测试方法:白盒测试技术白盒测试也叫路径测试: 程序中所有语句必须执行一次以上,程序中每条路径都要走到白盒测试的内容对程序模块的所有独立执行路径至少测试一次对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次。在循环的边界和运行边界限内执行循环体测试内部数据结构的有效性。A>1ANDB=0X=X/AA=2ORX>1X=X+1NNYY测试方法:白盒测试技术白盒测试也叫路径测试:白盒测试对程序模测试方法:黑盒测试技术黑盒测试(BlackBoxTesting)
也称功能测试:只关心程序运行结果是否符合要求,不考虑程序内部的执行过程例:求方程式ax2+bx+c=0的根测试用例:abc11.0-2.0-3.021.01.01.031.000.2542.01.00502.01.0602.0072.0008002.09000测试用例的覆盖面要大,但又要少而精,防治遗漏!测试方法:黑盒测试技术黑盒测试(BlackBoxTest软件产品测试的重要性微软产品开发组的人员构成:项目经理测试工程师开发工程师Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人开发人员/测试人员2:51:1.9嫦娥一号卫星:100万行软件,测试软件达160万行!软件产品测试的重要性微软产品开发组的人员构成:项目经理测试工5软件维护软件维护内容:改正性维护运行中发现了软件中的错误需要修正适应性维护为适应变化了的软硬件环境,需对软件做适当变更完善(改进)性维护为了满足用户新的业务需求、增强软件功能而需要修改、扩充软件预防性维护为增强系统可靠性和安全性所采取的预防性措施软件维护经过修改的软件产品使用中发现的问题修改后的需求规格说明书交付的软件产品5软件维护软件维护内容:软件维护经过修改的使用中发现的问题软件维护的重要性在整个软件开发活动中,软件维护的工作量最大,其费用大约是软件开发总成本的2/3左右在整个软件维护阶段的全部工作量中,预防性维护只占很小的比例,而完善性维护占了几乎一半的工作量软件维护的重要性在整个软件开发活动中,软件维护的工作量最大,小结:软件开发活动的特点需要多人参与的分阶段进行的工作量很大的智力活动不仅是编程序,比编程更重要的是需求分析和软件设计编程不但要熟悉程序语言,还需要熟悉运行平台,掌握编程和开发工具编程需要熟悉应用领域的业务知识测试和编程同样重要投入运行后仍需要提供大量的支持和服务整个开发活动需要精心组织与管理小结:软件开发活动的特点需要多人参与的分阶段进行的工作量很大1.2.2软件工程1.2.2软件工程Quiz:1开发一个典型的软件项目大约需要多少个月?2-3月4-6月8-12月12-24月2包含多少行可执行语句的软件被认为是大型软件?1000行5000行10000行50000行3每年上千亿美元销售额的软件市场中,Office、IE之类的PC常用软件占多少份额?10% 25% 50% 75%4中等规模软件的开发期中每人每天平均开发多少行可执行语句?<10行10-50行50-100行>100行5开发过程中,平均每1000行可执行代码中大约会发现多少个错误?5-1010-2050-60100-1506由用户发现的软件错误大部分是什么原因引起的?编程错误需求理解有误软件集成设计错误Quiz:1开发一个典型的软件项目大约需要多少个月?软件规模、工作量与成本类别参加人数研制期限产品规模(源代码行数)微型小型中型大型甚大型极大型112-55-20100-10002000-50001-4周1-6周1-2年2-3年4-5年5-10年约500行约2000行5000-50000行5万-10万行100万行1000万行软件规模软件产品举例产品
代码行
工作量(人年)
成本(百万)
Lotus1-2-3Version3.0
400k
263
22
SpaceShuttle
25.6M
12
3.8M
CityBankTellermachine
780k150
13.2
MSWord2003
3.0M
WindowsNT(beta)Windows200350M3000
WindowsXP50M
WindowsVista70M9000x618000
软件规模、工作量与成本类别参加人数研制期限产品规模(源代码行软件危机软件产业滞后于应用的需求和硬件的发展软件开发效率低、成本高,进度和成本难以控制软件质量得不到保证1955年1970年1985年硬件成本与软件开发、维护费用比例的变化60%左右的软件项目不能按期完成50%左右软件项目的费用超过预算45%左右软件项目最终无法投入使用29%左右软件项目没有交付软件19%左右的软件项目必须返工才能使用Averagecostoverrun:189%Timeoverrun:
222%Projectsre-started:94%Functionalitydeliveredonaverage:
61%StandishGroup软件危机软件产业滞后于应用的需求和硬件的发展1955年软件项目失败率统计200019981995199428%23%49%26%28%46%27%40%33%16%31%53%Thischartdepictstheoutcomeofthe30,000applicationprojectsinlarge,medium,
andsmallcross-industryU.S.companiestestedbyTheStandishGroupsince1994.(Source:TheStandishGroupInternational,ExtremeChaos,TheStandishGroup
International,Inc.,2000)成功有问题失败软件项目失败率统计200019981995199428%23软件项目失败的原因“Whenprojectsfail,it’srarelytechnical.”JimJohnson,TheStandishGroup软件的目标与功能分离(separation)需求不够明确,软件的商务(business)与技术分离,缺乏共同的语言和过程开发过程没有统一的、公认的方法和规范做指导,参与人员自行其是,联系少,不像一个团队开发过程不能灵活改变,测试不充分Solution?
软件工程软件项目失败的原因“Whenprojectsfail,什么是软件工程?1968年提出(NATO会议)根据美国IEEE的定义,软件工程是“以系统的、规范的、可以度量的方法应用于软件的开发、运行和维护,以及对这些方法和技术的研究”通俗地说,软件工程是指导软件开发和维护的一门工程学科。它采用工程的概念、原理、技术和方法,把经过时间检验而证明是正确的管理技术和当前能够得到的最好的技术、方法结合起来,用于开发和维护软件经过几十年的研究与实践,“软件危机”有所缓解,软件开发方法、技术和管理已经有了很大的进步,软件工程已经成为一门比较成熟的学科什么是软件工程?1968年提出(NATO会议)软件工程的目标实现软件的工业化生产,提高软件的质量与生产效率,达到:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;按时完成开发任务,及时交付使用
软件工程的目标实现软件的工业化生产,提高软件的质量与生产效率软件工程的七条基本原理按分阶段的生命周期计划严格进行管理坚持进行阶段评审实行严格的产品控制采纳现代程序设计技术开发成果应能清楚地审查开发小组的人员要少而精承认不断改进软件工程实践的必要性软件工程的七条基本原理按分阶段的生命周期计划严格进行管理软件工程的主要内容软件开发过程的模型软件开发方法软件开发工具软件工程管理与支持管理与控制过程方法工具质量是焦点Maintainability
可维护性
Correctness正确性
Reusability
可重用性
Reliability可靠性
Portability便携性(可移植性)
Efficiency
有效性软件工程的主要内容软件开发过程的模型管理与控制过程方法工软件开发过程的模型瀑布模型快速原型模型螺旋模型……软件开发过程的模型瀑布模型软件开发方法和工具软件开发方法:结构化方法面向数据结构的方法面向对象的方法······软件开发工具:(1)需求分析和概要设计工具(2)详细设计和编码工具(3)测试工具(4)维护和理解工具(5)项目管理工具(6)配置管理工具
······软件开发方法和工具软件开发方法:软件开发工具:1.2.3软件工程的知识领域1.2.3软件工程的知识领域软件工程基础知识论述软件工程与程序设计软件工程存在于软件开发活动的各个阶段。而程序设计通常指程序的设计与编码,是软件开发过程中的一个阶段。软件工程力图对软件项目的各个方面作出指导,从软件的可行性分析直到软件完成以后的维护工作软件工程认为软件开发与各种市场活动密切相关。比如软件的销售,用户培训,与之相关的软件和硬件安装等。软件工程的方法学认为一个程序员不应当脱离团队而进行开发,同时,程序的编写不能够脱离软件的需求、设计以及客户的利益。软件工程与程序设计软件工程存在于软件开发活动的各个阶段。而程软件工程与计算机科学软件工程计算机科学目标构建易用且高效的软件,从而提高人们的工作效率和生活舒适度探索正确的计算和建模方法,从而改进计算方法本身产品软件(比如办公套件和编译器)算法(比如快速排序法)和抽象的问题(比如TSP问题)进度和时间表软件项目都有特定的进度和时间表研究项目一般不具有设定的进度和时间表关注点如何为用户实现价值软件本身运行的原理,如时间和空间复杂度,算法的正确性变化程度随着技术和需求的变化,必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中对于某一种特定问题的正确解决方法将永远不会改变需要的其他知识相关领域的知识数学软件工程与计算机科学软件工程计算机科学目标构建易用且高效的软软件工程与系统工程软件工程关注如何开发和发布有用(有质量)的软件,如飞行控制软件。系统工程关注基于计算机进行系统开发的所有方面,包括硬件、软件及相关过程,如飞机
。软件工程是系统工程的一部分。软件工程与系统工程软件工程关注如何开发和发布有用(有质量)的软件工程的知识领域(1)软件工程的知识领域(1)软件工程的知识领域(2)软件工程的知识领域(2)软件工程基础知识论述小结
程序设计软件开发=开发工具和环境
软件工程
过程(processmodel)=管理方法(disciplines)
工具(tools)
开发工具(IDE)=
OS及其API
算法=数据结构程序设计语言小结1.3软件生命周期1.3.1软件生命周期(软件生存周期)1.3.2软件开发过程模型1.3.3CASE工具和环境1.3软件生命周期1.3.1软件生命周期(软件生存周期1.3.1软件生命周期
(SoftwareLifeCycle)
1.3.1软件生命周期
(SoftwareLife什么是软件生命周期生命周期人的生命周期:婴儿、幼儿、儿童、少年、…软件生命周期软件从提出开发开始到最终灭亡所经历的时期软件产品或软件系统从设计、投入使用到被淘汰的全过程。什么是软件生命周期生命周期软件生命周期示意图(根据GB8566-88《计算机软件开发规范》)可行性研究需求分析概要设计详细设计实现集成测试确认测试使用与维护退役软件定义软件开发维护软件生命周期示意图(根据GB8566-88《计算机软件开发规可行性研究(1/2)任务了解用户要求和现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性技术途径调查和了解用户要求和现实环境攒写调查报告可行性论证和分析(技术、经济等)如可行,制定初步项目开发计划(人员,进度)可行性研究(1/2)任务可行性研究(2/2)阶段性产品可行性论证报告初步的项目开发计划可行性研究(2/2)阶段性产品需求分析(1/2)任务确定用户对待开发软件系统的需求包括:功能性能运行环境约束重要性软件开发依据,软件验收的标准困难性难以说清,动态变化,歧义,复杂需求分析(1/2)任务需求分析(2/2)技术途径和工具需求分析人员需与用户不断、反复地交流和商讨,使用户需求逐步准确化、一致化、完全化抽象、问题分解、快速原型、多视点等技术阶段性产品软件需求规格说明书SRS(功能,性能和运行环境约束)需求分析(2/2)技术途径和工具概要设计任务根据SRS建立目标软件系统总体结构、设计全局数据库和数据结构,规定设计约束,制定集成测试计划等等。技术途径和工具根据软件需求规格说明书,自顶向下,逐步求精,抽象,模块化,局部化,信息隐藏…...阶段性产品概要设计规格说明书数据库或数据结构设计说明书集成测试计划。概要设计任务详细设计任务细化概要设计所生成的各个模块,并详细描述程序模块的内部细节(算法,数据结构等),形成可编程的程序模块,制订单元测试计划技术途径根据SRS和概要设计结果进行,单入口单出口,PDL阶段新产品详细设计规格说明书单元测试计划详细设计任务实现任务根据详细设计规格说明书编写源程序,并对程序进行调试和单元测试,验证程序与详细设计文档一致性技术途径和工具以详细设计规格说明书为依据、基于某种程序设计语言进行编码阶段新产品源程序代码实现任务集成测试任务根据概要设计规格说明书,将经过单元测试的模块逐步进行集成和测试技术途径和工具以概要设计规格说明书和集成测试计划为依据,进行集成模块并进行测试IDE,专有工具等阶段性产品生成满足概要设计要求、可运行的系统源程序和系统集成测试报告集成测试任务确认测试
任务根据软件需求规格说明书,测试软件系统是否满足用户的需求途径由用户参与,以软件需求规格说明书为依据进行确认测试专有工具阶段性产品可供用户使用的软件产品(文档,源程序)确认测试任务软件维护任务对使用后的软件进行维护例如:修正使用过程中发现的错误-纠错性维护增加新的功能-完善性维护从一个环境搬迁到另一个环境-适应性维护途径以文档和源程序为基础按用户要求进行阶段性产品版本更新的软件产品软件维护任务软件生命周期(根据GB8566-2007《信息技术软件生存周期过程》)生存周期基本过程生存周期支撑过程生存周期组织过程软件生命周期(根据GB8566-2007《信息技术软件生存1.3.2软件开发过程模型1.3.2软件开发过程模型软件开发过程软件开发过程软件开发过程模型瀑布模型快速原型模型增量模型螺旋模型敏捷开发软件开发过程模型瀑布模型软件开发过程模型(1)瀑布模型可行性分析需求分析设计编码测试维护规划阶段开发阶段运行阶段用户测试运行原型
听取用户意见快速原型模型建造/修改原型特点:不带反馈环软件开发过程模型(1)瀑布模型可行性分析需求分析设计分析增量模型设计编码测试分析设计编码测试分析设计编码测试分析设计编码测试增量1增量2增量3增量n
增量1交付客户
增量2交付客户
增量3交付客户
增量n交付客户时间…..软件开发过程模型(2)分析增量模型设计编码测试分析设计编码测试分析软件开发过程模型(3)螺旋模型确定软件目标,选定实施方案,弄清项目开发的限制评价开发工作,提出修正建议分析所选方案,考虑如何识别和消除风险实施软件开发软件开发过程模型(3)螺旋模型确定软件目标,选定实施方案,弄微软公司的软件开发过程模型微软解决方案框架MSF综合了瀑布模型和螺旋模型的优点:每个回环包含5个子过程,以一次发布为终结,下一次发布再循环一次。每个子过程以里程碑(milestone)为分隔,每个里程碑需对阶段成果进行评审,通过后才能继续计划批准开发完成发布准备完成部署完成项目批准MSF创意过程:确定需求和总目标计划过程:确定做什么和怎么做开发过程:完成程序代码和文档稳定过程:消除所有发现的问题部署过程:完成软件运行的部署微软公司的软件开发过程模型微软解决方案框架MSF综合了瀑布模案例北京市交通设施设计与漫游系统
–用户的要求
(1)完成交通设施的二维图纸设计(2)在二维设计的基础上模拟显示设计的效果
–现实情况
(1)二维设计部分已有工作基础,新功能开发量不大(2)设计仿真与漫游显示部分需求不确定(3)用户要求开发方提出可行的方案采用哪种软件过程模型更合适呢?案例北京市交通设施设计与漫游系统采用哪种软件过程模型更合适1.3.3CASE工具和环境1.3.3CASE工具和环境什么是CASE工具和环境计算机辅助软件工程(ComputerAidedSoftwareEngineering,CASE)在软件工程活动中,软件开发人员按照软件工程的方法和原则,借助于计算机及其软件工具的帮助来开发、维护和管理软件产品的过程CASE工具支持CASE的工具(编译器,编辑器–推土机、锄头)集成CASE环境将CASE工具、信息按统一标准和接口组装起来,使工具间、人员间、各个过程间能方便交互的环境。如VisualC++将编辑、编译、调试、界面设计、安装程序生成等等集成在一起。(联合收割机)什么是CASE工具和环境计算机辅助软件工程软件工程基础知识论述CASE工具和环境的类别目前已有大量的CASE工具项目管理工具:估算项目成本和工作量,制定项目规划等等;分析和设计工具:用于系统建模;程序设计工具:编译器,调试器等;测试工具:测试用例生成,程序动态跟踪工具CASE工具和环境的类别目前已有大量的CASE工具CASE工具例子CASE工具例子谢谢软件工程基础知识论述本资料来源本资料来源
第一章软件工程基础知识1.1软件的定义1.2软件工程1.3软件生命周期第一章软件工程基础知识1.1软件的定义FAQ(关于软件工程)什么是软件?好的软件有那些特点?什么是软件工程?什么是软件过程?什么是软件过程模型?什么是软件工程方法?什么是CASE(ComputerAidedSoftwareEngineering)?软件工程和系统工程有什么区别?软件工程面临的关键挑战是什么?FAQ(关于软件工程)什么是软件?1.1软件的定义什么是软件软件的特点软件发展史软件危机1.1软件的定义什么是软件什么是软件?(1/2)
书本上的定义–Softwareisasetofitemsorobjectsthatformsa“configuration”thatincludesprograms,documents,data,……IEEE的定义–Softwareiscomputerprograms,procedures,andpossiblyassociateddocumentationanddatapertainingtotheoperationofacomputersystem.什么是软件?(1/2)书本上的定义可执行部分不可执行部分数据文档1文档2什么是软件?(2/2)与计算机系统操作有关的程序和数据以及任何与之相关的文档的集合。程序可执行部分不可执行部分数据文档1文档2什么是软件?(2/2什么是程序(1/2)程序:由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列程序例子Main(){inti,j;
//变量定义
charStr[10];i=i+j;//语句说明
……}什么是程序(1/2)程序:由程序设计语言所描述的、能为计算什么是程序(2/2)程序设计语言具有良好、严格语法和语义目前程序设计语言主要有以下几种类型面向机器:如汇编语言、机器语言等面向过程:如Fortran,Pascal,C等等面向对象:如Java等等面向问题:如结构化查询语言SQL等等什么是程序(2/2)程序设计语言具有良好、严格语法和语义什么是文档文档:记录软件开发活动和阶段性成果、理解软件所必需的阐述性资料需求分析文档软件设计文挡等编写文档目的促进对软件的开发,管理和维护;便于各种人员(用户,开发人员)的交流什么是文档文档:记录软件开发活动和阶段性成果、理解软件所必软件特点不会老化逻辑产品(智力,无形)维护困难和复杂(完善,纠错,…...)生产只需复制软件开发性质如成本、进度等难以估计软件的开发更加依赖于开发人员的业务素质、智力、人员的合作、组织和管理好的软件有哪些特点?软件特点不会老化好的软件有哪些特点?软件发展史软件发展史软件危机软件需求的增长得不到满足;软件开发的成本和进度无法控制;软件质量难以保证;软件不可维护或维护成度非常低;软件成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。
为了消除软件危机,形成了软件工程的概念,开辟了工程学的新兴领域——软件工程学。软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。软件危机软件需求的增长得不到满足;为了消除软件危机,形成了软1.2软件工程1.2.1软件开发活动1.2.2软件工程1.2.3软件工程的知识域1.2软件工程1.2.1软件开发活动1.2.1软件开发活动1.2.1软件开发活动软件工程基础知识论述软件开发活动的主要内容问题用户需求需求分析规格说明,可行性报告,初步用户手册
设计结构设计,各模块的详细设计说明,测试计划构造各模块代码和单元测试报告,测试设计测试各种测试报告维护发布计划、培训计划及教材、维护档案等需求分析软件设计软件构造软件维护软件测试软件开发费用的比例软件开发活动的主要内容问题用户需求需求分析规格说明,可行性报1需求分析需求规格说明(specification)初步用户手册项目开发计划可行性(风险)分析需求分析用户的需要(needs)对软件的需求(requirements)使用计算机术语,比较严格的语言全面理解准确表达使用用户的语言(行业内的术语)功能要求性能要求环境要求可靠性要求安全性要求用户界面需求资源使用需求软件成本消耗开发进度需求等1需求分析需求规格说明(specification)需求软件需求说明书的内容Ⅰ.引言A.背景B.定义C.参考资料Ⅱ.任务概述A.目标B.用户的特点C.假定和约束Ⅲ.需求规定
A.对功能的规定
B.对性能的规定(ⅰ精度ⅱ时间特性要求ⅲ灵活性)C.输入输出要求
D.数据管理能力要求
E.故障处理要求
F.其它专门要求Ⅳ.运行环境规定A.设备B.支撑软件C.接口D.控制软件需求说明书的内容Ⅰ.引言A.背景B.2软件设计软件模块划分算法设计数据结构设计用户界面设计软件设计需求规格说明(specification)概要设计说明书详细设计说明书从实现角度出发自顶向下逐步细化(stepwiserefinement)2软件设计软件模块划分软件设计需求规格说明概要设计说明书软件详细设计说明书的内容Ⅰ.引言A.目的B.背景C.定义D.参考资料Ⅱ.软件的体系结构列出软件中的每个程序(包括每个模块和子程序)的名称、标识符和它们之间的层次结构关系Ⅲ.程序1设计说明
A.程序描述B.功能
C.性能D.输入项
E.输出项F.算法H.流程逻辑I.接口
J.存储分配K.注释设计L.限制条件M.测试计划
N.尚未解决的问题Ⅳ.程序2设计说明
A.程序描述B.功能C.性能D.输入项
E.输出项F.算法H.流程逻辑I.接口
J.存储分配K.注释设计L.限制条件M.测试计划
N.尚未解决的问题其他程序的设计说明····软件详细设计说明书的内容Ⅰ.引言A.目的B.3软件构造软件构造(程序设计)可执行的软件模块,集成后的软件成品算法数据结构用户界面程序设计语言(如C,C++,JAVA,VB等)软件运行平台(使用何种操作系统,向应用程序提供哪些服务。一般通过API(应用程序接口)提供,如Windows系统的API:Win32SDK和MFC类库等)编程和开发工具(集成开发环境;Delphi、C++Builder、
VisualStudio;VisualStudio.NET)设计说明书3软件构造软件构造可执行的软件模块,算法程序设计语言(如关于程序设计语言和编程训练必须学好:C/C++、Java、…等程序设计语言一定要大量编写程序和开发软件,这是因为:1使用语言才能掌握语言2编程是计算机科学的“实验”手段3通过编程才能把计算机系统方方面面的概念联系在一起,理解计算机的行为和特性。编程是理解抽象概念的有效途径4编程和软件开发仍然是大部分计算机专业及相关专业毕业生就业岗位的主要工作;5在开发系统软件和数据处理类大型应用软件方面,计算机专业及相关专业毕业生应该也必须具有明显的优势。关于程序设计语言和编程训练必须学好:C/C++、Java、4软件测试软件测试经过测试和修改的软件产品测试说明书测试工具测试用例和测试数据可执行的软件模块集成后的软件成品软件测试是分阶段进行的,它贯穿于软件开发的全过程:单元测试(模块测试)集成测试确认测试用户定制软件:验收测试和安装测试商品软件:阿尔法测试和贝塔测试4软件测试软件测试经过测试和修改的软件产品测试说明书可执测试过程测试(Testing)是找出程序和设计中的错误,其要求是:有效数据结果正确无效数据有预防措施测试软件配置结果分析测试结果排错改正的软件预期结果可靠性分析预测的可靠性找出错误出错率数据测试用例测试数据测试工具排错(Debugging)也叫调试,用于消除程序中缺陷(bug):找出出错的位置(定位)分析出错原因并改正测试过程测试(Testing)是找出程序和设计中的错误,其要测试方法:白盒测试技术白盒测试也叫路径测试: 程序中所有语句必须执行一次以上,程序中每条路径都要走到白盒测试的内容对程序模块的所有独立执行路径至少测试一次对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次。在循环的边界和运行边界限内执行循环体测试内部数据结构的有效性。A>1ANDB=0X=X/AA=2ORX>1X=X+1NNYY测试方法:白盒测试技术白盒测试也叫路径测试:白盒测试对程序模测试方法:黑盒测试技术黑盒测试(BlackBoxTesting)
也称功能测试:只关心程序运行结果是否符合要求,不考虑程序内部的执行过程例:求方程式ax2+bx+c=0的根测试用例:abc11.0-2.0-3.021.01.01.031.000.2542.01.00502.01.0602.0072.0008002.09000测试用例的覆盖面要大,但又要少而精,防治遗漏!测试方法:黑盒测试技术黑盒测试(BlackBoxTest软件产品测试的重要性微软产品开发组的人员构成:项目经理测试工程师开发工程师Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人开发人员/测试人员2:51:1.9嫦娥一号卫星:100万行软件,测试软件达160万行!软件产品测试的重要性微软产品开发组的人员构成:项目经理测试工5软件维护软件维护内容:改正性维护运行中发现了软件中的错误需要修正适应性维护为适应变化了的软硬件环境,需对软件做适当变更完善(改进)性维护为了满足用户新的业务需求、增强软件功能而需要修改、扩充软件预防性维护为增强系统可靠性和安全性所采取的预防性措施软件维护经过修改的软件产品使用中发现的问题修改后的需求规格说明书交付的软件产品5软件维护软件维护内容:软件维护经过修改的使用中发现的问题软件维护的重要性在整个软件开发活动中,软件维护的工作量最大,其费用大约是软件开发总成本的2/3左右在整个软件维护阶段的全部工作量中,预防性维护只占很小的比例,而完善性维护占了几乎一半的工作量软件维护的重要性在整个软件开发活动中,软件维护的工作量最大,小结:软件开发活动的特点需要多人参与的分阶段进行的工作量很大的智力活动不仅是编程序,比编程更重要的是需求分析和软件设计编程不但要熟悉程序语言,还需要熟悉运行平台,掌握编程和开发工具编程需要熟悉应用领域的业务知识测试和编程同样重要投入运行后仍需要提供大量的支持和服务整个开发活动需要精心组织与管理小结:软件开发活动的特点需要多人参与的分阶段进行的工作量很大1.2.2软件工程1.2.2软件工程Quiz:1开发一个典型的软件项目大约需要多少个月?2-3月4-6月8-12月12-24月2包含多少行可执行语句的软件被认为是大型软件?1000行5000行10000行50000行3每年上千亿美元销售额的软件市场中,Office、IE之类的PC常用软件占多少份额?10% 25% 50% 75%4中等规模软件的开发期中每人每天平均开发多少行可执行语句?<10行10-50行50-100行>100行5开发过程中,平均每1000行可执行代码中大约会发现多少个错误?5-1010-2050-60100-1506由用户发现的软件错误大部分是什么原因引起的?编程错误需求理解有误软件集成设计错误Quiz:1开发一个典型的软件项目大约需要多少个月?软件规模、工作量与成本类别参加人数研制期限产品规模(源代码行数)微型小型中型大型甚大型极大型112-55-20100-10002000-50001-4周1-6周1-2年2-3年4-5年5-10年约500行约2000行5000-50000行5万-10万行100万行1000万行软件规模软件产品举例产品
代码行
工作量(人年)
成本(百万)
Lotus1-2-3Version3.0
400k
263
22
SpaceShuttle
25.6M
12
3.8M
CityBankTellermachine
780k150
13.2
MSWord2003
3.0M
WindowsNT(beta)Windows200350M3000
WindowsXP50M
WindowsVista70M9000x618000
软件规模、工作量与成本类别参加人数研制期限产品规模(源代码行软件危机软件产业滞后于应用的需求和硬件的发展软件开发效率低、成本高,进度和成本难以控制软件质量得不到保证1955年1970年1985年硬件成本与软件开发、维护费用比例的变化60%左右的软件项目不能按期完成50%左右软件项目的费用超过预算45%左右软件项目最终无法投入使用29%左右软件项目没有交付软件19%左右的软件项目必须返工才能使用Averagecostoverrun:189%Timeoverrun:
222%Projectsre-started:94%Functionalitydeliveredonaverage:
61%StandishGroup软件危机软件产业滞后于应用的需求和硬件的发展1955年软件项目失败率统计200019981995199428%23%49%26%28%46%27%40%33%16%31%53%Thischartdepictstheoutcomeofthe30,000applicationprojectsinlarge,medium,
andsmallcross-industryU.S.companiestestedbyTheStandishGroupsince1994.(Source:TheStandishGroupInternational,ExtremeChaos,TheStandishGroup
International,Inc.,2000)成功有问题失败软件项目失败率统计200019981995199428%23软件项目失败的原因“Whenprojectsfail,it’srarelytechnical.”JimJohnson,TheStandishGroup软件的目标与功能分离(separation)需求不够明确,软件的商务(business)与技术分离,缺乏共同的语言和过程开发过程没有统一的、公认的方法和规范做指导,参与人员自行其是,联系少,不像一个团队开发过程不能灵活改变,测试不充分Solution?
软件工程软件项目失败的原因“Whenprojectsfail,什么是软件工程?1968年提出(NATO会议)根据美国IEEE的定义,软件工程是“以系统的、规范的、可以度量的方法应用于软件的开发、运行和维护,以及对这些方法和技术的研究”通俗地说,软件工程是指导软件开发和维护的一门工程学科。它采用工程的概念、原理、技术和方法,把经过时间检验而证明是正确的管理技术和当前能够得到的最好的技术、方法结合起来,用于开发和维护软件经过几十年的研究与实践,“软件危机”有所缓解,软件开发方法、技术和管理已经有了很大的进步,软件工程已经成为一门比较成熟的学科什么是软件工程?1968年提出(NATO会议)软件工程的目标实现软件的工业化生产,提高软件的质量与生产效率,达到:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;按时完成开发任务,及时交付使用
软件工程的目标实现软件的工业化生产,提高软件的质量与生产效率软件工程的七条基本原理按分阶段的生命周期计划严格进行管理坚持进行阶段评审实行严格的产品控制采纳现代程序设计技术开发成果应能清楚地审查开发小组的人员要少而精承认不断改进软件工程实践的必要性软件工程的七条基本原理按分阶段的生命周期计划严格进行管理软件工程的主要内容软件开发过程的模型软件开发方法软件开发工具软件工程管理与支持管理与控制过程方法工具质量是焦点Maintainability
可维护性
Correctness正确性
Reusability
可重用性
Reliability可靠性
Portability便携性(可移植性)
Efficiency
有效性软件工程的主要内容软件开发过程的模型管理与控制过程方法工软件开发过程的模型瀑布模型快速原型模型螺旋模型……软件开发过程的模型瀑布模型软件开发方法和工具软件开发方法:结构化方法面向数据结构的方法面向对象的方法······软件开发工具:(1)需求分析和概要设计工具(2)详细设计和编码工具(3)测试工具(4)维护和理解工具(5)项目管理工具(6)配置管理工具
······软件开发方法和工具软件开发方法:软件开发工具:1.2.3软件工程的知识领域1.2.3软件工程的知识领域软件工程基础知识论述软件工程与程序设计软件工程存在于软件开发活动的各个阶段。而程序设计通常指程序的设计与编码,是软件开发过程中的一个阶段。软件工程力图对软件项目的各个方面作出指导,从软件的可行性分析直到软件完成以后的维护工作软件工程认为软件开发与各种市场活动密切相关。比如软件的销售,用户培训,与之相关的软件和硬件安装等。软件工程的方法学认为一个程序员不应当脱离团队而进行开发,同时,程序的编写不能够脱离软件的需求、设计以及客户的利益。软件工程与程序设计软件工程存在于软件开发活动的各个阶段。而程软件工程与计算机科学软件工程计算机科学目标构建易用且高效的软件,从而提高人们的工作效率和生活舒适度探索正确的计算和建模方法,从而改进计算方法本身产品软件(比如办公套件和编译器)算法(比如快速排序法)和抽象的问题(比如TSP问题)进度和时间表软件项目都有特定的进度和时间表研究项目一般不具有设定的进度和时间表关注点如何为用户实现价值软件本身运行的原理,如时间和空间复杂度,算法的正确性变化程度随着技术和需求的变化,必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中对于某一种特定问题的正确解决方法将永远不会改变需要的其他知识相关领域的知识数学软件工程与计算机科学软件工程计算机科学目标构建易用且高效的软软件工程与系统工程软件工程关注如何开发和发布有用(有质量)的软件,如飞行控制软件。系统工程关注基于计算机进行系统开发的所有方面,包括硬件、软件及相关过程,如飞机
。软件工程是系统工程的一部分。软件工程与系统工程软件工程关注如何开发和发布有用(有质量)的软件工程的知识领域(1)软件工程的知识领域(1)软件工程的知识领域(2)软件工程的知识领域(2)软件工程基础知识论述小结
程序设计软件开发=开发工具和环境
软件工程
过程(processmodel)=管理方法(disciplines)
工具(tools)
开发工具(IDE)=
OS及其API
算法=数据结构程序设计语言小结1.3软件生命周期1.3.1软件生命周期(软件生存周期)1.3.2软件开发过程模型1.3.3CASE工具和环境1.3软件生命周期1.3.1软件生命周期(软件生存周期1.3.1软件生命周期
(SoftwareLifeCycle)
1.3.1软件生命周期
(SoftwareLife什么是软件生命周期生命周期人的生命周期:婴儿、幼儿、儿童、少年、…软件生命周期软件从提出开发开始到最终灭亡所经历的时期软件产品或软件系统从设计、投入使用到被淘汰的全过程。什么是软件生命周期生命周期软件生命周期示意图(根据GB8566-88《计算机软件开发规范》)可行性研究需求分析概要设计详细设计实现集成测试确认测试使用与维护退役软件定义软件开发维护软件生命周期示意图(根据GB8566-88《计算机软件开发规可行性研究(1/2)任务了解用户要求和现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性技术途径调查和了解用户要求和现实环境攒写调查报告可行性论证和分析(技术、经济等)如可行,制定初步项目开发计划(人员,进度)可行性研究(1/2)任务可行性研究(2/2)阶段性产品可行性论证报告初步的项目开发计划可行性研究(2/2)阶段性产品需求分析(1/2)任务确定用户对待开发软件系统的需求包括:功能性能运行环境约束重要性软件开发依据,软件验收的标准困难性难以说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑龙江工业学院《生物医学信息与统计学》2023-2024学年第二学期期末试卷
- 阳光学院《流体传动与控制基础》2023-2024学年第二学期期末试卷
- 武汉海事职业学院《单片机原理与应用综合设计》2023-2024学年第二学期期末试卷
- 大兴安岭职业学院《企业电子产品设计与制造》2023-2024学年第二学期期末试卷
- 四川汽车职业技术学院《科学社会主义概论》2023-2024学年第二学期期末试卷
- 双头应急灯项目效益评估报告
- 沈阳音乐学院《内科护理学(2)》2023-2024学年第二学期期末试卷
- 郑州商贸旅游职业学院《社会治理》2023-2024学年第二学期期末试卷
- 伊犁师范大学《中职英语微格教学技能训练》2023-2024学年第二学期期末试卷
- 人教版初中历史与社会七年级上册 3.5 干旱的宝地-塔里木盆地 教学设计
- 2024年12月重庆大学医院公开招聘医生岗位2人(有编制)笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 主题班会:新学期 新起点 新期待
- 披萨制作流程
- 2024 河北公务员考试(笔试、省直、A类、C类)4套真题及答案
- 厦门2025年福建厦门市公安文职人员服务中心招聘17人笔试历年参考题库附带答案详解
- 2025年高三历史教学工作计划
- 《职业性肌肉骨骼疾患的工效学预防指南 》
- 不同产地筠连红茶风味化学成分差异分析
- DB50 577-2015 汽车整车制造表面涂装大气污染物排放标准
- 生态安全课件
- 大学英语(西安欧亚学院)知到智慧树章节测试课后答案2024年秋西安欧亚学院
评论
0/150
提交评论