510 likes | 719 Views
总复习. 福州大学 · 软件学院 · 计算机教研室. 王灿辉. Software Engineering (软件工程). 软件工程主要讲述软件开发的道理 ,基本上是软件实践者的成功经验和失败教训的总结。 软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会, 关键在于运用 。 我们不可以把软件工程方法看成是诸葛亮的锦囊妙计─在出了问题后才打开看看,而应该事先掌握,预料将要出现的问题,控制每个实践环节,并防患于未然。 研究软件工程永远做不到理论家那么潇洒:定理证明了,就完事。. 软件工程.
E N D
总复习 福州大学·软件学院·计算机教研室 王灿辉 SOFTWARE ENGINEERING
Software Engineering (软件工程) • 软件工程主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。 • 软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运用。 • 我们不可以把软件工程方法看成是诸葛亮的锦囊妙计─在出了问题后才打开看看,而应该事先掌握,预料将要出现的问题,控制每个实践环节,并防患于未然。 • 研究软件工程永远做不到理论家那么潇洒:定理证明了,就完事。 SOFTWARE ENGINEERING
软件工程 • 人们都有自己的世界观和方法论,能自然而然地运用于生活和工作中。同样,软件人员脑子里的软件工程观念会无形地支配其怎么去做事情。软件工程三十多年的发展,已经积累了相当多的方法,但这些方法不是严密的理论。软件人员不应该教条地套用方法,更重要的是学会“选择合适的方法”和“产生新方法”。 SOFTWARE ENGINEERING
授课内容 • 软件工程概述、软件过程模型 • 系统工程、软件项目管理、风险管理 • 软件需求分析、软件(概要、详细)设计、编程、软件测试和纠错 • 软件维护、变更管理、软件度量、软件质量和软件质量保证、敏捷软件工程 • 面向对象方法、软件复用、软件开发工具 SOFTWARE ENGINEERING
第一章:导论 • Evolution(进展) of Software • Description(定义) of Software • Software Quality(软件质量) • Software Characteristics(软件特性) • Software applications(软件应用) • Software Crisis(现象、原因、解决方法等) • Software Myths(神话) SOFTWARE ENGINEERING
第一章:导论 • Software engineering(软件工程) • software life cycle(软件生存周期) • 生存周期模型(life-cycle model) • Process、Methods、Tools(CASE) • A Generic View of Software engineering • Software Engineering Paradigm (Software Process Model) SOFTWARE ENGINEERING
第一章:导论 • The Linear Sequential Model(waterfall) • The Loop Model(循环模型) • The Prototyping Model(原型法) • The RAD Model(快速应用开发) • The Incremental Model(增量开发模型) SOFTWARE ENGINEERING
第一章:导论 • The Spiral Model(螺旋模型) • The Formal Methods Model(形式化) • Fourth Generation Technique(第4代) • The Fountain Model(喷泉模型) • RUP(Rational Unified Process) • intelligent model(智能模型 ) SOFTWARE ENGINEERING
第二章:系统工程 • System engineering • System Elements • Product Engineering(Identify the customer’s need, Feasibility Study, economic and technical analysis allocation, Establish cost and schedule constraints, Create a system definition ) SOFTWARE ENGINEERING
第三章:软件项目计划 • Project Planning Objectives • Software Project Planning(1)Software Scope(2) Estimation of Resources(3)Cost and Effort Estimation(4)Software Project Scheduling SOFTWARE ENGINEERING
第四章:软件需求分析 • Software Requirements Analysis • Problem recognition(问题识别); • Evaluation(评价) and synthesis(综合); • Modeling(建模); • Specification(软件需求规格说明);and • Review(评审或复审). • 系统分析员应有的能力 SOFTWARE ENGINEERING
第四章:软件需求分析 • Structured Analysis(SA):(1)Data Dictionary(DD)/ Entity-Relationship Diagram(ERD) (2)Data Flow Diagram(DFD)(3)Process Specification SOFTWARE ENGINEERING
第五章:软件设计 • Abstraction • Refinement • Modularity(模块化) • Software Architecture(软件体系结构) • Control hierarchy • Structure Partitioning • Data Structure • Software Procedure(软件过程表示) • Information Hiding SOFTWARE ENGINEERING
第五章:软件设计 • Software design :(1)data design(2)architectural design (3)interface design(4)procedural design • 正式技术评审(FTR) • Structured Programming SOFTWARE ENGINEERING
第六章:编程 • 计算机(编程)语言及其选择 • 编程风格(原则、命名、序言性注解、功能性注解、代码缩进) • 编程效率 • 保护性编程 • 冗余编程 SOFTWARE ENGINEERING
第七章:软件测试 • Testing Objectives • Testing Principles • 测试方法和测试技术 • A Software Testing Strategy • The Art of Debugging SOFTWARE ENGINEERING
第七章:软件测试 • 测试必须按照软件需求和设计阶段所制订的测试计划进行,其结果以“测试分析报告”的形式提交。 回归测试 软件配置 错误 评价 改正 纠错 测试结果 测试 预期的结果 错误率数据` 测试配置 测试计划文档的一部分 预测的可靠性 可靠性 模型 SOFTWARE ENGINEERING
第七章:软件测试 桌前检查 代码会审 静态技术 步行检查 路径测试 测试方法和测试技术 条件测试 白盒测试 数据测试 循环测试 动态技术 等价类划分 边界值分析 黑盒测试 比较测试 SOFTWARE ENGINEERING
第七章:软件测试 模块 测试过的模块 模块测试 软件需求 经装配好 的软件 模块 确认测试 模块测试 确认过的软件 组装测试 …… 系统测试 模块测试 设计信息 模块 其他系统元素 可运行的系统 软件试运行、验收 SOFTWARE ENGINEERING
第七章:软件测试 单元测试 测试步骤 集成测试 有效性测试 系统测试 α测试 培训和试运行 β测试 接收测试 正式发布软件 运行和维护 软件改版 SOFTWARE ENGINEERING
第七章:软件维护 • 软件维护是软件生命周期中历时最长,人力和资源耗费最多的一个阶段,也是研究最少的一个阶段。 SOFTWARE ENGINEERING
第七章:软件维护 软件维护类型 SOFTWARE ENGINEERING
第七章:软件维护 • 软件维护中的问题 • 影响软件维护的因素 • 软件维护费用 • 软件的可维护性 • 软件的维护任务 • 软件维护的副作用 • 软件的反推工程和再生工程 SOFTWARE ENGINEERING
第八章:面向对象方法 • 面向对象的软件开发方法OOSD概述 • 面向对象的基本概念(抽象、对象、类、继承、封装、消息、多态性、重载、动态绑定、永久对象、结构与连接) • OOA和OOD基本概念 SOFTWARE ENGINEERING
第九章:软件复用 • 软构件(Software Component) • 软件复用的定义及其目的等 • 构件库,基于构件的开发过程、特点、风险 • 三种构件技术规范 SOFTWARE ENGINEERING
第十章:软件工具和集成化环境 • 软件(开发)工具 • 软件开发环境(SDE),也称为软件工程环境(SEE) • 计算机辅助软件工程CASE SOFTWARE ENGINEERING
一些观点 • 软件产业作为一个新生事物并且在产生的最初阶段涌现出部分的个人英雄如比尔盖茨等,因此有部分人就对软件工程的必要性产生了疑问。我认为这种疑问完全是没有必要的。一个事物的发展总是要经历长时间的积累,软件产业发展到今天的规模和地步,如果不根据实际情况,按照软件工程的部分思想进行产业生产,那软件产业的末日也许也就不远了。 SOFTWARE ENGINEERING
一些观点 • 软件工程无论怎么发展,都不是追求质量的最优化,而是合理的成本控制下的提高质量和开发效率,否则就是误入歧途。不管教科书上的理论多么美丽诱人,都要由实践来验证。 SOFTWARE ENGINEERING
一些观点 • 软件工程人员有两种:卖代码的,卖代码加上工程设计思想的。前一种是多数,第二种永远是少数。在美国这两者的区别是两万和二十万的区别:前者糊口都有困难,后者可以买游艇;前者每天通宵熬夜deliver,他们最大的奢求就是躺在床上放松一些腰肌,后者可以抽着雪茄谈哲学,精力充沛地逛party。 SOFTWARE ENGINEERING
笔试概况 • 考试时长:120分钟 • 总分:100分 • 形式:闭卷考试 • 试卷难度:难易程度分为四个等级分别为容易、一般、较难、难,大致比例为4:4:1:1。 SOFTWARE ENGINEERING
笔试要求 • 题型:判断题、填空题、单选题、改错题、名词解析、简答题、分析与设计题、综合题等。 • 纯靠记忆的题目(如:名词解析等)的份量不大。加大理解题和开发题的比例。 • 题目覆盖面大,难度小,注意重点章节。 SOFTWARE ENGINEERING
各章节分数比例 • 软件工程概述和软件过程模型、软件(概要、详细)设计、软件测试和纠错:占较大比例 • 系统工程、软件项目管理与风险管理、软件需求分析、编程、软件维护、软件质量和软件质量保证、面向对象方法、软件复用、软件工具、变更管理、软件度量、敏捷软件工程、面向对象方法等:占比较小 SOFTWARE ENGINEERING
样题—判断题 • 有效性(确认)测试(Validation Testing)是在模拟环境(或开发环境)下运用白盒法(white-box),验证软件特性是否与需求符合。 • 从设计软件产品开始到产品不能再使用时为止的时间周期称为软件生命(存)周期。软件生存周期通常包括需求分析阶段、设计阶段、实现阶段、测试阶段、安装和验收阶段、运行和维护阶段,有时还包括引退阶段。 SOFTWARE ENGINEERING
样题—判断题 • 原型化方法的基本思想是花费少量代价建立一个可运行的系统,是用户及早获得学习的机会。在使用快速原型法进行软件开发之前,必须准确了解用户的需求。原型法特别适合于开发探索型、实验型的软件,它能减少系统开发的风险。 • 软件工程过程应该以软件设计为中心,关键是编写程序。 SOFTWARE ENGINEERING
样题—单选题 • 模块内聚性(Cohesion)是模块独立性的重要度量因素,在下述的几类内聚性中,具有最强内聚性的一类是( )。 A. 顺序型内聚 B. 通信型内聚 C. 功能型内聚 D. 偶然型内聚 SOFTWARE ENGINEERING
样题—单选题 • 无论什么样的应用领域、项目规模和项目复杂性,软件工程(Software Engineering)工作都可以分为三个阶段:定义(definition)阶段(做什么),开发(development)阶段(如何做)和维护(maintenance)阶段(如何改)。下述哪个(些)工作应属于软件开发阶段的内容?( ) …… SOFTWARE ENGINEERING
样题—单选题 • ……下述哪个(些)工作应属于软件开发阶段的内容?( ) ①软件测试 ②可行性研究 ③软件设计 ④编程(编码) A. ①、②和③ B. ①、③和④ C. ②、③和④ D. 全部 SOFTWARE ENGINEERING
样题—填空题 • 按照软件工程的观点,软件(Software)应由、数据(Data)和文档(documents)三部分组成。 答案:程序(Programs) SOFTWARE ENGINEERING
样题—填空题 • 是用作为硬件工程、软件工程、数据库工程和人力工程等系统元素基础的一份文档。它描述将要开发的基于计算机的系统的功能、性能和限制等。说明书界定了这些系统元素的范围。 答案:系统规格说明书 SOFTWARE ENGINEERING
样题—填空题 • 软件维护(maintenance)时,对测试阶段未发现的错误进行测试、诊断、定位、纠错、修改、回归测试的过程称为。 答案:纠错性维护 SOFTWARE ENGINEERING
样题—填空题 • 自顶向下的方式在集成测试(Integration testing)过程中,如果想首先实现和验证一个完整的软件功能,那么应该选用的组装方式。 答案:深度优先 SOFTWARE ENGINEERING
样题—改错题 • 软件工程经验证明:软件开发中要掌握40-20-40规则,它强调了软件开发中的设计、编程和测试。 答案:分析、设计 SOFTWARE ENGINEERING
样题—改错题 • 软件的适应性(Adaptive)维护是一个设计的恢复过程,它是通过对一个程序(系统)进行分析,然后力图在比源代码更高抽象层次上建立程序表示的过程。 答案:逆向工程 或 反推工程 SOFTWARE ENGINEERING
样题—名词解析题 1、软件危机2、软件工程 3、软件生命周期4、数据字典 5、信息隐蔽6、耦合性 7、回归测试8、完善性维护 9、软件质量10、多态性 11、软件复用 SOFTWARE ENGINEERING
样题—简答题 1、简述软件(Software)具有的特点。 2、什么是软件生存周期模型(Software life cycle model)?列出目前比较常用的一些主要的软件过程模型? 3、简述瀑布式软件开发模型的特点。 4、为什么要把软件分解为模块(Module)? 5、信息隐蔽(Information hiding) 6、谈谈增量模型常用的一些场合 SOFTWARE ENGINEERING
样题—简答题 7、说明结构化程序设计(SP:Structured Program)的主要原则。 8、概述软件测试的主要原则。 9、根据你的理解,谈谈一份可行性研究报告应该包括的主要内容。 10、简述(用户定制的)软件测试的主要步骤,并简要说明各测试步骤的目的。 11、概述面向对象的软件开发方法的特点。 SOFTWARE ENGINEERING
样题—分析题 • 某单位向社会公开招考公务员,首先报考者向该单位出示身份证、填写好的报考表等资料,单位工作人员从公安局档案数据库中查找报名者是否有犯罪前科,以及审核其是否符合报名条件。审核不合格则告知报考者并退还相关资料;审核合格则将报考信息录入公务员报考系统,并输出一份考试通知,同时告知报考者交纳相应的报名费。 • 请画出该事务处理的第一层数据流图(DFD)。 SOFTWARE ENGINEERING
样题—分析题 • 已知被测试模块的C语言源程序如下,完成下述的各小题: #include <stdio.h> void main(){ float x; short int y; printf("Input Value : "); scanf("%f",&x); if (x<0) y=-1; else if (x==0) y=0; else y=1; printf("x=%f,SGN(x)=%1hd\n",x,y); } SOFTWARE ENGINEERING
样题—分析题 (1)上述程序有条独立路径; (2)设计一组测试用例以强制执行每条独立路径。 (3)设计满足“判定覆盖”的一组测试用例(要求用最少的测试用例)。 (4)设计满足“条件覆盖”的一组测试用例 (5)设计满足“条件、判定覆盖”的一组测试用例 (6)设计满足“条件组合覆盖”的一组测试用例 SOFTWARE ENGINEERING
辅导、答疑 • 时间:7.2和7.3 • 地点:新区院办301、104 • 老师:王灿辉、张舒 SOFTWARE ENGINEERING