软件工程导论

软件工程导论笔记

风流意气都作罢 提交于 2020-02-28 09:51:46
软件工程导论笔记 1.1软件危机 1.2软件工程 1.4软件过程 1.4.1瀑布模型 1.4.2快速原型模型 1.4.3增量模型 1.4.4螺旋模型 1.4.5喷泉模型 1.4.6Rational统一过程(RUP) 1.4.7敏捷过程与极限编程 1.4.8微软过程 1.1软件危机 软件危机:软件开发和维护中遇到的一系列严重问题。 软件危机的典型表现: 软件开发的成本和进度常估计不准确 用户经常不满意已完成的软件 软件产品的质量常靠不住 软件常不可维护 没有文档 软件成本在计算机系统总成本中所占的比例逐年上升 软件开发生产效率提高的速度,跟不上计算机应用迅速普及深入的趋势 软件危机产生的原因: 与软件本身特点有关 1、软件不同于硬件,管理和控制软件开发过程相当困难。 2、软件在运行过程中不会因为使用过长而被“用坏”。如果运行中发现了错误,很可能是遇到了一个在开发时期引入的、在测试阶段没能检测出来的错误。 3、软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。 4、事实上,对用户要求没有准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。 5、目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念。在实践过程中或多或上地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。 6

《软件工程导论》/ 第一章 软件工程学概述 / 1.4软件过程 / 1.4.1瀑布模型

左心房为你撑大大i 提交于 2020-01-28 09:36:53
在20世纪80年代之前,瀑布模型一致是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。 一、按照传统的瀑布模型开发软件,有下述的几个特点: 1、阶段间具有顺序性和依赖性 这个特点有两重含义: (1)必须等前一阶段的工作完成之后,才能开始后一阶段的工作; (2)前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。 2、推迟实现的观点 实践表明,对于规模较大的软件项目来说,往往编码开始得越早,最终完成开发工作所需要的实践反而越长。这是因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性后果。 瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。 3、质量保证的观点 为了保证所开发软件的质量,在瀑布模型的每个阶段都应该坚持两个重要做法: (1)每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。 完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介

《软件工程导论》—领骑衫获奖感言

安稳与你 提交于 2020-01-24 10:37:50
一、获奖感言 首先,感谢老师们对我的肯定,我觉得这份奖励不仅仅是我个人的,更是对我们卓越班的鼓励,我们班有很多很努力、很厉害的同学,良好的学习氛围对于我们个人的发展是极其重要的。我觉得我可以拿到这件领骑衫,主要的原因是自己对这门课的态度以及自己做事的习惯。当然,作为大三学生,一名考研党,我的原则是在有限的时间内做出自己觉得合格的作业。同时,过去的7周时间,在做软件作业的时候,我发现了自己很多不足,这个过程也是不断充实自己,完善自己的过程,我想这就是成长,我仍在前行的路上,我会继续加油的。 最后,不得不说一句:老师,您们辛苦了,谢谢您们的付出。 二、学习心得 通过这几次的作业情况,我提几点建议,希望没有注意到同学们在以后的项目作业中多加注意: 1、“试卷”很重要,老师布置的作业博客,大家一定要认真阅读,每次的作业都有任务1、任务2......,大家要明确要求,进而分析求解。 2、不局限与“试卷”,试着加入附加功能。老师往往是给我们一个大的框架,我们在详细设计时,应该多思考,尝试加入自己的创新点。 3、注重博客的编写以及排版,我们要通过文字、图片反映出我们做的东西,让别人阅读起来比较舒服,且容易理解。 4、认真对待老师的评论,及时沟通、改正自己的错误。并不是说在deadline之前提交了博客就大功告成了,No,我们还要去继续优化迭代,这个过程因为有前提基础,往往我们会高效的学到很多知识

软件工程导论 课程主页

ぐ巨炮叔叔 提交于 2020-01-16 20:27:52
课程概述: 本课程主要介绍软件工程概念及其过程模型、结构化分析/设计/实现方法和工具;统一建模语言和敏捷开发方法;面向对象方法学及面向对象的概念、模型、分析方法、设计方法、实现方法,用户界面设计、软件项目管理及其定量度量方法、相关国际标准。 教学目的: 本课程的教学目的,应使学生了解大型复杂软件系统的开发方法、规则和工具。使其克服长期书写小程序形成的“重编码、轻分析设计;重编码、轻技术资料建设和管理”的习惯;使学生理解软件工程原理/方法/规则的必要性和掌握其技术细节;使学生了解软件工程学的进展和前沿动态,通过软件系统设计的练习,巩固和应用所学知识。 课外实验 实验要求 实验任务 一 内容和模版 实验任务 二 内容和模版 实验任务 三 内容和模版 结业论文 论文模版 论文内容要求: 论文结构完整,字数10000 论文结构要求: 摘 要 第1章 概 述 1 论文背景 2 本文研究内容 第2章 系统需求分析 1 系统功能需求 2 系统客户需求 3 性能需求 第3章 系统概要设计 1 架构设计 2 系统功能模块设计 3 系统数据库设计 第4章 系统详细设计与实现 1 系统架构的实现 2 系统部分界面演示 第5章 总结与展望 6.1 研究总结 6.2 研究展望 参考文献 来源: https://www.cnblogs.com/jlxuqiang/p/3308331.html

