软件工程概述

软件工程

一、基础知识点

  • 软件的概念:软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及其相关文档的完整集合。(软件=程序+数据+文档)

  • 软件危机的概念:在计算机软件开发和维护过程中所遇到的一系列严重问题。软件危机包含两方面内容:1、如何开发软件,以满足对软件日益增长的需求2、如何维护数量不断膨胀的已有软件。产生的主要原因:用户需求描述不准确;开发人员对需求的理解差异;大型项目管理经验缺乏;开发人员素质与经验;缺乏有力的方法学与工具技术;软件本身的复杂性。

  • 软件工程:采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济的开发出高质量的软件并维护它。

  • 软件生命周期:软件定义(问题定义、可行性研究、需求分析)、软件开发(概要设计、详细设计、编码和测试(单元测试、综合测试))、软件维护(运行维护)

  • 软件过程:软件过程是为了获得高质量软件产品所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,包括:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、其他模型

  • 可行性研究目的:用最小的代价在最小的时间内确定问题是否能够解决。

  • 可行性研究实质:系统分析和设计过程的大大压缩和简化,在较高层次上以较为抽象的方式进行系统的分析和设计过程。

  • 可行性研究方面:经济可行性–经济效益是否大于开发成本;技术可行性–现有技术能否实现;操作可行性–系统操作方式是否可行;其他可行性–法律、社会效益。

  • 系统流程图:是一种描绘物理系统的图,用图形符号以黑盒子形式描绘物理系统的各部件,表达数据在系统各部件之间流动的情况。而不是对数据进行加工处理的控制过程。
    在这里插入图片描述

  • 数据流图(DFD):描述信息流和数据从输入到输出过程所经受的变换。没有任何具体物理部件,只是描绘数据在软件中流动和被处理的逻辑过程。数据流图和数据字典共同构成系统的逻辑模型。
    在这里插入图片描述

  • 需求分析:功能需求–系统必须提供的服务功能;性能需求–系统必须满足的约束条件(响应速度、安全性);可靠性和可用性需求–可靠性定量、可用性量化;出错处理需求–错误响应机制;接口需求–应用系统与环境通信格式常见用户接口需求、硬件接口需求、软件接口需求、通信接口需求;约束–用户或环境强加的限制条件(工具、语言等)逆向需求–系统不应该做什么;将来可能提出要求–将来可能需要实现的需求

  • “NABCD”:是由Need、Approach、Benfit、Competitors、Delivery五个单词的首字母组成,分别指需求、做法、好处、竞争、推广五部分。通过这五部分,可以清楚简明的把项目的特点概括出来

  • 分析建模模型分类:数据模型:(实体-联系图)–描绘数据对象及数据对象之间的关系;功能模型:(数据流图)–描绘数据在系统中流动时被处理的逻辑过程,指明系统具有的变换数据的功能;行为模型:(状态转换图)–描绘系统的各种行为模式在不同状态间转换的方式。

  • 从哪些方面验证软件需求的正确性:一致性–所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾;完整性–需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能;现实性–指定的需求应该能用现有的硬件和软件技术可以实现;有效性–必须证明需求是正确有效的,确实能解决用户面对的问题。

  • 总体设计又称为概要设计或初步设计,是为了确定系统中每个程序由哪些模块组成以及这些模块相互间的关系。

  • 详细设计目的:确定怎样具体地实现所要求的系统。得出对目标的精确描述。

  • 详细设计任务:过程设计–即设计软件体系结构中所包含的每个模块的实现算法。数据设计–设计软件数据结构。接口设计–设计软件内部各模块之间的接口

  • 人机界面设计:是接口设计的一个重要的组成部分。设计人机界面过程常遇到的4个问题:系统响应时间、用户帮助设施、出错信息处理、命令交互、

  • 典型的设计错误:缺乏一致性、记忆负担过重、没有向导或帮助、语境不敏感、反馈不佳、晦涩难解/不友好。

  • 界面设计的黄金规则:用户操纵控制、减少用户的记忆负担、保持界面一致。

  • 模块化(也称关注点分离)是将系统中各不相关的部分进行分离的原则,以便于各部分能够独立研究。

  • 接口定义了一个软件单元的服务,并对外封装了单元的设计和实现的细节。

  • 抽象是一种忽略一些细节来关注其他细节的模型或表示。

  • 复用(Reuse)是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统。复用的好处在于提高生产效率,提高软件质量,改善软件系统的可维护性。

  • 系统设计是将分析模型转换到系统设计模型,即定义系统的设计目标,将系统划分成若干子系统,建立整个系统的体系结构,并选择合适的系统设计策略。

  • 软件测试的步骤

  • 单元测试(Unit Testing)是对软件基本组成单元进行的测试,其测试对象是软件设计的最小单位(模块或者类)

  • 集成测试(Integration Testing)是在单元测试的基础上,将所有模块按照总体设计的要求组装成为子系统或系统进行的测试

  • 功能测试(Functional Testing)是在已知产品所应具有的功能基础上,从用户角度来进行功能验证,以确认每个功能是否都能正常使用

  • 系统测试(System Testing)是在实际运行环境或模拟实际运行环境下,针对系统的非功能特性所进行的测试,包括负载测试、性能测试、恢复测试、安全测试和可靠性测试等

  • 验收测试是在软件产品完成了功能测试和系统测试之后、产品发布之前所进行的软件测试活动,其目的是验证软件的功能和性能是否能够满足用户所期望的要求

  • 安装测试是系统验收之后,需要在目标环境中进行安装,其目的是保证应用程序能够被成功地安装

  • 黑盒测试(Black Box Testing)︰又称功能测试,它将测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。(辅)(因果图法)

  • 白盒测试(White Box Testing):又称结构测试,它把测试对象看做一个透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径讲行测试。(主)(条件组合覆盖)

  • 静态测试:通过人工分析或程序正确性证明的方式来确认程序正确性。

  • 动态测试:通过动态分析和程序测试等方法来检查程序执行状态,以确认程序是否有问题。

  • 手工测试:测试人员根据测试大纲中所描述的测试步骤和方法,手工地输入测试数据并记录测试结果。

  • 自动化测试:相对于手工测试而言,主要是通过所开发的软件测试工具、脚本等手段,按照测试工程师的预定计划对软件产品进行的自动测试。自动化测试只是对手工测试的一种补充,但绝不能代替手工测试,二者有各自的特点。

  • 环路复杂性:V(G)=边数-节点数+2

  • 基本路径集:P:1-2-3-4-5-2-…
    在这里插入图片描述

  • 有效等价类是对规格说明有意义、合理的输入数据构成的集合。

  • 无效等价类是对规格说明无意义、不合理的输入数据构成的集合

  • 软件维护:是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

  • 软件项目管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。

