680 likes | 818 Views
软件工程实践. 软件学院 高海昌 作业提交 hchgao@xidian.edu.cn 课件下载 http://web.xidian.edu.cn/hchgao. 内容. 1. 概述 2. 软件过程和生命周期 3. 项目管理 4. 需求工程 5. 软件设计 6. 软件实现 7. 软件测试 8. 软件交付 考核 闭卷考试( 40%)+ 实践成果( 60%) 教材 谭庆平等著 《 软件工程实践教程 》 ,高等教育出版社, 2009 年第 1 版。. 内容. 参考书目
E N D
软件工程实践 软件学院 高海昌 作业提交 hchgao@xidian.edu.cn 课件下载 http://web.xidian.edu.cn/hchgao
内容 • 1. 概述 • 2. 软件过程和生命周期 • 3. 项目管理 • 4. 需求工程 • 5. 软件设计 • 6. 软件实现 • 7. 软件测试 • 8. 软件交付 • 考核 闭卷考试(40%)+实践成果(60%) • 教材 谭庆平等著《软件工程实践教程》,高等教育出版社,2009年第1版。
内容 参考书目 Roger S Pressman 著《Software Engineering, A Practitioner’s Approach》 4th Edition, 北京:机械工业出版社,1999. Shari Lawrence Pfleeger著《Software Engineering Theory an Practice》3rd Edition,北京:高等教育出版社,2006. 孙家广主编《软件工程-理论、方法与实践》 第一版,北京:高等教育出版社,2005. 刘兵等编《软件工程实践教程》第一版,北京:机械工业出版社,2009. 韩万江编《软件工程案例教程》第一版,北京:机械工业出版社,2009. • 3
内容 1. 概述 软件工程基础知识回顾 2. 软件过程模型 为后续阶段以项目机制实施作知识准备 3. 软件项目管理 4. 软件需求分析 5. 软件设计 项目实施阶段,每个阶段均须形成报告 6. 软件实现 7. 软件测试 8. 软件交付 • 4
实施 • 学生自由分组以形成团队,每组3-6人。 • 团队合作完成一个实际项目,每个学生完成相应子任务。 组建团队 选择案例 完成案例 汇报总结
实践案例1---课程注册管理系统 为某所高校的教务管理部门开发一个课程注册管理系统。在每学期开学前,教务管理人员可利用该系统输入课程信息,设定课表(每门课的任课教师、上课地点和时间)。开学后,学生可以利用该系统查询课程和课表信息,在第一周内注册课程或撤销对课程的注册。 软件系统负责将学生所选课程的列表通知计费系统以确定学生应缴纳的选课费用。任课教师在学期内可随时查询选修所授课程的学生的信息,学生可随时查询课程信息、课表、本人所选课程列表,教务管理人员可随时查询所有信息。 • 6
实践案例2---机票预订管理系统 为某家机票预订服务商开发一个机票查询和预订管理系统。该系统中的航班和机票信息由多家航空公司提供,客户可以通过电话或上网方式查询航班时刻表、机票可用信息、折扣信息,可以远程订票、退票、通过银行卡支付票款。客户分三类:金牌客户、银牌客户、普通客户。普通客户通过订票积分至一定的额度可以逐步升级为银牌客户、金牌客户。不同类别的客户所享受的折扣可以不同。该系统还必须按每日、每周、每月给出机票销售的统计分析报表。 • 7
实践任务 1、根据第二章(过程模型及生命期)所学内容,撰写所开发项目的开发过程模型。 2、根据第三章(项目管理)所学内容,编制所开发项目的项目进度计划,以GANTT图方法呈现。 3、根据第四章(需求分析)所学内容,撰写所开发的项目的需求规格说明书。需求文档分两部分,第一部分(Definition),第二部分(Specification)。 4、根据第五章(软件设计)所学内容,撰写所开发的项目的设计说明书。包括:界面设计、体系结构设计、数据库设计三大类,可集中于一个文档。 5、编码实现需要同学们到机房根据任务分工,各自实现分工模块,并完成集成测试。 6、对开发的系统进行最终实地验收,并作项目总结。 • 8
结果 任务1、2、3、4以电子文档的形式提交; 任务5实地验收; 任务6由各组长以PPT方式讲解汇报。 电子文档提交地址:hchgao@xidian.edu.cn • 9
概述 IEEE给软件下的定义:软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。 2000年中国软件产业收入达590亿; … 2009年中国软件产业收入达9513亿,同比增长25.6% ;软件出口185亿美元,同比增长14% 。 2010年中国软件产业收入达1.33万亿,同比增长31% ,占电子信息产业比重上升至18%。 2011年中国软件产业收入达1.84万亿,同比增长32.4% • 10
什么是软件? 软件历史 • 第一台计算机 • ENIAC, 46 • 晶体管计算机 • IBM 7090, 58 • Software was free addition to hardware • 集成电路计算机 • IBM 360, 64 • Software was first priced, 69
Telephone Terminal (Cell Phone) 2.2 2.2 M M 1 2 2 M M 1.5 1.5 M M Software Size (LOC) Software Size (LOC) Development Period (year) 0.5 1 1 M M 700 700 K K 500 500 K K 4 4 bit bit 8 8 bit bit 16 16 bit bit 1989 1989 1996 1996 1999 1999 什么是软件? 软件系统的体积
什么是软件? • 软件是一个集合,包含有: • (1)指令(也可以说程序),执行后会提供想要的功能和性能, • (2)数据,使得程序能够更加便利和充分的操作信息 • (3)文档,描述程序的操作和使用. • 例子 • 源码、对象程序、涉及文档、测试数据等等……
什么是软件? 软件的特性 • 不可见性 • 软件产品很难去触摸、感觉或识别或者鉴定,是一种不真实存在于物理环境中的虚拟实体 • 逻辑性 • 软件产品的功能一般很难由人类来单独完成,或者说人类完成的效率非常低下。例如邮件、文件系统、数据库、操作系统等 • 灵活性 • 软件产品很容易被改变和修改。保持其一致性是一件非常重要的工作,但这种特性也为软件的重用提供了很好的支持,可以根据需求的变化而变化。
什么是软件? 软件的特点 • 软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性 • 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程 • 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题
什么是软件? 软件的特点 • 软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性 • 软件的开发至今尚未完全摆脱手工艺的开发方式 • 软件本身是复杂的 • 实际问题的复杂性 • 程序逻辑结构的复杂性 • 软件成本相当昂贵,涉及到社会因素
概念 大中型软件项目的成功有赖于系统化的软件开发方法学和有纪律的软件工程。 软件质量要素不仅包含正确性、可靠性、有效性和可用性,也包含可理解性、可扩展性、可维护性。 用户优先 合理权衡 放眼全局 化繁为简 • 17
?! can lead to can lead to fault human error failure 什么是“好的软件” ? 质量术语 • Error错误:人为的错误;例如出现了输入错误、操作失误的现象 • Fault故障:错误的结果,在开发和维护中明显出现的。例如误操作删除了系统文件,导致了操作系统的崩溃。 • Failure失败:违背了需要的系统行为。例如由于开发中的错误,导致出现了系统表现出的行为与需求不一致。
什么是“好的软件”? • 好的软件工程一般都必须包含一个产生质量可靠的软件产品的策略 • 什么是“质量”? • 产品的质量。软件产品本身的质量,例如产品的性能、功能、可靠、安全等角度 • 过程质量。指的是开发软件产品的过程是否有质量。例如开发团队的质量、人际沟通的效率、规程的规范性等等。CMM就是衡量过程的质量。 • 产品在商业环境中的质量。更多的是其使用过程中用户的评价,投资回报等等。
什么是“好的软件”? 产品本身的质量 • 用户的观点:人机界面友好的程度,易用性和是否是以用户为中心的设计、产品的正确性等 • 开发者的观点:采用的技术是否成熟可靠?性能、可维护性、文档是否齐全、是否可测试等等 • 和产品质量标准相关的外部质量因素
Traceability Correctness Completeness Reliability Consistency Accuracy Efficiency Error tolerance Execution efficiency Integrity Storage efficiency Access control Usability Access audit Operability Maintainability Training Communicativeness Testability Simplicity Conciseness Instrumentation Flexibility Self-descriptiveness Expandability Portability Generality Modularity Reusability Software independence Machine independence Communications commonality Interoperability Data commonality
什么是“好的软件”? 过程质量 • 软件产品的生产过程和其它工业界的产品的生产过程也是类似的。生产过程被分为了很多个活动,一系列的活动组成了整个生产过程。生产过程中的活动均可能影响到最终的产品质量。可能存在的问题是. • 在何时何地可能找到特别的一类故障? • 如何在开发的早期找到故障?最好是在产品出厂前。 • 如何建立一种容错机制,使得在故障变成失败之前使其发生的可能最小化?例如工业界的质量管理制度,质量员的存在等; • 有没有一种活动可以在保障质量方面使得开发过程更加有效?质量保障活动。
什么是“好的软件”? 过程质量 • 软件工程中的过程建模和过程改进活动 • 能力成熟度模型(CMM)—实际上也是一种过程指导方针. • 软件过程改进和能力测定模型(SPICE) • ISO9001模型 • 统一过程模型(RUP)
什么是“好的软件”? 商业环境中的质量 • 投资回报率(ROI) • (总利润 – 总成本) = ROI 总成本 • 通过调查,一般情况下,投资回报率的计算包括以下内容: • 培训 • 时间进度 • 风险 • 质量 • 生产力 • 过程 • 用户 • 成本 • 买卖成本等
Facilities Software costs Hardware costs Dollars Materials General Assessments SCE costs Internal R&D Effort Process Documentation Quality group Software process group General 0% 10% 20% 30% 40% 50% 60% 70% Percent of interviewees 什么是“好的软件”? 各种因素对商业环境下质量的影响比例 • SCE--Software Capability Evaluation (软件能力评鉴) • R&D--Research and Development (研发)
如何获得“好的软件” • 系统方法 • 工程方法
系统方法 • 项目在开发过程并不是处于一个真空当中. • 硬件 • 别的软件任务 • 已经存在的数据库 • 另外的计算机系统 • 指导自己开发的软件的边界是很重要的. • 项目包含的内容是什么? • 什么是系统不包含的内容?需要很明确的确定下来
系统方法 系统中的元素: • 活动和对象 • 对象和活动之间的关联,和系统边界 • 相关的系统
系统方法 确定活动和对象 • 确定活动 • 从活动中确定各种对象或者实体 • 并确定对象之间的关系 • 系统 • 确定系统的边界
系统方法 系统的例子 Boundary 呼吸系统中的实体: 颗粒物质 氧气 二氧化碳 水 氮气 鼻子 嘴 气管 支气管等 呼吸系统中的活动: 吸气 过滤 将空气和血液进行交换 呼气
系统方法 相关系统 • 边界 • 一般情况下,没有系统是单独存在的.
Computer Mail room Pay information Pay checks Date validation Printing Calculation System boundary 系统方法 工资发放系统的例子
数据报表系统 数据管理系统 从远程节点到中心节点的通信系统 针对远程数据的计算系统 远程数据 收集系统 系统方法
工程方法 • 构造 • 搭建房子 • 搭建软件
工程方法 建造房子 vs. 软件 • 决定和分析房子的各种需求 • 产生并记录形成各种设计文档 • 细节描述 • 确定和设计单独房间的各种构件 • 建造各种构件 • 测试构件 • 集成构件 • 最后的修改 • 持续的维护 • 需求分析和定义 • 系统设计 • 程序设计 • 编写代码 • 单元测试 • 集成测试 • 系统测试 • 系统提交 • 维护
软件危机 软件危机主要表现在以下几个方面: (1) 软件开发的成本和进度难以准确估计,延迟交付甚至取消项目的现象屡见不鲜。 (2) 软件存在着错误多、性能低、不可靠、不安全等质量问题。 (3) 软件维护极其困难,而且很难适应不断变化的用户需求和使用环境。 如何解决软件危机?软件工程! • 36
软件工程 1968年在北大西洋公约组织(NATO)举行软件可靠性的学术会议上正式提出“软件工程(Software Engineering)”的概念。软件工程是建立和使用一套合理的工程原则,以便获得经济的软件,这种软件是可靠的,可以在实际机器上高效的运行。 (Fritz Bauer, at the First NATO Conference on Software Engineering) 软件工程是一门交叉性的工程学科,重点研究如何以系统的、可控的、高效的方式开发和维护高质量软件的问题。 • 37
什么是软件工程? • 定义: • 软件工程是涉及软件产品的系统化生产和维护的技术性和管理性规则,软件产品应该在成本估计的范围内,准时的被开发和修改. (Fairley, R., Software Engineering Concepts. New York: McGraw-Hill, 1985. ) • 软件工程是: (1)将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件. (2) (1)中所述方法的研究. (IEEE Std 610-1990)
软件工程 软件工程以关注软件质量为目标,包括过程、方法和工具等三个要素。其中,软件过程涉及开发软件产品的一组活动及其结果;软件工程方法为软件开发过程提供“如何做”的技术;CASE工具为软件开发方法提供自动的或半自动的软件支撑环境,辅助软件开发任务的完成。 软件工程人员不应该只关心技术,应当对整个社会承担重要的责任,应当遵循本行业的职业道德规范,否则无法在这个行业中长久立足。 • 39
软件工程 • 总结:软件工程是涉及到软件产品所有方面的工程化规则. • 软件工程师应该采用系统化和有组织的方法,使用合适的工具和技术来解决具体的问题,并考虑到开发的限制和可用的资源.
PROBLEM Subproblem 4 Subproblem 1 Subproblem 2 Subproblem 3 软件工程 问题的分析与合成
Solution 4 Solution 1 Solution 2 Solution 3 SOLUTION 软件工程 问题的分析与合成
软件工程 我们要解决问题,需要 • 方法或者技术:主要是产生结果的过程 • 工具:完成工作的工具和自动化系统,类似流水线的东西,降低生产的难度 • 过程:如何解决工具和技术组合的方法? • 范例:做事情的类型,也就是总结生产软件的过程模型
COMPUTER SCIENCE CUSTOMER Theories Computer Functions Problem SOFTWARE ENGINEERING Tools and Techniques to Solve Problem 软件工程 软件工程所处的位置?
软件工程 计算机科学和软件工程之间有何不同? • 计算机科学关心的是理论和基础性的知识;软件工程关心的则是开发和提交有用软件的实践活动. • 计算机科学家解决的是计算机本身的问题,而软件工程师则是将计算机作为工具以生产有质量的软件.
软件工程 计算机科学和软件工程之间有何不同? • 系统工程师关心的是基于计算机系统开发的所有方面,包括硬件、软件、和过程。软件工程则只是其中的一个部分,系统工程师关心的是开发软件基础、控制、应用和系统中的数据库. • 系统工程师关心的是系统说明、体系结构涉及、集成和开发.
软件工程 软件工程涉及到的人员: • 客户: • 公司、组织、和为软件付费的人. • 开发者: • 公司、组织和为客户创建软件的人(包括管理者和测试者). • 用户: • 真正使用该系统的人.
Sponsors system development CUSTOMER $$$, needs DEVELOPER Contractual obligation USER Uses system Builds system Needs Software system 软件工程 软件工程涉及到的人员
软件工程 开发团队的成员 • 每个工程师一般只是擅长开发中的一个方面. • 需求分析员 • 程序员 • 测试人员 • 培训师 • 维护团队 • 配置管理团队
软件工程的目标 软件工程的目标 : (1) 支付较低的开发成本; (2) 达到要求的软件功能; (3) 获取较好的软件性能; (4) 开发的软件易于移植; (5) 需要较低的维护费用; (6) 能按时完成开发任务,及时交付使用; (7) 开发的软件可靠性高。 • 50