软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
(1)适用性:软件在不同的系统约束条件下,使用户需求得到满足的难易程度。
(2)有效性:软件系统能最有效的利用计算机的时间和空间资源。各种软件无不把系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合,在追求时间有效性和空间有效性时会发生矛盾,这时不得不牺牲时间有效性换取空间有效性或牺牲空间有效性换取时间有效性。时/空折衷是经常采用的技巧。
软件的概念: 软件是计算机系统中与硬件相互依存的另一部份,是程序、数据、以及相关文件的完整集合。程序是事先设计的功能要求执行的序列。数据是使得程序能征程操作信息的数据结构。文档是程序开发,维护和利用的有关图文和材料。软件的表现形式分为有形和无形,软件的有形表现在软件的的文档、程序、代码、用户界面、输出表报、等。软件的无形部分表现在:软件的内部逻辑,是软件自身的设计思想。
软件危机:软甲危机是软甲开发和软件维护。具体产生的原因有对软件的成本和进度的估计不是准确,项目管理经验缺乏。用户对已完成的软件系统不是很满意,模糊的设计需求、闭门造车、盲与编程、交付日期没有保证。软件的产品质量靠不住。存在bug。软件设计不可维护。软甲没有适当的文档资料,缺少设计资料,难以维护。软件系统过于庞大,成本过高,软甲开发效率过低,技术水平不好。避免软件危机的方法,注意结合实践经验的积累,利用成熟的开发工具。引入软件工程学,软甲工程学的重要目的就是提高软件的可维护性,减少软件的维护成本,缩短软件的开发周期。
软件工程:是软件开发中系统思想的具体实现 ,软甲工程是开发、运行、维护、和修复的系统方法,是一门工程学科,即运用工程的概念、原理、技术、方法来开发和维护软件。
软件工程三要素:方法、工具、过程、
传统的结构化方法:也叫做生命周期方法学,采用结构化分析、结构化设计、结构化实现。
面向对象方法学的4个要点: 对象+类+继承+用消息通信 简化了软件开发和维护,提高了软件的可重用性。
软件生命周期: 定义(问题的可行性、可行性研究、需求分析) 开发(总体设计、详细设计、编码&测试单元、综合测试)维护(运行&维护)
分析系统的数据要求: 通常采用建立数据模型的方法 (E-R图)
设计阶段:总体设计(结构设计) 可以列出很多种解决方案 ,把各项需求转换成软件的体系结构。详细设计(过程设计)对每一个模块要完成的工作进行具体的描述,为源程序编写代码打下基础。
模块设计的目标:强内聚、低耦合。
软件设计的重要性:软件设计是后续开发步骤和维护工作的基础。如果没有软甲设计,只能建立一个不稳定的软件体系结构。
编码阶段: 编码程序应当具有结构良好,清晰易读。且与设计相一致。 程序的质量基本取决于设计的质量。
测试阶段:黑盒测试&白盒测试 测试的策略:单元测试、集成测试、确认测试、系统测试、验收测试。
运行和维护阶段: 改正性维护:运行中发现了软件中的bug,需要改正; 适用性维护:为了适应变化偶尔软件的工作环境,需要适当的改变;完善性维护:为了增强软件的功能需求变更;预防性维护:为了改进未来软件的可维护性或者可靠性,主动的对正在使用的软件系统完善其功能。
软件过程模型:软件过程是为了获得高质量的软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作,是一个将用户需求转换成软件系统所需的活动集合 即 项目管理+软件开发=软件开发过程
软件过程模型:瀑布模型----文档驱动型 快速原型模型--------原型驱动 增量模型-------构建驱动 螺旋模型------风险+原型驱动
瀑布模型:计划--需求分析--设计--编码--测试--运行--评价--计划-- 瀑布模型的特点: 顺序性、依赖性 推迟程序的物理实现--按照步骤进行 质量保证 易于组织,缺点是:阶段文档驱动 开发可能失败。需求发生变化后引起的代价将提高,维护难。适合在软件开发需求比较明确,开发技术比较成熟。工程管理比较严格的场合下使用,如 产品软件。
快速原型模型:采用迭代求精的方法 ,首先系统分析人员对用户的需求的理解,利用先进的软甲工具快速的构建一个可以子啊计算机上运行的软件原型系统。然后,让用户试用原型系统,并收集用户的反馈意见,获取用户的真实需求。遵循边开发边使用的原则
原型系统仅包括未来系统的主要功能,以及系统的重要的接口。 为了尽快的像用户提供原型,应尽量缩短开发时间,特点是:用户实时参与,便于交流,比较适合大型,复杂的软件系统。
喷泉型模型:是一种以用户需求为都动力,一对象为驱动的迭代模型,主要用于面向对象的软件开发过程。
现代软件的开发模式:基于组件的开发方法 、面向领域的软件开发方法、极限模型
极限模型:软件团队为了避免陷入需求不断增长的过程泥潭,概括除了敏捷的软件开发方法,极限模型开发阶段分成四个部分(分析、设计、编码、测试)在全过程中使用迭代增量开发,反馈修正和反复测试。
软件开发的基本目标:低成本,高效率,满足用户需求、易于移植、低维护、按时交付。
软件体系结构:定义了软件局部和总体设计计算部件的构成,以及这些部件之间的相互作用。从整体上看买软件体系结构是由结构和功能各异、相互作用的部件集合、并按照层次构成。
胖客户机:客户机上同显示逻辑和应用逻辑 瘦客户机:客户机上只显示显示逻辑 , 服务器上显示逻辑处理,
通过UML图可以清楚的表达设计思想,并为代码实现提供框架 ,针对的数据类型 类的定义
类拥有自己的数据和行为,能够完成自身的工作职责,过程是类的组成部分,为类提供行为。通过类的对象之间的写作完成系统功能。
结构化思维: 结构化思维是利用过程刻画数据之间的关系,对象思维是直接利用类表达数据之间的关系。结构化中是si的。数据是死的,全部依赖算法操作。对象思维中数据是活的,他知道自己的属性,并能完成自己的工作,结构化思维更像是一个人解决问题,对象思维是一个团队在工作。
面向对象的开方法:是从现实世界的客观对象入手解决问题,尽量运用人的思维方式送多个方面来构造软件系统,
UML方法:是指具有指定的建模元素,杨的语法,明确的语义的建模语言,是面向对象技术领域内占德威的标准建模语言,
对象:是一个实体,一个事件、一个名词、可以获得某种东西,可以想象有自己的标识,状态,和行为的客观世界中的任何事物。
类:类是一系列对象的抽象描述,这些对象共享相同的属性,操作、关系、和语义,一个具体的对象是该类的一个实例,类抽象的过程就是具体对想到额特征和行为进行参数,分别用类和操作类表示,类分为三个部分,类名、属性、操做
传统的软件建模方法,建立申诉局模型、功能模型、行为模型。并监视分解原则。
建模的必要性: 降低复杂度,交流工具,可视化。
常见模型分类:业务模型:对业务过程、工作流、组织的建模、描述业务; 需求模型:对捕获的需求进行整理和分析的工具,辅助开发人员与用户进行沟通,分析业务; 设计模型:包含高层设计和详细设计模型,用于统一开发人员,沟通设计信息,设计软件; 数据库设计模型: 设计数据库的结构、表格以及应用系统的交互,管理数据; 实现模型:用来清理软禁组成、部署方案、为安装与维护人员的工作提供指导,系统实施
UML是一个标准的建模语言,对任何具有静态结构的和动态结构行为的软件系统进行建模。UML系统适用于不同的阶段,需求阶段用用例,分析阶段用类图,实现阶段用交互图,构造阶段用编程语言。
构造块: 事物:结构、行为、分组、注释
关系:: 依赖、关联、泛化、实现、
图: 静态模型:类图、对象图、构建图、部署图、包图、组合结构图、外廓图、
动态模型: 顺序图、通信图、时间图、交互纵览图、状态机图、用例图、
类图:类与类之间的相互关系,对象图: 对象与对象之间的相互关系 ;;; 构件图:构建及其相互依赖关系 部署图: 构建在各个节点上的部署。顺序图:强调时间顺序交互图。通信图:强调对象之间协作的交互图,状态机图:类所经历的各种状态,活动图:对工作流建模:用例图:需求捕获,测试数据。
类图:是软件的蓝图,详细描述了系统各个对象之间的相互关系,以及这些类与类之间的静态关系。 类、接口、依赖、关联、泛化、实现、
对象图:表示某一时刻类的对象静态结构和行为 对象、链接、多重新、
包图:展现由模型本身分解而成的组织单元,以及他们的依赖关系。 组织结构图、部件、端口、协议、
组织结构图: 描述系统中某一部分的内部结构,包括该部分与其他系统部分的相互点。
顺序图:用来显示多个对象间的交互活动,关注对象之间的消息传送的时间顺序,核心概念:对象、生命线、交互、消息。交互阶段、
交互纵览图:活动图和顺序图的混合物,直观的表达一组相关顺序图之间的流转逻辑,存在两种形式,一种是以活动图为主线;对活动中某些重要活动节点进行细化,即用一些夏普的顺序图对重要活动节点进行细化,描述活动节点内部对象之间的交互。 另一种是以顺序入为主线,用活动图细化顺序入中的某些重要对象,即,用活动图描述重要对象的额活动细节。
通信图: 表示两个对象之间关系以及交互活动 核心概念; 对象,协作角色 ; 协作:交互 消息
时间图:也是一种交互图,展现了消息跨越不同对象或角色的实际时间信息。 可描述单个火哥多个对象变化的时间点一会维持特定状态的时间片段 ,是表示交互时间的主要手段
核心概念: 时间约束 持续时间约束 生命线 状态 条件、事件 、
继承机制:LSP原则 、OCP原则、SRP原则、ISP原则、DIP依赖倒置原则
设计模式:设计模式就是解决方案
敏捷过程模型: 是一个渐进开发过程,将开放阶段的4个活动,分析、设计、编码、和测试结合在一起,消除了软件过程中的不必要的步骤和提交物,在全过程中采用迭代增量开发,反馈修正和反复测试的策略。敏捷软件开发生存中期画风为用户和体系结构,腹部计划、交互、接受测试和小型发布几个阶段。
以上是我对本学期软件工程的理解和网上资料的总结,对于彭老师的教学深有感受理解,对于自身的不足又有很深的认识。