二、例题

1.选择

  • 软件工程方法是为开发软件提供技术上的解决方法

  • 软件工程的基本目标是开发足够好的软件

  • Ariane 5火箭发射失败的事例告诉我们:系统环境的变化可能影响软件采集数据的精度、范围和对系统的控制; 软件重用必须重新进行系统论证和系统测试

  • 软件工程术语是在1968年NATO会议被首次提出

  • 下面的()是正确的: 软件质量是在开发过程中逐渐构建起来的

  • 可移植性是软件从一个硬件或软件环境转换到另一环境的容易程度。

  • 下面的()说法是正确的:大多数软件系统是不容易修改的,除非它们在设计时考虑了变化

  • 造成大型软件开发困难的根本原因在于软件系统的复杂性

  • 软件会逐渐退化而不会磨损,其原因在于不断的变更使组件接口之间引起错误

  • 复用是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统。好处在于提高生产效率,提高软件质量,改善软件系统的可维护性。

  • 单元测试是对软件基本组成单元进行的测试,其测试对象是软件设计的最小单位(模块或者类)。

  • 集成测试是在单元测试的基础上,将所有模块按照总体设计的要求组装成为子系统或系统进行的测试。

  • 黑盒测试又称功能测试,它将测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。

  • 下面关于面向对象设计的描述正确的是:针对接口编程,而不是针对实现编程

  • 关于单一职责原则,以下叙述错误的是:一个类承担的职责越多,越容易复用,被复变用化的的可原能因性越大

  • 关于接口隔离原则,以下叙述有误的是:接口应该尽量细化,同时接口中的方法应该尽可能少,理想情况是在每个接口中只定义一个方法,该接口使用起来最为方便

  • 提高测试的有效性非常重要,成功的测试是指发现了至今为止尚未发现的错误

  • 软件生命周期中所花费费用最多的阶段是软件维护

  • 在UML的各类图中,用例图是描述软件功能的

  • 模块的内聚性最高的是功能内聚

  • 下列模块的独立性的耦合方式中,最好的是数据耦合

  • 软件工程的出现主要是由于软件危机的出现

  • 关于敏捷方法的叙述中,错误的是敏捷方法尤其适合于开发团队比较庞大的项目

  • 类的行为应该基于状态图进行测试
    在UML用例图中执行者与用例之间的关系是关联

  • 不属于一个有凝聚力的高效的团队所具备的特征是具有抗压能力

  • 在UML用例图中,人形符号表示的是角色

