华工软件工程重点
软件工程必背考点

软件工程必背考点软件工程是以工程法为基础的一门学科,涉及到软件开发的各个方面,包括需求分析、设计、编码、测试、维护等。
在软件工程的学习和实践中,有一些重要的考点需要我们掌握和理解。
本文将介绍一些软件工程的必背考点,以帮助读者更好地复习和准备软件工程的考试。
一、软件生命周期模型软件生命周期模型是指软件开发过程中不同阶段的组织、管理和控制方法。
常见的软件生命周期模型有瀑布模型、迭代模型、螺旋模型等。
熟悉和理解不同的软件生命周期模型对于项目管理和开发具有重要的意义。
二、需求工程需求工程是软件工程的重要组成部分,其目标是明确软件系统需要满足用户和利益相关者的需求。
需求工程包括需求获取、需求分析、需求规格说明等过程,需要掌握需求工程中的各种技术和方法。
三、软件设计软件设计是将需求转化为具体的设计方案和结构的过程。
软件设计包括结构设计、模块化设计、接口设计等,需要掌握设计的原则和方法,以及常用的设计模式和设计工具。
四、软件测试软件测试是确保软件系统质量的重要手段。
软件测试包括单元测试、集成测试、系统测试、用户验收测试等,需要掌握各种测试方法、策略和工具,以及缺陷管理和跟踪的技巧。
五、软件维护软件维护是软件工程的一个重要阶段,用于确保软件系统的可靠性和稳定性。
软件维护包括纠错性维护、适应性维护、完善性维护等,需要掌握维护的方法和技巧,以及版本管理和配置管理的工具和流程。
六、软件过程改进软件过程改进是为了提高软件开发过程的质量和效率而进行的系统性改进。
软件过程改进包括CMMI模型、SPICE模型等,需要了解软件过程改进的原理和方法,以及评估和度量的指标体系。
七、软件项目管理软件项目管理是为了成功地完成软件项目而进行的计划、组织、协调和控制的过程。
软件项目管理包括项目计划、资源管理、风险管理等,需要掌握项目管理的理论和实践,以及项目管理工具和技术。
八、软件工程伦理和专业责任软件工程伦理和专业责任是软件工程师必备的素养。
软件工程重点

软件工程重点软件工程是一门关键的学科,涉及到通过系统化的方法构建、管理和维护软件的过程。
在现代社会中,软件工程在各个领域都扮演着重要的角色。
软件工程的发展已经取得了巨大的成就,但也面临了一些挑战和难题。
在这篇文章中,我们将详细介绍软件工程的重点内容,以便更好地理解和应用这一学科。
软件需求分析软件需求分析是软件工程的第一步,也是最为关键的一步。
在开始开发软件之前,必须清楚地了解用户的需求。
需求分析包括对用户需求进行收集、整理和归类,以便进一步的软件设计和实现。
软件需求分析需要与用户进行频繁的沟通和交流,以确保准确理解用户的期望和需求。
软件设计与架构软件设计与架构是软件工程中的另一个重要方面。
它涉及到对软件系统进行整体设计和规划。
软件设计包括确定软件模块的功能和结构,以及设计软件的算法和数据结构。
软件架构则是描述整个软件系统的结构和组织方式。
良好的软件设计与架构可以提高软件的可靠性、可维护性和可扩展性。
软件开发与编码软件开发与编码是软件工程的核心环节。
它涉及到将软件设计转化为可执行的代码。
在软件开发过程中,开发人员需要使用一种或多种编程语言来实现软件的功能。
编码时需要遵循一定的编码规范和良好的编程实践。
软件开发过程中还需要进行版本控制、测试和调试等一系列活动,以确保软件的质量和稳定性。
软件测试与验证软件测试与验证是软件工程中至关重要的一环。
它有助于发现和解决软件中存在的问题和缺陷。
软件测试是通过执行一系列测试用例来检查软件的功能和性能。
测试可以分为单元测试、集成测试、系统测试和验收测试等不同的阶段。
通过对软件进行全面的测试和验证,可以提高软件的质量和可靠性。
软件项目管理软件项目管理是软件工程中的另一个关键环节。
它涉及到对软件开发项目进行规划、组织和控制。
软件项目管理需要考虑资源分配、进度控制、风险管理和团队协作等方面的问题。
良好的项目管理可以提高软件开发过程的效率和质量,确保项目按时交付。
,软件工程是一门重要的学科,它涵盖了软件需求分析、软件设计与架构、软件开发与编码、软件测试与验证、软件项目管理等多个方面。
软件工程复习要点

