第一章软件工程基础知识1.1软件的定义1.2软件工程1.3软件生命周期第一章软件工程基础知识2FAQ(关于软件工程)什么是软件?好的软件有那些特点?什么是软件工程?什么是软件过程?什么是软件过程模型?什么是软件工程方法?什么是CASE(ComputerAidedSoftwareEngineering)?软件工程和系统工程有什么区别?软件工程面临的关键挑战是什么?第一章软件工程基础知识31.1软件的定义什么是软件软件的特点软件发展史软件危机第一章软件工程基础知识4什么是软件?(1/2)书本上的定义–Softwareisasetofitemsorobjectsthatformsa“configuration”thatincludesprograms,documents,data,……IEEE的定义–Softwareiscomputerprograms,procedures,andpossiblyassociateddocumentationanddatapertainingtotheoperationofacomputersystem.第一章软件工程基础知识5可执行部分不可执行部分数据文档1文档2什么是软件?(2/2)与计算机系统操作有关的程序和数据以及任何与之相关的文档的集合。程序第一章软件工程基础知识6什么是程序(1/2)程序:由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列程序例子Main(){inti,j;//变量定义charStr[10];i=i+j;//语句说明……}第一章软件工程基础知识7什么是程序(2/2)程序设计语言具有良好、严格语法和语义目前程序设计语言主要有以下几种类型面向机器:如汇编语言、机器语言等面向过程:如Fortran,Pascal,C等等面向对象:如Java等等面向问题:如结构化查询语言SQL等等第一章软件工程基础知识8什么是文档文档:记录软件开发活动和阶段性成果、理解软件所必需的阐述性资料需求分析文档软件设计文挡等编写文档目的促进对软件的开发,管理和维护;便于各种人员(用户,开发人员)的交流第一章软件工程基础知识9软件特点不会老化逻辑产品(智力,无形)维护困难和复杂(完善,纠错,…...)生产只需复制软件开发性质如成本、进度等难以估计软件的开发更加依赖于开发人员的业务素质、智力、人员的合作、组织和管理好的软件有哪些特点?第一章软件工程基础知识10软件发展史第一章软件工程基础知识11软件危机软件需求的增长得不到满足;软件开发的成本和进度无法控制;软件质量难以保证;软件不可维护或维护成度非常低;软件成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。为了消除软件危机,形成了软件工程的概念,开辟了工程学的新兴领域——软件工程学。软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。第一章软件工程基础知识121.2软件工程1.2.1软件开发活动1.2.2软件工程1.2.3软件工程的知识域第一章软件工程基础知识131.2.1软件开发活动第一章软件工程基础知识15软件开发活动的主要内容问题用户需求需求分析规格说明,可行性报告,初步用户手册设计结构设计,各模块的详细设计说明,测试计划构造各模块代码和单元测试报告,测试设计测试各种测试报告维护发布计划、培训计划及教材、维护档案等需求分析软件设计软件构造软件维护软件测试软件开发费用的比例第一章软件工程基础知识161需求分析需求规格说明(specification)初步用户手册项目开发计划可行性(风险)分析需求分析用户的需要(needs)对软件的需求(requirements)使用计算机术语,比较严格的语言全面理解准确表达使用用户的语言(行业内的术语)功能要求性能要求环境要求可靠性要求安全性要求用户界面需求资源使用需求软件成本消耗开发进度需求等第一章软件工程基础知识17软件需求说明书的内容Ⅰ.引言A.背景B.定义C.参考资料Ⅱ.任务概述A.目标B.用户的特点C.假定和约束Ⅲ.需求规定A.对功能的规定B.对性能的规定(ⅰ精度ⅱ时间特性要求ⅲ灵活性)C.输入输出要求D.数据管理能力要求E.故障处理要求F.其它专门要求Ⅳ.运行环境规定A.设备B.支撑软件C.接口D.控制第一章软件工程基础知识182软件设计软件模块划分算法设计数据结构设计用户界面设计软件设计需求规格说明(specification)概要设计说明书详细设计说明书从实现角度出发自顶向下逐步细化(stepwiserefinement)第一章软件工程基础知识19软件详细设计说明书的内容Ⅰ.引言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.尚未解决的问题其他程序的设计说明····第一章软件工程基础知识203软件构造软件构造(程序设计)可执行的软件模块,集成后的软件成品算法数据结构用户界面程序设计语言(如C,C++,JAVA,VB等)软件运行平台(使用何种操作系统,向应用程序提供哪些服务。一般通过API(应用程序接口)提供,如Windows系统的API:Win32SDK和MFC类库等)编程和开发工具(集成开发环境;Delphi、C++Builder、VisualStudio;VisualStudio.NET)设计说明书第一章软件工程基础知识21关于程序设计语言和编程训练必须学好:C/C++、Java、…等程序设计语言一定要大量编写程序和开发软件,这是因为:1使用语言才能掌握语言2编程是计算机科学的“实验”手段3通过编程才能把计算机系统方方面面的概念联系在一起,理解计算机的行为和特性。编程是理解抽象概念的有效途径4编程和软件开发仍然是大部分计算机专业及相关专业毕业生就业岗位的主要工作;5在开发系统软件和数据处理类大型应用软件方面,计算机专业及相关专业毕业生应该也必须具有明显的优势。第一章软件工程基础知识224软件测试软件测试经过测试和修改的软件产品测试说明书测试工具测试用例和测试数据可执行的软件模块集成后的软件成品软件测试是分阶段进行的,它贯穿于软件开发的全过程:单元测试(模块测试)集成测试确认测试用户定制软件:验收测试和安装测试商品软件:阿尔法测试和贝塔测试第一章软件工程基础知识23测试过程测试(Testing)是找出程序和设计中的错误,其要求是:有效数据结果正确无效数据有预防措施测试软件配置结果分析排错改正的软件预期结果可靠性分析预测的可靠性找出错误出错率数据测试用例测试数据测试工具排错(Debugging)也叫调试,用于消除程序中缺陷(bug):找出出错的位置(定位)分析出错原因并改正第一章软件工程基础知识24测试方法:白盒测试技术白盒测试也叫路径测试:程序中所有语句必须执行一次以上,程序中每条路径都要走到白盒测试的内容对程序模块的所有独立执行路径至少测试一次对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次。在循环的边界和运行边界限内执行循环体测试内部数据结构的有效性。A1ANDB=0X=X/AA=2ORX1X=X+1NNYY第一章软件工程基础知识25测试方法:黑盒测试技术黑盒测试(BlackBoxTesting)也称功能测试:只关心程序运行结果是否符合要求,不考虑程序内部的执行过程例:求方程式ax2+bx+c=0的根测试用例:abc11.0-2.0-3.021.01.01.031.000.2542.01.00502.01.0602.0072.0008002.09000测试用例的覆盖面要大,但又要少而精,防治遗漏!第一章软件工程基础知识26软件产品测试的重要性微软产品开发组的人员构成:项目经理测试工程师开发工程师Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人开发人员/测试人员2:51:1.9嫦娥一号卫星:100万行软件,测试软件达160万行!第一章软件工程基础知识275软件维护软件维护内容:改正性维护运行中发现了软件中的错误需要修正适应性维护为适应变化了的软硬件环境,需对软件做适当变更完善(改进)性维护为了满足用户新的业务需求、增强软件功能而需要修改、扩充软件预防性维护为增强系统可靠性和安全性所采取的预防性措施软件维护经过修改的软件产品使用中发现的问题修改后的需求规格说明书交付的软件产品第一章软件工程基础知识28软件维护的重要性在整个软件开发活动中,软件维护的工作量最大,其费用大约是软件开发总成本的2/3左右在整个软件维护阶段的全部工作量中,预防性维护只占很小的比例,而完善性维护占了几乎一半的工作量第一章软件工程基础知识29小结:软件开发活动的特点需要多人参与的分阶段进行的工作量很大的智力活动不仅是编程序,比编程更重要的是需求分析和软件设计编程不但要熟悉程序语言,还需要熟悉运行平台,掌握编程和开发工具编程需要熟悉应用领域的业务知识测试和编程同样重要投入运行后仍需要提供大量的支持和服务整个开发活动需要精心组织与管理第一章软件工程基础知识301.2.2软件工程第一章软件工程基础知识31Quiz: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由用户发现的软件错误大部分是什么原因引起的?编程错误需求理解有误软件集成设计错误第一章软件工程基础知识32软件规模、工作量与成本类别参加人数研制期限产品规模(源代码行数)微型小型中型大型甚大型极大型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.0400k26322SpaceShuttle25.6M123.8MCityBankTellermachine780k15013.2MSWord20033.0MWindowsNT(beta)Windows200350M3000WindowsXP50MWindowsVista70M9000x618000第一章软件工程基础知识33软件危机软件产业滞后于应用的需求和硬件的发展软件开发效率低、成本高,进度和成本难以控制软件质量得不到保证1955年1970年1985年硬件成本与软件开发、维护费用比例的变化60%左右的软件项目不能按期完成50%左右软件项目的费用超过预算45%左右软件项目最终无法投入使用29%左右软件项目没有交付软件19%左右的软件项目必须返工才能使用Averagecostoverrun:189%Timeoverrun:222%Projectsre-started:94%Functionalitydeliveredonaverage:61%StandishGroup第一章软件工程基础知识34软件项目失败率统计20001998199