2.判断

  • 1.模块化(也称关注点分离)是将系统中各不相关的部分进行分离的原则,以便于各部分能够独立研究。(√)
    2.接口定义了一个软件单元的服务,并对外封装了单元的设计和实现的细节。(√)
    3.一个类承担的职责过多时需要将职责进行分离,将不同的职责封装在不同的类中。(√)
    4.在系统分析和实施阶段可以创建和使用类图。(√)
    5.接口应该尽量细化,同时接口中的方法应该尽可能少,理想情况是在每个接口中只定义一个方法,该接口使用起来最为方便。(×)
    6.关于面向对象的设计,高层模块不应该依赖于底层模块。(√)
    7.关于面向对象的设计,高层模块应该依赖于底层模块。(×)
    8.软件重用技术是区别结构化技术与面向对象技术的主要指标。(×)
    9.软件的开发与运行经常受到硬件的限制和制约。(√)
    10.模块内的高内聚往往意味着模块间的松耦合。(√)
    11.软件测试的目的是为了无一遗漏的找出所有的错误。(×)
    12.如果通过软件测试没有发现错误,则说明软件是正确的。(×)
    13.软件简单的说就是程序和相关的数据及文档。(√)
    14.测试用例由一系列输入和实际的输出组成。(×)
    15.软件工程的集成测试都是自顶向下的。(×)
    16.在进行概要设计时应加强模块间的联系。(×)
    17.模块间的联系越紧密越好。(×)
    18.用黑盒法测试时,测试用例是根据程序内部逻辑设计的。(×)
    19.面向对象软件工程方法就是至上而下、逐步求精的方法。(×)
    20.运行正确的软件就是高质量的软件。(×)
    21.大多数软件系统是不容易修改的,除非它们在设计时考虑了变化。(√)
    22.静态测试是不运行被测程序,仅通过检查和阅读等手段来发现程序中的错误。(√)
    23.用同一等价类中的任意输入对软件进行测试,软件都输出相同的结果。(√)
    24.软件错误具有聚集性,对存在错误的部分应重点测试。(√)
    25.软件部署是通过配置、安装和激活等活动保证软件系统的正常运行。(√)
    26.重新开发一个新系统通常要比再工程的成本要低。(×)
    27.信息隐蔽的目的是提高模块的独立性,减少修改或维护时的影响面。(√)
    28.耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。耦合性越高,模块独立性越弱。(√)
    29.随着软件技术的发展,人们逐渐认识到阅读程序的重要性,编码不仅要强调效率还要强调清晰。(√)

3.简答

  • 例:姓名是长度不超过20的非空字符串,且只由字母组成,数字和其他字符都是非法的。
    1个有效等价类:满足了上述所有条件的字符串
    3个无效等价类:空字符串、长度超过20的字符串、包含了数字或其它字符的字符串
  • 例:程序的输入参数×是小于100大于10的整数。
    1个有效等价类:10<X<100
    2个无效等价类:x≤10和x≥100
  • 例:讨论一个项目是否可行,需要几个方面着手进行考虑?
    技术可行性:使用现有的技术能实现这个系统。
    经济可行性:这个系统的经济效益是否超过开发成本。
    操作可行性:系统的操作方式在这个用户组织内是否行得通。
    必要时还应该从法律和社会效益等方面研究每种解法的可行性。
  • 例:请大家简述手工测试和自动化测试的区别?
    手工测试:测试人员根据测试大纲中所描述的测试步骤和方法,手工地输入测试数据并记录测试结果。
    自动化测试:相对于手工测试而言,主要是通过所开发的软件测试工具、脚本等手段,按照测试工程师的预定计划对软件产品进行的自动测试。
    自动化测试只是对手工测试的一种补充,但绝不能代替手工测试,二者有各自的特点。
  • 例:请同学们简述白盒测试和黑盒测试?
    白盒测试(White Box Testing):又称结构测试,它把测试对象看做一个透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
    黑盒测试(B1ack Box Testing)︰又称功能测试,它将测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
  • 什么是一个好的系统设计?
    (1)可扩展性:容易添加新的功能
    (2)灵活性:代码修改能够平稳地发生
    (3)可插入性:容易将一个类抽出去,同时将另一个具有同样接口的类加进来
  • 软件开发面临的挑战
    (1)客户不满意:交付的许多功能不是客户需要的;交付的日期没有保障;客户使用时发现许多Bug
    (2)风险与成本问题:开发团队专注技术,忽视风险;无能力预测成本,导致预算超支
    (3)项目过程失控:客户需求变化频繁,无力应对;无法预见软件的交付质量;对流程盲目遵从,忽视客户业务价值
    (4)无力管理团队:无法评估开发人员能力及工作进度;困扰于如何提升团队的能力与效率
  • 什么是软件工程?软件工程的基本要素?
    软件工程是一项建模活动,通过抽象找到事物的重要特征而忽略非本质的细节,从不同侧面建立系统模型,有效地简化和处理复杂性。
    软件工程的基本要素:
    (1)方法:为软件开发过程提供“如何做”的技术
    (2)过程:支持软件生命周期的所有活动
    (3)工具:为软件开发方法提供自动的或半自动的软件支撑环境
    (4)范型:构造软件的特定方法或者风格
  • 例:某公司欲开发一套窗体图形界面类库。 该类库需要包含若干预定义的窗格(Pane)对象,例如TextPane、ListPane、GraphicPane 等