软件工程复习要点软件工程是一门研究如何高效地开发、维护和管理软件的学科。
对于学习软件工程的同学来说,熟练掌握复习要点是非常重要的。
本文将为大家总结并分享软件工程的复习要点,希望能够帮助大家更好地掌握和应用软件工程知识。
一、软件开发过程软件开发过程是指从需求分析到交付软件产品的整个过程。
常用的软件开发过程模型有瀑布模型、迭代模型、敏捷模型等。
要理解和掌握软件开发过程,需要熟悉各个阶段的任务和活动,包括需求分析、设计、编码、测试、交付等环节。
1. 需求分析:确定用户需求,明确软件系统的功能和性能要求。
2. 设计:根据需求分析的结果,进行软件系统的整体设计和详细设计。
3. 编码:将设计好的软件系统转化为具体的实现代码。
4. 测试:对编码完成的软件系统进行测试,发现和纠正其中的问题。
5. 交付:经过测试合格的软件系统交付给用户使用。
二、软件工程方法与工具为了提高软件开发的效率和质量,软件工程使用了一系列方法与工具。
掌握软件工程方法与工具的使用对于软件开发人员来说是非常重要的。
1. 需求管理工具:用于帮助开发团队和用户共同管理和追踪需求,常用的有JIRA、TFS等。
2. 设计工具:用于辅助进行软件系统的设计,常用的有UML工具、Axure等。
3. 编码工具:用于提高编码效率和质量,常用的有IDE集成开发环境、代码托管平台等。
4. 测试工具:用于自动化测试和代码覆盖率分析,常用的有Junit、Selenium等。
5. 配置管理工具:用于管理和控制软件系统的配置,常用的有Git、SVN等。
三、软件质量保证软件质量保证是指通过一系列的措施和活动来确保软件产品的质量。
在软件工程中,软件质量保证是一个非常重要的环节,它直接关系到软件系统能否满足用户的需求。
1. 静态质量保证:通过代码审查、代码规范等手段来预防和发现问题。
2. 动态质量保证:通过测试等手段来发现和解决软件系统中的问题。
3. 配置管理:通过配置管理工具来确保软件系统配置的正确性和一致性。
软件工程重点难点

软件工程重点难点软件工程是一个跨学科、综合性强的学科,它的发展既受到技术因素的制约,也受到人文因素的影响。
在软件工程的学习和实践过程中,存在一些重点难点需要我们克服和解决。
本文将围绕软件工程的重点难点展开论述,探讨它们的原因和解决方法。
一、需求分析与设计需求分析是软件工程过程中至关重要的一环,它涉及到对用户需求进行准确、完整的理解和把握。
然而,在实际操作中,需求分析常常面临以下难点:1.1 沟通和理解:软件工程师需要与用户进行充分的沟通,但是用户常常表达不清晰、需求变更频繁,或者存在需求隐含等情况,使得需求难以准确捕捉。
此时,可以采用面谈、问卷调查等方式来提高沟通效率和准确度。
1.2 需求分级和权衡:在需求分析阶段,软件工程师需要根据用户优先级、系统约束等因素,将需求进行分级和权衡。
然而,不同用户对需求的优先级可能存在差异,需求之间也存在相互制约的关系,这就对软件工程师的分析能力和技巧提出了要求。
1.3 需求变更管理:需求变更是软件工程过程中常见且难以避免的情况。
如何灵活应对需求变更,同时保证软件系统的稳定性和可靠性,是软件工程师需要面对的重要难题。
可以引入敏捷开发方法,采用迭代开发方式,及时响应和适应需求变更,保持项目的可控性和灵活性。
二、软件质量保证与测试软件质量保证是软件工程过程中的关键环节之一。
它涉及到对软件进行全面、系统的测试,以确保软件系统的质量和稳定性。
然而,软件质量保证与测试中常遇到以下难点:2.1 测试用例设计:测试用例的设计是软件测试过程中的重要环节。
测试用例的设计要全面覆盖功能、性能、安全等方面,并考虑到不同的测试需求和约束条件。
但是,测试用例设计的复杂性常常导致测试覆盖度不高,测试效果不理想。
因此,软件工程师需要不断学习和积累测试用例设计的方法和技巧。
2.2 自动化测试:随着软件规模的增大和复杂度的提高,传统的手工测试方式已经无法满足软件开发的需求。
自动化测试可以提高测试效率和质量,但其引入和实施也面临一定的难题,如自动化测试脚本的编写和维护等。
软件工程重点总结

