`

软件工程总结

阅读更多
软件工程知识点的概括:

软件:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述程序的操作和使用的文档。
软件的特征:
(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
(2) 软件是通过人们的智力活动,把知识与技术转化成信息的一种产品
(3)软件成为产品后,其生产只是简单的拷贝,不同于硬件制造。
(4)维护过程比硬件复杂的多,甚至会引发新的错误。
软件危机:指的是软件开发和维护过程中遇到的一系列严重问题。
出现软件危机的原因:
(1) 软件维护费用急剧上升,直接威胁计算机应用的扩大。
(2) 软件生产技术进步缓慢
软件工程:是指导计算机软件开发和维护的工程学科。
软件生存周期:一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。
软件生存周期一般可分为以下阶段:
1.问题定义2.可行性研究。3需求分析4.总体(概要)设计。
5.详细设计。6.编码与单元测试。7.综合测试。8.软件维护
软件开发模型(software process models):软件开发模型是软件开发全过程、软件开发活动以及它们之间关系的结构框架。
瀑布模型(Waterfall model)即生存周期模型,由B.M.Boehm提出,是软件工程的基础模型。其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作。采用结构化的分析与设计方法,将逻辑实现与物理实现分开。瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。
快速原型模型(Prototyping model):实现客户或未来的用户与系统的交互。
增量模型(Phased development): increments and iterations(反复递增)
螺旋模型(Spiral model):将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
敏捷开发(Agile methods):敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
  可行性研究:压缩简化了的系统分析和设计的过程,也就是说在较高层次上以较抽象的方式进行设计的过程。不是解决问题,而是确定问题是否可解和是否值得解
系统流程图是概括地描绘物理系统的传统工具。它表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。 
结构化的分析方法使用数据流图DFD与数据字典DD来描述。其核心思想是分解化简问题,将物理与逻辑表示分开,对系统进行数据与逻辑的抽象。概括一下,结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法。
数据流图(DFD):描绘信息流和数据从输入移动到输出的过程中所经受的变换。
数据字典(DD)作用:对软件中的每个数据规定一个定义条目,以保持数据在系统中的一致性。
27.ER diagram have three core constructs(P--158)ER 图表有三个核心构造
An entity: depicted as a rectangle, represents a collection of real-world objects that have common properties and behaviors描述为一个的矩形表示一个实际的对象的集合 具有公共属性和行为
A relationship: depicted as an edge between two entities, with diamond in the middle of the edge specifying(指定) the type of relationship描述为一个两个实体之间的边缘
An attribute: an annotation(注解) on an entity that describes data or properties associated with the entity描述数据或与该实体相关联的属性的实体上的注释

需求分析(requirements analysis)的任务
需求分析所要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其它系统元素的接口细节,定义软件的其它有效性需求。
一般说来,需求分析阶段的任务及工作:
1、确定对系统的综合要求
⑴ 功能要求(functional requirement)
⑵ 性能要求
⑶ 运行要求
⑷ 未来可能的扩充要求
(5) 可靠性和可用性需求
(6) 出错处理与安全需求
(7) 接口需求
(8) 约束因素(Design constraint)等
2、分析系统的数据要求
⑴建立概念模型:⑵形象描绘数据结构 ⑶数据结构规范化
3、导出逻辑模型
4、修正计划:重估成本、进度等
5、开发原型系统以检验方案的正确性及系统是否满足需求
需求分析(requirements analysis)的原则:其基本原则可概括为:
(1)必须能够表达和理解问题的数据域和功能域;
(2)按自顶向下、逐层分解问题;
(3)要给出系统的逻辑视图和物理视图。
26. Requirements definition:
a complete listing of everything the customer wants to achieve完整列表的客户希望实现的一切
Describing the entities in the environment where the system will be installed
      描述在将安装在系统环境中的实体
Requirements specification(需求规格):
restates (重申)the requirements as a specification of how the proposed(提出) system shall behave
软件设计的任务:把分析阶段产生的软件需求说明转换为用适当方法表示的软件设计文档。不管采用何种软件设计方法,软件设计一般都包括数据设计、体系结构设计、接口设计和过程设计等内容。

结构化设计方法:是一种面向数据流的设计方法,中心任务就是把用DFD图表示的系统分析模型转换为软件结构的设计模型,确定软件的体系结构与接口。
数据流的类型:
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有下述两种类型:变换流和事务流。
结构化分析方法:
模块:是一个拥有明确定义的输入、输出和特征的程序实体。模块的所有输入都是实现功能必不可少的,所有输出都有动作产生。
模块化:就是把程序划分成若干个模块,每个模块具有一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能,实现问题的要求。
模块化设计:把大型软件按照规定的原则划分成一个个较小的、相对独立但又相互关联的模块。分解和模块独立性,是实现模块化设计的重要指导思想。
抽象:就是抽出事物的本质特性而暂时不考虑它们的细节。
信息隐藏:模块中所包括的信息不允许其它不需要这些信息的模块调用。
模块独立性:是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。
内聚(Cohesion):标志一个模块内各个元素彼此结合的紧密程度。
耦合(Coupling):是对一个软件结构内各个模块之间互连程度的度量。
深度:表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。
宽度:是软件结构内同一个层次上的模块总数的最大值。
扇出:是一个模块直接控制(调用)的模块数目,扇出过大意味着模块过于复杂,扇出过小(例如总是1)也不好。
扇入:表明有多少个上级模块直接调用它,扇入越大则共享该模块的上级模块数目越多,这是有好处的,
35.We can measure coupling along a range of dependence

            Characteristics of Good Design Coupling: Types of Coupling
                      Content(内容) coupling
Common (公共) coupling
Control (控制) coupling
Stamp (标记) coupling
Data (数据) coupling

软件设计的基本原理
   (1)模块化    (2)抽象      (3)信息隐蔽      (4)模块独立性 
软件设计的基本经验
模块独立性,低耦合,高内聚,公共模块。
   测试与调试:测试是为了发现程序中的错误而执行程序的过程。调试通过定位和纠正错误,消除软件故障,保证程序的可靠运行。
   测试的种类:按照测试过程是否在实际应用环境中来分,有静态分析与动态测试。
测试方法(Testing Organization):
盒测试法,根据程序的功能来设计测试用例;
盒测试法,根据被测程序的内部结构设计测试用例。
通常的做法是,用黑盒法设计基本的测试方案,再用白盒法补充一些方案。
测试用例的设计是软件测试的中心内容。测试一个程序要使用多个测试用例,而每一个测试用例都应包括一组测试数据和一个相应的预期的测试结果。
黑盒测试法中的3种常用技术:等价划分(等价分类)法、边界值分析法、错误推测(猜测)法。
白盒测试法:常用逻辑覆盖测试和路径测试法。
测试的步骤
1.单元测试(unit testing)
2.集成测试(Integration testing)
3.有效性测试
4.系统测试(System Testing)
5. 平行运行

软件可靠性(Software reliability):是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
   软件维护:软件运行阶段对软件产品所进行的修改就是维护。
   软件维护的种类:完善性维护;适应性维护;调试性维护;预防性维护。
   软件可维护性(Software maintainability):衡量软件维护容易程度的一种软件属性。定性的说,可维护性取决于软件的下列属性:可理解性、可修改性与可测试性。
软件配置:软件在生存周期内,它的各种形式、各种版本的文档与程序的总称。
   软件再工程:运用逆向工程、重构等技术,在充分理解原有软件的基础上,进行分解、综合,并重新构建软件,用以提高软件的可理解性、可维护性、可复用性或演化性。
1. UML图包含9类图:
①类图(class diagram) ②对象图(object diagram) ③用例图(use case diagram) ④顺序图(sequence diagram)  ⑤协作图(collaboration diagram)
⑥状态图(statechart diagram) ⑦活动图(activity diagram)⑧组件图(component diagram)⑨部署图(deployment diagram)
2.使用UML对需求建模:我们可以使用用例(use case)作为着手进行需求建模的良好起点。用例按照系统的使用方式组织系统。以用例为起点进行需求建模,可以使我们的关注焦点集中于客户身上。
用例图是显示一组用例、参与者以及它们之间关系的图。
用例图包括以下三方面的内容。
1.参与者。2.用例。3.依赖、泛化和关联关系。
3.活动图:在UML中将这类描述活动流程的图形称为活动图(Activity Diagram)。
4.状态图:状态图(Statechart Diagram)对系统的动态方面进行建模
5.从UML设计角度,类的类型
通常类可以分为3种类型:实体类(entity)、边界类(boundary)和控制类(control)。
6.类与类之间的关系(分析)
关系(Relationship)是指事物之间的联系。 (1) 依赖(dependency) (2) 泛化(generalization) (3) 实现(realization) (4)关联
10. 请描述组件图和部署图的关系?
答:组件图用于描述系统中软件的构成,但没有描述系统中与硬件有关的构成情况。部署图则用于描述系统硬件的物理拓扑结构以及在此结构上运行的软件。
11.什么是正向过程和逆向工程:
正向过程是通过到实现语言的映射而把模型转换为代码的过程。
逆向工程是通过从特定实现语言的映射而把代码转换为模型的过程。

软件工程这门课程是做软件开发的人必学的课程,通过学这门课程,程序员就会注重软件开发的理论知识,以及做项目开发的思路。学了这门课程后你写程序就不会去盲目的去套用代码,而是理清此程序的架构以及思路。程序该从什么时候开始,什么时候结束。在中间需要添加什么样的功能,以完善该软件。其实学软件工程并不难,而且很容易。软件工程与日常生活联系起来的话,就是在一天中你该先做什么,后做什么。理解了先做什么,后做什么了以后写程序就不是那么难了,再复杂的程序也可以分成几大块。你理清程序的思路后就可以一步步的解决其中的难题,最终实现软件的功能。如果没学软件工程不知道理清程序的思路的话,做一个大的项目开发,那么多的代码,没有一个很好的结构,最终只会导致程序混乱,错误百出,知道代码再多也会素手无策的。
总而言之,作为一个程序员学习软件工程这门课程是至关必要的,如果没学习软件工程,你就不会做项目开发,也不可能开发出一个完善的软件出来。


分享到:
评论

相关推荐

    软件工程总结手册

    以上是对《软件工程总结手册》主要内容的知识点总结,涵盖了软件工程的基本概念、发展历程、危机及解决方法、核心特点、目标、基本原理、方法学、以及分布式系统开发、软件测试和敏捷开发等关键领域的知识点。...

    软件工程总结英文版

    这篇英文版的软件工程总结,源于张海藩所著书籍的翻译,旨在分享软件工程的精髓,帮助我们理解这个领域的核心概念。 首先,让我们来概述一下软件工程的基础知识。软件工程是一个系统性的方法,用于开发、维护和修改...

    软件工程总结报告.pdf

    《软件工程总结报告》 软件工程是一门涉及软件开发全过程的学科,旨在通过系统化、规范化的流程确保软件产品的质量、可用性和经济性。在软件工程实训中,我们深入理解和实践了这一领域的核心知识和技能。 首先,...

    软件工程总结报告.docx

    《软件工程总结报告》 软件工程是一门涉及软件开发全过程的学科,旨在通过系统化、规范化的流程确保软件产品的质量、可用性和经济性。在软件工程实训中,我们深入理解和实践了从需求分析到软件维护的各个环节。 1....

    [详细完整版]软件工程总结.ppt

    《软件工程总结》 软件工程是一门综合性的学科,它涉及到程序、数据、文档的集成以及软件开发的全过程。在软件工程中,软件不仅仅是程序,它还包括与之配套的数据和文档。程序是按照预设功能和性能要求编写的指令...

    [详细完整版]软件工程总结.pdf

    而良好的文档资料是保证沟通和项目管理顺利进行的基础,包括需求规格说明书、设计文档、测试计划等,都是软件工程过程中的重要组成部分。通过这些文档,团队成员可以理解项目的全貌,跟踪进度,及时发现和解决问题,...

    2023 电子科技大学-软件工程总结超详细超清晰

    2023 电子科技大学-软件工程总结超详细超清晰

    软件工程课程总结

    软件工程课程总结学习目的、学习价值、用途、学习成果、学习内容等

    软件工程总结21

    软件工程是一门应用工程原理、方法和技术来设计、开发、实施和维护软件的学科。它强调经济、高效地创建高质量的软件,并确保软件在生命周期内的有效维护。软件工程的生命周期通常包括六个主要阶段:计算机系统工程、...

    软件工程总结.pdf

    软件工程是针对软件开发过程中遇到的各种挑战,如成本估算不准确、用户满意度低、质量问题频发等,而形成的一种系统性的工程学科。它强调通过技术和管理手段来解决这些问题,确保软件项目的成功实施。软件工程的核心...

    天津理工大学-软件工程总结考试.pdf

    【软件工程概述】 软件工程是计算机科学的一个分支,专注于软件的开发、交付和维护的实践。与计算机科学的理论和基础研究不同,软件工程强调实际的工程方法,以确保软件项目的成功实施。软件工程涵盖了软件生命周期...

    软件工程总结_.docx

    总结,软件工程是一个系统化的过程,强调了规划、分析、设计、实现、测试和维护的连续性。通过理解并遵循这些原则,可以提高软件项目的成功率,确保软件的安全性和可靠性。在实际操作中,应注重每个阶段的文档工作,...

    天津理工大学-软件工程总结考试.docx

    总结,软件工程是一门综合性的学科,涉及到软件生命周期的多个阶段,包括需求分析、设计、开发、测试和维护。有效的软件工程实践需要理解各种开发模型,控制成本,应对挑战,并创建高质量、可维护的软件产品。

    软件工程总结-背诵.pdf

    软件工程是计算机科学的一个重要分支,它针对软件开发过程中遇到的种种问题,如软件危机,提出了系统的解决策略。软件危机是指在软件开发过程中普遍存在的问题,包括用户满意度低、产品质量不可靠、维护困难、生产...

    软件工程总结(中文版)2收集.pdf

    软件工程是一门涉及计算机软件开发和维护的工程学科,它旨在解决软件开发过程中的问题,如软件质量、成本控制和时间管理。软件工程的核心在于它不仅仅是编写代码,更包括了从需求分析到软件维护的整个生命周期的管理...

Global site tag (gtag.js) - Google Analytics