美文网首页
软件工程

软件工程

作者: Nodelover | 来源:发表于2016-01-04 09:06 被阅读106次

# 分析需求

需求的提出 --- 实现xxx功能
需求原型   --- 简单的布局

# 需求宣讲时注意的问题

  • 参与产品功能讨论
  • 理解解决什么问题
  • 理解产品功能的价值
  • 考虑用户体验

# 考虑的问题

  • 需求的完整性
  • 需求的合理性
  • 需求的一致性
  • 需求的兼容性
  • 需求的性能要求

# 初步分析将来的需求

  • 了解同类系统的功能
  • 了解产品的定位
  • 咨询专业人士

# 分析复杂的需求

  • 分拆需求
  • 画出业务流程图

# 挖掘需求的本质

  • 分析业务用例
  • 抽象业务的本质
  • 概要设计套路

# 性能分析

  • 估计当前产品用户量
  • 估计最大高峰时的请求数
  • 获取新的阅读项的性能问题
  • 答案图片加载速度的问题

# 基于需求本质的详细设计

# 实体的设计
  • 定义实体对象的属性和数据类型
  • 统一的命名规范
# 轻量的数据访问层设计
  • 基于业务层接口的设计,设计数据库访问层的接口方法
  • 统一的命名规范
  • 接口保持轻量化

# 敏捷开发中的详细设计任务

  • 业务接口的定义
  • 领域模式的定义
  • 数据持久化层接口的定义
  • 数据库表的存储设计
  • 关键业务设计模式的选用
  • 关键业务模块的设计方案
  • 关键方法的实现算法

# 详细设计对产品的好处

  • 更快的产品迭代
  • 更好的用户体验
  • 更少的用户投诉
  • 为构建高并发、高可用和高扩展的应用打下良好的基础
  • 在产品迭代中,“越跑越快”
  • 有效降低程序,“推倒重来”的概率
  • 减少产品运行中的事故

# 详细设计对个人的好处

  • 更加清晰、严谨的逻辑思维能力
  • 良好的面向对象设计能力
  • 提高个人成就感
  • 越来越喜欢写代码,更加轻松、自行的工作
  • 更多的Offer、更多Money

软件在能够复用前必须先能用

# 如何学习详细设计

优秀程序员的特质

拥有学习的热情
优秀的自律性和主动性
发现问题、分析问题(重点)、解决问题
良好的编码习惯
严谨的程序思维
具备一点产品思维

优秀的详细设计,是在业务场景、开发周期、技术架构等因素综合考虑的结果。

要具备以下能力
  • 成为一个优秀的程序员
  • 良好的面向对象思维
  • 懂得如何在设计思路、开发周期、业务需求之前的取舍
  • 熟悉产品技术架构模式
  • 深入了解产品行业,熟悉业务的细节,并能洞察业务的未来
初学者的学习思路
  • 具备成为一个优秀的程序员的潜质
  • 从每个方法、每个类起一个好的名字坐起
  • 培养实现代码前,做详细设计的习惯
  • 让总结成为一种习惯

推荐书籍

  • 代码整洁之道
  • 重构-改善既有代码的设计
  • 敏捷软件开发:原则、模式与实践
  • 设计模式
  • 高效程序员的45个习惯

大部分好的程序员编程不是为了钱或名望,而只是因为纯粹的乐趣。

# 纤细设计纵横谈

详细设计,永远吧“解决当前问题,放在第一位”
纤细设计中,好的设计终究会被采用
欢迎“拿来主义”,优先考虑使用市面上成熟产品。节约成本。单无法实现个性化服务。

优秀的判断力来自经验,但经验来自于错误的判断。

# 如何表达设计

  • UML(不适合追求简单,快速,拥抱变化的设计中来表达设计)(适用于系统设计、详细设计交流,设计评审、系统设计文档)
  • 文档(文档维护成本较高)(试用与经验继承,经验交流)
  • 白板(容易忽略细节,实际代码和讨论可能有偏差)(适用于设计方案的实时讨论)
  • 代码(敏捷开发中的纤细设计)

在敏捷开发中,我们提倡设计即编码。(定义方法、参数,注释功能,但不去实现)

在详细设计过程中,产生如下具体的产物:

  • 设计实体类
  • 设计前后端调用方式以及数据格式
  • 设计业务接口
  • 设计数据库访问接口
  • 设计数据库表结构

基本命名规范

  • 驼峰命名法(小驼峰(方法)、大驼峰(类、接口))
  • 具有正确的业务含义
  • 避免误导
  • 避免使用复杂的单词
  • 借用类型表达含义
  • 基于约定的命名(框架的约定)
  • 按技术含义命名
    抽象类,AbsractXX
    自定义异常类,XXException
    测试类,XXTest
    设计模式,XXFactory,XXVistor
    队列,XXQueue
    后台任务,XXTask或XXJob

相关文章

  • 怎样学好软件工程

    软件工程知识架构 在《软件工程——实践者的研究方法》这本经典软件工程教材中,作者 Roger S.Pressma...

  • 软件工程(C语言实践篇)

    学号:SA16225018 姓名:曾龙飞 一、什么是软件工程与高级软件工程课程设置 1.1软件工程 首先,我先谈谈...

  • Android P 开发者预览版支持 DNS over TLS

    作者:Erik Kline (Android 软件工程师) &Ben Schwartza (Jigsaw 软件工程...

  • 一种创新方法 —— 加法

    近日阅读《Head First 设计模式》,觉得“有意思”。从学习软件工程,到以软件工程为业,我看过不少软件工程类...

  • [转]软件工程 SE

    From MBAlib 软件工程(Software Engineering,SE) 目录 1 什么是软件工程2 软...

  • 软件测试工程师所需要具备的软件技能是什么?

    软件工程技能可以分成三大块:理解软件工程的规则,了解计算机编程和操作系统知识。 理解软件工程“规则”。...

  • 2018-03-08

    基础入门——对软件工程的了解 1、什么是软件工程 软件工程 ·是把系统的、有序的、可量化的方法应用到软件的开发、运...

  • 20171007 周六 今日计划+反思

    一、今日计划 学习任务:软件工程 - Group Meet 学习任务:软件工程 - 学习MEAN stack 二、...

  • 第 1 章 软件工程概述

    软件工程的研究领域包括软件的开发方法、软件周期以及软件工程的实践等。 软件危机与软件工程的起源 1. 计算机系统的...

  • 20171026 周四 今日计划+回顾

    一、今日计划 生活任务:CAPS咨询 学习任务:软件工程 - Assignment 4 学习任务:软件工程 - G...

网友评论

      本文标题:软件工程

      本文链接:https://www.haomeiwen.com/subject/lotahttx.html