软件工程重点总结软件工程是一门研究和应用如何以系统性、规范化、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
它涉及到软件开发的整个生命周期,从需求分析、设计、编码、测试到维护和升级。
在需求分析阶段,我们需要与用户和利益相关者进行深入的沟通,以明确他们对软件的期望和需求。
这不仅仅是了解他们想要软件做什么,更要理解为什么他们有这样的需求。
需求的获取可以通过各种方式,如访谈、问卷调查、观察等。
在这个阶段,我们要尽可能清晰、准确地定义软件的功能、性能、数据、安全等方面的要求,同时要避免模糊不清和歧义。
需求分析的好坏直接影响到软件的质量和最终的成功与否,如果需求没有搞清楚,后面的工作可能都会白费力气。
设计阶段是根据需求分析的结果,确定软件的体系结构和模块划分。
这就像是为建造一座大楼绘制蓝图,要考虑到软件的整体架构是否合理,模块之间的关系是否清晰,接口是否易于理解和使用。
良好的设计可以提高软件的可维护性、可扩展性和可重用性。
设计包括概要设计和详细设计,概要设计主要确定软件的总体结构和主要模块,而详细设计则是对每个模块的内部逻辑和算法进行描述。
编码阶段就是将设计转化为实际的代码。
在这个阶段,程序员需要选择合适的编程语言和开发工具,遵循编程规范和良好的编程习惯,编写高效、可靠、易于理解和维护的代码。
代码的质量至关重要,要注意代码的可读性、正确性、健壮性和性能优化。
同时,要进行必要的代码注释,以便其他人能够理解代码的功能和逻辑。
测试是软件开发中不可或缺的环节。
它包括单元测试、集成测试、系统测试和验收测试等。
单元测试是对每个模块进行单独测试,确保其功能的正确性;集成测试是测试模块之间的接口是否正常;系统测试是在整个系统上进行测试,验证软件是否满足需求;验收测试则是由用户或客户来进行,确认软件是否符合他们的期望。
通过测试,可以发现软件中的缺陷和错误,并及时进行修复,提高软件的质量。
软件工程重点