在这里插入图片描述

  • 例:Sunny软件公司欲开发一款在线游戏支持多人联机对战(三国杀、星际争霸等游戏),在该游戏中,多个玩家Player可以加入同一战队组成联盟Ally

在这里插入图片描述

  • 例:基于Java语言的C/S软件需要提供注册功能,该功能简要描述如下:用户通过注册界面输入个人信息,用户点击“注册”按钮后将输入的信息通过一个封装用户输入数据的对象传递给操作数据库的数据访问类(DAO)

在这里插入图片描述

  • 例:某大学准备开发一个基于web的学生课程,注册系统下面是系统的部分功能,学生可以使用该系统查询新学期将开设的课程和讲课教师情况选择自己要学习的课程进行登记,注册并可以查询成绩单,教师可以使用,该系统查询新学期自己所开设的课程及选课学生情况,并可以登记成绩单

在这里插入图片描述

  • 例:银行储蓄系统的业务流程:
    顶层数据流图

在这里插入图片描述

一层数据流图

在这里插入图片描述

二层数据流图

在这里插入图片描述

  • 例:设计测试用例:
    语句覆盖:程序中的每个可执行语句至少被执行一次(a=2,b=1,c=6)
    判断覆盖:程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均被满足(a=2,b=1,c=6|a=-2,b=-1,c=-3)
    条件覆盖:每个判断中每个条件的可能取值至少满足一次
    判定条件覆盖:判断条件中的所有条件可能取值至少执行一次,同时所有判断的可能结果至少执行一次
    条件组合覆盖:判断中每个条件的所有可能取值组合至少执行一次,并且每个判断本身的结果也至少执行一次