软件工程导论(张海藩)——第六章

不羁岁月 提交于 2020-01-01 13:05:49
详细设计 详细设计的主要任务是什么? 人机界面设计主要考虑哪些设计问题? 掌握盒图、PAD图、判定表、判定树及伪码的设计方法。 给定问题,用Jackson方法设计数据的输入结构、输出结构及程序结构。 已知程序流图,计算环型复杂度。 详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 一、结构程序设计 二、人机界面设计 系统响应时间 用户帮助设施 出错信息处理 命令交互 三、过程设计的工具 1、程序流程图 程序流程图又称程序框图,是历史最悠久,使用最广泛的描述过程设计的方法。 缺点: 程序流图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。 程序流图不易表达数据结构 2、盒图 盒图又称N-S图。它有以下特点: 功能域明确,可以从盒图上一眼就看出来。 不可能任意转移控制 很容易确定局部和全局数据的作用域 很容易表现嵌套关系,也可表示模块的层次结构。 3、PAD图 PAD图的主要优点如下: (1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。 (2) PAD图所描绘的程序结构十分清晰

软件工程导论(张海藩)——第七章

依然范特西╮ 提交于 2020-01-01 12:34:15
实现 通常把编码和测试统称为实现 1.编码的任务? 2.良好的编码风格,应遵循哪些规则? 3.测试的目标是什么? 4.测试分哪几个步骤,每个步骤解决什么问题? 5.什么是黑盒测试和白盒测试,各包含哪些测试技术 6.单元测试有哪些内容?驱动模块和存根模块的作用 7.什么是集成测试?非渐增式与渐增式测试有何区别 8.调试的任务是什么?有哪些调试途径? 9.什么是软件可靠性和软件可用性? 10 .如何估算测试时间和程序中的故障总数? 编码 把软件设计结果翻译成程序 1、选择程序设计语言 2、编码风格 1、使用一致和有意义的标识符名 2、匈牙利标记法:[Prefix]-BaseTag-Name 3、用缩进显示程序结构 4、用加括号的方式排除二义性 5、避免大量使用循环嵌套和条件嵌套 6、当心运算符的副作用 7、把数定义成常量 8、利用sizeof()计算对象的大小 9、清晰的代码,而非最巧妙的代码 软件测试基础 测试是为了发现程序中的错误而执行程序的过程 测试步骤: 1、模块测试(单元测试) 2、子系统测试(集成测试) 3、系统测试(集成测试) 4、验收测试(确认测试) 测试方法: 测试任何产品都有两种方法:如果已经知道了产品应该具有发功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常执行

软件工程导论第六版复习

让人想犯罪 __ 提交于 2019-12-30 02:44:05
软件工程导论第六版复习 第一章 软件工程概述 第二章 可行性研(是否值得做?) 第三章 需求分析(做什么?) 第五章 总体设计(怎么做?) 第六章 详细设计 第七章 实现 第八章 维护 第九章 面向对象方法学 第十章 面向对象分析 第十三章 软件项目管理 第一章 软件工程概述 1.P5 软件工程是什么? 答:软件工程是 指导 计算机软件 开发 和 维护 的一门 工程 学科,采用工程的概念、原理、技术和方法来开发与维护软件,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 2.P9 软件工程包括 技术 和 管理 两个方面的内容。 3.P9 软件工程方法学包含3要素: 方法 、 过程 和 工具 4.P9 使用最广泛的软件工程方法学: 传统方法学(生命周期方法学)、面向对象方法学 5.P11 软件生命周期由3个时期组成: 软件定义、软件开发、运行维护(软件维护) 软件定义 3个阶段: 问题定义、可行性研究、需求分析 软件开发 4个阶段: 总体设计、详细设计、编码和单元测试、综合测试 6.P15-22 软件工程5大 模型 及其 驱动类型 : 瀑布模型(文档驱动)、快速原型模型、增量模型、螺旋模型(风险驱动)、喷泉模型(对象驱动) 7.P22 迭代式开发: 不必精益求精,反复修改重做 8.P31小结 糊涂观念(P3): 忽视软件需求分析的重要性、认为软件开发就是写程序并设法使之运行

《软件工程导论》/ 第一章 软件工程学概述 / 1.2 软件工程 / 1.2.2 软件工程的基本原理

╄→尐↘猪︶ㄣ 提交于 2019-12-18 02:07:43
1.2.2 软件工程的基本原理 1、用分阶段的生命周期计划严格管理 有人经过统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的。 在软件开发与维护的漫长的生命周期中,需要完成许多性质各异的工作。这条基本原理意味着,应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。 2、坚持进行阶段评审 软件的质量保证工作不能等到编码阶段结束之后再进行。这是因为: 第一,大部分错误是在编码之前造成的,例如,根据Boehm等人的统计,设计错误占软件错误的63%,编码错误仅占37%;第二,错误发现与改正得越晚,所需付出的代价也越高。 因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。 3、实行严格的产品控制 在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的,只能依靠 科学的产品控制技术,即基准配置管理 来顺应这种要求。 基准配置,又称为基线配置,它们是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。 基准配置管理,也称为变动控制:一切有关修改软件的建议,特别是设计对基线配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。 4、采用现代程序设计技术 实践表明

软件工程导论读书笔记

雨燕双飞 提交于 2019-12-02 15:23:42
第一章:软件工程概论 1.1软件危机 表现:轻视需求分析,认为软件工程就是写程序,轻视软件维护。 1.2软件工程 软件工程方法学三要素:过程,工具,方法。 1.3软件生命周期 软件定义 问题定义 可行性研究 需求分析 软件开发 总体设计 详细设计 编码 单元测试与综合测试 软件维护 1.4软件过程 1:瀑布模型 阶段间具有顺序性与依赖性 推迟实现 质量保证 瀑布模型是文档驱动 2:快速原型模型 快速建立可运行的程序,往往是最终一个子集,特点是顺序执行,没有反馈。 3:增量模型 把软件作为一个系列增量构件来分部分的设计,编码,测试。不断把最新的成果将会用户体验与使用。 4:螺旋模型 每个阶段都增加风险分析和快速原型模型。每阶段都实现一个原型,然后进行风险分析。 5:喷泉模型 不同步骤间,同一步骤内部的迭代。体现面向对象编程的开发过程迭代与平滑过度。 6:rational统一过程(RUP) 7:敏捷过程与极限编程 四条:开发人员素质与交流比过程与工具更重要,可以工作的软件比面面具到的文档更重要,与客户的合作比谈判更重要,及时响应更重要。 8:微软过程 第二章:结构化分析 2.1:可行性研究 技术可行性,经济可行性,操作可行性 2.3需求分析 回答系统做什么,不用回答怎么做。 确定对系统的综合要求,分析系统的数据要求,导出系统的逻辑模型,修正系统开发计划 2.4建模与规格说明

软件工程导论 - 结对编程互评

社会主义新天地 提交于 2019-11-30 17:08:17
这次结对编程我的伙伴是王文宣,仔细看完嘉泽代码后简要说说个人我的看法: 一  优点:   (1)代码可读性很高。    代码方法,对象的命名看起来一目了然,能秒懂这个方法是干嘛的,这个对象是代表的什么;    缩进非常整齐;每个成对的‘{}’一定是列对其的;而且各占一行;每次调用一个新方法或使用if等语句生成有个新的“{}“”如果是在当前方法之下的一定或整齐的缩进四个空格,且每次缩进都是四个空格; 编码整齐,看起来很舒服; 代码简单明了,满足了大多数个人项目的要求。控制台的提示信息十分全面,可读性很好,并且对不规范的输入进行了处理,使程序运行时不会出现bug,考虑十分周全。  (2)写代码思路清晰,模块化程度高,根据次序需求,划分为:     时间日期模块:生成当前时间日期,好用于试卷的命名;     试卷生成模块:生成不同难度的试卷并输出到账户的文件夹中;     登录模块:输入正确用户名以登录;     切换年级模块;用于切换用户年级;     在main()函数中直接对以上模块调用以实现此次项目需求; 二  人无完人;代码也肯定会存在一些缺点:   (1)没有使用到面向对象的思路来编写;    这个程序是面向过程的,没有使用到类;倘若变更需求,代码则需要大幅度改动;这样可扩展性不是很好,而且在代码里使用了goto语句;容易出现bug; (2)程序是断电不保存的