软件工程重点 软件工程是现代信息技术领域的重要学科,它致力于软件系统的开发、维护和管理。在当前快速发展的信息社会中,软件工程扮演着关键的角色。本文将对软件工程的重要性进行探讨,并重点介绍软件工程领域的三个关键点:需求分析、设计模式和敏捷开发。
需求分析是软件工程中至关重要的一步。在软件开发过程中,准确理解和明确需求是成功的关键。需求分析师需要与客户沟通,深入了解用户的需求和期望,然后将其转化为软件系统的功能和性能要求。需求分析的过程涉及到信息收集、需求建模、需求验证等环节,旨在确保所开发的软件系统能够真正满足用户的期望,并在后续的开发过程中提供有效的指导和依据。
设计模式是软件工程中的另一个重要概念。设计模式是对解决常见问题的经验总结和最佳实践的抽象描述。它提供了一种通用的解决方案,帮助开发者提高软件系统的可扩展性、复用性和可维护性。常见的设计模式包括单例模式、工厂模式、观察者模式等,它们被广泛运用在软件系统的设计和实现中,有效地提高了软件的质量和开发效率。熟练掌握和应用设计模式是软件工程师的基本要求之一。
敏捷开发是近年来备受关注的软件开发方法论。与传统的瀑布模型相比,敏捷开发注重灵活性和快速响应。它强调快速迭代、持续交付和团队合作,以更好地适应不断变化的需求和市场。敏捷开发方法包括Scrum、XP和Lean等,它们在一定程度上改变了软件开发的方式和文化。敏捷开发的核心原则是对变化的积极响应和持续交付的价值观念,通过持续迭代开发和用户反馈,确保软件系统能够及时适应用户的需求。
在总结中,本文重点介绍了软件工程领域的三个关键点:需求分析、设计模式和敏捷开发。需求分析是确保开发的软件系统能够真正满足用户需求的基础,设计模式提供了一种通用的解决方案,帮助提高软件系统的质量和开发效率,而敏捷开发则强调灵活性和快速响应,以满足不断变化的需求和市场。随着信息技术的不断发展,软件工程将持续演进和创新,为社会的进步和发展做出更大的贡献。
软件工程重点
软件工程重点软件工程重点一、简介软件工程(Software Engineering)是指应用系统化、规范化、量化的方法和工具,对软件的开发、运行和维护等环节进行有效管理和组织的一门学科。
在当今信息化社会中,软件工程起到了至关重要的作用,为各个行业和领域提供了高效、可靠的软件解决方案。
二、软件工程的重要性1. 提高生产效率:软件工程通过规范化的软件开发流程和工具,能够提高软件开发的效率,减少开发周期,从而提高生产效率。
2. 提高软件质量:软件工程强调系统化、规范化的方法和过程,能够帮助开发团队保证软件质量,减少软件缺陷和问题的出现。
3. 降低开发成本:软件工程能够通过规范化的开发流程和工具,提高开发效率,减少开发中出现的问题和调试时间,从而降低开发成本。
4. 方便维护和升级:软件工程注重软件的可维护性,使得软件的维护和升级变得更加方便和高效。
三、软件工程的核心内容1. 软件需求工程:软件需求工程是软件工程的第一步,它主要通过需求调研、需求分析、需求规格化等方法,明确软件开发的目标和要求。
2. 软件设计与架构:软件设计与架构包括系统设计、结构设计、接口设计等内容,旨在确保软件的高内聚、低耦合,满足软件的功能、性能和可维护性要求。
3. 软件测试与质量保证:软件测试是保证软件质量的重要手段,它通过设计测试用例、执行测试、进行缺陷管理等方法,确保软件功能的正确性和稳定性。
4. 软件项目管理:软件项目管理是软件工程中的重要环节,它包括项目规划、项目组织、项目沟通、项目风险管理等内容,旨在确保软件项目能够按时、按质完成。
四、软件工程的发展趋势1. 敏捷开发:敏捷开发是一种注重迭代与快速响应变化的软件开发方法,在适应需求变化和加快开发周期方面有着明显的优势,成为当前软件工程的重要趋势。
2. 云计算与大数据:云计算和大数据技术的兴起带来了软件工程的新挑战和发展方向,软件工程需要适应云计算和大数据环境下的需求和技术。
软件工程知识点汇总
软件工程知识点汇总软件工程知识点汇总1. 软件工程概述软件工程是一门应用科学,关注软件产品的开发、维护和组织管理的学科。
它涵盖了软件开发过程中的各个阶段,并运用工程化的原理、方法和工具来提高软件产品的质量和生产效率。
2. 软件生命周期软件生命周期是指软件开发过程中的各个阶段,包括需求分析、设计、编码、测试、部署和维护等。
每个阶段都有相应的活动和产物,这些活动和产物共同构成了软件开发的全过程。
2.1 需求分析需求分析是软件开发的第一步,旨在明确用户对软件的需求和期望。
它包括需求收集、需求分析、需求规格化和需求验证等活动,旨在确保软件开发过程中的需求清晰、准确,并能够满足用户的实际需求。
2.2 设计软件设计是在需求分析的基础上,根据系统的需求和约束条件,通过对系统的整体结构、组件设计、接口设计等进行详细的规划和设计。
2.3 编码编码阶段是将设计好的软件系统转化为可执行的程序代码的过程。
在编码阶段,开发人员需要按照设计规范进行编码,并遵循编码规范和最佳实践,以确保代码的可读性、可维护性和高效性。
2.4 测试测试是验证软件系统是否符合设计和需求的过程。
它包括单元测试、集成测试、系统测试和验收测试等各个层次的测试,旨在发现和修复软件系统中存在的缺陷和问题。
2.5 部署与维护部署阶段是将开发完成的软件系统部署到目标环境并投入使用的过程。
维护阶段则是针对已发布的软件系统进行问题修复、功能增强和性能优化等活动。
3. 软件开发方法软件开发方法是一套规范和指导软件开发过程的方法论和技术体系。
不同的软件开发方法适用于不同的项目需求和团队情况,常见的开发方法有瀑布模型、敏捷开发和迭代开发等。
3.1 瀑布模型瀑布模型是一种传统的软件开发方法,它将软件开发过程划分为阶段并且各个阶段严格按顺序进行。
瀑布模型适用于需求稳定、风险较小的项目,但缺乏灵活性和适应变化的能力。
3.2 敏捷开发敏捷开发是一种以人为核心、快速迭代、灵活应变的开发方法。
软件工程期末复习资料 华南农业大学版
第二章 系统工程
1.基于计算机的系统是指:通过处理信息来完成某些预定义目标而组织在一起的元素的集合或排列。 组成基于计算机系统的元素主要有:软件、硬件、人员、数据库、文档和规程 2.系统工程的任务: (1)识别用户的要求(2)系统建模和模拟:包括硬件系统模型、软件系统模型、 人机接口模型、数据模型; (3)成本估算及进度安排(4)可行性分析(5)生成系统规格说明 3.可行性分析考虑:成本、效益、货币的时间价值、投资回收期析
第四章 设计工程
1.软件设计开始于软件需求的分析和规约之后,位于软件工程过程中的技术核心位置,是把需求转化 为软件系统的最重要环节 2.软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部 件级设计,前者也被称为概要设计,后者被称为详细设计。软件体系结构设计将软件需求转化为数据结构 和软件的系统结构。部件级设计将软件体系结构性元素转化为软件部件的过程性描述,得到软件详细的数 据结构和算法。 3.软件设计原则:抽象、逐步求精、模块化、信息隐藏 4.模块的独立性可以由两项指标来衡量:内聚度与耦合度。内聚度衡量一个模块内部各个元素彼此结 合的紧密程度,耦合度衡量不同模块之间相互依赖的紧密程度 5.内聚:是一个模块内部各个元素彼此结合的紧密程度的度量。内聚可以分为以下 7 中类型: 1)巧合内聚(偶然内聚) :将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的 模块称为巧合内聚模块 2)逻辑内聚 :指完成一组逻辑相关任务的模块,调用该模块时,由传送给模块的控制型参数来确定 该模块应执行哪一种功能 3)时间内聚:指一个模块中的所有任务必须在同一时间段内执行。例如初始化模块和终止模块 4)过程内聚 :指一个模块完成多个任务,这些任务必须按指定的过程(procedural)执行 5)通信内聚 :指一个模块内所有处理元素都集中在某个数据结构的一块区域中 6)顺序内聚:指一个模块完成多个功能,这些功能又必须顺序执行 7)功能内聚 :指一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割的 6.耦合:是模块之间的相对独立性的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方 式以及通过接口的信息类型。耦合方式有其中类型: 1)内容耦合 :如果一个模块直接访问另一个模块的内部数据;或者一个模块不通过正常入口转到另
软件工程重点
软件工程重点软件工程是指对软件进行开发、维护、测试和评估等工程化的过程,它涉及到软件的需求分析、系统设计、编码、测试、部署等多个环节。
软件工程作为一门学科,已经成为现代信息技术领域的重点之一。
本文将探讨软件工程的重点内容,包括需求工程、软件设计、软件测试和软件项目管理等方面。
一、需求工程需求工程是软件工程的起点,它主要包括需求获取、需求分析和需求规格说明等环节。
在需求获取过程中,软件工程师与客户进行沟通,了解客户的需求和预期,并通过面谈、问卷调查等方式,收集并整理需求信息。
在需求分析阶段,软件工程师将获取到的需求信息进行分析,识别出需求中的功能需求、性能需求和约束条件等,并进一步分析需求的优先级和稳定性。
最后,在需求规格说明阶段,软件工程师将需求信息编写成详细的需求规格说明文档,以便后续的软件设计和开发工作。
二、软件设计软件设计是将需求规格转化为软件系统的结构和组织的过程,它主要包括总体设计和详细设计两个阶段。
在总体设计阶段,软件工程师根据需求规格,确定软件系统的总体结构和模块划分,并绘制出概念模型、数据流图和类图等设计文档。
在详细设计阶段,软件工程师进一步定义每个模块的内部结构、接口和算法等,并生成详细的设计文档,用于指导程序员进行编码工作。
软件设计在软件工程中占据重要地位,它的质量直接影响着软件系统的可维护性和可扩展性。
三、软件测试软件测试是保证软件质量的重要手段之一,它主要包括单元测试、集成测试和系统测试等多个层次。
在单元测试中,软件工程师针对单个模块或功能进行测试,以验证其是否符合设计和开发要求。
在集成测试中,软件工程师将各个模块或功能进行组合测试,以验证它们之间的交互是否正确。
最后,在系统测试中,软件工程师对整个软件系统进行全面测试,以验证整个软件系统的功能和性能是否符合用户要求。
软件测试需要使用各种测试技术和工具,例如黑盒测试、白盒测试、自动化测试等,以提高测试效率和测试覆盖率。
四、软件项目管理软件项目管理是软件工程中至关重要的一环,它涉及到项目的计划、组织、指导和控制等方面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华工电信软件工程重点——自整理12电联班第一章软件危机定义:指在计算机软件的开发和维护过程中遇到的一些列严重问题。
落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发和维护过程中出现的一些列严重问题。
包含两个问题:1、如何开发软件,以满足对软件日益增长的需求2、如何维护数量不断增加的已有软件典型表现:1、对软件开发成本和进度的估计不准确2、用户常对已完成的软件不满意3、软件的质量不达标4、软件通常难以维护5、软件通常没有适当的文档资料6、软件成本比例逐年上升7、软件开发生产率提高的速率远远不能满足社会对软件产品日益增长的需求产生原因:客观:1、软件缺乏可见性,管理和控制过程很难2、软件较难维护3、软件规模大,复杂性随规模增加呈指数上升主观:错误的认识和做法1、忽视软件需求分析的重要性(对用户没有完整正确的认识,急于求成、仓促上阵)2、认为软件开发就是写程序(其实写程序只占10~20%工作量,软件配置包括程序、文档、数据)3、(最大错误)轻视软件维护(维护费用占软件总费用55%~70%)软件工程(包括技术和管理)定义:是指导计算机软件开发和维护的一门工程学科采用工程的概念、原理、技术、方法来开发和维护软件,把经过实践考验而证明正确的管理技术和当前能得到的最好的技术结合,经济地开发高质量的软件并维护之。
本质特性:1、关注大型程序的构造2、中心课题是控制复杂性3、产品交付使用后仍需要经常修改4、开发效率很重要5、和谐地合作是关键6、软件必须有效支持用户7、软件工程领域中通常由具有一种文化背景的人替另一种文化背景的人开发产品软件工程方法学3要素:方法、工具、过程2个方法学传统方法学(生命周期方法学or结构化范型)——自顶向下顺序完成特点:把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务。
每一个阶段的开始和结束都有严格标准。
前一个阶段完成是开发下一个阶段的前提和基础,完成后一阶段使前一段提出的解法更加具体。
每个阶段结束前要从技术和管理两方面对开发成果进行检查(技术审查和管理复审)。
优点:1、各阶段独立,便于分工协作,降低了整体开发难度。
2、每个阶段结束前都严格审查,保证质量,提供可维护性(但仍然很困难)。
3、提高软件开发成功率、生产率。
面向对象方法学——主动多次反复迭代的过程把数据和行为看成同等重要的,以数据为主线,把数据和操作紧密结合的方法。
4要点:1、把对象(object)作为融合了数据及在数据上的行为的统一的软件构件。
2、把对象划分成类(class)。
3、按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。
(继承)4、对象彼此间仅能通过发送消息互相联系。
(封装性)优点:1、多数对象与实体相对应,提高软件的可理解性,降低复杂性,简化开发和维护2、对象是相对独立的实体,可重复使用,故促进了软件重用3、继承性和多态性,促进软件重用软件生命周期(三时期、八阶段)定义:软件生成直到报废的生命周期。
1、软件定义时期任务:确定工程的总目标、可行性、实现目标应采用的策略、系统必须完成的功能、估计资源和成本、制定工程进度表。
分为3个阶段:问题定义、可行性研究、需求分析2、软件开发时期任务:具体设计和实现软件。
分为4个阶段:系统设计(总体设计、详细设计)、系统实现(编码与单元测试、综合测试)3、软件维护时期任务:使软件持久地满足用户的需要。
阶段:软件维护各阶段任务:1、问题定义:回答要解决的问题是什么2、可行性研究:阶段1定义的问题有行得通的解决办法吗用最小代价在最短时间内确定问题能否被解决3、需求分析:确定为了解决这个问题,目标系统要做什么,目标系统要具备什么功能4、总体设计(概要设计):概况地说。
怎样实现目标系统。
设计程序的体系结构。
5、详细设计(模块设计):把解法具体化,如何具体地实现系统。
详细设计每个模块,给出算法和数据结构。
6、编码和单元测试(实现):写出正确易懂易维护的程序模块。
编码要把软件设计结果翻译成某种程序设计语言书写的程序。
测试时为了找出错误以纠正它。
7、综合测试:通过各种类型的测试使软件达到预定要求8、软件维护:通过各种维护活动使系统持久地满足用户需求。
(改正性、适应性、完善性、预防性)软件过程定义:是为了获得高质量的软件产品所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
8种典型模型:1、瀑布模型优势:规范的、文档驱动的方法缺点:最终开发的产品可能不是用户需要的2、快速原型模型客服瀑布模型的缺点,通过快速构建起一个可再计算机上运行的原型系统,让用户使用原型并收集反馈意见,获取真正需求3、增量模型优点:开发早期使投资获得明显回报,容易维护缺点:要求软件具有开发的结构4、螺旋模型使用原型来降低风险,是风险驱动的。
只有开发人员具备风险分析和排斥能力时才成功5、喷泉模型6、Rational统一过程7、敏捷过程与极限编程8、微软过程第二章可行性研究目的:用最小的代价在尽可能短的时间内确定问题是否能解决从三方面研究每种解法的可行性:1、技术可行性:使用现有的技术能实现这个系统吗2、经济可行性:这个系统的经济效益大于开发成本吗3、操作可行性:系统的操作方式在这个用户组织内行得通吗数据流图(DFD)基本符号:正方形(立方体):数据的源点或终点圆角矩形(圆):变换数据的处理开口矩形(平行线):数据存储箭头:数据流,数据的流动方向成本、效益分析1、货币的时间价值n年后可获得的钱F = P(1+i)^nn年后的钱在现在的价值P = F / (1+i)^n2、投资回收期1~N 年后累计节省的钱换算到现在的价值等于现在投入的成本时的N值3、纯收入累计经济效益(折合到现在的值)与现在投资之差,N等于开发生命周期4、投资回收率满足方程P = F1/(1+j) + F2/(1+j)^2 + ……+Fn/(1+j)^n (n给定)的j第三章需求分析需求分析基本任务:准确回答“系统必须做什么”的问题。
(系统要实现什么功能)。
对目标系统提出完整、准确、清晰、具体的要求。
需求分析应满足4大准则:1、必须理解并描述问题的信息域,该建立数据模型(实体联系图)2、必须定义软件应完成的功能,要求建立功能模型3、必须描述作为外部事件结果的软件行为,要求建立行为模型(状态转换图)4、必须对描述信息、功能、行为的模型进行分解,用层次的方式展示细节实体-联系图——ER图(用于描述数据模型)数据模型:包含数据对象,数据对象的属性及数据对象彼此间相互连接的关系。
反映了用户的现实环境,与在软件系统中的实现方法无关。
数据对象:复合信息的抽象,具有一系列不同性质或属性的事物。
单值事物不是对象(如宽度)。
数据对象只封装了数据,没有操作,与“类”和“对象”不同。
属性:数据对象的性质联系:数据对象间彼此相互连接的方式。
1、一对一联系(1:1)2、一对多联系(1:n)3、多对多联系(M:N)联系也有属性。
实体-联系图ER图的符号矩形框:实体(数据对象)菱形框(连接相关实体):联系椭圆形(或圆角矩形):实体或联系的属性用直线把实体或关系和其属性连接起来。
上面标明联系方式。
注意:1、一些属性如果与两个实体都有关系,那一般作为两个实体之间的联系的属性。
2、联系一般是动作,比如学生和课程之间的“学”,储户和银行之间的“存取款”。
状态转换图(第三条准则:必须描述作为外部事件结果的软件行为,要求建立行为模型)通过描绘系统的状态和引起状态转换的事件来表示系统的行为。
状态:系统的行为模式。
规定了系统对事件的响应方式可以是:1、一个(系列)动作2、系统本身状态改变3、一个动作+状态改变。
分类:初态、终态,中间状态。
一个状态图只能有一个初态,可以有任意个终态。
可以循环运行,也可以单程。
事件:引起系统做动作或转换状态的控制信息。
实心圆:初态(可能没有)同心圆(内圆为实心圆):终态(可能没有)圆角矩形:中间状态上:状态名(必须)中:状态变量名和值(非必须)下:活动表(非必须)活动表语法:do或entry或exit / 动作表达式箭头:上面标出触发状态转换的事件表达式(若不标表示上一状态活动执行完后自动跳转)。
事件表达式语法:事件名(参数表)【守卫条件】/ 动作表达式第五章总体设计设计原理模块化模块的定义:由边界元素限定的相邻程序元素(数据说明、可执行语句)的序列,而且有一个总体标识符代表它。
过程、函数、子程序、宏、对象、对象内的方法都可以作为模块。
模块是构成程序的基本构件。
模块化的定义:把程序划分成独立命名且可以独立访问的模块,每个模块完成一个子功能。
把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
两个不等式和模块化与软件成本关系图复杂度:C(P1+P2) >C(P1) + C(P2)一个问题的复杂度大于它的分解部分的复杂度之和解决问题需要的工作量:E(P1+P2) >E(P1) + E(P2)复杂的问题分解成许多容易解决的小问题,原来的问题就容易解决了。
成本和模块数目的关系:1、模块数越多,接口成本越大2、模块数越多,每个模块的成本越低总成本曲线是凹的,有一个最低成本区间。
模块化的优点:1、使软件结构清晰,容易设计、阅读和理解2、使软件容易测试和调试,提高软件可靠性,因为错误常出现在有关的模块及接口中3、提高软件的可修改性,因为变动常只涉及少数模块4、有利于软件开发工程的组织管理,因为复杂大型的程序可以有许多程序员分工编写抽象定义:把事物、状态、过程之间相似的方面(本质特性)集中概括起来,暂时忽略它们之间的差异。
处理复杂系统唯一有效的方法是用层次的方法构造和分析它。
考虑模块化解法时,可以提出许多抽象的层次。
最高层概括叙述问题的解法,中层层采用过程化方法,面向问题+面向实现的术语叙述解法,底层用直接实现的方式叙述解法。
软件工程的每一步都是对软件解法的抽象层次的一次精化。
逐步求精(自顶向下)定义:为了能集中精力解决主要问题而尽量推迟对细节的考虑。
可以看做是一项把一个时期内必须解决的种种问题按优先级排序的技术。
每个问题都将在适当的时候解决。
求精实际上是细化过程。
抽象与求精是一对互补的概念。
抽象忽略多余的细节,强调相关的细节,实现逐步求精。
求精逐步揭示底层细节。
信息隐藏应该这样设计模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
应该隐藏的不是有关模块的一切信息,要隐藏实现细节。
隐藏意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅交换必要的信息。
优点:绝大多数数据和过程对于软件其他部分而言是隐藏的,那么在修改期间引入的错误就很难传播到其他部分。
模块独立(性)实现:开发具有独立功能且和其他模块间没过多相互作用的模块。