精华内容
下载资源
问答
  • 软件构造
    千次阅读 多人点赞
    2021-09-13 20:03:45

    **

    基于案例的软件构造教程第一章课后答案

    **1、1)程序:是为了解决某个特定问题而用程序设计语言描述适合计算机处理
    的语句序列
    2)软件:软件是能够完成预定功能和性能的可执行程序和使程序正常执
    行的所需要的数据,加上描述软件开发过程及其管理,程序的操作和使用
    有关文档 即“软件=程序+数据十文档。”
    37.软件生存周期:一个软件产品或软件系统经历孕育、诞生、成长、成熟、衰亡
    等阶段。
    4)软件过程:是一个为了建造高质量软件所需完成的任务框架,即形成软件
    产品的一系列步骤,包括中间产品,资源,角色及过程中采取方法,工具等范畴
    5>需求定义:研究用户需求,确定软件定义
    6>软件设计:将系统功能分配到系统不同组成的过程.
    7)软件实现:完成可以运行程序及数据的软件开发过程。
    8>软件维护:对已完成开发,并发布,交付使用的软件产品进行完善,纠正错误
    改进性能和其他属性。
    9>CMMI:软件能力成熟度模型
    10>TsP:团队软件过程.
    11>PsP:个体软件过程.
    12>SCRum:用于开发和维持复杂软件产品的框架,是一个增量,迭代的开发
    过程
    13>IDE,集成开发理环境:用于提供程序开发环境的应用程序
    14>软件构造:通过编码、验证、单元测试、集成测试和调试的组合。
    详细的创建可工作的。有意义的软件。
    157声明式语言:从程序员角度看待计算与程序分为函数式语言,逻辑式语言
    数据流语言。
    16>原则:一个已经接受或专业化指导行动的最高准则或标准
    17>机制:有机体构造,功能及其相互关系,工作原理
    18>方法:方法是获得一个客体的步骤或过程
    19>最佳实践:包括一些普遍运用的软件开发的基本原则,针对某个方法的设计
    原则。提供软件质量和生产率的复用技术,设计模式。支持工具如自动化测试。
    版本控制,缺陷追踪。
    20>问题空间:对问题理解与表述的基本成分.
    21>解空间:解的所有集合.
    2.程序是软件的中枢与骨架,没有程序,软件就缺乏指挥,无法执行一系列指令
    完成预定的功能,数据是程序的血液、没有数据,软件就没有运行的驱动力。
    文档赋予了软件可理解性,可用性和可操纵性
    3.程序具有独创性,科学价值以及不需要团队的重复劳动,而精美的算法,代码
    和程序的正确性是计算科学工作者所追求的主要目标,软件开发不再是问单的程
    序的功能设计,还包括数据库设计,界面设计,接口设计和复杂的系统配置
    4.按功能分类:系统软件:(计算机操作系统)
    支撑软件:(IDE)
    应用软件:(系统仿真软件)。
    按工作方式:实时处理软件,分时软件,交互式软件、批处理软件
    按服务对象:项目软件与产品软件
    5、一个软件产品或软件系统也要经历孕育,诞生,成长,成熟衰亡等阶段.
    理解问题。可行性研究。需求分析,软件设计。软件实现软件测试
    软件交付。软件维护 软件退役。
    6.软件的工程性质即在于应用计算机学数学逻辑学等原理,开发软件的工程学科与活动,以提高质量,降低成本以及缩短开发时间为主。

    7.C C++ Java C属于冯诺依曼式语言(图灵机)C++,java属于 面向对象语言
    Java script 属于脚本语言

    8.瀑布模型各阶段划分清晰,强调计划与需求分析,适合于需求稳定的产品开发
    敏捷开发注重市场快速反应能力,适用于对客户有价值的软件,
    可以很快看到一个基线架构版产品。

    9影响软件开发的因素还有用户不断变化的需求以及产品与期望相差较大
    等国表以及开发公司的人员流动。
    10.通过编码,验证,单元测试,集成测试和调式的组合,详细地创建可件
    的,有意义的软件,以测试与调试组合来验证软件构造的合理性。
    11.程序设计是将设计出来的算法翻译成程序设计语言,强调可用性,独创性
    与其科学价值
    软件构造不单是程要序的程序功能设计,应用于工业农业,等各个领域追求
    正确的运行,完成预期功能
    12.前提条件:构造基础,管理构造、技术以及构造工具.
    13.设计模式:
    ①创建型模式:涉及对象的创建与初始化。
    ②结构型模式:描述了如何组合对象以提供新功能
    ③行为型模式:描述了对象之间如何通信。
    结对编程:一个人编写代码,另一个人审查,
    入门快捷。减少知识之塔,但会使简单的任务复杂化。产生的代码多于两倍。
    重构:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部
    增强了代码的可读性与可维护性。
    持续集成:在一段时间内,多次将代码提交至主干,每次通过测试与验证
    可以减少风险,更快的发现错误、
    意图导何编程:自顶向下编程,先假设每一个步骤都有一个理想方法来完成
    而不关注每个步骤的具体实现。
    更加内聚,可读,清晰,更易于重构与优化。
    后续章节请关注持续更新,以防走丢,切勿白嫖

    更多相关内容
  • 软件构造
  • 哈工大软件构造课程总结笔记由个人根据课程PPT及相关资料整理而来。欢迎star,issue及pull request。
  • 软件构造复习笔记.pdf

    2020-07-07 11:48:03
    哈工大软件构造详细复习笔记,期末复习时整理,以考纲作章节引子,正文内容针对考纲,挺详细的,但不是纯讲解类型的资料,我觉得很实用。
  • 哈尔滨工业大学软件构造课件.zip
  • MIT讲义.zip,MIT讲义,麻省理工18年春软件构造课程阅读10-抽象数据类型-.pdf,麻省理工18年春软件构造课程阅读01-静态检查-.pdf,麻省理工18年春软件构造课程阅读03-测试-.pdf,麻省理工18年春软件构造课程阅读15-相等-....
  • 2021哈工大软件构造复习考点总结.pdf
  • 软件构造系统

    2018-12-07 09:45:08
    深入理解软件构造系统原理与最佳实践.pdf.zip,深入理解软件构造系统原理与最佳实践.pdf
  • 软件构造期末大作业-基于C#的虚拟派对软件,已获通过的高分项目。 软件构造期末大作业-基于C#的虚拟派对软件,已获通过的高分项目。软件构造期末大作业-基于C#的虚拟派对软件,已获通过的高分项目。软件构造期末大...
  • 软件构造课程简洁精炼思维导图,有详细备注,含xmind原文件,总结大纲。包含23种GOF构造模式,三大类构造:创建型模式、行为型模式、结构型模式。
  • 软件构造课程项目

    2018-10-31 15:03:14
    软件构造课程项目.zip,软件构造课程项目,paintBWave,.project,src,File,MyFile.java,DataStructureOfReadData.java,listener,OpenFileItemListener.java,paintBWave,DataReceiver.java,Wave.java,waveChartUI,MainUI...
  • 哈工大
  • 这是哈工大软件构造实验三、四的实验源码,曾经在这课上面也还是花了不少功夫。包括基本所有的加分项目和异常处理
  • 哈工大软件构造2018年期末考试题
  • 本书作者作为一名软件构造系统专家,总结了自己在构造系统开发和维护方面的多年经验,对软件构造系统的原理进行了深入浅出的剖析,并通过各种实际使用场景,对几种最流行的构造工具进行了对比分析,另外还讨论了构造...
  • 软件构造课件

    2016-06-20 15:47:32
    软件构造课件
  • DotNetHomeWork:软件构造基础作业1-1和1-2
  • HIT软件构造复习资料

    2019-06-23 15:56:48
    HIT软件构造复习资料,同学总结的,作为分享,可供参考
  • 面向对象软件构造,详细介绍了面向对象在JAVA中具体应用,值得一看!
  • 17-软件构造.ppt

    2022-07-10 10:19:40
    17-软件构造.ppt17-软件构造.ppt17-软件构造.ppt17-软件构造.ppt17-软件构造.ppt17-软件构造.ppt
  • 软件构造方法角度详细论述了软件构造模块的品质因素和构造高质量模块的原则,规划和原理;另一方面从数学上抽象数据类型对类型系统描述定义论述了抽象模块和对象模块的正确性、鲁棒性问题以及类型系统的类属、继承...
  • 仅供参考 不要直接照搬
  • 哈尔滨工业大学2020学年春季学期软件构造 考试答题卡题号一二三四五六七总分得分阅卷人一(8分)... { ... }二(35分,每题7分)1 2 345三(1
  • 软件构造:01-软件构造基础

    千次阅读 2019-02-25 21:21:54
    软件构造软件构造基础注意从多维视角看软件构造(Multi-Dimensional Views of Software Construction)引言关键从哪些维度来看软件构造编程时、某一时刻、代码视角编程时、某一时期、代码视角编程时、某一时刻、...

    注意

    虽然说标题是“软件构造基础”,但是实际上这一篇可以认为是后面几篇文章的一个绪论,主要内容由接下来的若干篇同系列的文章组成。

    从多维视角看软件构造(Multi-Dimensional Views of Software Construction)

    引言

    既然我们要学习的是软件构造,什么是软件?
    软件的概念最早由阿兰·图灵提出
    在我们的生活中,有各种各样的软件,比如说操作系统和应用程序,有PC端、web端、安卓端、IOS端的各种程序等等,它们都被称为软件。

    计算机的交互层级示意图
    用户
    应用程序
    操作系统
    硬件

    而同时,我们对于软件系统的理解也不断的在改变:从过去到现在依次是:

    1. 程序
    2. 算法 + 数据结构
    3. 程序 + 数据 + 文档
    4. 模块(成分) + 数据/控制流
      如今,我们的coding愈发集成化,模块化编程也占据了主流。

    关键

    从多维视角看软件构造
    以下的内容都将围绕如上的表格展开

    从哪些维度来看软件构造

    • 编程时&运行时
      说到运行时的话,就不得不考虑程序在靶机上的运行情况,比如如何从磁盘中载出程序,如何载入到内存中等等。内存占用量、运行速度等等因素将会成为注意的对象。届时,我们将使用“代码快照”等方式来进行相应的观测。
    • 微观&宏观
      代码的视角(源代码):①源代码如何逻辑组成或依赖程序块(如函数、类、方法、借口等等) ②内存中的程序及其之间如何运行与交互;
      模块的视角(结构):①源代码如何物理构成或依赖结构(如文件、目录、包、库等等) ②各个程序包如何在物理环境下配置、运行与交互;
    • 时刻&时期
      时刻:某一特定的时间点,代码或模块如何,程序如何运行;
      时期:随着时间的推移,代码或模块如何变化,程序如何运行;

    编程时、某一时刻、代码视角

    在此情况下,我们从小到大有如下三个方面:

    • 词义层面
      词义层面
    • 语法层面
      语法层面
    • 语义层面
      语义层面语义层面

    编程时、某一时期、代码视角

    即:程序本身如何变化?
    增、删、改等等

    编程时、某一时刻、模块视角

    • 源代码组成文件,进而组成目录
    • 文件封装为,逻辑上,也叫子系统和元件
    • 可复用的模块形成
      开发者通常并不是从头开发程序,而多是选择复用库中的模块。库存在于各处,来源广泛,我们可以将其看成是一种对标准编程语言的补充。
      库的使用方式有两种:动态链接以及静态链接。详细内容可以回顾计算机系统。
      层次

    编程时、某一时期、模块视角

    每一个模块是如何随着时间变化的呢?为了描述这一种变化,我们引入了版本控制系统,也就有了我们常常说的版本号。

    Evolution GraphImage result for Software versioning
    在发布软件之后,事情并未结束。软件是需要随着市场、技术等等因素而进化(Software Evolution)的,软件中的各个部分也将优胜劣汰,成为更好地软件。有的时候,维护的费用甚至将占到开发费用的90%。

    运行时、某一时刻、代码视角

    Snapshot diagram
    将采用代码快照(Code Snapshot)的方式对代码进行观察,将分析内存的占用情况等等。(将在第03章中详细介绍)

    运行时、某一时段、代码视角

    利用UML以动态的形式描述类
    Sequence diagram in UML

    运行时、某一时刻、模块视角

    模块分析
    Deployment diagram in UML

    运行时、某一时段、模块视角

    log日志
    log

    各个视角之间的关系

    transformation between views

    • Ф → Code
      Programming / Coding (Chapter 3 ADT / OOP)
      Review, static analysis / checking (Chapter 4 Understandability)
    • Code → Component
      Design (Chapter 3 ADT / OOP; Chapter 5 Reusability; Chapter 6 Maintainability)
      Build: compile, static link, package, install, clean (Chapter 2 Construction process)
    • Build-time → Run-time
      Install / deploy (Another course)
      Debug, unit / intergration testing (Chapter 7 Robustness)
    • Moment → Period
      Refactoring (Chapter 9 Refactoring)
      Version Control (Chapter 2 SCM)
      Loading, dynamic linking, interpreting, execution (dumping, profiling, logging) (Chapter 8 Performance)

    总结

    描述软件系统的三个维度

    • 时期视角:编程时(build-time)&运行时(run-time)
    • 动静视角:时刻(moment)&时段(period)
    • 级别视角:代码(code)&模块(component)

    每个视角的元素、关系以及模型

    软件构造:视角的转换

    • Ф → Code
    • Code → Component
    • Build-time → Run-time
    • Moment → Period

    再放上最最关键的图

    从多维视角看软件构造

    软件构造的质量目标(Quality Objective of Software Construction)

    大纲

    软件构造的质量特征:

    • 外部和内部质量因素
      • 外部质量因素(使用相关):与用户直接相关,比如运行速度、易用性等等
      • 内部质量因素(编程相关):与编程人员相关,比如模块化、可读性等等
      • 我们的目标在于外部特性,但是内部特性影响甚至从某种意义上决定外部特性。
    • 重要的外部质量因素
    • 各个质量因素的权衡

    软件构造的五大质量目标:

    1. 易于理解
    2. 易于改变
    3. 易于拓展
    4. 健壮性
    5. 运行效率

    外部质量因素

    正确性

    正确性:若输入正确,则输出正确
    正确性是最重要的质量标准。
    保证正确性:

    • 条件性:因为上层模块需要依赖下层模块,所以要想保证下层的模块是正确的。也就是说自底向上,保证每层都正确,同时调用也没有问题
    • 通向正确性的方法:测试以及Debug
    • 形式化方法:数学才可能保证程序的正确性
      特别注意:测试只能证明程序错误,但是不可能证明程序是正确的。

    健壮性

    健壮性:若输入错误,而程序依旧正常工作
    健壮性健壮性与正确性相辅相成。正确性是正常的情况,而健壮性是异常的情况。异常与正常往往取决于程序的规定本身。
    有以下几种保证健壮性的处理方式:

    • 异常 → 提示
    • 异常 → 退出
    • 异常 → 降级技术
      总之,最好是在异常的情况下可以让程序就像什么都没有发生过一样,只是发出提示或者甚至不(比如作为服务器或者卫星等等的系统)。如果做不到,也得“优雅地退出”。

    拓展性

    扩展性:软件易于调整变化以适应新要求的能力。
    一般来说,软件的规模越大就越难以扩展。
    由于人们的需求是在不断改变的,所以我们不得不不断改变软件的功能。当软件大到一定的程度,不再有能力修改的时候,软件的生命周期也就走到了尽头。
    提高扩展性:

    • 解耦合:模块之间尽量不要过于依赖,也就是说:要尽量降低模块与模块的耦合性
    • 简单:体系结构越简单,越容易变化

    复用性

    减少无用功,为程序员省事情。
    如何复用:

    • 调用库:内部库或者第三方库
    • 调用自己或者同事的代码

    适配性/兼容性

    适配性也就是使软件与软件易于合作。
    软件与软件之间需要相互联系,其开发与使用之间并不是完全割裂的。
    但是,毕竟人与人之间的想法难以做到相同,程序员也是人,所以程序员之间的想法也难以做到相同。那么不同的软件之间就会有不同的规则与定义。
    解决适配性的方法就是标准化。
    标准化的方式:

    • 协议
    • 借口
    • ……

    效率

    这里的效率是指软件系统对硬件资源的需求程度。

    • 时间效率
    • 空间效率
      实际上,二者相互制约,矛盾只可缓解,不可调和。

    移植性

    移植性是指是否便于将软件产品移植到种种不同的硬件和软件环境之中。

    易用性

    其实这里的易用性也局势我们常常说的“用户体验”的问题。
    易用性的目的就在于让用户易于使用我们开发出来的软件,包括了安装、运行以及监听的容易程度。
    Key:

    • 用户手册:给新用户提供相应的手册以及解释,这样做可以不用让老用户感到厌烦。
    • 简单:简洁就是美
    • 用户视角:站在用户的角度上去理解用户、思考用户,从而了解用户需要什么。也就是所谓的换位思考。

    功能性

    功能性:系统尽可能提供更加全面的功能。
    问题:在程序设计的过程之中,程序员不断地给软件增加功能,试图满足用户全方位的需求,但是却使软件不断复杂化,变得笨重,导致无谓的空间占用。也就是说,过多的功能将会导致软件易用性的缺失。
    Key:

    • 先实现核心功能
    • 逐步按照需要添加新功能,同时保持功能性以及易用性的平衡,让用户有良好的用户体验。

    及时性

    及时性:在用户需要时或者需要之前开发出来。

    其他

    • 可验证性:是否易于验证
    • 完整性:软件系统保护其各个组件(程序和数据)免受未经授权的访问和修改的能力
    • 可修复性:促进缺陷修复的能力
    • 经济性:同及时性相伴,是系统按照其分配的预算或低于预算完成的能力

    内部质量因素

    • 源码相关因素
      • 代码量
      • 圈复杂度:用来衡量一个模块判定结构的复杂程度。
    • 结构相关因素
      • 高聚合
      • 低耦合。
    • 可读、可理解、清晰
    • 复杂度
    • 规模

    内部质量因素通常用作外部质量因素的部分标准。

    质量因素之间的权衡

    程序员需要在多个方面进行平衡,而大部分时候,效率会成为主导因素。

    • 完备性 VS 易用性
    • 经济性 VS 功能性
    • 效率 VS 可移植性
    • 效率 VS 复用性
    • 经济性 VS 复用性
    • 及时性 VS 扩展性
      在软件构造的过程中,质量的目标应当有明确指出。
      当然,正确性永远是首位的。

    软件构造的关键

    软件构造中的五大质量目标

    我们将在课程中完整地学习如何实现这几个目标及其权衡。

    归纳

    1. 易于理解
    2. 易于改变
    3. 易于拓展
    4. 健壮性
    5. 运行效率

    三维度分析

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    展开全文
  • 软件构造21春.zip

    2021-07-23 09:00:25
    哈工大21春软件构造学习资料
  • 软件构造基础

    2013-10-28 19:36:36
    软件构造基础的一个pdf资料,适合初学者来学习做基础
  • 2022 哈工大 软件构造 Lab2
  • 软件构造实验报告三实验名称: 适配器模式编程实现实验时间:学号:姓名:徐奕所在院系:计算机科学与技术学院所在专业:软件工程【实验目的和要求】a) 熟悉并理解适配
  • 计算机软件-编程源码-面向对象软件构造-Delphi技术资料.zip

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 398,499
精华内容 159,399
关键字:

软件构造