在这里插入图片描述

  • 例:现在市场竞争激烈,未来你被指派作为某个大型软件产品的负责人,要按规定严格的完成任务。结合你所学习的软件工程的原理、方法和技术阐述你该如何开展工作。请从可行性分析,需求分析、软件体系结构设计、软件过程模型、界面设计、软件测试方法等方面阐述?
    (1)可行性分析:从技术可行性上判断该产品在当前技术条件下能否实现,从组织可行性上研究该产品能否成功的实现,分工是否科学详细;从时间可行性上判断该产品能否在规定时间内开发完成,从经济可行性上判断,软件开发运行得到的效益是否能高于系统开发的成本
    (2)需求分析:需求分析阶段来确定系统的综合要求,如功能需求,性能需求,接口需求和将来可能提出的需求以及分析,系统的数据要求导出系统的逻辑模型和修正系统开发计划
    (3)软件体系结构设计:软件体系结构设计是有关软件系统如何组织的,描述系统的性质都受到所使用的体系结构的影响,可采用面向对象体系结构进行设计,封装了数据和用于控制该数据的操作
    (4)软件建模:可采用增量模型,先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。短时间内可提交完成部分功能;逐渐增加产品功能,用户适应产品快。
    (5)界面设计:侧重人机交互,UI设计美观且符合操作习惯,注重色彩搭配,使项目能够得以更好的展现
    (6)软件测试方法:通过专门的测试工作,对项目可完成的工作进行完整测试,确保项目所完成功能与需求分析一致

  • 例:从各方面分析软件测试人员素质
    (1)核心素质:责任心
    (2)测试技术能力:软件测试人员需要具备较为全面的技术,才能高质量地完成测试工作,才能更好地与开发方进行沟通和交流。除了设计测试用例、编写测试脚本、使用测试工具、建立测试环境等测试技术外,技术基础通常还包括编程语言、系统架构、操作系统、网络通信、数据库的特性与操作等,还需要了解被测试软件系统的背景知识、清楚被测软件用到的概念和技术等。
    (3)非技术能力:必须具备良好的沟通能力,测试人员要善于表达自己的观点;扎实的工作作风,要专心、细心、有耐心、有责任心和自信心;具有适度的好奇心和怀疑精神;良好的学习能力;要成为一名优秀的软件测试人员,还需要具备一些高级的能力素质,包括逆向思维能力、良好的记忆力、勇于怀疑和探索的精神、追求完美的品质
    (4)专业领域经验:了解业务知识,掌控全局;积累实践经验,具有丰富的项目经历和实践次数。

  • 例:NABCD框架:
    (1)Need,需求
    随着信息时代的发展,网上银行、智能手机正一步步走进人们的生活,然而一人同时拥有多张银行卡已是常态,将多张银行卡“放进”手机共同管理正是人们需要的。
    但是实际上经常使用支付宝的绝大部分是中青年人,究其原因,对于年龄稍大的用户,他们往往不熟悉智能手机的使用,担心自己账户的安全问题,又或者,没有使用银行卡消费的意愿,往往只是用来存款。从这个角度考虑,支付宝又推出了“账户保险”、“余额宝”等功能。
    (2)Approach,做法
    将智能手机与银行卡绑定,使用手机便可完成支付的创新做法。
    (3)Benfit,好处
    “支付宝”开创了手机支付的新时代,让人们体会到了手机支付的便利,迎合了人们的潜在需求。简单易学的使用方法大大降低了用户的迁移成本。
    (4)Competitors,竞争
    与“支付宝”类似的App还有iPhone自带的“钱包”App,作为iPhone自带的系统软件,这款App面向所有苹果手机用户,因此在推广部分有着绝对的优势,然而同样,劣势则是只能面向苹果手机用户。
    (5)Delivery,推广
    “支付宝”有这非常多的推广手段,比如“发红包”、免费赠送商家收钱码、与其他消费App联动等,都有非常好的效果,拉拢了大批的用户。

  • 试论述瀑布模型软件开发方法的基本过程?
    答案:瀑布模型规定了各项软件工程活动,包括:制定软件项目计划,进行需求分析和定义,软件设计,程序编码,测试及运行维护。并且规定了它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。然而软件开发的实践表明,上述各项活动之间并非完全是自上而下,呈线性图式。实际情况是,每项开发活动均应具有以下特征:
    (1)从上一项活动接受本项活动的工作对象:作为输入;
    (2)利用这一输入实施本项活动应完成的内容;
    (3)给出本项活动的工作成果,作为输出传给下一项活动;
    (4)对本项活动实施的工作进行评审。若其工作得到确认,则继续进行下一项活动,否则返回前项,甚至更前项的活动进行返工。

  • 请简述项目经理应具备的素质?
    包括:较强的技术背景;成熟的人格;讲求实际;和高层主管有良好的关系;使项目成员保持振奋;在几个不同的部门工作过;临危不惧;具有创造性思维;把完成任务放在第一位,有责任感;有理想和事业追求。
    具有领导能力、开发能力、沟通能力、团队协作能力、决策能力、人际交往能力、学习能力、创新能力。

  • 软件工程整体实践的原则:存在价值;保持简洁;保持愿景;关注使用者;面向未来;提前计划复用;认真思考

  • 你心目中的非常专业的软件工程师应具备哪些特质?

    1. 良好的编码能力
    2. 自觉的规范意识和团队精神
    3. 认识和运用数据库的能力
    4. 较强的英语阅读和写作能力
    5. 具有软件工程的概念
    6. 求知欲和进取心
    7. 求真务实,具有个人责任感
    8. 丰富的项目经验
  • 试论述增量模型软件开发方法的基本过程?
    从第一个增量核心产品开始 ,首先满足基本的需求,但是很多附加的特性没有提供,客户使用核心产品并进行仔细评估,然后根据评估结果制定下一个增量计划,说明需要增加的特性和功能。以此类推,直到最终产品的产生

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会思想的苇草i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值