蓝图报告 软件工程_软件工程师未来工作蓝图 - CSDN
  • 软件工程实验报告

    2013-12-16 00:54:02
    课程 班级 学 号 姓 名 ...软件工程导论 ... 软件工程实验报告 一 一、实验名称 酒店管理信息系统需求分析 二、实验目的 1、完成电子商务环境下酒店管理信息系统需求分析

    课程

    班级

    学  号

    姓  名

    实验时间

    软件工程导论

    12电信2

    120705206

    金敏

    2013.11.26

                       软件工程实验报告 一

    一、实验名称

    酒店管理信息系统需求分析

    二、实验目的

    1、完成电子商务环境下酒店管理信息系统需求分析,建立需求模型计

    2、系统掌握软件开发过程中需求分析报告的写法

    三、实验主要内容

    将整个需求分析过程分为业务分析、用户需求分析和系统需求分析,确定每个模块功能所需要的算法和数据结构,并设计出程序的详细规格说明,可画出详细的程序流程图,为编码做准备,写出详细设计报告。

    将整个需求分析过程分为业务分析、用户需求分析和系统需求分析,确定每个模块功能所需要的算法和数据结构,并设计出程序的详细规格说明,可画出详细的程序流程图,为编码做准备,写出详细设计报告。

    详细设计也称过程设计,是程序设计的蓝图。该设计是在数据设计、体系结构设计和接口设计完成之后进行的。过程设计的目标不仅仅是逻辑上正确地实现每 个模块的功能,更重要的是设计出的处理过程尽可能的简明易懂。结构化程序设计是实现上述目标的关键技术,因此是过程设计的逻辑基础。过程设计的结果基本上 决定了最终程序设计的质量。

    将程序体系结构元素变换为对软件构件的过程描述。该实验主要是利用过程设计工具进行程序设计。

    五、实验结果

                酒店管理信息系统需求分析报告

    第一章 仓储系统简介

         酒店管理信息系统是实现信息共享,达到服务管理信息化。此系统需要的信息包括顾客信息、客房信息、住宿信息、退房信息、调房信息。为了提高此管理系统能够十分便利进行管理,解决的主要任务是实现各种住房信息的系统规范化、自动化,有如下几个模块:住宿管理、客房管理、查询管理、日结设置、结帐管理、设置管理。

    酒店管理信息系统业务流程分析

    2.1住房(调房)业务流程分析

    1、顾客来到后,业务人员向顾客介绍业务

    2、顾客选择要办理的业务(住房和调房)

    3、然后顾客出示有效证件,业务人员进行审核

    4、业务人员选择好房号,介绍房间,征询顾客意见

    5、顾客如果同意则给出钥匙,并且保存顾客信息,并带领其进入房间;不同意则从第四部开始重复进行。

        业务流程图如下:


    2.2退房业务流程分析

    1)、顾客来后向业务人员说明退房。

    2)、业务人员调出相应顾客信息,收取钥匙,完善顾客信息,并保存。

       业务流程图如下:



    3、业务用例图



    展开全文
  • 软件工程实践总结

    2019-08-12 01:34:21
    软件工程实践总结 一、请回望暑假时的第一次作业,你对于软件工程课程的想象 臆想中中的软工蓝图 选个有意思的选题 聚在一起编程,同时在编程过程中学习新的技能 本来是想做一个和人脸相关的项目的,不过柯老板...

    软件工程实践总结

    一、请回望暑假时的第一次作业,你对于软件工程课程的想象

    • 臆想中中的软工蓝图
    1. 选个有意思的选题
    2. 聚在一起编程,同时在编程过程中学习新的技能
    3. 本来是想做一个和人脸相关的项目的,不过柯老板要求项目要比较有趣,我当时没想出来实际的应用场景,就没选择去做人脸相关的项目了。
    4. 0060lm7Tly1fyz1xa1awmj30f602xq2x.jpg
    • 对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
    1. 目标本来是可以带领一个团队实现一个项目的,希望积累一些带团队的经验,同时希望自己能学习到一些新的技术。
    2. 确实带领了一个团队,不过掏心窝子说话带团队很累。我们团队人比较多,再加上一些特殊的原因(我自己有问题但问题绝不仅仅是因为我)。这方面我不算很满意吧,跟目标比起来。虽然不满意,但我在其中看到了人性、学到了说话的技巧。
    3. 选题不是和人脸相关(一方面当时没想出来靠人脸做什么,另一方面是团队9个人可能最后只有我一个人做人脸,那其他人呢?)
    • 总结这门课程的实践总结和给你带来的提升

      • 统计一下,你在这门软件工程实践中,完成了多少行的代码;

        0060lm7Tly1fyzdqm538uj30ny0q1dhq.jpg

        0060lm7Tly1fyzdruxy0wj30nr0e9dgq.jpg

        0060lm7Tly1fyzdt3hepij30hh0h175a.jpg

        最终有用的代码3264行

        1. C++代码行数共计1997行
        2. Python代码行数共计1167行
      • 软工实践的各次作业分别花了多少时间?

      0060lm7Tly1fyz1hsee3pj30xk0lcwg3.jpg

      0060lm7Tly1fyz6lqbcpyj31dh0sxaf2.jpg

    项目 投入时间(/min)
    第一次作业——准备 150
    第二次作业——个人项目 1060
    第三次作业——结对一 685
    "智能聊天机器人"项目介绍 180
    第四次作业——团队展示 120
    第五次作业——结对二 1070
    第六次作业——团队选题报告 361
    UML设计 300
    第七次作业——需求分析报告 740
    Alpha1 512
    Alpha2 370
    Alpha3 275
    Alpha4 120
    Alpha5 245
    Alpha6 92
    Alpha7 247
    Alpha8 235
    Alpha9 305
    Alpha10 515
    现场编程实战 370
    第十一次作业-Alpha事后诸葛亮 185
    第十次作业 - 项目测评(团队) 275
    Beta1 15
    Beta2 95
    Beta3 90
    Beta4 50
    Beta5 135
    Beta6 170
    Beta7 495
    Beta答辩总结 310
    共计(/min) 9772
    共计(/h) 162.9
    • 哪一次作业让你印象最深刻?为什么?

    应该是团队现场编程吧,我们组最后是没有做出来的。原因主要是我们计划使用的pyqt比较复杂,而且我们起步就定了三个页面,实现那三个页面的切换比较困难(在pyqt下,在我们当时的能力下),以至于最后出现了后台接口函数写好了,界面写不出来的窘境。我事后也反思过,一方面是pyqt确实比较复杂(我不是负责写界面的),另一方面是我没有好好督促自己的组员,前期布置的任务大家都没有很好的实现(我心太软了,想让他们轻松点)。

    然后那次学姐酌情给了我们80%的分数

    • 累计花了多少个小时在软工实践上?平均每周花多少个小时?同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答

    累计162.9小时?(与真实花费时间有出入)

    平均到每周就是9.05h,如果这个数字真实有效的话,想想也觉得可怕,我之前说的硬生生把两学分的课上成10学分,没毛病!

    0060lm7Tly1fyz1xa1awmj30f602xq2x.jpg

    • 学习和使用的新软件
    1. Axure(原型制作工具)
    2. Process On(在线绘图工具)
    3. SQL lite
    • 学习和使用的新工具
    1. 图床(小贱贱、存图库)
    2. Visual Studio针对C++的部分插件
    3. 爬虫
    4. 代码测试工具
    5. islide(PPT制作插件)
    6. VS的性能分析、代码覆盖率测试
    • 学习和掌握的新语言、新平台
    1. 巩固了VC++的操作(实际上我没有使用面向对象编程的思想),在开发过程中还解决了了一些BUG
    2. 拓展自己Python的用法,比如多进程通信,以及更多的Python库的使用
    • 学习和掌握的新方法
    1. 为项目加上高大上的修饰词(柯老板教的),诸如具有旋转鲁棒性的人脸检测器(其实就是检测不到人脸的时候转几个角度继续测)、无感式单项好友检测模块(其实就是发了三个乱码符号)、基于词性标记技术的人名检测模块(使用jieba的词性标记模块)、基于NLP的热词分析模块(调用jieba的中文分词功能)
    2. 学会了一些套路,比如柯老板教我的,针对xxxx问题,我们提出了xxxx方法,有了xxxx改进
    3. 学习了使用VS进性测试
    4. 学习了很多新的Python库,比如jiebawxpyqqbotwordcloud
    5. 学习了多进程通信,解决了wxpy开启过程中造成主进程假死的问题
    • 其他方面的提升
    1. 演讲,因为组里面每次答辩基本都是我在上,现在上场不(lian)慌(pi)了(hou)。
    2. 制作好看的图表
    3. 团队协作能力得到了提升
    4. 熬夜的本领算吗?(偷笑哈哈)

    二、写下属于自己的人月神话

    • 个人开发
    1. 形成比较好的代码风格才能让你有继续写下去的动力,写好看的代码是一种乐趣,天天看丑陋的代码估计谁都没什么心情写下去。
    2. 合理使用工具,比如PPT的islide插件等等
    3. 想拿高分的话,一定要看好作业要求,对照每一项做好。
    4. 善用搜索引擎,加强自己查找资料的能力
    5. 善用知乎,比如说之前没有使用过原型开发工具,这个时候我想知道哪个原型开发工具最好用,我就可以去这里找找,看看高票回答,快速选择一个适合自己上手的工具进行开发。
    6. 善用B站,有的东西不懂的话也可以去B站找找看有没有教程,

    工具的话,比如你要做PPT,就可以去知乎上面找找PPT制作技巧

    • 团队开发
    1. 人不要太多,我个人觉得5人最好,7人最多,人多了之后任务不好分配
    2. 其实我对我们组的团队开发不满意,整个过程中可能我们更像一帮“土八路”吧,不像正规军。如果能重来一次,我会选尽量少的人(我们当时是先组队,后定的选题),构建好规范的文档,合理的使用代码托管平台。再也不当“土八路”了。

    三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,对于同期的TA们,对于后来的学弟学妹:

    • 你有什么想建议、告知和期许想要告诉他们呢?

      1. 在对你十分重要的事情上,要懂得一个词叫做“不计成本地投入”,比如考试,我看到太多人准备个考试连去打印店打印试卷都不愿意打印出来(可能也有一部分原因是每个人习惯不同),打印出来会方便很好,效率也高。这学期我为了准备考试,在打印店花费的钱差不多60+了吧
      2. 我们下一届的学弟学妹的课程体系已经和我们不一样,所以说选课似乎没什么用,不过在此想吐槽课程安排,大三上的课业压力本来就很大,学院还是把软工实践安排在这个学期,一门硬生生把两学分上成10学分的课啊!(我相信学院也有自己的考虑!只是吐槽没有抱怨(●'◡'●))
    • 特别地,特别地,下一届要不要中途换队员(强制的、彻底的从一队换到另一队)?

      1. 其实我觉得中途、长期、强制换队员不现实也不合理,作用不大。
    • 身在一个格外大的班级,竞争强劲,你认为一个组的人数应当在多少比较合适?

      5个,5个,5个,至多7个

    • 个人/结对/团队作业应该控制在怎样的规模?

      我觉得目前的规模还不错,该有的都有了!

    • 这学期下来,你最感谢的人是谁?有什么话想要对TA说呢?

      柯逍柯老师吧!

      首先是带我去参加了海峡信息赛,参加了人脸识别项目组,我比较轻松地拿到了一个一等奖回来。柯老板为我提供了宝贵的想法、建议,我平常也都有及时跟柯老板汇报进度,柯老板一直都有很耐心的帮助我。

      软件开发工程中,我心态蹦过几次,就是当PM管理不好整个团队,不能让每一个人都参与到开发中,软件开发中后期我只拉一部分人出来开发。当然那是我的无奈之举,因为我要考虑软件开发的进度,而且之前分配的任务一部分队员没有很认真的落实,跟不上进度(这方面我也有督促不到位的责任)。

      在心态崩溃的时候,也有跟柯老师聊过,柯老师也能给出一些建议来。

      最想说的话嘛:柯老板之前跟我们几个说做出东西来请我们吃好吃的,你还记得吗?(疯狂暗示ing)

    分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?

    看了看前辈总结的阶段,确实挺到位的,真的像是在描述我们自己。

    萌芽阶段:有经历过,最开始的人员分配和我们最后的人员分配是不同的;大家刚开始都是满怀激情满怀希望来参加的。

    选题报告

    磨合阶段:有经历过,在这个阶段我在努力担当起PM这个角色,分配一些任务,大家也都努力去完成。(●'◡'●)

    需求规格说明书

    规范阶段:有经历过,不过做的不好,我们没有指定具体的规范文档,只是我有跟大家分享一些函数命名上的规范,我们主要在使用PEP的编程规范(只是最后组员用的不是很多就是了)

    创造阶段:有经历过,不过做的不够好就是了!我们分阶段指定目标,目标一个一个完成。做的不够好主要是说实话到了后期我没有能力去给一部分队员分配任务了吧。到了软件开发中后期我只拉一部分人出来开发。当然那是我的无奈之举,因为我要考虑软件开发的进度,而且之前分配的任务一部分队员没有很认真的落实,跟不上进度(这方面我也有督促不到位的责任)。

    五、怎样证明你学会了软件工程?

    • 研发出符合用户需求的软件

    有公开发布在Github,不过暂时用户不怎么多,主要是我们团队内部成员及他们的舍友有使用。(是暂时是暂时,我后面再去推广推广...最近在准备考试)

    • 通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
    1. 使用了leangoo进行进度管理,累计49项团队计划任务(不包含个人独立任务)

    0060lm7Tly1fyzfjjnk56j31hc0rcacw.jpg

    1. 使用Github进行代码托管
    2. 0060lm7Tly1fyzdqm538uj30ny0q1dhq.jpg

    3. 我们组还是存在一定程度的“deadline是第一生产力”的情况,但绝不是胡乱拼凑出来的,也不存在糊弄的现象。
    4. 我们使用在线多人文档编辑系统——腾讯文档
    5. 我们使用问卷星、腾讯问卷进行问卷调查。

    • 并且通过数据展现软件是可以维护和继续发展的

    Github地址

    0060lm7Tly1fyzb7x5qwvj30sd0qiju3.jpg

    0060lm7Tly1fyzb923pjhj30su0p8tb5.jpg

    六、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?从以下参考论文中选择一篇或若干篇:

    Samoladas I, Stamelos I, Angelis L, et al. Open source software development should strive for even greater code maintainability[J]. Communications of the ACM, 2004, 47(10): 83-87

    开源软件开发应该努力实现更高的代码可维护性

    • 什么是开源软件OSS?

    被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制

    本来想考完试写的,奈何考完试后我的身体垮了,发烧的很严重,可能是复习期间多次熬夜带来的种种不利因素在考完试心情放松后一起暴露出来。考完试还不让我好过,哈哈哈。

    总的来说,一个高质量的代码,需要有比较好的可读性、可维护性、可变更性

    若想提升可维护性,需要注意以下几点

    • 尽量留下简明扼要的注释
    • 第一眼看上去就能知道其用处的代码,才是简单而美的代码
    • 避免大段代码,要写高内聚、低耦合的代码
    • 编码风格一致
    • 代码清晰表达意图

    下面可以说说自己的代码质量:

    首先我自己是比较注重代码质量的,比如自己书写python的时候会强制让自己符合PEP8编程规范,并且留下简明扼要的注释。

    0060lm7Tly1fzafh2a2wsj30sx0mmwfw.jpg

    可维护性的话,未必会好吧,哈哈。因为之前写工程,工程总体的框架其实都是自己一个人想的。并不知道如何体现可维护性。

    七、个性发挥,包括图文、照片和创意等

    团队合照

    0060lm7Tly1fyzh1blk8aj31hc0u0kjl.jpg

    软件演示视频链接,一个既有灵魂画手,又有鬼畜配音的视频,欢迎来看!

    转载于:https://www.cnblogs.com/sxZhangYang/p/10240303.html

    展开全文
  • 软件工程概念一、软件工程的介绍(一)软件工程的两个定义(二)软件工程的发展已经历了四个重要阶段:1、第一代软件工程 — 传统的软件工程2、第二代软件工程 — 对象工程3、第三代软件工程 — 过程工程4、第四代...

    软件工程概念

    一、软件工程的介绍

    (一)软件工程的两个定义

    • 1968年在第一届NATO(北大西洋公约组织)会议上曾经给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”这个定义不仅指出了软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并使用完善的工程原理。
    • 1993年IEEE进一步给出了一个更全面更具体的定义:“软件工程是:
      ①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件; ②研究①中提到的途径

    (二)软件工程的发展已经历了四个重要阶段:

    1、第一代软件工程 — 传统的软件工程

    60年代末到70年代为了克服“软件危机” (Software crisis)提出“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。

    2、第二代软件工程 — 对象工程

    80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。

    3、第三代软件工程 — 过程工程

    80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程

    4、第四代软件工程 — 构件工程

    90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。

    二、软件工程的本质特征:

    • 软件工程关注于大型程序的构造;
    • 软件工程的中心课题是控制复杂性;
    • 软件经常变化;
    • 开发软件的效率非常重要;
    • 和谐地合作是开发软件的关键;
    • 软件必须有效地支持它的用户;
    • 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品;

    三、软件工程的7条基本原理:

    ——
     1.用分阶段的生命周期计划严格管理
      实践证明,一半以上的不成功的软件是由于计划不周造成的。应按软件的不同周期,划分阶段有计划进行开发,不受干扰地按计划进行。
      2. 坚持进行阶段评审
      大部分错误是在编码之前;
      错误发现越晚,改正错误付出的代价越多;
     3. 实行严格的产品控制
      不得已修改需求时,为了保持软件各个配置成分的一致性,要实行严格产品控制——实施基准配置管理。
       基准配置管理(变动控制):一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。
     4. 采用现代程序设计技术
       实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。
     5. 结果应能清楚地审查
      软件产品的开发过程比一般产品的开发过程更难于评价和管理。为提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。
      6. 开发小组的人员应该少而精
      素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。此外,因为交流情况讨论问题而造成的通信开销也急剧增加。当开发小组人员数为N时,可能的通信路径有N(N-1)/2条,可见随着人数N的增大,通信开销将急剧增加。
     7. 承认不断改进软件工程实践的必要性

    四、软件工程方法学

    软件工程包括是技术管理紧密结合所形成的工程学科。

    • 管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。
    • 技术:在软件生命周期全过程中使用的一整套技术,称谓方法学方法学(methodology),也称为范型(paradigm)。

    软件工程方法学:包括内容( 3个要素):方法工具过程

    • 方法:技术方法
    • 工具:软件工程支撑环境
    • 过程:一系列任务框架,以保证质量。

    (一)软件工程方法学

    当前使用得最广泛的软件工程方法学,分别是传统方法学面向对象方法学

    1.传统方法学

    也称为生命周期方法学结构化范型
      它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
      这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。问题简单化、便于阶段性审查、有一定应用、便于区别面相对象方法学。

    2.面向对象方法学

    当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难,原因是这种技术要么面向行为(即对数据的操作),要么面向数据,还没有既面向数据又面向行为的结构化技术。
    面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。

    (1)面向对象方法学4个要点:

    • a.把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
    • b.把所有对象都划分成类(class)。
    • c,按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。
    • d.对象彼此间仅能通过发送消息互相联系。

    (2)面向对象方法学的出发点和基本原则

    面向对象方法学:
    模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。

    五、软件生命周期

    生命周期

    软件生命周期包括:软件定义软件开发软件维护期

    • 软件定义期~问题定义可行性研究需求分析(定义期也成为系统分析)。
    • 软件开发期~总体设计详细设计编码和单元测试,其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
    • 软件维护期~使软件持久地满足用户的需要。

    1. 问题定义

    问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”

    2. 可行性研究

    这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”

    3. 需求分析

    这个阶段的任务不是解决问题,而是确定“为了解决这个问题,目标系统必须做什么?”
    主要是确定目标系统必须具备哪些功能。

    4. 总体设计(概要设计)

    这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”

    软件设计的一条基本原理就是,程序应该模块化,即一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系

    5. 详细设计(模块设计)

    这个阶段必须回答的关键问题是:“应该怎样具体地实现这个系统呢?”
    主要任务是设计出程序的详细规格说明设计每个模块,确定实现模块功能所需要的算法和数据结构。
    类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。

    6. 编码和单元测试

    关键任务是写出正确的容易理解、容易维护的程序模块。

    7. 综合测试

    这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。
    最基本的测试是集成测试验收测试

    8. 软件维护

    维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。
      有4类维护活动::
       改正性维护,也就是诊断和改正在使用过程中发现的软件错误;
       适应性维护,即修改软件以适应环境的变化;
       完善性维护,即根据用户的要求改进或扩充软件使它更完善;
       预防性维护,即修改软件为将来的维护活动预先做准备。

    六、软件工程过程

    软件工程过程(Software engineering process):是指在软件工具的支持下,所进行的一系列软件工程活动。

    (一)四类基本过程:

    1、软件规格说明:规定软件的功能及其运行环境
    2、软件开发:产生满足规格说明的软件
    3、软件确认:确认软件能够完成客户提出的要求
    4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。

    (二)软件工程过程的特性:

    1、可理解性 2、可见性(过程的进展和结果可见)
    3、可靠性 4、可支持性(易于使用CASE工具支持)
    5、可维护性 6、可接受性(为软件工程师接受)
    7、开发效率 8、健壮性(抵御外部意外错误的能力)

    (三)生命周期模型(过程模型):

    通常使用生命周期模型简洁地描述软件过程。

    1.常见的模型:

    瀑布模型、快速开发模型、增量模型、螺旋模型、喷泉模型等。

    (1)瀑布模型

    瀑布模型分析与设计阶段的基本任务主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
    清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。

    传统的瀑布模型
    传统的瀑布模型

    a. 阶段间具有顺序性和依赖性

    这个特点有两重含义: ①必须等前一阶段的工作完成之后,才能开始后一阶段的工作; ②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。

    b. 推迟实现的观点

    对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。这是因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性后果。

    c. 质量保证的观点

    软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法:
    (a) 每个阶段都必须完成规定的文档
    完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
    (b) 每个阶段结束前都要对文档进行评审
    尽早发现问题,改正错误。
    实际的瀑布模型是带“反馈环”的,如图所示:
    在这里插入图片描述

    d. 瀑布模型有许多优点:

    可强迫开发人员采用规范的方法(结构化技术);
    严格地规定了每个阶段必须提交的文档;
    要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

    e.瀑布模型缺点:

    “强调文档驱动”,导致用户在使用软件之前只能通过文档认识软件,而真正使用软件时可能出现与想象之间有差异

    (2)快速开发模型

    所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

    • 快速原型没有反馈环,同用户已经充分交流、开发人员对系统也充分了解。广泛地使用第四代语言(4GL)构建快速原型。
    • 快速模型:
      -在这里插入图片描述

    (3)增量模型

    增量模型也称为渐增模型如图所示:

    在这里插入图片描述
      增量模型和瀑布模型之间的本质区别是:
       瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。
       采用瀑布模型或快速原型模型开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。增量模型则分批地逐步向用户提交产品,开发人员一个构件接一个构件地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。能在较短时间内向用户提交可完成部分工作的产品

    (4)螺旋模型

    对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。
      如图所示:
    在这里插入图片描述

    螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为
    4个工作步骤:
      1.确定目标、方案和限制条件;
      2.评估方案、标识风险和解决风险;
      3.开发确认产品;
      4.计划下一周期工作。

    (5)喷泉模型

    该模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型。主要用于采用对象技术的软件开发项目。
    在这里插入图片描述
    它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性无间隙性

    其特点如下:
    1、开发过程有分析、系统设计、软件设计和实现4个阶段。
    2、各阶段相互重叠,它反映了软件过程并行性的特点。
    3、以分析为基础,资源消耗成塔型。
    4、反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。
    5、强调增量开发,整个过程是一个迭代的逐步提炼的过程。

    七、Rational统一过程

    Rational统一过程(RUP, Rational Unified Process)是Rational公司推出的较完美、流行的软件过程。
    它总结了6条最有效的开发经验——最佳实践。

    (一)最佳实践

    1.迭代式开发

    通过反复迭代,使得用户得以参与、开发人员可不断提供可以使用的阶段性的软件产品(提高士气),适合大型复杂软件

    2.管理需求

    用户需求的不断变化,要求提供如何提取、组织系统的功能需求的有效办法。RUP提供了通过用例分析捕获需求的方法,使用性极强。

    3.使用基于构件的体系结构

    RUP提供了使用现有的或新开发的构件定义体系结构的系统化方法,降低了软件开发的复杂性,提高了软件重用率。

    4.可视化建模

    使用UML进行建模。

    5.验证软件质量

    软件质量的验证,贯穿于整个软件的开发过程,且所有开发成员参与。

    6.控制软件变更

    RUP给出了如何控制、跟踪和监控修改,以确保迭代开发的成功。

    2、RUP软件开发生命周期

    RUP软件开发周期是一个以时间代表横轴、核心工作流代表纵轴的二维生命周期模型。

    (二)RUP软件开发生命周期

    RUP软件开发周期是一个以时间代表横轴、核心工作流代表纵轴的二维生命周期模型。
    在这里插入图片描述

    1.核心工作流

    6个核心过程工作流:

    • 业务建模:深入了解目标系统的用户,评估目标系统对用户的影响;
    • 需求:捕获用户需求,并达成共识;
    • 分析与设计:将需求分析的结果转化为分析模型和设计模型;
    • 实现:将设计模型转化为实现结果;
    • 测试:尽最大可能清除错误;
    • 部署:成功生成目标系统的可运行版本,提交软件给最终用户;
      3个核心支持工作流:
    • 配置与变更管理:跟踪并维护在软件开发过程中产生的所有制品的完整性和一致性;
    • 项目管理:提供管理框架及一系列管理手段;
    • 环境:向软件开发机构提供软件开发环境,包括过程管理和工具支持。

    2.工作阶段

    4个连续的阶段,每个阶段有明确目标并通过一次或多次迭代完成之,定义了用来评估是否完成目标的里程碑。

    • 初始阶段:建立业务模型,定义最终产品是图,并确定项目的范围;
    • 精化阶段:设计并确定系统的体系结构,制定项目计划,确定资源需求;
    • 构建阶段:开发出所有软件并集成为用户需求的产品,经测试确定所有功能;
    • 移交阶段:将开发的产品提交用户使用。

    3.RUP迭代式开发

    采用迭代和渐增的方式来开发软件,有多个迭代过程,每次迭代只考虑一部分需求;
    每次迭代都是一个完整的软件生命周期,包括:分析、设计、实现、测试和部署等工作;
    每个生命周期包括4个连续阶段:初始、精化、构建、移交阶段;
    每个阶段有进一步细化为一次或多次迭代。

    八、 敏捷过程与极限编程

    (一)敏捷过程

    敏捷过程目的是提高工作效率和快速相应变化能力,为此提出4个价值观:

    1.个体和交互胜过过程和工具

    优秀的团队是项目开发获得成功的关键,合作、沟通、交互的能力更重要;

    2.可以工作的软件胜过面面俱到的文档

    软件为主,不能偏废文档,但文档只是在极其需要时起作用,文档无法代替软件;

    3.客户合作胜过合同谈判

    合同重要,但能指导开发团队与客户协同工作的合同将更有意义;

    4.相应变化胜过遵循计划

    客观世界不断变化,软件开发要反映现实。

    (二)极限编程

    极限编程(eXtreme Programming, XP),是敏捷过程典型的开发方法,使合于需求模糊且经常改变的场景。

    极限编程的有效实践

    • 客户作为开发团队的成员:至少一人
    • 使用用户素材:根据用户的情况,合理安排解决需求的时间
    • 短交付周期:每两周交付,短时间内与用户交流
    • 验收测试
    • 结对编程
    • 测试驱动开发
    • 集体所有
    • 持续集成
    • 可持续的开发速度
    • 开放的工作空间
    • 及时调整计划
    • 简单的设计
    • 重构
    • 使用隐喻
    展开全文
  • 软件工程实验报告

    2019-07-27 10:03:40
    软件工程实验报告 实验一:系统需求分析 一、 实验名称 通讯录管理系统需求分析 二、 实验目的 1、进行通讯录管理系统的需求分析,建立需求模型 2、掌握UML中的业务过程模型、用例模型。熟悉一...

    软件工程实验报告

     

    实验一:系统需求分析

     

     

     一、       实验名称

     

    通讯录管理系统需求分析

     

    二、       实验目的

     

    1、进行通讯录管理系统的需求分析,建立需求模型

    2、掌握UML中的业务过程模型、用例模型。熟悉一种UML建模工具。

     

    三、  实验内容

     

    将整个需求分析过程分为业务分析、用户需求分析和系统需求分析,确定每个模块功能所需要的算法和数据结构,并设计出程序的详细规格说明,可画出详细的程序流程图,为编码做准备,写出详细设计报告。

    四、实验原理

     

    详细设计也称过程设计,是程序设计的蓝图。该设计是在数据设计、体系结构设计和接口设计完成之后进行的。过程设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程尽可能的简明易懂。结构化程序设计是实现上述目标的关键技术,因此是过程设计的逻辑基础。过程设计的结果基本上决定了最终程序设计的质量。

    将程序体系结构元素变换为对软件构件的过程描述。该实验主要是利用过程设计工具进行程序设计。

     

    五、实验结果

    通讯录管理系统需求分析报告

    第一章 通讯录系统简介

    通讯录系统是我们经常使用的一种系统,如今的通讯录有许多种也包含很多方面,我们就一个简单的通讯录系统而言,它包含了许多信息,如:姓名,地址,联系方式,电子邮箱等等。它具有很多强大的功能,可以帮你长期保存好友信息,快速找到好友联系方式等一系列功能。

     

    第二章 通讯录系统用例建模

     

    2.1通讯录系统流程分析

     

     

    对本系统的需求进行分析后可作如下的模块化设计: 

    添加模块实现功能:按顺序将有姓名(name )、地址(address)、年龄(age)、电话(tel)、电子邮箱(E-mail)依次输入,并建立链表将其连接。当输入数据完毕时Enter,输入结束。 

     

    删除模块实现功能:在已经存储的文件中删除指定的通信录信息,删除所有相关通信录信息。 

     

    查找模块实现功能:在已经存储的文件中查找指定的通信录信息。可以按照查找姓名或方法进行。 

     

    显示模块实现功能:在输入特定的文件名之后,输出该文件中所包含的全部通信录信息。 

     

    保存模块实现功能:添加相应信息保存操作,链表中的信息以文件形式被长期保存。 

     

     

     

    工作流程图:

    2.1.1添加通讯录记录流程图:

     

    2.1.2显示通讯录记录流程分析流程图:

    2.1.3删除通讯录记录   流程图

     

    2.1.4查询通讯录记录流程图

    先选择查询方式,以姓名查询方式为例

     

     

    2.1.5修改通讯录记录流程图

     

     

     

     

    系统用例图:

     

     

     

    第三章系统概要设计

     

     根据实际情况,使用原型法即以少量代价快速地构造一个可执行的软件系统模型。

    使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。此时模块也发展成为最终产品了。 

    通过对用户需求的分析,我可以分析出该通讯录管理信息系统大致可以分为几个模块:

     

    添加:添加通讯录记录

    显示:显示通讯录记录

    删除:删除通讯录记录

    查询:查询通讯录记录

    修改:修改通讯录记录

    保存:将信息保存到文件

     

     

    具体模块图如下:

     

     

     

     

     

     

     

     

    转载于:https://www.cnblogs.com/YQYSMILE/p/3429052.html

    展开全文
  • 软件工程的几个步骤

    2014-09-20 17:25:14
    软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义: Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。  IEEE:软件...
  •  摘要:软件工程的开发过程中有两种截然不同的管理和开发体系,一种是基于“瀑布模型”的预设性传统软件工程,另一种是轻量级的适应性敏捷软件开发,本文简单阐述传统软件工程的开发方法与敏捷软件开发的异同,并...
  • 软件工程学概述,梳理了软件工程的基础知识。
  • 软件工程学习总结

    2019-06-27 16:38:37
    一、学习收获:这学期你学到的对软件工程相关知识有哪些?本课程对你在哪些方面有帮助?软件工程,一个项目的流程有如下一些步骤。1.需求确认1)收集需求包括蓝图(外貌)文档,预排文档, 域术语表, 域专家和...
  • 软件工程-构建之法 学习方法(个人总结) 一、翻译 1、软件工程师是领导项目团队做软件需求分析,软件说明书,软件设计,开发,测试和软件运行与维护的高薪并收人尊重的职业。根据对健康的承诺,安全和...
  • 软件工程—实践者的研究方法》读书笔记   《软件工程—实践者的研究方法》这本书内容丰富,从软件工程的定义、软件过程、建模、质量管理到管理软件项目和软件工程发展趋势的探讨,作者逐个展开并做了大量的讲解...
  • 软件工程复习重点 一、 软件工程概述 软件的概念及特点 定义:软件是程序、数据及开发、使用和维护程序所需要的所有文档 特点:软件是一个逻辑的而不是物理的产品 软件危机的表现形式 软件的开发成本和开发...
  • 学习完UML,我们要把它和之前的软件工程结合起来。软件工程是从整体的角度说了软件开发的步骤,保证了所开发软件的质量。而UML作为一种统一建模语言,是用来设计软件蓝图的可视化建模语言,可以更好的实现软件的需求...
  • 系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 目录 系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 本章重难点: 9.1 软件工程新技术 9.1.1 面向服务的计算 9.1.2云计算技术 9.1.3 ...
  • 架构蓝图--软件架构 "4+1" 视图模型 本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型。使用多重视图允许独立地处理各"风险承担人":最终用户、开发人员、系统 工程师、...
  • 软件工程的开发过程

    2017-12-01 21:16:42
    软件工程基本原理 著名软件工程专家B.Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,于1983年在一篇论文中提出了软件工程的七条基本原理。 (1)用分阶段的生存周期计划进行严格的管理。 (2)...
  • 软件工程和建筑工程

    2011-09-25 11:02:10
    软件工程和建筑工程有异曲同工之处,以下是我的观点:   1.项目经理就是工地的包工头,负责工程的进度   2.常用的Jar就像钢筋水泥,要怎么样的钢筋水泥,要怎么搭配   3.软件设计就是工程设计,设计...
  • SAP业务蓝图该怎么做

    2017-11-01 13:16:36
    SAP业务蓝图该怎么做 引用网上的一篇文章,了解下业务蓝图该怎么做。 SAP实施方法论涵盖五大步骤,包括:项目准备、蓝图设计、系统实现、最后准备、上线与支持。本次结合多次项目的实际体会,先仅针对如何...
  • 第一章,软件工程导论: 软件危机:计算机软件开发维护过程中所遇到得一系列严重的问题。 软件危机的典型表现: 对软件开发成本和进度的估计常常很不准确。 用户对以完成的软件系统不满意的现象经常发生。 软件...
1 2 3 4 5 ... 20
收藏数 7,760
精华内容 3,104
关键字:

蓝图报告 软件工程